如何制作java TicTacToe表?

时间:2015-07-22 16:47:19

标签: java

如何在不更改给定方法的情况下创建3x3?

我需要在main方法旁边创建4个方法,但是我被困在显示板上。

我是否需要创建一个代表每个数字的变量或某些东西,以便每次用户进入移动后我都可以使用它来更新电路板?

它应该是这样的:

1 2 3

4 5 6

7 8 9

以下是主要方法无法更改。

public class TicTacToe {
    public static void main (String args[]) {  
    char[] board = {'1', '2', '3', '4', '5', '6', '7', '8', '9'};
    char move = 'O';
    displayBoard(board);

    while (!checkWinner(board, move)){              
      move = changeMove(move);
      makeMove(board, move);  
      displayBoard(board);  
}

3 个答案:

答案 0 :(得分:1)

从您提供的代码中,您似乎已获得board

是:

char[] board = {'1', '2', '3', '4', '5', '6', '7', '8', '9'};

您要做的是将其转换为3x3显示屏。

这可以很简单:

int k =0;
char[] board = {'1', '2', '3', '4', '5', '6', '7', '8', '9'};
for (int i=1;i<=3;i++) {
    for (int j=1;j<=3;j++) {
        System.out.print(board[k]);
        k++;
    }
System.out.println();
}

我认为让您感到困惑的是,您认为必须更新显示器本身问题的井字逻辑部分。

当您采取行动时,您应该做的是更改board数组中需要更改的内容,然后您可以重新绘制电路板。

答案 1 :(得分:0)

import java.util.Scanner;

public class TicTacToe {
public static void main (String args[]) {  
    char[] board = {'1', '2', '3', '4', '5', '6', '7', '8', '9'};
    char move = 'O';
    displayBoard(board);

while (!checkWinner(board, move)){              
        move = changeMove(move);
        makeMove(board, move);  
        displayBoard(board);  
}
}

public static void displayBoard(char[] b){
    int k = 0;
    for(int i = 0; i <3 ; i++){
        for (int j=0; j<3; j++){
            System.out.print(b[k]); 
            k++;
        }
        System.out.println();
}       
}

public static char changeMove(char m){
    if(m == 'O'){
        return 'X'; 
    }
    else return 'O';
}

public static void makeMove(char[] b, char m){
    boolean valid = false; 
    System.out.println("========== " + m + "'s Move: Enter [1-9] to choose square =========");  
    Scanner s= new Scanner(System.in);
    char square = s.next().charAt(0);
    for(int i=0; i<9; i++){
        if (b[i] == square){
            b[i] = m;
            valid = true;
        }
    }    
    if(!valid){
            System.out.println("Invalid move");
        makeMove(b,m);
    }
}

public static boolean checkWinner(char[] b , char m){   

    //Horizontal
    if(b[0] == b[1] && b[1] == b[2] ){
        System.out.println(b[0] +" Won!");
        return true;
    }
    if(b[3] == b[4] && b[4] == b[5]){
        System.out.println(b[3] +" Won!");
        return true;
}
    if(b[6] == b[7] && b[7] == b[8]){
        System.out.println(b[6] +" Won!");
        return true;
    }

    //Vertical
    if(b[0] == b[3] && b[3] == b[6]){
        System.out.println(b[0] +" Won!");
        return true;
    }
    if(b[1] == b[4] && b[4] == b[7]){
        System.out.println(b[1] +" Won!");
        return true;
    }
    if(b[2] == b[5] && b[4] == b[8]){
        System.out.println(b[2] +" Won!");
            return true;
    }

    //Diagonal
    if(b[0] == b[4] && b[4] == b[8]){
        System.out.println(b[0] +" Won!");
        return true;            
    }
    if(b[2] == b[4] && b[4] == b[6]){
        System.out.println(b[2] +" Won!");
        return true;
    }

    return false;    
}

}

答案 2 :(得分:0)

对于<!--MENUEND-->,您可以使用嵌套的displayBoard()循环。外部循环遍历每一行,内部循环打印属于该行的三个值。

for

如果您需要其他帮助,请与我们联系。