EDIT: Я не знаю, почему кто-то связывает меня TicTacToe как дубликат для моего вопроса, в нем нет даже MinMax-алгоритма.Java Connect 4 MinMax Algorithm
В настоящее время я работаю над игрой Connect4 против компьютера, который должен использовать алгоритм MinMax-Algorithm. До этого мы написали TicTacToe, который также использует MinMax, но я не уверен, как изменить свой старый алгоритм в соответствии с Connect4-Game: /. В TicTacToe я оценил каждое возможное движение с условиями выигрыша, которые я написал, он отлично работал, но теперь он не будет работать с моими новыми условиями. My makeAMove и т.п. работает хорошо!
Это мои старые условия и MinMax для TicTacToe:
// Игрок 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
}
...
Я не знаю, как я могу получить эту работу с моими новыми условиями:
Я думаю, что я должен написать функцию, которая проверяет, оценивая это, например (это мой wincondition для строк):
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;
Я знаю, что много текста, но, может быть, кто-нибудь может дать мне несколько полезных т ips :)
Спасибо!
Макс
Возможный дубликат [Tic Tac Toe Java] (http://stackoverflow.com/questions/10961749/tic-tac-toe-java) –
Пожалуйста, попробуйте решить эту проблему самостоятельно и задать более конкретный вопрос , Напишите код, протестируйте его, и если он не сделает то, что вы ожидаете от него, вернитесь с конкретной ошибкой или неправильным поведением. –