Python 实现自动井字游戏使用随机数
原文:https://www . geesforgeks . org/python-实现-自动-TIC-tac-toe-game-使用-随机数/
井字游戏是一个非常受欢迎的游戏,所以让我们使用 Python 实现一个自动井字游戏。
游戏由程序自动进行,因此不需要用户输入。尽管如此,开发一款自动游戏还是很有意思的。让我们看看如何做到这一点。
numpy
和random
Python 库用来构建这个游戏。代码没有要求用户在板上做标记,而是在板上随机选择一个位置并做上标记。除非玩家赢了,否则它会在每次回合后显示棋盘。如果游戏得到平局,那么它返回-1。
说明:
play_game()
是主要功能,执行以下任务:
- 调用 create_board()创建一个 9×9 的板,并用 0 初始化。
- 对于每个玩家(1 或 2),调用 random_place()函数随机选择棋盘上的一个位置,并用玩家编号标记该位置。
- 每次移动后打印电路板。
- 每次移动后评估棋盘,检查一行、一列或一条对角线是否有相同的玩家编号。如果是,显示获胜者姓名。如果 9 次移动后没有赢家,则显示-1。
以下是上述游戏的代码:
# Tic-Tac-Toe Program using
# random number in Python
# importing all necessary libraries
import numpy as np
import random
from time import sleep
# Creates an empty board
def create_board():
return(np.array([[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]))
# Check for empty places on board
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)
# Select a random place for the player
def random_place(board, player):
selection = possibilities(board)
current_loc = random.choice(selection)
board[current_loc] = player
return(board)
# Checks whether the player has three
# of their marks in a horizontal row
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)
# Checks whether the player has three
# of their marks in a vertical row
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)
# Checks whether the player has three
# of their marks in a diagonal row
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
# Evaluates whether there is
# a winner or a tie
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
# Main function to start the game
def play_game():
board, winner, counter = create_board(), 0, 1
print(board)
sleep(2)
while winner == 0:
for player in [1, 2]:
board = random_place(board, player)
print("Board after " + str(counter) + " move")
print(board)
sleep(2)
counter += 1
winner = evaluate(board)
if winner != 0:
break
return(winner)
# Driver Code
print("Winner is: " + str(play_game()))
输出:
[[0 0 0]
[0 0 0]
[0 0 0]]
Board after 1 move
[[0 0 0]
[0 0 0]
[1 0 0]]
Board after 2 move
[[0 0 0]
[0 2 0]
[1 0 0]]
Board after 3 move
[[0 1 0]
[0 2 0]
[1 0 0]]
Board after 4 move
[[0 1 0]
[2 2 0]
[1 0 0]]
Board after 5 move
[[1 1 0]
[2 2 0]
[1 0 0]]
Board after 6 move
[[1 1 0]
[2 2 0]
[1 2 0]]
Board after 7 move
[[1 1 0]
[2 2 0]
[1 2 1]]
Board after 8 move
[[1 1 0]
[2 2 2]
[1 2 1]]
Winner is: 2
版权属于:月萌API www.moonapi.com,转载请注明出处