如何使用Python实现井字棋游戏

  介绍

这篇文章给大家分享的是有关如何使用Python实现井字棋游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

<强>说明

用Python实现了井字棋,整个框架是本人自己构思的,自认为比较满意。另外,90% +的代码也是本人逐字逐句敲的。

极大极小算法还没完全理解,所以参考了这里的代码,并作了修改。

<强>特点

可以选择人人,人机,机人,机机四种对战模式之一
电脑玩家的AI使用了极大极小算法,带apha-beta剪枝
电脑玩家在思考时,时时刻刻都有一个“假想敌”。以便使得极大极小算法运转起来

<强>代码

# hhh6460   #时间:2017年6月26日   #,棋盘   class 董事会(对象):   自我,def  __init__ ():   # self._board 才能=,& # 39;& # 39;* 9,#,坑! !   self._board 才能=,(& # 39;& # 39;,for  _ 拷贝范围(9)]   时间=self._history 才能;[],#,棋谱   ,#按指定动作,放入棋子   ,def  _move(自我,,,,带):   if 才能self._board[行动],==,& # 39;& # 39;:   ,,self._board[行动],=,   ,,self._history.append((,,), #,加入棋谱   ,#撤销动作,拿走棋子   ,def  _unmove(自我,,行动):   self._board才能[行动],=,& # 39;& # 39;   self._history.pop才能()   ,#棋盘快照   ,def  get_board_snapshot(自我):   return 才能self._board [:]   ,#取棋盘上的合法走法   ,def  get_legal_actions(自我):   时间=actions 才能;[]   for 才能小姐:拷贝范围(9):   ,,if  self._board[我],==,& # 39;& # 39;:   ,,,actions.append(我)   return 才能行动   ,#判断走法是否合法   ,def  is_legal_action(自我,,行动):   return 才能self._board[行动],==,& # 39;& # 39;   ,#终止检测   ,def  teminate(自我):   board 才能=self._board   lines 才能=,(董事会(0:3),董事会[3:6],[完],,董事会(0::3),董事会(1::3),董事会(2::3),董事会(0::4),董事会[2:7:2]]   if 才能;[& # 39;x # 39;] * 3,拷贝lines 或是[& # 39;o # 39;] * 3,拷贝lines 或是& # 39;& # 39;,not 拷贝板:   ,,return 真实的   其他的才能:   ,,return 错误的   ,#胜负检查   ,def  get_winner(自我):   board 才能=self._board   lines 才能=,(董事会(0:3),董事会[3:6],[完],,董事会(0::3),董事会(1::3),董事会(2::3),董事会(0::4),董事会[2:7:2]]   if 才能;[& # 39;x # 39;] * 3,拷贝:   ,,return  0   elif 才能;[& # 39;o # 39;] * 3,拷贝:   ,,return  1   其他的才能:   ,,return  2   ,#打印棋盘   ,def  print_b(自我):   board 才能=self._board   for 才能小姐:拷贝范围(len(董事会)):   ,才能打印(董事会(我),结束=& # 39;& # 39;)   ,,if  (i + 1) % 3,==, 0:   ,,,print ()   ,#打印棋谱   ,def  print_history(自我):   打印(self._history)才能   #,玩家   class 球员(对象):   ,& # 39;& # 39;& # 39;   ,玩家只做两件事:思考,落子   1只才能思考,——祝辞,得到走法   2只才能落子,——祝辞,执行走法,改变棋盘   ,& # 39;& # 39;& # 39;   ,def  __init__(自我,,=& # 39;x # 39;):, #,默认执的棋子为,take =, & # 39; x # 39;   self.take才能=认为,def  (,,):   ,通过   ,def 移动(自我,,,,行动):   board._move才能(行动,self.take)   #,人类玩家   class  HumanPlayer(球员):   ,def  __init__(自我,,):   超级才能(). __init__(花)   认为,def  (,,):   while 才能正确的:   ,,action =,输入(& # 39;Please  input  a  num 拷贝主:& # 39;)   ,,if  len(行动)==1,以及action  & # 39;拷贝012345678 & # 39;,以及board.is_legal_action (int(行动):   ,,,return  int(行动)   #,电脑玩家   class  AIPlayer(球员):   ,def  __init__(自我,,):   超级才能(). __init__(花)   认为,def  (,,):   打印才能(& # 39;AI  is  thinking ……& # 39;)   take 才能=,(& # 39;x # 39; & # 39; o # 39;] [self.take==& # 39; x # 39;】   player 才能=,AIPlayer(花),,#,假想敌! ! !   _,才能,action =, self.minimax(板,,播放器)   #才能打印(& # 39;好吧,)   return 才能行动   ,#极大极小法搜索,α-β剪枝   ,def 极大极小(自我,,,,,,深度=0),:   & # 39;才能& # 39;& # 39;参考:https://stackoverflow.com/questions/44089757/minimax-algorithm-for-tic-tac-toe-python& # 39; & # 39; & # 39;   if 才能;self.take ==,“O":   ,,bestVal =-10   其他的才能:   ,,bestVal =10   if 才能;board.teminate (),:   ,,if  board.get_winner (),==, 0,:   ,,,return  -10年,+,深度,没有   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何使用Python实现井字棋游戏