我看了,但我还没有找到答案,所以我想问。添加多个对象到2D阵列(TicTacToe游戏)
https://web.cs.dal.ca/~srini/cs1101/Assign2.1101.16.pdf这里是一个PDF的分配细节,但我的细节和代码应该足够了。
我正在为一个井字游戏的多任务分配和我遇到麻烦,为什么它不会在添加所有对象后编译。它返回一个null,即使我已经初始化了包含内容的整个2D数组。
这是我的完整程序,我将在底部包含可疑问题的代码。
这是X或O对象类
public class XO{
private String name;
private static int turn = 1;
public XO(String name)
{
if(name == "-")
{
name = "-";
}
else if(2%turn == 0)
{
turn++;
name = "X";
}
else if (2%turn == 1)
{
turn++;
name = "O";
}
}
public String getName()
{
return name;
}
public int getTurn()
{
return turn;
}
public boolean equals(XO xo)
{
if(xo.getName().equals(name))
{
return true;
}
else
return false;
}
public String toString()
{
return name;
}}
这是TicTakToeBoard类基板 “超级” 类
public class Board {
protected int rows = 2;
protected int cols = 2;
public Board(int x, int y)
{
rows = x;
cols = y;
}
public int getRows()
{
return rows;
}
public int getCols()
{
return cols;
}
public void setRows(int r)
{
rows = r;
}
public void setCols(int c)
{
cols = c;
}}
这是井字游戏特定板
public class TicTakToeBoard extends Board{
private static XO board [][];
private int turnCnt = 1;
public TicTakToeBoard(int r, int c)
{
super(r, c);
rows = r;
cols = c;
board = new XO[rows][cols];
setXOBoard(rows, cols);
}
public int getBoardRow()
{
return rows;
}
public int getBoardCols()
{
return cols;
}
public int getTurnCnt()
{
return turnCnt;
}
public void setXOBoard(int r, int c)
{
XO empty = new XO("-");
XO[][] board = new XO[getBoardRow()][getBoardCols()];
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
{
board[i][j] = (empty);
}
}
}
public XO getXOBoard(int r, int c)
{
return board[r][c];
}
public boolean add(int x, int y)
{
for (int i = 0; i < rows; i++)
{
for (int j = 2; i > cols; j--)
{
if(board [x][y] != board [i][j])
{
if(x <= 2 || x >= 0 && y <= 2 || y >= 0)
{
if(2%turnCnt == 0)
board[x][y] = new XO("X");
if(2%turnCnt == 1)
board[x][y] = new XO("O");
turnCnt++;
return true;
}
else if(x > 2 || x < 0 && y > 2 || y < 0)
{
return false;
}
}
}
}
return false;
}
public boolean winner(XO a, XO b)
{
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;
}
//Above player 1 wins, below 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]+"\n"
+board[2][2];
}}
最后,游戏类(没有完成作为尚未)
import java.util.*;
public class Play {
public static void main(String[]args){
Scanner k = new Scanner(System.in);
System.out.println("Hello and welcome to this Tic Tac Toe game!");
System.out.print("Player 1 name: ");
String player1 = k.next();
System.out.print("Player 2 name: ");
String player2 = k.next();
TicTakToeBoard b = new TicTakToeBoard(2, 2);
XO p1 = new XO("X");
XO p2 = new XO("O");
for(int i = 1; i==i;i++)
{
if(2%i == 0)
{
System.out.print("Enter a spot to place your mark. First number within 0 and 2, and the second 0, 2: ");
int x = k.nextInt();
int y = k.nextInt();
b.add(x, y);
System.out.println(b);
if(b.winner(p1,p2)==true)
{
System.out.println("Congrats ");
break;
}
}
if(2%i == 1)
{
System.out.print("Enter a spot to place your mark. First number within 0 and 2, and the second 0, 2: ");
int x = k.nextInt();
int y = k.nextInt();
b.add(x, y);
System.out.println(b);
if(b.winner(p1,p2)==true)
{
System.out.println("Congrats ");
break;
}
}
}
System.out.println(b);
}}
这是大部分问题的方法,但是什么事我可能错了,我会欣然接受你要指出。
public boolean add(int x, int y)
{
for (int i = 0; i < rows; i++)
{
for (int j = 2; i > cols; j--)
{
if(board [x][y] != board [i][j])
{
if(x <= 2 || x >= 0 && y <= 2 || y >= 0)
{
if(2%turnCnt == 0)
board[x][y] = new XO("X");
if(2%turnCnt == 1)
board[x][y] = new XO("O");
turnCnt++;
return true;
}
else if(x > 2 || x < 0 && y > 2 || y < 0)
{
return false;
}
}
}
}
return false;}
我知道我要求相当多的在这里,但任何帮助,将不胜感激,我们并没有真正教给二维数组非常好或继承,所以我不得不从讲义学习。这个任务至少可以说,在我的春假期间花了几天时间,其余的都在强调它。
非常感谢,我会认真考虑和明天回来:)
https://web.cs.dal.ca/~srini/cs1101/Assign2.1101.16.pdf 这是在手的细节问题。 。 – BuySomeChips