Tic-Tac-Toe AlgorithmC#

Место общения программистов C#
Ответить
Anonymous
 Tic-Tac-Toe Algorithm

Сообщение Anonymous »

Я пытался внедрить минимальный алгоритм для Tic-tac-toe, основанный на некоторых из моих университетских лекций. Иметь минимальное значение 0 в соответствии с моим алгоритмом, хотя я знаю, что это более благоприятный, бот нет. Я попытался настраивать его, чтобы сделать это так, чтобы потери были в значительной степени оштрафованы, но это не влияет. Мне было интересно, есть ли способы проверить минимальное значение любого данного состояния TIC-TAC-TOE. = "Lang-None PrettyPrint-Override">X . O
. . .
. . .
< /code>
...is равен 0 < /p>
и значение состояния: < /p>
X . .
. O .
. . .
< /code>
.... Также равно 0 < /p>
Здесь X играет первым, а O играет бот. +10 для победы, 0 для розыгрыша и -10 за потерю. быть избитым 100% времени, тогда как второе состояние (не производится, поскольку нет очевидной причины, чтобы одобрить его) настроили бы его, чтобы всегда выигрывать или рисовать, и, следовательно, следует выбрать. < /p>

Используется алгоритм: < /p>
private int minimaxValue(BoardTree state, bool minimising)
{
// Minimise means opt for lowest score, noughts win = +10, draw = 0, cross win = -10
if (state.successiveMoves.Count == 0)
{
if (state.Board.gameDrawnFlag) return DRAW_VAL;
switch (state.Board.winner)
{
case TicTacToeBoard.Player.Cross: return LOSE_VAL;
case TicTacToeBoard.Player.Nought: return WIN_VAL;
}
}

if (minimising)
{
int lowestValue = minimaxValue(state.successiveMoves[0], !minimising); // Get an initial value

for (int i = 1; i < state.successiveMoves.Count; i++)
{
int val = minimaxValue(state.successiveMoves, !minimising); // Check each state, maximised this time
if (val < lowestValue)
{
lowestValue = val; // Find the lowest value from the list
}
}

return lowestValue;
}
else // Maximising
{
int highestValue = minimaxValue(state.successiveMoves[0], !minimising); // Initial base comparison value

for (int i = 1; i < state.successiveMoves.Count; i++)
{
int val = minimaxValue(state.successiveMoves, !minimising); // Check each state, minimised this time
if (val > highestValue)
{
highestValue = val;
}
}

return highestValue;
}
}


Подробнее здесь: https://stackoverflow.com/questions/794 ... -algorithm
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»