辽宁省沈阳市第十五中学2013年高中数学论文 图形计算器应用能
力测试活动学生 图形计算器游戏贪吃蛇
[摘要]
利用图形计算器的编程功能,在CASIO fx-CG20图形计算器平台上实现了贪吃蛇游戏。本文中的程序利用了图形计算器中的矩阵来储存数据,通过模拟法实现贪吃蛇游戏,有两种游戏模式,并提供游戏的最高分记录、保存和设置功能。 [关键词]
图形计算器;贪吃蛇; [前言]
观察过以前的获奖论文,大多数的论文只利用到图形计算器的画图功能和小部分的编程功能。图形计算器编程功能的强大之处并未充分体现出来,而本文正是利用了图形计算器强大的编程功能,从而在图形计算器上实现了贪吃蛇游戏。 [研究目的]
利用图形计算器的编程功能,在图形计算器上实现贪吃蛇游戏,从而锻炼编程能力和算法能力,同时增强了CASIO图形计算器的娱乐功能,丰富同学们的课余生活。 [程序功能说明]
游戏功能:玩家通过CASIO图形计算器fx-CG20上的按键B、N、!和$或数学键2、4、6和8控制蛇在地图上寻找食物,每吃下一个食物时,蛇的长度增加一,同时出现另一个食物。本程序有两种游戏模式,一种为有墙模式,另一种为无墙模式。
有墙模式下,蛇头碰到四面的墙(即显示的边界)或蛇身时,游戏结束。
无墙模式下,只有在蛇头碰到蛇身的情况下游戏才会结束,如果蛇头到达了屏幕的边界,蛇头会在屏幕的另一边出现。(如图1)
图 1
图 2
最高分记录功能:本程序能记录蛇长度的最长纪录,并在游戏结束的时候显示纪录长度和此次游戏的蛇的长度。(如图2)
保存功能:玩家可以在游戏中途按p键可暂停游戏,玩家可以选择“Save
game&Exit”(保存并退出游戏),或者“Continue”(继续游戏)。(如图3)下次运行程序时,选择“Load”即可继续上次保存的游戏。(如图4)
1
图 3
图 4
设置功能:运行程序并选择“Set”(如图4)可进入本程序的设置界面,玩家可以改变蛇头(Head)或蛇身(Body)的图案、改变蛇身颜色(Color)、切换游戏模式(Wall)或者返回主菜单(Exit)。(如图5)
图 5
特色:
图 6
1.本程序提供的所有蛇头和蛇身图案都是由具有方向性的图案组成的。游戏过程中,蛇头始终指向前进方向,蛇身始终沿蛇身指向蛇头方向。(如图6)
2.本程序共提供 8种蛇身颜色设置,其中玩家可以将蛇身颜色设置为“Colorful”(彩色),设置后游戏过程中的蛇身颜色将由伪随机数决定,呈现出“彩蛇”的效果。 (如图6) [研究过程]
1. 确定程序功能,请参考“程序功能说明”。 2. 构思算法:
本程序采用的主要算法为模拟法,程序运行时利用矩阵功能储存地图,使用“Locate”命令显示蛇头和蛇身。
需要记录的数据:蛇头坐标、蛇尾坐标、蛇头前进方向、蛇尾前进方向、食物坐标、蛇身长度、设置数据(颜色、游戏模式及图案设置数据)、地图
地图记录方法:用一个21×8的矩阵保存地图,一个矩阵元素对应屏幕上的一个方格。如果方格为“空”,则用对应的矩阵元素用“0”表示;如果方格上有蛇身,蛇身没有拐弯的地方,用“2”表示,拐弯的地方,用“-1”或“1”表示(具体取决于拐弯的方向)。
游戏保存的实现:将“需要记录的数据”用另一个矩阵保存下来即可。
2
按键检测方法:使用“Getkey”命令获取按键后,因为该命令返回的数值最大为79且一定为正整数,所以创建一个79×3的矩阵Mat H来判断按键。通过读取Mat H[K,3](K为“Getkey”命令的返回值)即可立即判断按键是否有效。若按键有效,则可以非常方便地利用矩阵储存的数据来修改蛇头方向和图案,缩短了代码长度。 蛇的实现:蛇前进时,用蛇身图案覆盖蛇头,在蛇头前进方向前一格的位置显示蛇头图案,同时用空格覆盖蛇尾。这样蛇就“前进”了一格。如果蛇头覆盖了食物(即吃下食物),不用空格覆盖蛇尾,则在游戏中显示的蛇会变长一格。 3. 使用图形计算器编程实现。 4. 进行程序调试。 5. 游戏试用。
具体实现步骤如下:
1. 打开图形计算器,按1进入“计算·矩阵”模式。 2. 按e进入矩阵存储器。并创建矩阵: 矩阵名 尺寸 用途 Mat A 21×8 程序运行时记录地图信息 Mat F 21×8 保存游戏存档信息 Mat B 6×1 记录最高分及游戏设置信息 Mat H 79×3 用于按键判断 将Mat B的(3,1)、(5,1)和(6,1)初始化为1,其余矩阵元素为0。 Mat H的初始化:
第27行为1,0,2;第28行为0,-1,1 第37行为0,1,3;第38行为-1,0,4 第53行为1,0,2;第62行为0,1,3 第64行为0,-1,1;第73行为-1,0,4 其余矩阵元素为0。
3. 返回主菜单,进入“程序”模式。
4. 创建程序“SNAKE”,代码请参考“程序代码分析”或附件。 5. 创建程序“S~LOAD”,代码请参考“程序代码分析”或附件。 6. 创建程序“S~PAUSE”,代码请参考“程序代码分析”或附件。
3
7. 创建程序“S~SET”,代码请参考“程序代码分析”或附件。 [程序代码分析] 一、主程序SNAKE 'ProgramMode:RUN '_Mat _A,B,F,H \→Str 3
'食物图案
①
\69D__#E69A__#E5EE__#E5ED__#E5EF__#E5EC__#E6C4__#E6C2__#E6C3__#E6C1__#E6CF_>_#E6CE_<\→Str 7 '字符串7包含可供设置的所有字符,由于计算机中没有这些字符,请见图7
图 7
Mat B[3,1]→R Mat B[4,1]→Q
StrMid(Str 7,Mat B[5,1],4)→Str 4 StrMid(Str 7,Mat B[6,1],4)→Str 5 Lbl 8
If Mat F[1,8]:Then
'判断是否有存档,据此显示不同的菜单
'Str 4保存蛇身四个方向的图案 'Str 5保存蛇头四个方向的图案
'读取最近一次游戏设置
Menu \Else Menu \
IfEnd
Lbl 3:Prog \Goto 8 Lbl 1:ClrText
StrMid(Str 4,2,1)→Str 2 StrMid(Str 5,2,1)→Str 1 Fill(0,Mat A) For 1→I To 5
'初始化Str 2,Str 2保存当前方向的蛇身图案 '初始化Str 1,Str 1保存当前方向的蛇头图案
'初始化地图
①为了便于阅读和交流,笔者将由计算器转换成
txt文件得出的代码加以修改并增加缩进,同时还添加了
程序注释。如需将代码导入计算器中,请参见附件。
4
2→Mat A[I,1]
Next
Locate 1,1,Str 2+Str 2+Str2+Str2+Str 1 1→S:1→T:5→G:1→H 1→C:0→D:1→E:0→F 5→L Do
'S和T记录蛇尾坐标,G和H记录蛇头坐标 'C和D记录蛇头前进方向,E和F记录蛇尾前进方向
'L记录蛇的长度
'生成第一个食物,M和N记录食物坐标
RanInt#(1,21)→M RanInt#(1,7)→N LpWhile Mat A[M,N] For 1→I To 50:Next While NotGetkey WhileEnd Locate M,N,Str 3 Goto 4 Lbl 2
Prog \ While NotGetkey WhileEnd
'K记录最近一次按键,程序有多次Getkey是为了提高按键反应灵敏度 Lbl 4:0→K While 1
Do
'游戏循环
'按键检测及使蛇前进的循环 '调用程序“S~LOAD”读取存档
'显示食物
'短时间延时,按任意键即可以开始游戏
'修改K之前先判断是否检测到按键,以防之前获得的按键被覆盖 Getkey→X:X=>X→K
If R=1:Then Locate G,H,Str 2 '根据游戏设置选择显示蛇身的颜色
或生成随机数决定蛇身颜色,用蛇身图案覆盖当前的蛇头
Else If R=2:ThenBlue Locate G,H,Str 2 Else If R=3:Then Red Locate G,H,Str 2
5