Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Connect Four Java游戏中跟踪赢家_Java_Arrays_Console_Drawing_Java.util.scanner - Fatal编程技术网

如何在Connect Four Java游戏中跟踪赢家

如何在Connect Four Java游戏中跟踪赢家,java,arrays,console,drawing,java.util.scanner,Java,Arrays,Console,Drawing,Java.util.scanner,这是一个在控制台和绘图面板中创建游戏connect four的类,我在connectedFour方法中遇到了问题,在该方法中,它确定是否有人连续获得了4张光盘。问题是,我不知道如何设置for循环,以便在阵列中连续检查四张光盘 这是我的密码: import java.util.*; import java.awt.*; public class ConnectFour{ public static void main(String[] args){ //board

这是一个在控制台和绘图面板中创建游戏connect four的类,我在
connectedFour
方法中遇到了问题,在该方法中,它确定是否有人连续获得了4张光盘。问题是,我不知道如何设置for循环,以便在阵列中连续检查四张光盘 这是我的密码:

import java.util.*;
import java.awt.*;


public class ConnectFour{

   public static void main(String[] args){
      //board
      DrawingPanel panel = new DrawingPanel(550,550);
      int rowAvailable;
      Graphics g = panel.getGraphics();
      g.drawLine(0,0,0,500);
      g.drawLine(0,0,500,0);
      g.drawLine(500,0,500,427);
      g.drawLine(0,427,500,427);
      for(int i = 0; i< 6; i++){
         for(int j= 0; j<= 6; j++){
            g.setColor(Color.YELLOW);
            g.fillRect(j*71,i*71,71,71);
            g.setColor(Color.WHITE);
            g.fillOval(j*71,i*71,71,71); 

         }
      }

      //setBlankArray
      Scanner console = new Scanner(System.in);
      char[][] board = new char[6][7];
      for(int j = 0;j <= 6; j++){
         for(int i= 0; i < 6; i++){
            board[i][j] = ' ';
         }
      }
      boolean isBlack = true;
      boolean isRed = false;
      int column = 0;
      boolean playersTurn = true;
      boolean rightNum = false;

      //oneTurn
      while(getWinner(board, playersTurn)){
      //while(playersTurn == true){
         rightNum = false;
         if(isBlack == true){
            // displayCurrentPlayer
            System.out.println("Black's Turn");
            g.setColor(Color.WHITE);
            g.drawString("Red Disc's Turn",200, 450);
            g.setColor(Color.BLACK);
            g.drawString("Black Disc's Turn",200, 450);
         }
         else{
            // displayCurrentPlayer
            System.out.println("Red's Turn");
            g.setColor(Color.WHITE);
            g.drawString("Black Disc's Turn",200, 450);
            g.setColor(Color.RED);
            g.drawString("Red Disc's Turn",200, 450);
         }
         System.out.print("Choose a column to place your disk (1-7): ");
         while(rightNum == false){
            column = (console.nextInt()) -1;
            if(column >= 0 && column < 7 && board[0][column] == ' '){
               rightNum = true;
            }
            else{
               System.out.print("Try again: ");
            }
         }

         drawBoard(column, board, isBlack, isRed, board, g);
         isBlack = !isBlack;
      }
      if(isBlack == false){System.out.println("Congratulations Black Player");}
      else{System.out.println("Congratulations Red Player");}
      // use the while loop to say try again if the column is filled.
   }

   public static void drawBoard(int column, char[][] board, boolean isBlack, boolean isRed, char[][] availability,Graphics g){

      char player = ' ';
      if(isBlack == true){
         g.setColor(Color.BLACK);
         player = 'b';
      }
      else{
         g.setColor(Color.RED);
         player = 'r';
      }
      int x = 0;
      int row = 5;
      while(board[row-x][column] != ' '){
         x++;
      }
      row = row-x;
      g.fillOval((column * 71),(row * 71), 71,71);
      board[row][column] = player;
   }

   public static boolean getWinner(char[][] board, boolean playersTurn){
      int verticalCount = 0;
      boolean isVertical = false;
      for(int i = 6; i >= 0; i--){
         verticalCount = 0;         
         for(int j = 5; j > 0; j--){
            if(board[j][i] == board[j-1][i] && board[j][i] != ' '){
               verticalCount++;
            }
            if(verticalCount == 4){
               isVertical = true;
            }
         }
      }

      int horizontalCount = 0;
      boolean isHorizontal = false;
      for(int i =1; i <= 5; i++){
         for(int j =1; j<6; j++){
            if(board[j][i] == board[j][i+1] && board[j][i] != ' '){
               horizontalCount++;
            } 
            if(horizontalCount == 3){
               isHorizontal = true;
            }
         }
      }

      int diagonalCount = 0;
      boolean isDiagonal = false; 
     // for(int i = 0; i<=6; i++){
      //   for(int j =0; j<6; j++){
       //     if(board[i][j-1] == board[i][j]){
       //        diagonalCount++;
         //   } 
        // }
     // }

      if(isVertical || isHorizontal || isDiagonal){
         playersTurn = false;
      }
      else{
         playersTurn = true;}
      return playersTurn;
   }
}
import java.util.*;
导入java.awt.*;
公共第四类{
公共静态void main(字符串[]args){
//董事会
DrawingPanel=新的DrawingPanel(550550);
int ROWN可用;
Graphics g=panel.getGraphics();
g、 抽绳(0,0,0500);
g、 抽绳(0,0500,0);
g、 抽绳(500,0500427);;
g、 抽绳(0427500427);
对于(int i=0;i<6;i++){
对于(int j=0;j=0;i--){
垂直计数=0;
对于(int j=5;j>0;j--){
if(board[j][i]==board[j-1][i]&board[j][i]!=''){
垂直计数++;
}
如果(垂直计数=4){
isVertical=真;
}
}
}
int水平计数=0;
布尔值isHorizontal=false;

对于(int i=1;i我将通过在放置光盘后检查是否满足游戏获胜条件来实现这一点。这样,您就不会在每次移动后重复整个棋盘

无论如何,请尝试以下方法:

替换

while (gameWon == false ){


我认为这不会完全解决您的问题,因为您发布的代码似乎还有其他一些问题。

请澄清您的具体问题,或添加其他详细信息,以突出显示您需要的内容。由于目前编写的内容,很难准确说出您的要求。请参阅如何询问页面帮助澄清这个问题。我想你的问题不清楚。你能描述一下吗?
while (!connectedFour(board, playersTurn)) {