使用随机数实现的自动井字棋游戏 Python 实现


这是一款非常有意思的游戏。这款游戏中不需要玩家,这是一款自动游戏。

这里我们使用两个 Python 模块 numpy 和 random。在这款游戏中,棋盘上的标记会自动放置,而不用要求用户在棋盘上放置标记,并且将在每次轮到后显示棋盘,除非玩家赢得比赛。如果游戏打成平局,则返回 -1。

示例代码

import numpy as np
import random
from time import sleep
#  first creates an empty board
def my_create_board():
   return(np.array([[0, 0, 0], [0, 0, 0], [0, 0, 0]]))
# Check for empty places on board
def my_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 my_random_place(board, my_player):
   selection = my_possibilities(board)
   current_loc = random.choice(selection)
   board[current_loc] = my_player
   return(board)
def my_row_win(board, my_player):
   for x in range(len(board)):
      win = True
      for y in range(len(board)):
         if board[x, y] != my_player:
            win = False
            continue
         if win == True:
            return(win)
      return(win)
def my_col_win(board, my_player):
   for x in range(len(board)):
      win = True
      for y in range(len(board)):
         if board[y][x] != my_player:
            win = False
            continue
      if win == True:
         return(win)
   return(win)
def my_diag_win(board, my_player):
   win = True:
   for x in range(len(board)):
      if board[x, x] != my_player:
         win = False
   return(win)
def evaluate_game(board):
   my_winner = 0
   for my_player in [1, 2]:
      if (my_row_win(board, my_player) or
         my_col_win(board,my_player) or
         my_diag_win(board,my_player)):
         my_winner = my_player
   if np.all(board != 0) and my_winner == 0:
      my_winner = -1
   return my_winner
# Main function to start the game
def my_play_game():
   board, my_winner, counter = my_create_board(), 0, 1
   print(board)
   sleep(2)
   while my_winner == 0:
      for my_player in [1, 2]:
         board = my_random_place(board, my_player)
         print("Board after " + str(counter) + " move")
         print(board)
         sleep(2)
         counter += 1
         my_winner = evaluate_game(board)
         if my_winner != 0:
            break
   return(my_winner)
# Driver Code
print("Winner is: " + str(my_play_game()))

输出

[[0 0 0]
 [0 0 0]
 [0 0 0]]
Board after 1 move
[[0 1 0]
 [0 0 0]
 [0 0 0]]
Board after 2 move
[[0 1 0]
 [0 0 0]
 [0 0 2]]
Board after 3 move
[[0 1 0]
 [0 0 0]
 [0 1 2]]
Board after 4 move
[[0 1 0]
 [0 0 2]
 [0 1 2]]
Board after 5 move
[[0 1 1]
 [0 0 2]
 [0 1 2]]
Board after 6 move
[[0 1 1]
 [2 0 2]
 [0 1 2]]
Board after 7 move
[[0 1 1]
 [2 1 2]
 [0 1 2]]
Winner is: 1

更新于: 2019 年 7 月 30 日

602 次浏览

开启您的职业生涯

通过完成课程获得认证

开始学习
广告