博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tic-Tac-Toe游戏
阅读量:6001 次
发布时间:2019-06-20

本文共 6446 字,大约阅读时间需要 21 分钟。

1 #Tic-Tac-Toe  2 #机器人和人类下井字棋  3   4 #全局变量  5 import random  6 X = "X"  7 O = "O"  8 EMPTY = " "      #表示棋盘上的空空格  9 TIE = "TIE"      #表示平局 10 NUM_SQUARES = 9  #井字棋棋盘上的方格数 11  12 #显示游戏说明 13 def display_instruct(): 14     """Display game instrcutin.""" 15     print( 16         """Welcome to the gratest intellectual challenge of all time:Tic-Tac-Toe. 17         This will be a showdown between your human brain and my silicon proessor. 18         you will make your move known by entering a nmber,0 - 8. The number will 19         correspond to the board position as illustrated: 20          0 | 1 | 2 21          --------- 22          3 | 4 | 5 23          --------- 24          6 | 7 | 8 25         Prepare yourself,human .The ultimate battle is about aobegin.\n""" 26     ) 27  28 #询问一个“是或否”的问题。接受一个问题,返回y或n 29 def ask_yes_no(quesion): 30     response = None 31     while response not in ("y","n"): 32         response = input(quesion.lower()) 33     return response 34  35 #求情指定范围内的一个数字 36 def ask_number(question,low,high): 37     response = None 38     while response not in range(low,high): 39         response = int(input(question)) 40     return response 41  42 #询问玩家是否希望先行棋 43 def pieces(): 44     go_first = ask_yes_no("Do you require the first move ? (y/n):") 45     if go_first =="y": 46         print "\nThen take the first move.You wil need it." 47         human = X 48         computer = O 49     else: 50         print "\nYour bravery will be your undoing... I will go first.." 51         human = O 52         computer = X 53     return computer, human 54  55 #创建新的q棋盘 56 def new_board(): 57     board = [] 58     for square in range(NUM_SQUARES): 59         board.append(EMPTY) 60     return board 61  62 #显示棋盘 63 def display_board(board): 64     print "\n\t",board[0],"|",board[1],"|",board[2] 65     print "\t","--------" 66     print "\n\t",board[3],"|",board[4],"|",board[5] 67     print "\t","--------" 68     print "\n\t",board[6],"|",board[7],"|",board[8] 69  70 #接受一个棋盘,返回一个合法的行棋步骤 71 def legal_moves(board): 72     moves = [] 73     for square in range(NUM_SQUARES): 74         if board[square] == EMPTY: 75             moves.append(square) 76     return moves 77  78 #判断输赢 79 def winner(board): 80     WAYS_TO_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)) 81     winner = "" 82     for row in WAYS_TO_WIN: 83         if board[row[0]] == board[row[1]] == board[row[2]]!=EMPTY: 84             winner = board[row[0]] 85             return winner 86     if winner=="": 87         if EMPTY not in board: 88              return TIE 89         else: 90             return None 91  92 #用户行棋 93 def human_move(board,human): 94     legal = legal_moves(board) 95     move = None 96     while move not in legal: 97         move = ask_number("Where you will move ?(0-8):",0,NUM_SQUARES) 98         if move not in legal: 99             print ("\nThat square is already occupied,foolish human.Choose another.\n")100     print "Fine..."101     return move102 103 #机器人行棋104 def computer_move(board,computer,human):105     board = board[:]106     BEST_MOVES =(4,0,2,6,8,1,3,5,7)107 108     #如果机器人能赢,就走那个位置109     for move in legal_moves(board):110         board[move] = computer111         if winner(board) == computer:112              print move113              return move114         #技术当前行棋方案的测试,并取消之115         board[move] =EMPTY116     #如果玩家能赢,就堵住那个位置117     for move in legal_moves(board):118         board[move] = human119         if winner(board) == human:120              print move121              return move122         #技术当前行棋方案的测试,并取消之123         board[move] =EMPTY124 125     #由于本轮谁也赢不了,所以叫挑选最佳的空位来走126     for move in BEST_MOVES:127         if move in legal_moves(board):128             print move129             return  move130 131 #返回下一个行棋方132 def next_turn(turn):133     if turn == X:134         return O135     else:136         return X137 138 #接受游戏的赢家139 def congract_winner(the_winner,computer,humna):140     if the_winner !=TIE:141         print the_winner,"won"142     else:143         print "tie!"144 145     if the_winner==computer:146         print "computer win"147     elif the_winner ==humna:148         print "human win!"149     elif the_winner==TIE:150         print "tie"151 152 #153 def main():154     display_instruct()155     computer,human = pieces()156     turn = X157     board = new_board()158     display_board(board)159 160     while not winner(board):161         if turn == human:162             move = human_move(board,human)163             board[move] = human164         else:165             move = computer_move(board,computer,human)166             board[move] = computer167         display_board(board)168         turn = next_turn(turn)169     the_winner = winner(board)170     congract_winner(the_winner,computer,human)171 172 main()

执行过程:

Python 2.7.6 (default, Nov 10 2013, 19:24:24) [MSC v.1500 64 bit (AMD64)] on win32Type "copyright", "credits" or "license()" for more information.>>> ================================ RESTART ================================>>> Welcome to the gratest intellectual challenge of all time:Tic-Tac-Toe.        This will be a showdown between your human brain and my silicon proessor.        you will make your move known by entering a nmber,0 - 8. The number will        correspond to the board position as illustrated:         0 | 1 | 2         ---------         3 | 4 | 5         ---------         6 | 7 | 8        Prepare yourself,human .The ultimate battle is about aobegin.do you require the first move ? (y/n):"y"Then take the first move.You wil need it.      |   |      --------      |   |      --------      |   |  Where you will move ?(0-8):4Fine...      |   |      --------      | X |      --------      |   |  0    O |   |      --------      | X |      --------      |   |  Where you will move ?(0-8):2Fine...    O |   | X    --------      | X |      --------      |   |  6    O |   | X    --------      | X |      --------    O |   |  Where you will move ?(0-8):3Fine...    O |   | X    --------    X | X |      --------    O |   |  5    O |   | X    --------    X | X | O    --------    O |   |  Where you will move ?(0-8):1Fine...    O | X | X    --------    X | X | O    --------    O |   |  7    O | X | X    --------    X | X | O    --------    O | O |  Where you will move ?(0-8):8Fine...    O | X | X    --------    X | X | O    --------    O | O | Xtie!tie>>>

 

 

转载于:https://www.cnblogs.com/minmsy/p/5048990.html

你可能感兴趣的文章
ldap快速配置
查看>>
docker之docker-machine用法
查看>>
IIS 7启用static JSON文件能POST方法
查看>>
P5205 【模板】多项式开根
查看>>
微博mini for Windows Phone 8 开发那些事
查看>>
redis文章索引
查看>>
OpenSSH利用处理畸形长度密码造成的时间差,枚举系统用户(CVE-2016-6210)
查看>>
Javascript回调函数
查看>>
可能是最简单的面向对象入门教程(二)为什么要有类型
查看>>
配置Openfiler做ISCS实验
查看>>
Maven启用代理访问
查看>>
LDAP & Implementation
查看>>
hdu 4597 Play Game
查看>>
hdu 1398 Square Coins (母函数)
查看>>
试验性的Numpy教程(译)
查看>>
twitter storm 源码走读之5 -- worker进程内部消息传递处理和数据结构分析
查看>>
CCF 201503-4 网络延时
查看>>
oracle管理控制台不能打开,提示此网站的安全证书有问题?
查看>>
.net获取select控件中的文本内容
查看>>
Windows 8 Metro App开发[5]导航栏(AppBar)的使用
查看>>