0

現時点では、Java で書かれた単純な Tic Tac Toe プログラムの作業コードがあります。以下に示すように、唯一の問題は、ボードが表示されたときに空白文字の代わりにヌル文字 (\u0000) が出力されることです。

私の教授は、ヌル スペースが検出されるようにこのプログラムを作成し、それらを X または O で埋めるように私たちに言いました。

今、フォーマットが正しくないため、null 文字を 00 から単なる空白に変更できるようにしたいと考えています。

「\u0000」文字を単純に消去して「 」文字に置き換えてみましたが、ボードがまったく表示されません。どんな助けでも大歓迎です!

import java.util.Scanner; 

  public class TicTacToe
  {
  public static void main(String[] args)
  {

     char[][] board = new char[3][3];

     while (true) {

        makeCompMove(board, 'X');

        displayBoard(board);
        if(isWon('X', board)) {
           System.out.println("\n\nComputer won!");
           System.exit(1);
        }

        else if (isDraw(board)) {
           System.out.println("\n\nDraw Game! No winner");
           System.exit(2);
        }

        makeAMove(board, 'O');
        displayBoard(board);

        if (isWon('O', board)) {
           System.out.println("\n\nPlayer won!");
           System.exit(3);
        }
        else if (isDraw(board)) {
           System.out.println("\n\nDraw Game! No winner");
           System.exit(4);
        }
     }
  }

  public static void displayBoard(char[][] board) 
  {

     for(int k = 0; k < 3; k++)
     {
        for(int i = 0; i < 28; i++)
        {
           System.out.print("-");
        }
        System.out.println();

        for(int j = 0; j < 3; j++)
        {
           System.out.print("|" + "  " + board[k][j] + "  ");
        }
        System.out.println("|");

     }
        for(int i = 0; i < 28; i++)
     {
        System.out.print("-");
     }

  }

  public static void makeAMove(char[][] board, char o)
  {
     Scanner input = new Scanner(System.in);
     while(true)
     {
        System.out.print("\n\nYour turn. Enter a row and col(0,1 or 2): ");
        int row = input.nextInt();
        int col = input.nextInt();
        if(row > 2 || row < 0 || col > 2 || col < 0)
        {
           System.out.println("Incorrect Input. Try Again!");
           continue;
        }
        if(board[row][col] == '\u0000')
        {
                System.out.print("\n You (O) have made your move...\n\n");
           board[row][col] = 'O';
                break;
        }
        else
           System.out.println("Incorrect Input. Try Again!");
     }
  }

    public static void makeCompMove(char[][] board, char x)
  {
      System.out.println();
      System.out.println();
    System.out.print("Computer (X) has made his move...\n");
     while(true)
     {
        int row = (int)(Math.random()*3);
        int col = (int)(Math.random()*3);

            if(board[row][col] == '\u0000')
        {
           board[row][col] = x;
           break;
        }
     }
        System.out.println();
    }

 public static boolean isDraw(char[][] board)
  {
     for(int row = 0; row < 3; row++)
     {
        for(int col = 0; col < 3; col++)
        {
           if(board[row][col] == '\u0000')
           {
              return false;
           }
        }
     }
     return true;
  }

  public static boolean isWon(char x, char[][] board)
  {
    // Check Rows
        for (int i = 0; i < 3; i++)
            if (x == board[i][0] && x == board[i][1] && x == board[i][2]) 
                return true;

    // Check Columns
        for (int j = 0; j < 3; j++)
            if (x == board[0][j] && x == board[1][j] && x == board[2][j]) 
                return true;

    // Check first diagonal
        if (x == board[0][0] && x == board[1][1] && x == board[2][2]) 
            return true;

    // Check second diagonal
        if (x == board[0][2] && x == board[1][1] && x == board[2][0]) 
            return true;

    return false;
    }
}
4

2 に答える 2

0

2 次元配列の要素は、配列の初期化時に null 文字に設定されます。それらすべてをスペースに変換する場合は、それらすべてを繰り返し処理して、文字をスペースに置き換えます。

for (int i = 0; i < board.length; i++) {
    for (int j = 0; j < board[i].length; j++) {
        board[i][j] = ' ';
    }
}

場所がまったく使用されない場合は、ヌル文字の代わりにスペースが入ります。配列を使用する前にこれを行ってください。

于 2013-04-01T04:56:06.380 に答える