# 用 Python 跟自己下棋

Tic Tac Toe，又叫井字棋。

• 棋盘为 3*3 共 9 格，类似汉字“井”；
• 一方为 o，一方为 x，轮流落子；
• 任一方先有连成一条线的 3 个棋子（横、竖、斜皆可）则为胜利；
• 棋盘摆满仍没有一方胜利，则为平局。

a b c |---|---|---| 1 | | o | | |---|---|---| 2 | | o | x | |---|---|---| 3 | x | o | | |---|---|---|

abc 和 123 是为了更方便地标记棋盘上的位置。每走一步，就再次输出新的状态。

board = [ [0, 0, 0], [0, 0, 0], [0, 0, 0], ]

0 表示没有子，落子之后，o 为 1，x 为 2。

```CHESS = [' ', 'o', 'x']

def showBoard():
print '    a   b   c  '
for i in range(3):
print '  |---|---|---|'
print i+1, '|',
for j in range(3):
print '%s |' % CHESS[board[i][j]],
print
print '  |---|---|---|'```

yourturn = True showBoard() while not isFinished(): if yourturn: moveMan() else: moveAI() showBoard() yourturn = not yourturn;

isFinished 是一个判断游戏是否结束的函数，如果结束了，就返回 True，游戏主循环退出。最终结果的输出，我也打算放在这个函数里。

moveMan 和 moveAI 分别是人和 AI 落子，一个是等待控制台的输入，一个是计算出位置。

ROW = {'1': 0, '2': 1, '3': 2} COL = {'a': 0, 'b': 1, 'c': 2} def moveMan(): print 'Your turn...' while True: try: move = raw_input('choose a position (e.g. a1/c2/b3...):\n') pos_row = ROW[move[1]] pos_col = COL[move[0]] if board[pos_row][pos_col] == 0: board[pos_row][pos_col] = 1 return except: pass

def moveAI(): print 'AI\'s turn...' while True: r = random.randint(0, 2) c = random.randint(0, 2) if board[r][c] == 0: board[r][c] = 2 return

def isFinished(): # check row if [1, 1, 1] in board: print 'You win!' return True if [2, 2, 2] in board: print 'AI wins!' return True # check col for i in range(3): if board[0][i] == board[1][i] == board[2][i] == 1: print 'You win!' return True if board[0][i] == board[1][i] == board[2][i] == 2: print 'AI wins!' return True # check diagonal if (board[0][0] == board[1][1] == board[2][2] == 1) or ( board[2][0] == board[1][1] == board[0][2] == 1): print 'You win!' return True if (board[0][0] == board[1][1] == board[2][2] == 2) or ( board[2][0] == board[1][1] == board[0][2] == 2): print 'AI wins!' return True # check draw game draw = True for i in range(3): if 0 in board[i]: draw = False if draw: print 'Draw game.' return True return False

Your turn... choose a position (e.g. a1/c2/b3...): b2 a b c |---|---|---| 1 | o | | | |---|---|---| 2 | o | o | | |---|---|---| 3 | x | | x | |---|---|---| AI's turn... a b c |---|---|---| 1 | o | | | |---|---|---| 2 | o | o | | |---|---|---| 3 | x | x | x | |---|---|---| AI wins!

https://github.com/Rochester-NRT/AlphaGo

0 条评论

• ### 大家都是拷贝，凭什么你这么秀？

但看了前面的文章后你应该知道，这样的赋值只相当于增加了一个标签，并没有新的对象产生：

• ### 【Python 第5课】变量

先告诉一直用在线编辑器的同学一个不幸的消息：昨天有同学反馈了之后我才发现，在线编辑器没办法完全模拟控制台下输入输出的操作。所以，你可以通过它来学习和实验，但是想...

• ### Python 中的神秘运算符

今天我们来讲讲 Python 里一个不为众人所知的运算符。你可能会觉得疑惑：还有我不知道的运算符？别急着下结论，先往下看看再说。

• ### Openresty最佳案例 | 第2篇：Lua入门

什么是lua Lua 是一种轻量小巧的脚本语言，用标准C语言编写并以源代码形式开放， 其设计目的是为了嵌入应用程序中，从而为应用程序提供灵活的扩展和定制功能...

• ### Python3 流程控制语句

注意： 1、每个条件后面要使用冒号（:），表示接下来是满足条件后要执行的语句块 2、使用缩进来划分语句块，相同缩进数的语句在一起组成一个语句块 3、在Pytho...

• ### python（二）—选择和循环结构

python(二)—选择和循环结构 一、选择结构 选择结构有三种，分别为单分支，双分支，多分支选择结构 if语句的执行过程是：计算表达式的值，若值为true,则...

• ### 来学Python啦，大话循环结构~

fi是一个文件标识符，遍历其每行，产生循环 对一个外部的文件，通过python的函数将

• ### Python循环语句

循环语句允许我们执行一个语句或语句组多次，下面是在大多数编程语言中的循环语句的一般形式：

• ### SpringCloud简单案例

这里会用到Spring Cloud Netflix，该项目是Spring Cloud的子项目之一，主要内容是对Netflix公司一系列开源产品的包装，它为Spr...

Crossin的编程教室创始人