高中数学论文 图形计算器应用能力测试活动学生 图形计算器游戏贪吃蛇.docx

上传人:b****5 文档编号:5014843 上传时间:2022-12-12 格式:DOCX 页数:13 大小:261.51KB
下载 相关 举报
高中数学论文 图形计算器应用能力测试活动学生 图形计算器游戏贪吃蛇.docx_第1页
第1页 / 共13页
高中数学论文 图形计算器应用能力测试活动学生 图形计算器游戏贪吃蛇.docx_第2页
第2页 / 共13页
高中数学论文 图形计算器应用能力测试活动学生 图形计算器游戏贪吃蛇.docx_第3页
第3页 / 共13页
高中数学论文 图形计算器应用能力测试活动学生 图形计算器游戏贪吃蛇.docx_第4页
第4页 / 共13页
高中数学论文 图形计算器应用能力测试活动学生 图形计算器游戏贪吃蛇.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

高中数学论文 图形计算器应用能力测试活动学生 图形计算器游戏贪吃蛇.docx

《高中数学论文 图形计算器应用能力测试活动学生 图形计算器游戏贪吃蛇.docx》由会员分享,可在线阅读,更多相关《高中数学论文 图形计算器应用能力测试活动学生 图形计算器游戏贪吃蛇.docx(13页珍藏版)》请在冰豆网上搜索。

高中数学论文 图形计算器应用能力测试活动学生 图形计算器游戏贪吃蛇.docx

高中数学论文图形计算器应用能力测试活动学生图形计算器游戏贪吃蛇

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.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1