内容正文:
课程名称
第14章 综合案例
计划学时
4学时
内容分析
本章主要介绍需求分析、程序设计、代码实现、效果演示
教学目标
与
教学要求
要求学生了解程序的开发流程、掌握程序的流程控制
教学重点
需求分析、程序设计、代码实现
教学难点
程序设计、代码实现
教学方式
课堂讲解及ppt演示
教
学
过
程
第一课时
(需求分析、程序设计)
需求分析
2048游戏是一款数字益智游戏,如图14.1所示。具体游戏规则如下:
① 玩家每次可以选择上下左右其中一个方向移动。
② 每移动一次,所有数字方块都会往移动的方向靠拢。
③ 相同数字方块在靠拢时会相加。
④ 每次移动完成后,系统会在空白的方块中随机添加2或4。
⑤ 当所有方块中填满数字并不能相加时,游戏结束。
⑥ 玩家的得分为相同数字之和的累加。
图14.1 2048游戏
根据上述游戏规则,该游戏需实现以下功能:
① 显示游戏界面。
② 上下左右移动。
③ 添加随机数字。
④ 游戏是否结束。
为方便读者理解各功能之间的联系,此处画出程序的流程图,如图14.2所示。
图14.2 程序流程
程序设计
对程序中各功能有了初步了解后,本节将带领大家实现每个功能。首先,程序需选用合适的数据结构,由于游戏可以看成由4×4个数字组成,每移动一次,就是对这4×4个数字进行操作,因此数据结构可以选择二维列表(二维列表类似于二维矩阵),具体如下所示:
matix = [[0 for i in range(4)] for i in range(4)] # 初始化生成一个二维列表
score = 0 # score纪录游戏的分数
通过print()函数打印该二维列表,则输出结果如下所示:
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
二维列表中的数据需显示在4×4方块中。
显示方式、前景色与背景色都用数字表示,具体如表14.1与14.2所示。
表14.1 显示方式
显示方式
说明
0
终端默认设置
1
高亮显示
4
使用下画线
5
闪烁
7
反白可见
8
不可见
表14.2 前景色与背景色
前景色
背景色
说明
30
40
黑色
31
41
红色
32
42
绿色
33
43
黄色
34
44
蓝色
35
45
紫红色
36
46
青蓝色
37
47
白色
ifZero ()函数的实现如下所示:
1 def ifZero(s):
2 return s if s != 0 else ''
其中,若参数s为0,则返回空字符,否则返回参数s。
此时,只需在上述界面的基础上再随机生成两个数(2或4)就可以构成初始界面。
界面显示功能完成后,接下来实现上下左右功能,它是整个游戏的核心功能。由于上下左右四个方向的具体实现代码类似,此处只讲解向右移动的实现。
每次执行移动操作后,程序中需自动添加一个随机数(2或4)并重新输出显示界面。
此处只需将随机数添加到对应矩阵不为0的元素处,再调用display()函数显示界面即可。
最后,程序需检查游戏是否结束。
第二课时
(代码实现、效果演示)
代码实现
上节介绍了2048游戏中必须实现的各种功能,接下来讲解如何将这些功能组合成程序流程,具体如下所示:
1 def main():
2 flag = True
3 init()
4 while flag: # 循环标志
5 d = input('\033[1;36;1m W:上 S:下 A:左 D:右 Q:退出 :\033[0m')
6 if d == 'A': # 左移
7 moveLeft()
8 elif d == 'S': # 下移
9 moveDown()
10 elif d == 'W': # 上移
11 moveUp()
12 elif d == 'D': # 右移
13 moveRight()
14 elif d == 'Q': # 退出
15 break
16 else: # 对用户的其他输入不处理
17 continue
18 addRandomNum()
19 if not checkOver():
20 print('游戏结束')
21