在我国悠久的历史上广为流传,同时它也是我们儿时游戏的一个童年记忆,简简单单的九宫格棋盘就构成了我们童年时的美好点滴。
其实,在Python有一个很经典的关于对数据字典的实战项目,便是我们曾经最熟悉不过的井字棋游戏,同时用二十行代码就可以将其实现!
它对数据字典进行了巧妙而又深刻的运用,因此很多Python教程中都将井字棋游戏作为对数据字典的实战项目之一。
所以今天大灰狼就来和小伙伴分享一下,运用数据字典构造井字棋盘的实战项目。
我们所常见的井字棋盘,看起来就像一个大的字符(#),有九个空格,可以包含‘X’、‘O’或者‘ ’,因此我们要用字典来表示棋盘,可以为每一个空格分配一个字符串键,
可以用字符串值来表示每一个空格上都有什么样的棋子或者空值,如‘X’、‘O’或者空字符,因此我们就需要九个不同的键值对来表示井字棋盘上的每一个空格部分。
如我们可以用’top-L’: ’ ', ‘top-M’: ’ ', ‘top-R’: ’ ',表示井字棋盘最上边一行的三个部分;
用’mid-L’: ’ ', ‘mid-M’ : ’ ', ‘mid-R’: ’ '表示井字棋盘中间部分;
用’low-L’: ’ ', ‘low-M’: ’ ', ‘low-R’: ’ '表示井字棋盘最下方的三格部分。
checkerboard = {'top-L': ' ', 'top-M': ' ', 'top-R': ' ',
'mid-L': ' ', 'mid-M' : ' ', 'mid-R': ' ',
'low-L': ' ', 'low-M': ' ', 'low-R': ' '}
当我们打开一个文本编辑器窗口,输入字典的以下代码时,就可以呈现出井字棋盘的效果。
def printBoard(replace):
print(checkerboard['top-L'] + '|' + checkerboard['top-M'] + '|' + checkerboard['top-R'])
print('——' + '+' + '——')
print(checkerboard['mid-L'] + '|' + checkerboard['mid-M'] + '|' + checkerboard['mid-R'])
print('——' + '+' + '——')
print(checkerboard['low-L'] + '|' + checkerboard['low-M'] + '|' + checkerboard['low-R'])
因为井字棋盘游戏刚开始的时候,棋盘的九个空格每个部分都是空字符,所以我们可以用空格来表示一张干净的井字棋盘,当我们对每一个键所对应的值进行修改的时候,随之变动的就是井字棋盘上相对应的空格部分。
所以我们可以专门定义一个函数来输出井字棋盘以及井字棋盘的状态,同时可以将这个井字棋盘进行实时输出,确保玩家游戏的实效性。
def printBoard(replace):
print(checkerboard['top-L'] + '|' + checkerboard['top-M'] + '|' + checkerboard['top-R'])
print('——' + '+' + '——')
print(checkerboard['mid-L'] + '|' + checkerboard['mid-M'] + '|' + checkerboard['mid-R'])
print('——' + '+' + '——')
print(checkerboard['low-L'] + '|' + checkerboard['low-M'] + '|' + checkerboard['low-R'])
同时还应定义玩家输入棋子所对应的景致棋盘位置,根据玩家所输入的位置,对井字棋盘进行修改,并及时输出此时景致棋盘状态。
倘若有一个玩家获胜,那么它所对应的值便可以在井字棋盘上横向纵向或斜向的形成三个相同的值。效果如下:
完整的代码如下:
checkerboard = {'top-L': ' ', 'top-M': ' ', 'top-R': ' ',
'mid-L': ' ', 'mid-M' : ' ', 'mid-R': ' ',
'low-L': ' ', 'low-M': ' ', 'low-R': ' '}
def printBoard(replace):
print(checkerboard['top-L'] + '|' + checkerboard['top-M'] + '|' + checkerboard['top-R'])
print('——' + '+' + '——')
print(checkerboard['mid-L'] + '|' + checkerboard['mid-M'] + '|' + checkerboard['mid-R'])
print('——' + '+' + '——')
print(checkerboard['low-L'] + '|' + checkerboard['low-M'] + '|' + checkerboard['low-R'])
turn = 'X'
for i in range(9):
printBoard(checkerboard)
print("现在请" + turn + "出棋,请输入您的位置:")
move = input()
checkerboard[move] = turn
if turn == 'X':
turn = 'O'
else:turn = 'X'
if i == 8:
print("游戏结束,平棋!")
看到这里你学废了嘛?小伙伴们记得三连哟!
我是灰小猿,我们下期见!