高中数学论文 图形计算器应用能力测试活动学生 图形计算器游戏贪吃蛇.docx
- 文档编号:5014843
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:13
- 大小:261.51KB
高中数学论文 图形计算器应用能力测试活动学生 图形计算器游戏贪吃蛇.docx
《高中数学论文 图形计算器应用能力测试活动学生 图形计算器游戏贪吃蛇.docx》由会员分享,可在线阅读,更多相关《高中数学论文 图形计算器应用能力测试活动学生 图形计算器游戏贪吃蛇.docx(13页珍藏版)》请在冰豆网上搜索。
高中数学论文图形计算器应用能力测试活动学生图形计算器游戏贪吃蛇
2013年高中数学论文图形计算器应用能力测试活动学生图形计算器游戏贪吃蛇
[摘要]
利用图形计算器的编程功能,在CASIOfx-CG20图形计算器平台上实现了贪吃蛇游戏。
本文中的程序利用了图形计算器中的矩阵来储存数据,通过模拟法实现贪吃蛇游戏,有两种游戏模式,并提供游戏的最高分记录、保存和设置功能。
[关键词]
图形计算器;贪吃蛇;
[前言]
观察过以前的获奖论文,大多数的论文只利用到图形计算器的画图功能和小部分的编程功能。
图形计算器编程功能的强大之处并未充分体现出来,而本文正是利用了图形计算器强大的编程功能,从而在图形计算器上实现了贪吃蛇游戏。
[研究目的]
利用图形计算器的编程功能,在图形计算器上实现贪吃蛇游戏,从而锻炼编程能力和算法能力,同时增强了CASIO图形计算器的娱乐功能,丰富同学们的课余生活。
[程序功能说明]
游戏功能:
玩家通过CASIO图形计算器fx-CG20上的按键B、N、!
和$或数学键2、4、6和8控制蛇在地图上寻找食物,每吃下一个食物时,蛇的长度增加一,同时出现另一个食物。
本程序有两种游戏模式,一种为有墙模式,另一种为无墙模式。
有墙模式下,蛇头碰到四面的墙(即显示的边界)或蛇身时,游戏结束。
无墙模式下,只有在蛇头碰到蛇身的情况下游戏才会结束,如果蛇头到达了屏幕的边界,蛇头会在屏幕的另一边出现。
(如图1)
图1
图2
最高分记录功能:
本程序能记录蛇长度的最长纪录,并在游戏结束的时候显示纪录长度和此次游戏的蛇的长度。
(如图2)
保存功能:
玩家可以在游戏中途按p键可暂停游戏,玩家可以选择“Savegame&Exit”(保存并退出游戏),或者“Continue”(继续游戏)。
(如图3)下次运行程序时,选择“Load”即可继续上次保存的游戏。
(如图4)
图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”表示(具体取决于拐弯的方向)。
游戏保存的实现:
将“需要记录的数据”用另一个矩阵保存下来即可。
按键检测方法:
使用“Getkey”命令获取按键后,因为该命令返回的数值最大为79且一定为正整数,所以创建一个79×3的矩阵MatH来判断按键。
通过读取MatH[K,3](K为“Getkey”命令的返回值)即可立即判断按键是否有效。
若按键有效,则可以非常方便地利用矩阵储存的数据来修改蛇头方向和图案,缩短了代码长度。
蛇的实现:
蛇前进时,用蛇身图案覆盖蛇头,在蛇头前进方向前一格的位置显示蛇头图案,同时用空格覆盖蛇尾。
这样蛇就“前进”了一格。
如果蛇头覆盖了食物(即吃下食物),不用空格覆盖蛇尾,则在游戏中显示的蛇会变长一格。
3.使用图形计算器编程实现。
4.进行程序调试。
5.游戏试用。
具体实现步骤如下:
1.打开图形计算器,按1进入“计算·矩阵”模式。
2.按e进入矩阵存储器。
并创建矩阵:
矩阵名
尺寸
用途
MatA
21×8
程序运行时记录地图信息
MatF
21×8
保存游戏存档信息
MatB
6×1
记录最高分及游戏设置信息
MatH
79×3
用于按键判断
将MatB的(3,1)、(5,1)和(6,1)初始化为1,其余矩阵元素为0。
MatH的初始化:
第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”,代码请参考“程序代码分析”或附件。
7.创建程序“S~SET”,代码请参考“程序代码分析”或附件。
[程序代码分析]
一、主程序SNAKE
'ProgramMode:
RUN
'_Mat_A,B,F,H
"B"→Str3'食物图案
"_#E692__#E691__#E693__#E690__#E5EA__#E5E9__#E5EB__#E5E8__#E69C__#E69B__#E69D__#E69A__#E5EE__#E5ED__#E5EF__#E5EC__#E6C4__#E6C2__#E6C3__#E6C1__#E6CF_>_#E6CE_<"→Str7'字符串7包含可供设置的所有字符,由于计算机中没有这些字符,请见图7
图7
MatB[3,1]→R'读取最近一次游戏设置
MatB[4,1]→Q
StrMid(Str7,MatB[5,1],4)→Str4'Str4保存蛇身四个方向的图案
StrMid(Str7,MatB[6,1],4)→Str5'Str5保存蛇头四个方向的图案
Lbl8
IfMatF[1,8]:
Then'判断是否有存档,据此显示不同的菜单
Menu"Snake","Newgame",1,"Load",2,"Set",3
ElseMenu"Snake","Newgame",1,"Set",3
IfEnd
Lbl3:
Prog"S~SET"
Goto8
Lbl1:
ClrText
StrMid(Str4,2,1)→Str2'初始化Str2,Str2保存当前方向的蛇身图案
StrMid(Str5,2,1)→Str1'初始化Str1,Str1保存当前方向的蛇头图案
Fill(0,MatA)'初始化地图
For1→ITo5
2→MatA[I,1]
Next
Locate1,1,Str2+Str2+Str2+Str2+Str1
1→S:
1→T:
5→G:
1→H'S和T记录蛇尾坐标,G和H记录蛇头坐标
1→C:
0→D:
1→E:
0→F'C和D记录蛇头前进方向,E和F记录蛇尾前进方向
5→L'L记录蛇的长度
Do'生成第一个食物,M和N记录食物坐标
RanInt#(1,21)→M
RanInt#(1,7)→N
LpWhileMatA[M,N]
For1→ITo50:
Next'短时间延时,按任意键即可以开始游戏
WhileNotGetkey
WhileEnd
LocateM,N,Str3'显示食物
Goto4
Lbl2
Prog"S~LOAD"'调用程序“S~LOAD”读取存档
WhileNotGetkey
WhileEnd
'K记录最近一次按键,程序有多次Getkey是为了提高按键反应灵敏度
Lbl4:
0→K
While1'游戏循环
Do'按键检测及使蛇前进的循环
'修改K之前先判断是否检测到按键,以防之前获得的按键被覆盖
Getkey→X:
X=>X→K
IfR=1:
ThenLocateG,H,Str2'根据游戏设置选择显示蛇身的颜色或生成随机数决定蛇身颜色,用蛇身图案覆盖当前的蛇头
ElseIfR=2:
ThenBlueLocateG,H,Str2
ElseIfR=3:
ThenRedLocateG,H,Str2
ElseIfR=4:
ThenMagentaLocateG,H,Str2
ElseIfR=5:
ThenGreenLocateG,H,Str2
ElseIfR=6:
ThenCyanLocateG,H,Str2
ElseIfR=7:
ThenYellowLocateG,H,Str2
Else
RanInt#(1,7)→X
IfX=1:
ThenLocateG,H,Str2
ElseIfX=2:
ThenBlueLocateG,H,Str2
ElseIfX=3:
ThenRedLocateG,H,Str2
ElseIfX=4:
ThenMagentaLocateG,H,Str2
ElseIfX=5:
ThenGreenLocateG,H,Str2
ElseIfX=6:
ThenCyanLocateG,H,Str2
ElseYellowLocateG,H,Str2
IfEnd:
IfEnd:
IfEnd:
IfEnd:
IfEnd:
IfEnd
IfEnd:
IfEnd:
IfEnd:
IfEnd:
IfEnd:
IfEnd:
IfEnd
G+C→G:
H+D→H'改变蛇头坐标,即蛇头前进一格
IfQ:
Then'判断游戏模式
'有墙模式下,判断蛇头是否到达边界,如果是则结束游戏
IfG=0OrG=22OrH=0OrH=8:
Then
Lbl5
L>MatB[Q+1,1]=>L→MatB[Q+1,1]
Locate1,1,"Thelengthofsnake"
Locate1,2,"Best:
"
Locate6,2,MatB[Q+1,1]
Locate1,3,"Last:
"
Locate6,3,L
RedLocate7,4,"GAMEOVER"
For1→ITo200:
Next
WhileNotGetkey
WhileEnd
Goto6
IfEnd
Else
'无墙模式下,如果蛇头到达了边界,则蛇头将从对边出现
IfG=0:
Then21→G
ElseG=22=>1→G:
IfEnd
IfH=0:
Then7→H
ElseH=8=>1→H:
IfEnd
IfEnd
'当前的蛇头位置被蛇身覆盖,跳转到标志5结束游戏
MatA[G,H]=>Goto5
LocateG,H,Str1'在新位置显示蛇头图案
Getkey→X:
X=>X→K
2→MatA[G,H]'修改矩阵A表示该位置已被蛇覆盖
'判断有没有吃到食物
IfG<>MOrH<>N:
Then
LocateS,T,""'如果没有吃到食物,用空格覆盖蛇尾
IfMatA[S,T]<>2:
Then'判断是否需要修改蛇尾方向
IfF:
Then0→F:
MatA[S,T]→E
Else0→E:
MatA[S,T]→F:
IfEnd
IfEnd
0→MatA[S,T]
S+E→S:
T+F→T'蛇尾前进一格
IfQ=0:
Then
'无墙模式下,蛇尾到达边界后,在另一边出现
IfS=22:
Then1→S
ElseIfS=0:
Then21→S
ElseIfT=0:
Then7→T
ElseT=8=>1→T
IfEnd:
IfEnd:
IfEnd
IfEnd
Else
'如果吃下了食物,再随机生成一个食物,保证食物不会出现在蛇上
Do
RanInt#(1,21)→M
RanInt#(1,7)→N
LpWhileMatA[M,N]
LocateM,N,Str3
L+1→L
IfEnd
Getkey→X:
X=>X→K
LpWhileNotK'如果没有检测到任何按键,则继续循环
IfK=48:
Then'如果按下了p键,调用子程序“S~PAUSE”
Prog"S~PAUSE"
G=0=>Stop
Goto4
ElseIfMatH[K,3]>=1AndMatH[K,3]<=4:
Then
'根据矩阵H的信息判断是否按下了按键B、N、!
、$或数学键2、4、6、8,再根据矩阵H的信息修改蛇头图案和方向
IfDAndMatH[K,1]:
Then
0→D
MatH[K,1]→C
C→MatA[G,H]
StrMid(Str4,MatH[K,3],1)→Str2
StrMid(Str5,MatH[K,3],1)→Str1
ElseIfCAndMatH[K,2]:
Then
0→C
MatH[K,2]→D
D→MatA[G,H]
StrMid(Str4,MatH[K,3],1)→Str2
StrMid(Str5,MatH[K,3],1)→Str1
IfEnd:
IfEnd
IfEnd:
IfEnd
Getkey→K
WhileEnd
Lbl6
Menu"Playagain?
","Yes",1,"No",7
Lbl7:
Stop
二、子程序S~LOAD
'ProgramMode:
RUN
'读取游戏存档信息
MatF→MatA
StrMid(Str7,MatF[14,8],4)→Str4
StrMid(Str7,MatF[15,8],4)→Str5
StrMid(Str4,2,1)→Str2
StrMid(Str5,2,1)→Str1
For1→ITo21
For1→JTo7
MatA[I,J]<>0=>LocateI,J,Str2
Next
Next
MatF[1,8]→G:
MatF[2,8]→H:
MatF[3,8]→S:
MatF[4,8]→T
MatF[5,8]→C:
MatF[6,8]→D:
MatF[7,8]→E:
MatF[8,8]→F
MatF[9,8]→M:
MatF[10,8]→N
MatF[11,8]→L
MatF[12,8]→R
MatF[13,8]→Q
LocateG,H,Str1
LocateM,N,Str3
Fill(0,MatF)
三、子程序S~PAUSE
'ProgramMode:
RUN
'暂停游戏时显示菜单,以及实现游戏保存功能
0→K
Menu"Pause","Continue",1,"Savegame&Exit",2
Lbl1
LocateG,H,Str2
For1→ITo600:
Next
WhileNotGetkey
WhileEnd
Return
Lbl2
MatA→MatF
G→MatF[1,8]:
H→MatF[2,8]:
S→MatF[3,8]:
T→MatF[4,8]
C→MatF[5,8]:
D→MatF[6,8]:
E→MatF[7,8]:
F→MatF[8,8]
M→MatF[9,8]:
N→MatF[10,8]
L→MatF[11,8]
R→MatF[12,8]
Q→MatF[13,8]
StrSrc(Str7,Str4)→MatF[14,8]
StrSrc(Str7,Str5)→MatF[15,8]
0→G
四、子程序S~SET
'ProgramMode:
RUN
'实现游戏设置菜单,本程序可以在主菜单上显示当前设置
Lbl0:
0→T
IfStrCmp(StrLeft(Str5,1),"H"):
Then"Head:
"+Str5→Str5:
IfEnd
IfStrCmp(StrLeft(Str4,1),"B"):
Then"Body:
"+Str4→Str4:
IfEnd
IfQ:
Then
"Wall:
Enabled"→Str1
Else"Wall:
Disabled"→Str1
IfEnd
IfR>=1AndR<=7:
Then
"Color:
"+StrMid("_Black__Blue__Red__Magenta__Green__Cyan__Yellow_",R,1)→Str6
Else"Color:
Colorful"→Str6
IfEnd
Menu"Set",Str5,1,Str4,2,Str6,A,Str1,J,"Exit",3
Lbl1:
1→T:
Lbl2
IfT:
Then"Sethead"→Str6
Else"Setbody"→Str6:
IfEnd
1→X
MenuStr6,"_#E692__#E691__#E693__#E690_",4,"_#E5EA__#E5E9__#E5EB__#E5E8_",5,"_#E69C__#E69B__#E69D__#E69A_",6,"_#E5EE__#E5ED__#E5EF__#E5EC_",7,"_#E6C4__#E6C2__#E6C3__#E6C1_",8,"_#E6CF_>_#E6CE_<",9
'部分字符无法显示,请见图8
图8
Lbl9:
X+4→X:
Lbl8:
X+4→X:
Lbl7:
X+4→X
Lbl6:
X+4→X
Lbl5:
X+4→X:
Lbl4
IfT:
Then
StrMid(Str7,X,4)→Str5:
X→MatB[6,1]
ElseStrMid(Str7,X,4)→Str4:
X→MatB[5,1]
IfEnd
Goto0
LblA
1→R
Menu"Setcolor","_Black_",B,"_Blue_",C,"_Red_",D,"_Magenta_",E,"_Green_",F,"_Cyan_",G,"_Yellow_",H,"Colorful",I
LblI:
R+1→R
LblH:
R+1→R
LblG:
R+1→R
LblF:
R+1→R
LblE:
R+1→R
LblD:
R+1→R
LblC:
R+1→R
LblB
Goto0
LblJ:
NotQ→Q:
Goto0
Lbl3
StrMid(Str4,6,4)→Str4
StrMid(Str5,6,4)→Str5
R→MatB[3,1]
Q→MatB[4,1]
[总结]
1.贪吃蛇游戏能在图形计算器上实现最重要的基础是利用了矩阵储存数据,矩阵的作用相当于内存和硬盘在计算机中的作用。
在笔者编写的其他的较复杂的图形计算器程序中,矩阵都起到了不可或缺的作用。
2.本程序使用了地图和矩阵一一对应的方法。
利用矩阵上的信息不仅可以快速的判断蛇头是否碰到了蛇身,还可以记录蛇头拐弯的方向,便于修改蛇尾前进方向。
3.通过读取矩阵里的信息可以立即判断按键是否有效,同时矩阵里提供了修改变量所需的信息。
这个方法可以减少程序中的判断,加快程序的运行速度,使代码更简短,更易编写,更易读。
4.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高中数学论文 图形计算器应用能力测试活动学生 图形计算器游戏贪吃蛇 高中数学 论文 图形 计算器 应用 能力 测试 活动 学生 游戏 贪吃