2017-03-03 156 views
0
public class XO { 
    private String name; 
    private static int turn = 1; 

    public XO(String name) { 
     if (2 % turn == 0) { 
      turn++; 
      name = "X"; 
     } 
     else { 
      turn++; 
      name = "O"; 
     } 

    } 
    //set method 
    public void setName(String name) { 
     this.name = name; 
    } 
    //public void setTurn(int turn){ 
    //this.turn=0; 
    //} 
    //get method 
    public String getName() { 
     return name; 
    } 
    public int getTurn() { 
     return turn; 
    } 

    public boolean equals(XO obj) { 
     return name == obj.getName(); 
    } 

    public String toString() { 
     return "You are " + name; 
    } 
} 


import java.util. * ; 

public class TicTacToeBoard extends Board { 
    private int turnCnt; 
    private XO[][] board; 

    public TicTacToeBoard(int rows, int columns) { 
     super(rows, columns); 
     turnCnt = 0; 
     this.board = new XO[rows][columns]; 
    } 
    //set method 
    public void setBoard(XO[][] board) { 

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

    } 
    //get methods 
    public XO[][] getBoard() { 
     return board; 
    } 

    public int getTurnCnt() { 
     return turnCnt; 
    } 
    //print board 
    public void printBoard() { 
     for (int i = 0; i < board.length; i++) { 
      System.out.println("\n"); 
      for (int j = 0; j < board[i].length; j++) { 
       System.out.print(board[i][j] + " "); 
      } 

     } 
    } 
    //add X or O 
    public boolean add(int r, int c) { 
     XO[][] j = new XO[r][c]; 
     if (r > 2 && c > 2 || this.board.equals(j)) return false; 
     else 

     //setBoard(j); 
     return true; 

    } 
    //check win 
    public boolean win(XO a, XO b) { 
     //player 1 wins 
     if (board[0][0] == a && board[1][0] == a && board[2][0] == a) { 
      return true; 
     } 
     if (board[0][1] == a && board[1][1] == a && board[2][1] == a) { 
      return true; 
     } 
     if (board[0][2] == a && board[1][2] == a && board[2][2] == a) { 
      return true; 
     } 
     if (board[0][0] == a && board[0][1] == a && board[0][2] == a) { 
      return true; 
     } 
     if (board[1][0] == a && board[1][1] == a && board[1][2] == a) { 
      return true; 
     } 
     if (board[2][0] == a && board[2][1] == a && board[2][2] == a) { 
      return true; 
     } 
     if (board[0][0] == a && board[1][1] == a && board[2][2] == a) { 
      return true; 
     } 
     if (board[2][0] == a && board[1][1] == a && board[0][2] == a) { 
      return true; 
     } 
     //now player 2 wins 
     if (board[0][0] == b && board[1][0] == b && board[2][0] == b) { 
      return true; 
     } 
     if (board[0][1] == b && board[1][1] == b && board[2][1] == b) { 
      return true; 
     } 
     if (board[0][2] == b && board[1][2] == b && board[2][2] == b) { 
      return true; 
     } 
     if (board[0][0] == b && board[0][1] == b && board[0][2] == b) { 
      return true; 
     } 
     if (board[1][0] == b && board[1][1] == b && board[1][2] == b) { 
      return true; 
     } 
     if (board[2][0] == b && board[2][1] == b && board[2][2] == b) { 
      return true; 
     } 
     if (board[0][0] == b && board[1][1] == b && board[2][2] == b) { 
      return true; 
     } 
     if (board[2][0] == b && board[1][1] == b && board[0][2] == b) { 
      return true; 
     } 
     else return false; 
    } 

    public String toString() { 
     return board[0][0] + "\t" + board[1][0] + "\t" + board[2][0] + "\n" + board[0][1] + "\t" + board[1][1] + "\t" + board[1][2] + "\n" + board[0][2] + "\t" + board[1][2] + "\t" + board[2][2]; 
    } 
} 

嗨,我正在做一个有关创造性的战术游戏在Java中的任务。这些是我的代码。该指南指出,XO类应该保存关于“X”或“O”对象的信息。将对象添加到二维数组

该类应该有两个属性:一个名称(它是一个字符串“X”或“O”)和一个静态int变量,它被设置为0或1(它应该被初始化为1)。您将使用此变量来确定在创建对象时要为其指定的名称(例如,如果它是1,请将名称设置为“X”)。

我不知道如何使用转向变量,我知道我应该将2个对象的X O传递给2d数组,但我对如何将对象传递到2d数组有点模糊。同时,我想先打印板就像一个空白的矩阵,但它始终是 [空空空, 空空空 空空空]

任何帮助将.Thanks很多感谢!

回答

0

林不知道如何使用转可变

在XO构造函数的转弯变量保持跟踪谁在把它通过检查2模(转数)。所以如果它变成了1:那么2%1是1,所以名称变量被设置为'O'。对于第2轮:2%2 == 0,名称被设置为'X'。 这基本上采用的是简单的模测试,以检查是否又将是偶数或奇数..

但我是一个有点模糊有关如何将对象传递到二维数组

这是你的代码?好像你知道如何操作二维数组了。阵列[行] [列]。你能详细说明将对象传入二维数组中的哪一部分,你遇到了麻烦?在您的setBoard函数中,您可能希望基于在实例化TicTacToe类时声明的行和列的长度进行动态迭代。

,也是我要打印板像在第一空白矩阵,但它始终是[空空空,空空空空空空]

您可以打印表样通过在您的迭代中正确打印输出。尝试改变你的Board.toString()函数是这样的。

for(XO[] row : board){ 
     for(XO item : row){ 
      System.out.print(item.getName()); 
     } 
     System.out.print('\n'); 
    } 

应该改变输出到看起来像 -

XXX

XXX

XXX

编辑:如果你希望成为这个心不是装满一个空白矩阵您将需要将所有XO实例实例化为默认值,或者您可以添加一个测试if语句来测试该值是否为null,以及打印占位符字符。

+0

我不知道如何将x o对象添加到电路板。是这样的public boolean add(int r,int c){ \t \t XO [] [] player = new XO [r] [c]; \t \t if(r> 3 && c> 3) \t \t \t return false; \t \t else \t \t \t xo [r] [c] = player; \t \t \t // setBoard(j); \t \t \t turnCnt ++; \t \t \t return true; \t \t \t} – Ratata4