Implementação em Python do jogo Tic Tac Toe automático usando números aleatórios
Tic-tac-toe é um jogo muito popular, então vamos implementar um jogo automático Tic-tac-toe usando Python.
O jogo é jogado automaticamente pelo programa e, portanto, nenhuma entrada do usuário é necessária. Ainda assim, desenvolver um jogo automático será muito divertido. Vamos ver como fazer isso.
numpy
e random
bibliotecas Python são usadas para construir este jogo. Em vez de pedir ao usuário para colocar uma marca no tabuleiro, o código escolhe aleatoriamente um local no tabuleiro e coloca a marca. Ele exibirá o tabuleiro após cada jogada, a menos que um jogador ganhe. Se o jogo empatar, ele retorna -1.
Explicação:
play_game()
é a função principal, que executa as seguintes tarefas:
- Chama create_board() para criar uma placa 9 × 9 e inicializa com 0.
- Para cada jogador (1 ou 2), chama a função random_place() para escolher aleatoriamente um local no tabuleiro e marcar esse local com o número do jogador, alternativamente.
- Imprima o tabuleiro após cada movimento.
- Avalie o tabuleiro após cada movimento para verificar se uma linha ou coluna ou diagonal tem o mesmo número de jogador. Em caso afirmativo, exibe o nome do vencedor. Se após 9 lances não houver vencedor, exibe -1.
Abaixo está o código para o jogo acima:
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()))
Resultado :
[[0 0 0] [0 0 0] [0 0 0]] Tabuleiro após 1 movimento [[0 0 0] [0 0 0] [1 0 0]] Tabuleiro após 2 movimentos [[0 0 0] [0 2 0] [1 0 0]] Tabuleiro após 3 movimentos [[0 1 0] [0 2 0] [1 0 0]] Tabuleiro após 4 movimentos [[0 1 0] [2 2 0] [1 0 0]] Tabuleiro após 5 movimentos [[1 1 0] [2 2 0] [1 0 0]] Tabuleiro após 6 movimentos [[1 1 0] [2 2 0] [1 2 0]] Tabuleiro após 7 movimentos [[1 1 0] [2 2 0] [1 2 1]] Tabuleiro após 8 movimentos [[1 1 0] [2 2 2] [1 2 1]] O vencedor é: 2
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva