Python-Implementierung des automatischen Tic Tac Toe-Spiels unter Verwendung einer Zufallszahl
Tic-Tac-Toe ist ein sehr beliebtes Spiel. Implementieren wir also ein automatisches Tic-Tac-Toe-Spiel mit Python.
Das Spiel wird automatisch vom Programm gespielt und daher sind keine Benutzereingaben erforderlich. Trotzdem wird die Entwicklung eines automatischen Spiels viel Spaß machen. Mal sehen, wie das geht.
numpy
und random
Python-Bibliotheken werden verwendet, um dieses Spiel zu erstellen. Anstatt den Benutzer zu bitten, eine Markierung auf die Tafel zu setzen, wählt der Code zufällig eine Stelle auf der Tafel aus und setzt die Markierung. Es wird das Brett nach jedem Zug angezeigt, es sei denn, ein Spieler gewinnt. Wenn das Spiel unentschieden ist, gibt es -1 zurück.
Erläuterung:
play_game()
ist die Hauptfunktion, die folgende Aufgaben ausführt:
- Ruft create_board() auf, um eine 9 × 9-Karte zu erstellen, und initialisiert mit 0.
- Ruft für jeden Spieler (1 oder 2) die Funktion random_place() auf, um zufällig einen Ort an Bord auszuwählen und diesen Ort alternativ mit der Spielernummer zu markieren.
- Drucken Sie die Tafel nach jedem Zug.
- Bewerten Sie das Brett nach jedem Zug, um zu überprüfen, ob eine Zeile, Spalte oder Diagonale dieselbe Spielernummer hat. Wenn ja, wird der Name des Gewinners angezeigt. Wenn es nach 9 Zügen keinen Gewinner gibt, wird -1 angezeigt.
Unten ist der Code für das obige Spiel:
import
numpy as np
import
random
from
time
import
sleep
def
create_board():
return
(np.array([[
0
,
0
,
0
],
[
0
,
0
,
0
],
[
0
,
0
,
0
]]))
def
possibilities(board):
l
=
[]
for
i
in
range
(
len
(board)):
for
j
in
range
(
len
(board)):
if
board[i][j]
=
=
0
:
l.append((i, j))
return
(l)
def
random_place(board, player):
selection
=
possibilities(board)
current_loc
=
random.choice(selection)
board[current_loc]
=
player
return
(board)
def
row_win(board, player):
for
x
in
range
(
len
(board)):
win
=
True
for
y
in
range
(
len
(board)):
if
board[x, y] !
=
player:
win
=
False
continue
if
win
=
=
True
:
return
(win)
return
(win)
def
col_win(board, player):
for
x
in
range
(
len
(board)):
win
=
True
for
y
in
range
(
len
(board)):
if
board[y][x] !
=
player:
win
=
False
continue
if
win
=
=
True
:
return
(win)
return
(win)
def
diag_win(board, player):
win
=
True
y
=
0
for
x
in
range
(
len
(board)):
if
board[x, x] !
=
player:
win
=
False
if
win:
return
win
win
=
True
if
win:
for
x
in
range
(
len
(board)):
y
=
len
(board)
-
1
-
x
if
board[x, y] !
=
player:
win
=
False
return
win
def
evaluate(board):
winner
=
0
for
player
in
[
1
,
2
]:
if
(row_win(board, player)
or
col_win(board,player)
or
diag_win(board,player)):
winner
=
player
if
np.
all
(board !
=
0
)
and
winner
=
=
0
:
winner
=
-
1
return
winner
def
play_game():
board, winner, counter
=
create_board(),
0
,
1
(board)
sleep(
2
)
while
winner
=
=
0
:
for
player
in
[
1
,
2
]:
board
=
random_place(board, player)
(
"Board after "
+
str
(counter)
+
" move"
)
(board)
sleep(
2
)
counter
+
=
1
winner
=
evaluate(board)
if
winner !
=
0
:
break
return
(winner)
(
"Winner is: "
+
str
(play_game()))
Ausgabe :
[[0 0 0] [0 0 0] [0 0 0]] Board nach 1 Zug [[0 0 0] [0 0 0] [100]] Board nach 2 Zug [[0 0 0] [0 2 0] [100]] Board nach 3 Zug [[0 1 0] [0 2 0] [100]] Board nach 4 Zug [[0 1 0] [2 2 0] [100]] Board nach 5 Zug [[1 1 0] [2 2 0] [100]] Board nach 6 Zug [[1 1 0] [2 2 0] [1 2 0]] Board nach 7 Zug [[1 1 0] [2 2 0] [1 2 1]] Board nach 8 Zug [[1 1 0] [2 2 2] [1 2 1]] Gewinner ist: 2