如何在Connect 4 java代码中查看获胜者?

时间:2016-10-06 11:47:26

标签: 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);
      }
   }
}

1 个答案:

答案 0 :(得分:0)

在短暂的谷歌之后弹出以下代码: https://codereview.stackexchange.com/questions/100917/connect-four-game-in-javahttp://www.lazylab.org/152/java/connect-four-game-coding-puzzle-algorithm-in-java/Connect4 game with 2D arrays diagonal check

所以很容易找到。 还有这个Scala实现也是如此。只有这样才能使用其他语言:https://github.com/Green7izard/AP-ASE/blob/master/Scala/src/Day1.scala

基本上有三种获胜方式:

  1. 水平(行)。检查每个棋盘[i]以查看玩家是否连续4个,但要注意阵列的边缘。
  2. 垂直(列)。检查每个电路板[currentRow] [i]以查看是否存在I,其中4&#34; currentRow&#34; s是相同的。
  3. 最后一个选项是对角线。这个更难,因为还有两个方向你应该检查。

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

    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,您将获胜! 但是有更好的方法来预测这一壮举!