Python实战之利用数据字典实现井字棋盘,
在我国悠久的历史上广为流传,同时它也是我们儿时游戏的一个童年记忆,简简单单的九宫格棋盘就构成了我们童年时的美好点滴。
其实,在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("游戏结束,平棋!")
最后再宣传一句,关注微信公众号“灰狼洞主”获取更多好玩有趣的Python代码,和互联网相关干货分享!
- Fluent NHibernate RC 1.0 --升级内容
- 驳“反驳老赵之“伪”递归”
- 关于今天很热的--FizzBuzzWhizz
- 了解EF CodeFirst的Migrator功能与Migrator.Net对比
- struts技术的logic标签
- 【翻译】使用Visual Studio创建Asp.Net Core MVC (一)
- 你不知道的Javascript:有趣的setTimeout
- ADO.NET 2.0 中的新增 DataSet 功能
- WinRar 4.20 – 文件扩展名欺骗(0Day)
- 黑掉ATM取款机?只需一条短信
- DNS迭代穷举脚本
- 走进计算机取证分析的神秘世界
- SYNPROXY:最廉价的抗DoS攻击方案
- 如何使用AndroidStudio将开源项目library发布到jcenter
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android自定义带拼音音调Textview
- Android仿音乐播放器带进度的播放暂停按钮
- 一个比较自闭的SpringIOC问题
- 我在大厂写React,学到了什么?
- leetcode(4)寻找正序数组中位数
- jvm源码解析(二)HashMap
- 硬件笔记(23)---- PCB的保护走线
- TabLayout+ViewPager实现切页的示例代码
- jvm源码分析(四)ThreadPoolExecutor
- python zip,lambda,map函数代码实例
- python实现控制台输出彩色字体
- Mysql免安装版的使用
- jvm源码解析(八)动态代理是如何实现的,JDK Proxy于CGLib有什么区别
- jvm源码解析(五)synchronized和ReentrantLock
- 手把手教你构建自定义的Mimikatz二进制文件