永无止境的游戏
((我将添加一个方法来连续检查3个,我只想在arraon!=''((空格字符))结束时结束该操作
需要为我的班级制作x和o的游戏。如果我在每次移动后都未将取消数组设置为空,则永远不会结束。如果我重置它,将不会保存条目。
必须省去初始化方法。 它所做的只是在2d数组中循环,并将2d数组中的所有位置都设置为''(空格字符)。
public static char[][] drawBoard(char[][] matrix, char[][] tempMatrix, int rowChoice, int colChoice, char player)
{
if(rowChoice == 0 && colChoice == 0 && matrix[0][0] == ' ')
{
matrix[0][0] = player;
return matrix;
}
else if(matrix[rowChoice][colChoice] == ' ')
{
matrix[rowChoice][colChoice] = player;
return matrix;
}
else
{
System.out.println("Cannot enter here. Already full.");
tempMatrix[0][0] = '0';
return tempMatrix;
}
}
public static void sop(char[][] matrix)
{
System.out.println("\n col \t\t0.\t1.\t2.");
System.out.println("\nRow 0.\t\t" + matrix[0][0] + "\t" + matrix[0][1] + "\t" + matrix[0][2]);
System.out.println("\n 1.\t\t" + matrix[1][0] + "\t" + matrix[1][1] + "\t" + matrix[1][2]);
System.out.println("\n 2.\t\t" + matrix[2][0] + "\t" + matrix[2][1] + "\t" + matrix[2][2]);
}
public static void main(String[] args)
{
XOGame XO = new XOGame();
Scanner xoIn = new Scanner(System.in);
Scanner numIn = new Scanner(System.in);
final int SIZE = 3;
final int ROW = 3;
final int COL = 3;
final int AREA = ROW * COL;
int rowChoice;
int colChoice;
boolean gameEndStatus;
char player;
char xoMatrix[][] = new char[ROW][COL];
char tempMatrix[][] = new char[ROW][COL];
// initialising matrices
xoMatrix = XO.init(xoMatrix, ROW, COL, SIZE);
tempMatrix = XO.init(tempMatrix, ROW, COL, SIZE);
gameEndStatus = false;
for(int i = 0; i < AREA && gameEndStatus == false; i++)
{
System.out.print("X or O?\t");
player = xoIn.next().charAt(0);
System.out.print("Row?\t");
rowChoice = numIn.nextInt();
System.out.print("Column?\t");
colChoice = numIn.nextInt();
tempMatrix = drawBoard(xoMatrix, tempMatrix,rowChoice, colChoice, player);
if(tempMatrix[0][0] == '0')
{
//i--;
}
else
{
xoMatrix = tempMatrix;
}
// output 3x3 matrix
XO.sop(xoMatrix);
// if matrix is full, end game
if(i == AREA)
{
gameEndStatus = true;
}
//THIS IS THE INITIALISATION AFTER EACH MOVE
tempMatrix = XO.init(tempMatrix, ROW, COL, SIZE);
}// for
System.out.print("\n\nEnd of game\n\n");
xoIn.close();
numIn.close();
}
需要制作x和o的游戏。这个想法是,游戏将一直运行直到gameEndStatus == true
并且i <3x3区域。
我发现问题是我从i拿走了1(与递增值相同),因此它将永远运行
但是除非我的控件数组的第一个位置== 0 .... tempMatrix[0][0] == 0
,否则不应减去1。
更新: 所以我发现如果重复一遍又一遍是因为我没有将控件array(tempMatrix)重新初始化为零。 仍然有问题。 如果我将其重新初始化为零,则它不会将所有条目保存到xoMatrix中,它会删除所有先前的条目并仅输入新的矩阵
答案 0 :(得分:0)
我发现了您的问题所在。您无需重新初始化tempMatrix,因为这将删除xoMatrix的所有值,这是因为存在“通过引用传递”的问题。这是有关“通过引用”的更多信息:
Is Java "pass-by-reference" or "pass-by-value"?
您的问题来自您在此处的声明:
if(i == AREA)
{
gameEndStatus = true;
}
您需要更改它,以便我实际上是> =区域。
if(i >= AREA)
{
gameEndStatus = true;
}