我在java中编写了一个tic tac toe游戏。我没有完成,但我做了一些事情,它应该几乎可以播放。问题是,我已经完成了代码,因此计算机应该能够获胜,但它已经完成了工作。当计算机连续三次出现时,它就会继续播放它应该说'#34;计算机获胜!"。
以下是代码:
import java.util.Scanner;
import java.util.concurrent.ThreadLocalRandom;;
public class Main {
static int[][] gameBoard = new int[3][3];
static Scanner userInput = new Scanner(System.in);
public static void main(String[] args) {
//initialize game board
for(int x=0;x<3; x++){
for(int i=0;i<3;i++){
gameBoard[x][i] = 0;
}
}
gameLoop();
}
static void gameLoop(){
boolean loop = true;
while(loop==true){
displayBoard();
playerMove();
if(checkIfWin() == true){
loop = false;
}
if(checkIfLose() == true)
loop = false;
computerInput();
}
}
static void playerMove(){
String playerInput;
System.out.println();
System.out.print("Your move: ");
playerInput = userInput.next();
if(playerInput.equals("a1")){
if(gameBoard[0][0] == 0){
gameBoard[0][0] = 1;
}else{
System.out.println("That one is already taken!");
}
}else if(playerInput.equals("a2")){
if(gameBoard[1][0] == 0){
gameBoard[1][0] = 1;
}else{
System.out.println("That one is already taken!");
}
}else if(playerInput.equals("a3")){
if(gameBoard[2][0] == 0){
gameBoard[2][0] = 1;
}else{
System.out.println("That one is already taken!");
}
}else if(playerInput.equals("b1")){
if(gameBoard[0][1] == 0){
gameBoard[0][1] = 1;
}else{
System.out.println("That one is already taken!");
}
}else if(playerInput.equals("b2")){
if(gameBoard[1][1] == 0){
gameBoard[1][1] = 1;
}else{
System.out.println("That one is already taken!");
}
}else if(playerInput.equals("b3")){
if(gameBoard[2][1] == 0){
gameBoard[2][1] = 1;
}else{
System.out.println("That one is already taken!");
}
}else if(playerInput.equals("c1")){
if(gameBoard[0][2] == 0){
gameBoard[0][2] = 1;
}else{
System.out.println("That one is already taken!");
}
}else if(playerInput.equals("c2")){
if(gameBoard[1][2] == 0){
gameBoard[1][2] = 1;
}else{
System.out.println("That one is already taken!");
}
}else if(playerInput.equals("c3")){
if(gameBoard[2][2] == 0){
gameBoard[2][2] = 1;
}else{
System.out.println("That one is already taken!");
}
}
}
static boolean checkIfLose(){
if(gameBoard[0][0] == 2 && gameBoard[0][1] == 2 && gameBoard[0][2] == 2){
displayBoard();
System.out.println("\nComputer wins!");
return true;
}else if(gameBoard[1][0] == 2 && gameBoard[1][1] == 2 && gameBoard[1][2] == 2){
displayBoard();
System.out.println("\nComputer wins!");
return true;
}else if(gameBoard[2][0] == 2 && gameBoard[2][1] == 2 && gameBoard[2][2] == 2){
displayBoard();
System.out.println("\nComputer wins!");
return true;
}else if(gameBoard[0][1] == 2 && gameBoard[2][1] == 2 && gameBoard[2][1] == 2){
System.out.println("\nComputer wins!");
displayBoard();
return true;
}else if(gameBoard[0][0] == 2 && gameBoard[1][0] == 2 && gameBoard[2][0] == 2){
displayBoard();
System.out.println("\nComputer wins!");
return true;
}else if(gameBoard[2][0] == 2 && gameBoard[2][1] == 2 && gameBoard[2][2] == 2){
displayBoard();
System.out.println("\nComputer wins!");
return true;
}else if(gameBoard[0][2] == 2 && gameBoard[1][2] == 2 && gameBoard[2][2] == 2){
displayBoard();
System.out.println("\nComputer wins!");
return true;
}else if(gameBoard[0][0] == 2 && gameBoard[1][1] == 2 && gameBoard[2][2] == 2){
displayBoard();
System.out.println("\nComputer wins!");
return true;
}else if(gameBoard[0][2] == 2 && gameBoard[1][1] == 2 && gameBoard[2][0] == 2){
displayBoard();
System.out.println("\nComputer wins!");
return true;
}else{
return false;
}
}
static boolean checkIfWin(){
if(gameBoard[0][0] == 1 && gameBoard[0][1] == 1 && gameBoard[0][2] == 1){
displayBoard();
System.out.println("\nYou win!");
return true;
}else if(gameBoard[1][0] == 1 && gameBoard[1][1] == 1 && gameBoard[1][2] == 1){
displayBoard();
System.out.println("\nYou win!");
return true;
}else if(gameBoard[2][0] == 1 && gameBoard[2][1] == 1 && gameBoard[2][2] == 1){
displayBoard();
System.out.println("\nYou win!");
return true;
}else if(gameBoard[0][1] == 1 && gameBoard[2][1] == 1 && gameBoard[2][1] == 1){
System.out.println("\nYou win!");
displayBoard();
return true;
}else if(gameBoard[0][0] == 1 && gameBoard[1][0] == 1 && gameBoard[2][0] == 1){
displayBoard();
System.out.println("\nYou win!");
return true;
}else if(gameBoard[2][0] == 1 && gameBoard[2][1] == 1 && gameBoard[2][2] == 1){
displayBoard();
System.out.println("\nYou win!");
return true;
}else if(gameBoard[0][2] == 1 && gameBoard[1][2] == 1 && gameBoard[2][2] == 1){
displayBoard();
System.out.println("\nYou win!");
return true;
}else if(gameBoard[0][0] == 1 && gameBoard[1][1] == 1 && gameBoard[2][2] == 1){
displayBoard();
System.out.println("\nYou win!");
return true;
}else if(gameBoard[0][2] == 1 && gameBoard[1][1] == 1 && gameBoard[2][0] == 1){
displayBoard();
System.out.println("\nYou win!");
return true;
}else{
return false;
}
}
static void displayBoard(){
System.out.println(" A B C");
for(int x=0; x<3; x++){
if(x>0)
System.out.println();
System.out.print(x+1 + " ");
for(int i=0; i<3; i++){
if(i>0)
System.out.print(" ");
System.out.print(gameBoard[x][i]);
}
}
}
static void computerInput(){
int x;
int y;
boolean loop = true;
while(loop == true){
x = 0;
y = 0;
x = ThreadLocalRandom.current().nextInt(0, 2 + 1);
y = ThreadLocalRandom.current().nextInt(0, 2 + 1);
if(gameBoard[y][x] == 0){
gameBoard[y][x] = 2;
loop = false;
}
}
}
}
答案 0 :(得分:1)
static void gameLoop(){
boolean loop = true;
while(loop==true){
displayBoard();
playerMove();
if(checkIfWin() == true){
loop = false;
}
if(checkIfLose() == true)
loop = false;
If(loop){
computerInput();
}
}
}
为计算机输入添加循环检查可确保如果游戏已在该迭代中结算,则不会触发新移动