一尘不染

如何在我的Connect 4个Java代码中检查获胜者?

java

我不明白如何在四连冠中找到获胜方式,请告诉我应该怎么想以及如何在四连冠中找到赢家。我应该如何使用for循环来找到他们。我应该如何使用方法寻找赢家?

import java.util.Scanner;
public class Connect4{
    public static  int[][] arrayboard(){
        int [][] board = new int[6][7];
        for (int i=0;i<board.length;i++){
            for(int j=0;j<board[i].length;j++){
              }
            }
          return board;     
         }
    public static void printboard(int[][] board){
            int k=5;
            for (int i = 0; i < board.length; i++) {
                for (int j = 0; j < board[i].length; j++) {
                System.out.print(board[i][j] + " ");
              }
             System.out.print("|"+k );
             k--;
             System.out.println();
          }
            System.out.println("--------------+");
            System.out.println("0 1 2 3 4 5 6");
       }
     public static void player1(int[][] board){
        System.out.print("player 1 type a column(0-6) or 9 to quit current game:");
        Scanner input = new Scanner(System.in);
        int column=input.nextInt();
        for (int i=5;i>=0;i--){
            if(board[i][column]==0){
               board[i][column]=1;
               break;
            }
          }
       }
     public static void player2 (int[][] board){
        System.out.print("player 2 type a column(0-6) or 9 to quit current game:");
        Scanner input = new Scanner(System.in);
        int column=input.nextInt();
        for (int i=5;i>=0;i--){
            if (board[i][column]==0){
               board[i][column]=2;
               break;
           }
        }
     }
    public static void main(String[] args) {
        int [][] board=arrayboard();
           printboard(board);
        boolean loop= true;
              int count=0;
         while(loop){
            if (count % 2 == 0) 
                player1(board);
            else player2(board);
            count++;
            printboard(board);
      }
   }
}

阅读 310

收藏
2020-12-03

共1个答案

一尘不染

在一个简短的Google之后,会弹出以下代码:https : //codereview.stackexchange.com/questions/100917/connect-
four-game-in-
java或http://www.lazylab.org/152/java/connect- Java
/或带有4D数组对角线检查的Connect4游戏中的四个游戏编码难题算法

所以它很容易找到。还有这个Scala实现也可以做到这一点。然后只有另一种语言:https : //github.com/Green7izard/AP-
ASE/blob/master/Scala/src/Day1.scala

基本上有3种取胜方式:

  1. 水平(行)。检查每个棋盘[i],看看玩家是否连续有4个,但是要注意数组的边缘。
  2. 垂直(列)。检查每个板[currentRow] [i],看是否有4个“ currentRow”相同的I。

最后一个选项是对角线。这一个比较难,因为您还要检查2个方向。

这意味着您无法一次性检查完成情况。但是您可以创建一个将检查所有值的函数,例如:

public void int GetWinner()
{
   int result = 0;
   result= CheckHorizontal();
   if(result>0) return result;
   result= CheckVertical();
   if(result>0) return result;
   result= CheckDiagonalTopLeftBotRight();
   if(result>0) return result;
   result= CheckDiagonalBotLeftTopRight();
   return result;
}

每一步之后执行,如果结果不为0,您将有赢家!但是有更好的方法来执行此壮举!

2020-12-03