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
(请再次强调,命名一致),那些反转的不是立即崩溃吗?

当然,会引发一些异常。您认为当您请求帮助时,提供异常的确切文本可能会有所帮助吗?