我不明白如何在连接四中找到胜利方式,请告诉我我应该怎么想以及如何在连接四中找到胜利者。我应该如何使用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);
}
}
}
答案 0 :(得分:0)
在短暂的谷歌之后弹出以下代码: https://codereview.stackexchange.com/questions/100917/connect-four-game-in-java或http://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
基本上有三种获胜方式:
最后一个选项是对角线。这个更难,因为还有两个方向你应该检查。
这意味着您无法一次性检查完成情况。 但是你可以创建一个能检查所有值的函数,如:
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,您将获胜! 但是有更好的方法来预测这一壮举!