Игра в крестики-нолики - PullRequest
0 голосов
/ 17 июня 2020

Я создал вход, например, вот этот:

O,0,0;O,1,0;X,2,0;X,0,1;O,1,1;,2,1;,0,2;O,1,2;X,2,2

Первый символ - это «ноль», а два других (разделенных знаком «,») - это позиция в матрице. Эта специфическая c игра в крестики-нолики будет выглядеть так:

game = [["O", 0, 0], ["O", 1, 0], ["X", 2, 0], ["X", 0, 1], ["O", 1, 1], ["", 2, 1], ["O", 0, 2], ["O", 1, 2], ["X", 2, 2]]

or if you want to look at it this way:
 O O X
 X O - 
 O O X

Здесь игрок: «O» - победитель

Результат, которого я хочу добиться, - это сказать, кто победителем считается («X» или «O») или если есть ничья или игра еще не закончилась.

Другой пример игры может быть таким:

O,0,0;O,1,0;X,2,0;,0,1;,1,1;X,2,1;X,0,2;O,1,2;,2,2

Игра будет выглядеть так:

game = [["O", 0, 0], ["", 1, 0], ["X", 2, 0], ["", 0, 1], ["", 1, 1], ["X", 2, 1], ["X", 0, 2], ["O", 1, 2], ["", 2, 2]]

Or:
 O - X
 - - X 
 X O -

Здесь игра еще не закончилась

Другой пример:

O,0,0;O,1,0;X,2,0;X,0,1;X,1,1;O,2,1;O,0,2;X,1,2;O,2,2

The game would look like:
game = [["O", 0, 0], [O", 1, 0], ["X", 2, 0], ["X", 0, 1], ["X", 1, 1], ["O", 2, 1], ["O", 0, 2], ["X", 1, 2], ["O", 2, 2]]

Or:
 O O X
 X X O 
 O X O

Как видите есть ничья.

Это то, что я пробовал:

string = input("Insert a game")
g = string.split(";")
for i in range(len(g)):
    g[i] = g[i].split()
for i in range(len(g)):
    g[i] = g[i].split(",")
g2 = g.copy()
del(g2[0][1])
del(g2[0][2])

Я хотел составить другой список только для крестиков и нулей, чтобы мне было легче сказать когда выигрывает «X» или «O», но он не работает, он не удаляет два других следующих числа, которые находятся рядом с ним. Я не знаю, хорошая ли это идея, может быть, есть более простой способ решить всю проблему. Я действительно не знаю, как написать код для проверки условий (кто выиграл, ничья или еще не закончилась).

Если вы не знаете игру, я напишу инструкции:

Кто-то выигрывает, если:

-Есть три ячейки по горизонтали, занятые одним и тем же игроком

-Три ячейки по вертикали заняты одним и тем же игроком

-Три клетки по диагонали заняты одним и тем же игроком

Ничья проводится, если:

-Каждая из клеток занята, и это не тот случай, о котором говорилось ранее .

Игра не закончилась, если:

- Мы не находимся ни в одном из условий, упомянутых ранее, и есть «пустые» пробелы.

1 Ответ

0 голосов
/ 17 июня 2020
string = input("Insert a game")
g = string.split(";")
for i in range(len(g)):
    g[i] = g[i].split()
for i in range(len(g)):
    g[i] = g[i].split(",")
g2 = g.copy()
del(g2[0][1])
del(g2[0][2])

Один из ваших циклов не нужен, вам нужен только l oop:

for i, lst in enumerate(g):
    g[i] = lst.split(",")

, а с помощью List Computing вы можете сделать его еще лучше:

new_g = [lst.split(",") for lst in g]

, и если вам больше не нужны позиции и вы хотите удалить их, вы можете сделать:

new_g2 = [lst[0] for lst in new_g]

, поэтому окончательный код должен быть:

string = input("Insert a game")
g = string.split(";")
new_g = [lst.split(",") for lst in g]
new_g2 = [lst[0] for lst in new_g]
...