Что является лучшим оптимальным способом узнать победителя в игре 3x3 Tic tac toe, где доска представлена матрицей? ПредложенияАлгоритм поиска победителя tic tac toe
ответ
Я предполагаю, что вы используете массив с двумя размерами Booleans
. Так как булев может иметь три значения (null, true и false). Поскольку только 2 игрока могут играть в любой момент времени, вам нужны только три значения. undefined, player 1 и player 2.
Это метод, который будет работать с любым массивом Boolean
, если размер больше, чем 1
. Он вернет true
, если true
выиграл, false
, если false
выиграл и null
, если еще нет победителя.
public static Boolean getWinner(Boolean[][] grid) {
if (grid == null)
return null;
int size = grid.length;
if (size == 0)
return null;
if (size == 1 && (grid[0][0] != null)) {
return grid[0][0];
}
boolean flag = true;
// checks horizontal
for (int index = 0; index <= size - 1; index++) {
flag = true;
for (int i = 1; i <= size - 1; i++) {
if (grid[index][i] != grid[index][i - 1]) {
flag = false;
break;
}
}
if (flag)
return grid[index][0];
}
// checks vertical
for (int index = 0; index <= size - 1; index++) {
flag = true;
for (int i = 1; i <= size - 1; i++) {
if (grid[i][index] != grid[i - 1][index]) {
flag = false;
break;
}
}
if (flag)
return grid[0][index];
}
// checks diagonal
flag = true;
for (int index = 1; index <= size - 1; index++) {
if (grid[index][index] != grid[index - 1][index - 1]) {
flag = false;
break;
}
}
if (flag)
return grid[0][0];
flag = true;
for (int index = 1; index <= size - 1; index++) {
if (grid[size - index - 1][index] != grid[size - index][index - 1]) {
flag = false;
break;
}
}
if (flag)
return grid[size - 1][0];
return null;
}
Sidenote: Если вы используете Enum
вместо Boolean
, то вам нужно изменить только два Booleans
на первой линии и все ==
с equals
Спасибо, что я успешно его реализовал !! –
Эти функции должны это делать. Я использовал массив символов, когда сделал свой тик-так-палец.
int rowcheck(char ch[3][3])
{
int i;
char ans;
for(i=0;i<3;i++)
{
if(ch[i][0]==ch[i][1] && ch[i][1]==ch[i][2])
{
ans=ch[i][0];
break;
}
}
if(ans=='O')
return 1;
else if(ans=='X')
return 2;
else
return 0;
}
int colcheck(char ch[3][3])
{
int i;
char ans;
for(i=0;i<3;i++)
{
if(ch[0][i]==ch[1][i] && ch[1][i]==ch[2][i])
{
ans=ch[0][i];
break;
}
}
if(ans=='O')
return 1;
else if(ans=='X')
return 2;
else
return 0;
}
int diagcheck(char ch[3][3])
{
char ans;
if(ch[0][0]==ch[1][1] && ch[1][1]==ch[2][2])
ans=ch[0][0];
if(ch[0][2]==ch[1][1] && ch[1][1]==ch[2][0])
ans=ch[0][2];
if(ans=='O')
return 1;
else if(ans=='X')
return 2;
else
return 0;
}
Игрок 1 выигрывает, если 1 возвращается еще 2 игрока. Проверить эту ссылку для получения дополнительной информации:
https://keepkoding.wordpress.com/2015/12/12/everybody-knows-tic-tac-toe/
заметь, это ссылка на C++, но логика проста для понимания.
Да, я понял логику спасибо !!! –
Но есть ли лучший способ, как с меньшей сложностью времени? –
Если вам нужно проверить равенство, я не вижу лучшего способа, чем это. Кроме того, учитывая, что вы играете в Tic Tac Toe, я не вижу причин уменьшить временную сложность. Но если вам нужно, самым простым способом было бы не выполнять такие проверки, пока не было сделано по крайней мере 6 ходов. Учитывая, что можно сделать только 9 ходов, это уменьшает более 2/3 времени. Если вам понравился мой ответ, пожалуйста, поддержите его. –
- 1. Tic-Tac-Toe Определить победителя
- 2. Tic-Tac-Toe для проверки победителя
- 3. Объявление победителя в tic tac toe board
- 4. Как предупредить победителя в Tic Tac Toe?
- 5. Как исправить определение победителя Tic Tac Toe
- 6. Программа Tic Tac Toe, не идентифицирующая победителя
- 7. Объявление победителя в tic tac toe
- 8. Удовлетворительный алгоритм Tic Tac Toe
- 9. алгоритм обобщенного Tic Tac Toe
- 10. Tic Tac Toe Рефери
- 11. Алгоритм MiniMax для отказа Tic Tac Toe
- 12. Q Учебный алгоритм для Tic Tac Toe
- 13. Упростите алгоритм MiniMax для Tic Tac Toe
- 14. Tic-tac-toe rate алгоритм платы
- 15. Алгоритм для реализации игры tic tac toe?
- 16. Как реализовать алгоритм поиска Tic Tac Toe AI в Python?
- 17. Tic Tac Toe Game DeclareWinner
- 18. Оптимизация tic tac toe check
- 19. Replay Tic Tac Toe
- 20. Tic Tac Toe: Java
- 21. Tic Tac Toe - Java
- 22. Tic-tac-toe prog
- 23. Tic Tac Toe NullPointerException
- 24. Программа Tic-Tac-Toe
- 25. Tic Tac Toe Program
- 26. Tic Tac Toe логика
- 27. Tic Tac Toe java
- 28. Консоль tic tac toe
- 29. TIC TAC TOE javascript
- 30. Tic Tac Toe Score
кучу сослагательного наклонения ... – user1121883
Возможный дубликат [Tic Tac Toe java] (http://stackoverflow.com/questions/10961749/tic-tac-toe-java) –