日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python二维游戏示例_Python实现的井字棋(Tic Tac Toe)游戏示例

發(fā)布時間:2023/12/19 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python二维游戏示例_Python实现的井字棋(Tic Tac Toe)游戏示例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文實例講述了Python實現(xiàn)的井字棋(Tic Tac Toe)游戲。分享給大家供大家參考,具體如下:

說明

用python實現(xiàn)了井字棋,整個框架是本人自己構思的,自認為比較滿意。另外,90%+的代碼也是本人逐字逐句敲的。

minimax算法還沒完全理解,所以參考了這里的代碼,并作了修改。

特點

可以選擇人人、人機、機人、機機四種對戰(zhàn)模式之一

電腦玩家的AI使用了minimax算法,帶apha-beta剪枝

電腦玩家在思考時,時時刻刻都有一個“假想敵”。以便使得minimax算法運轉起來

代碼

#作者:hhh5460

#時間:2017年6月26日

# 棋盤

class Board(object):

def __init__(self):

#self._board = '-'*9 # 坑!!

self._board = ['-' for _ in range(9)]

self._history = [] # 棋譜

# 按指定動作,放入棋子

def _move(self, action, take):

if self._board[action] == '-':

self._board[action] = take

self._history.append((action, take)) # 加入棋譜

# 撤銷動作,拿走棋子

def _unmove(self, action):

self._board[action] = '-'

self._history.pop()

# 棋盤快照

def get_board_snapshot(self):

return self._board[:]

# 取棋盤上的合法走法

def get_legal_actions(self):

actions = []

for i in range(9):

if self._board[i] == '-':

actions.append(i)

return actions

# 判斷走法是否合法

def is_legal_action(self, action):

return self._board[action] == '-'

# 終止檢測

def teminate(self):

board = self._board

lines = [board[0:3], board[3:6], board[6:9], board[0::3], board[1::3], board[2::3], board[0::4], board[2:7:2]]

if ['X']*3 in lines or ['O']*3 in lines or '-' not in board:

return True

else:

return False

# 勝負檢查

def get_winner(self):

board = self._board

lines = [board[0:3], board[3:6], board[6:9], board[0::3], board[1::3], board[2::3], board[0::4], board[2:7:2]]

if ['X']*3 in lines:

return 0

elif ['O']*3 in lines:

return 1

else:

return 2

# 打印棋盤

def print_b(self):

board = self._board

for i in range(len(board)):

print(board[i], end='')

if (i+1)%3 == 0:

print()

# 打印棋譜

def print_history(self):

print(self._history)

# 玩家

class Player(object):

'''

玩家只做兩件事:思考、落子

1. 思考 --> 得到走法

2. 落子 --> 執(zhí)行走法,改變棋盤

'''

def __init__(self, take='X'): # 默認執(zhí)的棋子為 take = 'X'

self.take=take

def think(self, board):

pass

def move(self, board, action):

board._move(action, self.take)

# 人類玩家

class HumanPlayer(Player):

def __init__(self, take):

super().__init__(take)

def think(self, board):

while True:

action = input('Please input a num in 0-8:')

if len(action)==1 and action in '012345678' and board.is_legal_action(int(action)):

return int(action)

# 電腦玩家

class AIPlayer(Player):

def __init__(self, take):

super().__init__(take)

def think(self, board):

print('AI is thinking ...')

take = ['X','O'][self.take=='X']

player = AIPlayer(take) # 假想敵!!!

_, action = self.minimax(board, player)

#print('OK')

return action

# 極大極小法搜索,α-β剪枝

def minimax(self, board, player, depth=0) :

'''參考:https://stackoverflow.com/questions/44089757/minimax-algorithm-for-tic-tac-toe-python'''

if self.take == "O":

bestVal = -10

else:

bestVal = 10

if board.teminate() :

if board.get_winner() == 0 :

return -10 + depth, None

elif board.get_winner() == 1 :

return 10 - depth, None

elif board.get_winner() == 2 :

return 0, None

for action in board.get_legal_actions() : # 遍歷合法走法

board._move(action, self.take)

val, _ = player.minimax(board, self, depth+1) # 切換到 假想敵!!!

board._unmove(action) # 撤銷走法,回溯

if self.take == "O" :

if val > bestVal:

bestVal, bestAction = val, action

else :

if val < bestVal:

bestVal, bestAction = val, action

return bestVal, bestAction

# 游戲

class Game(object):

def __init__(self):

self.board = Board()

self.current_player = None

# 生成玩家

def mk_player(self, p, take='X'): # p in [0,1]

if p==0:

return HumanPlayer(take)

else:

return AIPlayer(take)

# 切換玩家

def switch_player(self, player1, player2):

if self.current_player is None:

return player1

else:

return [player1, player2][self.current_player == player1]

# 打印贏家

def print_winner(self, winner): # winner in [0,1,2]

print(['Winner is player1','Winner is player2','Draw'][winner])

# 運行游戲

def run(self):

ps = input("Please select two player's type:\n\t0.Human\n\t1.AI\nSuch as:0 0\n")

p1, p2 = [int(p) for p in ps.split(' ')]

player1, player2 = self.mk_player(p1, 'X'), self.mk_player(p2, 'O') # 先手執(zhí)X,后手執(zhí)O

print('\nGame start!\n')

self.board.print_b() # 顯示棋盤

while True:

self.current_player = self.switch_player(player1, player2) # 切換當前玩家

action = self.current_player.think(self.board) # 當前玩家對棋盤進行思考后,得到招法

self.current_player.move(self.board, action) # 當前玩家執(zhí)行招法,改變棋盤

self.board.print_b() # 顯示當前棋盤

if self.board.teminate(): # 根據(jù)當前棋盤,判斷棋局是否終止

winner = self.board.get_winner() # 得到贏家 0,1,2

break

self.print_winner(winner)

print('Game over!')

self.board.print_history()

if __name__ == '__main__':

Game().run()

下圖是人人對戰(zhàn)的結果

希望本文所述對大家Python程序設計有所幫助。

總結

以上是生活随笔為你收集整理的python二维游戏示例_Python实现的井字棋(Tic Tac Toe)游戏示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 秋葵视频污 | 国产乡下妇女做爰毛片 | 美女爆乳18禁www久久久久久 | 一区二区三区福利 | 久久亚洲av午夜福利精品一区 | 午夜影院黄| 秘密基地电影免费版观看国语 | 黄色aa级片 | 久久久久久亚洲精品 | 中文字幕欧美亚洲 | 国产综合久久久久久鬼色 | 99国产精品一区二区 | 123毛片| 美女av网 | 色女人在线| 激情婷婷 | 精品国模一区二区三区 | 欧美精品一区二区三区久久久 | 国产精品高潮呻吟视频 | 女同二区 | 国产成人精品在线 | 男女偷爱性视频刺激 | 在线三区| 波多野结衣一本一道 | 51热门大瓜今日大瓜 | 久久成人a毛片免费观看网站 | 亚洲女人av | 69色视频 | 中文字幕99 | 亲子乱一区二区三区 | 亚洲一片 | 欧美亚洲色图视频 | 国产美女在线免费观看 | 最新在线黄色网址 | 中文字幕15页 | 国产aⅴ一区二区三区 | 六月综合激情 | 亚洲一区二区三区四区av | 黄色一级免费视频 | 精品99久久久久成人网站免费 | 成人久久免费视频 | 日韩天堂av| 乱人伦av| 欧美日韩在线视频播放 | av在线你懂的| 欧美一级大片在线观看 | 天堂av影院 | 韩日产理伦片在线观看 | 91亚洲国产成人精品一区二三 | 91啦中文 | 国产微拍精品一区 | 妺妺窝人体色WWW精品 | 屁屁影院第一页 | 男女福利视频 | 精品中出 | 天天撸天天操 | 亚洲va中文字幕 | 精品无码一区二区三区爱欲 | 97精品一区 | 婷婷日| 精品国产传媒 | 国产香蕉视频 | 欧美天天色 | 青青青免费在线视频 | 中文字幕日韩视频 | 粗大的内捧猛烈进出视频 | 亚洲少妇一区二区三区 | www.污在线观看 | 牛人盗摄一区二区三区视频 | 免费婷婷 | 久久av一区二区三区亚洲 | 国产精品第三页 | 久草欧美 | 久久久18| 国产伦精品一区二区三区高清版 | 91九色丨porny丨肉丝 | 91福利在线免费观看 | 欧美日韩123| free性娇小hd第一次 | 插插插干干干 | 野外(巨肉高h) | 伊人网在线免费观看 | 国产精品久久久久精 | 中文字幕在线观看网址 | 香蕉国产在线观看 | 国产色在线,com | 四虎成人永久免费视频 | 国产视频久久 | 美女污污网站 | 久久不射网 | 欧美亚洲图片小说 | 国产一区二区三区在线视频观看 | 日本一区二区精品视频 | 成年人晚上看的视频 | 久草视频福利在线 | 亚洲色偷精品一区二区三区 | 亚洲激情二区 | 少妇无码一区二区三区免费 | 国产精品人人爽 |