c语言井字棋人机对战,井字棋python程序

  c语言井字棋人机对战,井字棋python程序

  本文主要介绍python的井字游戏实现人机对战。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。

  本文分享python实现人机对战井字游戏的具体代码,供大家参考。具体内容如下

  在游戏简介:,中,如果一方领先于另一方(水平、垂直和倾斜)形成三对,它将获胜。在游戏中,输入方块位置代码的形式如下:

  设计前的思路:

  在游戏中,棋盘上存储着玩家和电脑的信息,没有没有招式的空地方。因为人机大战,需要实现计算机智能。这里有一个为这个电脑机器人设计的简单策略:

  如果有一招能让电脑机器人赢这一轮,那就选那一招。

  否则,如果有一步棋可以让玩家赢得这一轮,那么就选择那一步棋。

  否则,电脑机器人应该选择最佳位置行走。

  最佳位置是中间,其次是四角。

  定义第一个元组best _魏徵来存储最佳网格位置:

  按优劣顺序排列的下棋位置

  贝斯特魏徵=(4,0,2,6,8,1,3,5,7)

  判断井字游戏输赢的方法只有八种。每种获胜方式都写成一个元组,用嵌套元组表示:

  win=((0,1,2),(3,4,5),(6,7,8),(0,3,6),(1,4,7),(2,5,8),(0,4,8),(2,4,6))

  代码:

  #全局常数

  贝斯特魏徵=(4,0,2,6,8,1,3,5,7)

  win=((0,1,2),(3,4,5),(6,7,8),(0,3,6),(1,4,7),(2,5,8),(0,4,8),(2,4,6))

  X=X

  O=O

  EMPTY=

  #定义生成新棋盘的函数

  def new_board():

  board=[]

  对于范围(9):内的平方值

  board.append(空)

  滑板

  #问谁应该下棋

  def ask_yes_no(问题):

  响应=无

  #如果输入不是 y , n ,继续重新输入

  而响应不在( y , n):中

  回应=输入(问题)。下部()

  返回响应

  #问谁先走,第一路是X,第二路是o。

  #函数返回计算机和播放器的角色代码。

  定义件数():

  Go_first=ask_yes_no(你先走吗,玩家(y/n): )

  if go_first==y:

  打印( n玩家,你先来。)

  人类=X

  电脑=O

  else:

  打印( n计算机先打印)

  计算机=X

  人类=O

  返回计算机,人类

  #显示棋盘

  def显示_板(板):

  2=board2=board[:] #创建副本,修改不会影响原列表板。

  对于范围内的I(透镜(板)):

  if板[i]==EMPTY:

  board2[i]=i

  打印( t ,board2[0], ,board2[1], ,board2[2])

  打印( t ,-)

  print(t ,板2[3], ,板2[4], ,板2[5])

  打印( t ,-)

  print(t ,board2[6], ,board2[7], ,board2[8], n )

  #输入您要放置的位置编号。

  def ask_number(问题,低,高):

  响应=无

  而响应不在范围内(低、高):

  response=int(input(question))

  返回响应

  #生成可以合法下棋的位置序列(即未下过的位置)

  def legal_moves(棋盘):

  移动=[]

  对于范围(9):中的I

         if board[i] == EMPTY:

              moves.append(i)

      return moves

  #判断输赢

  def winner(board):

      for row in win:

          if board[row[0]] == board[row[1]] == board[row[2]] != EMPTY:

              winner = board[row[0]]

              return winner       #返回赢方

      #棋盘没有空位置

      if EMPTY not in board:

          return "True"            #"平局和棋,游戏结束"

      return False

  #人走棋

  def human_move(board, human):

      legal = legal_moves(board)

      move = None

      while move not in legal:

          move = ask_number("你走那个位置? (0 - 9):", 0, 9)

          if move not in legal:

              print("n此位置已经落过子了")

      return move

  #电脑走棋

  def computer_move(board, computer, human):

      # make a copy to work with since function will be changing list

      board = board[:]     #创建副本,修改不影响原来列表board

      #按优劣顺序排序的下棋位置best_weizhi

      # 如果电脑能赢,就走那个位置

      for move in legal_moves(board):

          board[move] = computer

          if winner(board) == computer:

              print("电脑下棋位置是" ,move)

              return move

          # 取消走棋方案

          board[move] = EMPTY

      # 如果玩家能赢,就堵住那个位置

      for move in legal_moves(board):

          board[move] = human

          if winner(board) == human:

              print("电脑下棋位置是" ,move)

              return move

          #取消走棋方案

          board[move] = EMPTY

      #不是上面情况则,也就是这一轮时都赢不了则

      #从最佳下棋位置表中挑出第一个合法位置

      for move in best_weizhi:

          if move in legal_moves(board):

              print("电脑下棋位置是" ,move)

              return move

  #转换角色

  def next_turn(turn):

      if turn == X:

          return O

      else:

          return X

  #主方法:

  def main():

      computer, human = pieces()

      turn = X

      board = new_board()

      display_board(board)

      while not winner(board):

          if turn == human:

              move = human_move(board, human)

              board[move] = human

          else:

              move = computer_move(board, computer, human)

              board[move] = computer

          display_board(board)

          turn = next_turn(turn)

          the_winner = winner(board)

      #游戏结束输出输赢信息

      if the_winner == computer:

          print("电脑赢!n")    

      elif the_winner == human:         

          print("玩家赢!n")

      elif the_winner == "True":    #"平局"        

          print("平局,和棋,游戏结束n")

  # start the program

  main()

  input("按任意键退出游戏.")

  在最后附上结果图:

  

 

  

 

  

 

  

 

  

 

  

 

  

 

  至此一个简单的井字棋就完成了。

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 浅谈python程序的错误-变量未定义的原因,浅谈python程序的错误-变量未定义为
  • 浅谈python程序的错误-变量未定义的原因,浅谈python程序的错误-变量未定义为,浅谈Python程序的错误-变量未定义
  • Python程序设计与算法基础教程,python算法指南
  • Python程序设计与算法基础教程,python算法指南,Python常用算法学习基础教程
  • ,,8个实用的Python程序你知道几个
  • python程序打包成exe可执行文件,python程序打包成exe后的 运行速度
  • python流程管理,Python程序开发流程
  • Python程序开发案例教程,python程序设计案例实践教程
  • python编程基础与案例集锦,python程序代码实例
  • python程序设计实例教程董付国课后答案,python程序设计第三版董付国
  • 如果在python程序中没有导入相关模块,python外部模块不用导入可以直接使用
  • Python程序语言设计基础,Python编程设计
  • python程序语言的特点,Python编程的特点
  • python程序编写,python编程求素数
  • python向服务器发送数据,python程序如何在服务器部署
  • 留言与评论(共有 条评论)
       
    验证码: