編集:誰かが私の質問に重複してTicTacToeをリンクしている理由は分かりませんが、そこにはMinMax-Algorithmもありません。Java Connect 4 MinMaxアルゴリズム
現在、私はMinMax-Algorithmを使用するコンピュータに対してConnect4ゲームを作成しています。 これまで、私たちはMinMaxも使用するTicTacToeを書いていましたが、Connect4-Game:/に合致するように私の古いアルゴリズムを変更する方法がわかりません。 TicTacToeでは、私が書いた勝利条件でそれぞれの可能な動きを評価しましたが、うまくいきましたが、今は新しい条件ではうまくいかないでしょう。 私のmakeAMoveなどはうまくいきます!
これらは私の古い条件と三目並べのためのMinMaxです:
//プレイヤー1は
static boolean has1Won(int[][] array) {
gameBoard = array;
//Diagonal
if ((gameBoard[0][0] == gameBoard[1][1] && gameBoard[0][0] == gameBoard[2][2] && gameBoard[0][0] == 1)
|| (gameBoard[0][2] == gameBoard[1][1] && gameBoard[0][2] == gameBoard[2][0] && gameBoard[0][2] == 1)) {
return true;
}
//Spalten/Zeilen
for (int i = 0; i < 3; ++i) {
if (((gameBoard[i][0] == gameBoard[i][1] && gameBoard[i][0] == gameBoard[i][2] && gameBoard[i][0] == 1)
|| (gameBoard[0][i] == gameBoard[1][i] && gameBoard[0][i] == gameBoard[2][i] && gameBoard[0][i] == 1))) {
return true;
}
}
return false;
}
//プレイヤー2が
static boolean has2Won(int[][] array) {
gameBoard = array;
//Diagonal
if ((gameBoard[0][0] == gameBoard[1][1] && gameBoard[0][0] == gameBoard[2][2] && gameBoard[0][0] == 2)
|| (gameBoard[0][2] == gameBoard[1][1] && gameBoard[0][2] == gameBoard[2][0] && gameBoard[0][2] == 2)) {
return true;
}
//Spalten/Zeilen
for (int i = 0; i < 3; ++i) {
if (((gameBoard[i][0] == gameBoard[i][1] && gameBoard[i][0] == gameBoard[i][2] && gameBoard[i][0] == 2)
|| (gameBoard[0][i] == gameBoard[1][i] && gameBoard[0][i] == gameBoard[2][i] && gameBoard[0][i] == 2))) {
return true;
}
}
return false;
を}勝利を勝ち
私はこのような私のMinMaxためにこれらの条件を使用し、言ったように:私はこれが私の新しい条件で動作するように得ることができるかどうかはわかりません...
public static int minimax(int depth, int turn) {
if (Board.has1Won(Board.gameBoard)){
return +1; // Der Computer gewinnt
}
if (Board.has2Won(Board.gameBoard)){
return -1; // Der Spieler gewinnt
}
List<GameMove> gameMovesAvailable = GameMove.getAvailableGameMoves();
if (gameMovesAvailable.isEmpty()){
return 0; // Das Spiel endet unentschieden
}
を:
私はそれが大量のテキストだけど、多分誰かが私にいくつかの有用なトンを与えることができます
boolean getWinnerInRow (Playboard brd){
int count = 0;
for (int i = 0; i < 6; i++){
for (int j = 0; j < 7; j++){
if (brd.gameBoard[i][j] != 0 && brd.gameBoard[i][j] == brd.gameBoard[i][j+1]){
count++;
} else {
count = 1;
}
if (count >= 4){
return true;
}
}
}
return false;
:私は、私がチェックする評価関数を記述するために持っていると思うこの例では(これは、行のための私のwinconditionです) ips :)
ありがとうございます!
マックス
[チックタックトーのJava](http://stackoverflow.com/questions/10961749/tic-tac-toe-java)の可能性のある重複 –
問題を自分で解決しようとすると、より具体的な質問をしてください。 。いくつかのコードを書いてテストし、それが期待通りのものでなければ、特定のエラーや間違った動作に戻ってください。 –