Java 我的ConnectFour游戏在';s是正方形网格,但不是矩形网格
当Java 我的ConnectFour游戏在';s是正方形网格,但不是矩形网格,java,Java,当GRID\u高度和GRID\u宽度相同,但我的作业要求高度为6,宽度为7时,我的connect four游戏程序可以工作。当我将它设置为6和7时它不起作用,但是由于某种原因,当宽度为7,高度为6时它起作用,尽管我需要相反的设置。对于这个版本,当输入一个输入时,系统会立即崩溃,尽管它在正方形网格上工作得很好。谢谢你的帮助 import java.util.Scanner; public class WrittenStuff { public static final int GRID_H
GRID\u高度
和GRID\u宽度
相同,但我的作业要求高度为6,宽度为7时,我的connect four游戏程序可以工作。当我将它设置为6和7时它不起作用,但是由于某种原因,当宽度为7,高度为6时它起作用,尽管我需要相反的设置。对于这个版本,当输入一个输入时,系统会立即崩溃,尽管它在正方形网格上工作得很好。谢谢你的帮助
import java.util.Scanner;
public class WrittenStuff
{
public static final int GRID_HEIGHT=7;
public static final int GRID_WIDTH=7;
int totalMovesPlayed;
char[][] board;
public WrittenStuff()
{
board=new char[GRID_HEIGHT][GRID_WIDTH];
totalMovesPlayed=0;
}
public static void main(String args[])
{
Scanner input = new Scanner(System.in);
WrittenStuff c4=new WrittenStuff();
System.out.println("WELCOME TO CONNECT FOUR!!!");
c4.printBoard();
outer:
while(true)
{
int column=0;
//PLAYER 1.
while(true)
{
System.out.print("\n\nPlayer 1 play:");
column = input.nextInt();
column = column-1;
if(c4.isPlayable(column))
{
if(c4.playMove(column, 'X'))
{
c4.printBoard();
System.out.println("\n\nPlayer 1 wins!!!");
break outer;
}
break;
}
else{
System.out.println("Column "+column+" is already full!!");
}
}
c4.printBoard();
//PLAYER 2.
while(true)
{
System.out.print("\n\nPlayer 2 play:");
column = input.nextInt();
column = column-1;
if(c4.isPlayable(column))
{
if(c4.playMove(column, 'O'))
{
c4.printBoard();
System.out.println("\n\nPlayer 2 wins!!!");
break outer;
}
break;
}
else{
System.out.println("Column "+column+" is already full!!");
}
}
c4.printBoard();
if(c4.isFull())
{
System.out.print("Game drawn. Both of you suck at this!!! ");
break;
}
}
}
public void printBoard()
{
for(int vert=0;vert<board.length;vert++)
{
for(int hori=0;hori<board[0].length;hori++)
{
if(board[vert][hori] == 0)
{
System.out.print("|" + "_" + "|");
}
else
{
System.out.print("|" + board[vert][hori] + "|");
}
}
System.out.println();
}
for(int vert=0;vert<GRID_WIDTH;vert++)
System.out.print(" "+(vert+1)+" ");
System.out.println();
}
public boolean playMove(int column, char playerNum)
{
int vert=0;
for(vert=0;vert<GRID_HEIGHT;vert++)
{
if(board[vert][column] == 'X' || board[vert][column] == 'O')
{
board[vert-1][column]=playerNum;
break;
}
}
if(vert == GRID_HEIGHT)
{
board[vert-1][column]=playerNum;
}
totalMovesPlayed++;
return isConnected(vert-1,column);
}
public boolean isPlayable(int column)
{
return board[0][column] == 0;
}
public boolean isFull()
{
return totalMovesPlayed == GRID_HEIGHT*GRID_WIDTH;
}
public boolean isConnected(int x, int y)
{
int num=board[x][y];
int count=0;
int vert=y;
//HORIZONTAL.
while(vert<GRID_WIDTH && board[x][vert] == num)
{
count++; vert++;
}
vert=y-1;
while(vert>=0 && board[x][vert] == num)
{
count++; vert--;
}
if(count == 4){
return true;}
//VERTICAL.
count=0; int hori=x;
while(hori<GRID_HEIGHT && board[hori][y] == num)
{
count++; hori++;
}
if(count == 4){
return true;}
//SECONDARY DIAGONAL.
count=0; vert=x; hori=y;
while(vert<GRID_WIDTH && hori<GRID_HEIGHT && board[vert][hori] == num)
{
count++; vert++; hori++;
}
vert=x-1; hori=y-1;
while(vert>=0 && hori>=0 && board[vert][hori] == num)
{
count++; vert--; hori--;
}
if(count == 4){
return true;}
//LEADING DIAGONAL.
count=0; vert=x; hori=y;
while(vert<GRID_WIDTH && hori>=0 && board[vert][hori] == num)
{
count++; vert++; hori--;
}
vert=x-1; hori=y+1;
while(vert>=0 && hori<GRID_HEIGHT && board[vert][hori] == num)
{
count++; vert--; hori++;
}
if(count == 4){
return true;}
return false;
}
}
import java.util.Scanner;
公共类凝灰岩
{
公共静态最终内部网格高度=7;
公共静态最终整数网格宽度=7;
int TotalMovesSplayed;
字符[][]板;
公共资产负债表()
{
板=新字符[网格高度][网格宽度];
totalMovesPlayed=0;
}
公共静态void main(字符串参数[])
{
扫描仪输入=新扫描仪(System.in);
WrittenStuff c4=新的WrittenStuff();
System.out.println(“欢迎连接四个!!!”;
c4.印刷板();
外部:
while(true)
{
int列=0;
//玩家1。
while(true)
{
系统输出打印(“\n\n第1层播放:”);
column=input.nextInt();
第列=第1列;
如果(c4.可显示(列))
{
if(c4.playMove(列'X'))
{
c4.印刷板();
System.out.println(“\n\n第1层获胜!!!”;
打破外部;
}
打破
}
否则{
System.out.println(“列”+列+”已满!!”;
}
}
c4.印刷板();
//玩家2。
while(true)
{
系统输出打印(“\n\n第2层播放:”);
column=input.nextInt();
第列=第1列;
如果(c4.可显示(列))
{
if(c4.playMove(列'O'))
{
c4.印刷板();
System.out.println(“\n\n第2层获胜!!!”;
打破外部;
}
打破
}
否则{
System.out.println(“列”+列+”已满!!”;
}
}
c4.印刷板();
if(c4.isFull())
{
System.out.print(“游戏抽签,你们两个都很烂!!!”;
打破
}
}
}
公共印制板()
{
对于(int vert=0;vert查看您对板的所有使用,我发现:
board[vert][hori]
board[vert][hori]
board[vert][column]
board[vert][column]
board[vert-1][column]
board[vert-1][column]
board[0][column]
board[x][y]
board[x][vert]
board[x][vert]
board[hori][y]
board[vert][hori]
board[vert][hori]
board[vert][hori]
board[vert][hori]
因此,如果第一个维度由vert
索引,第二个维度由hori
索引,为什么第二个维度变量有时被命名为列
,而不是hori
?一致的命名对于人类理解代码(包括您自己的代码)非常重要,以防止编码错误
但更重要的是,[x][y]
、[x][vert]
和[hori][y]
是怎么回事?假设y
等同于vert
,并且x
等同于hori
(请再次强调,命名一致),那些反转的不是立即崩溃吗?当然,会引发一些异常。您认为当您请求帮助时,提供异常的确切文本可能会有所帮助吗?