首页
会员中心
到顶部
到尾部
Java毕业设计

j2me贪吃蛇游戏

时间:2020/10/27 8:58:28  作者:  来源:  查看:0  评论:0
内容摘要:本程序的设计思路          本程序主要是设计一条在手机屏幕上不断移动的蛇,在老师指导下,我把整个手机的屏幕分成许多小方格,采用填充方格的方式绘出一条蛇的图形出来。食物也是用...

本程序的设计思路
          本程序主要是设计一条在手机屏幕上不断移动的蛇,在老师指导下,我把整个手机的屏幕分成许多小方格,采用填充方格的方式绘出一条蛇的图形出来。食物也是用一个小方块表示。
 图表 1
 图表 2
图表 3            
         为了存储蛇的位置,本人采用了一个一维数组sanke[20]记录蛇的位置,20则规定了本游戏的蛇的身长最大为20个小方块,防止蛇身无限制的增长下去。 Snake的每个数组元素是一个snakenode类型的,snakenode类型是一个自己定义的类,它有两个成员变量:x, y,在像上图1一样把手机屏幕分成许多小方块之后,将整个手机的屏幕看成一个坐标,x,y就是蛇的身体的每一块的坐标表示。 蛇在手机屏幕上的每一块小方块,都对应着数组中的一个数组元素,数组的第一个元素空者不用,这样做为了在做蛇的移动时,数组的第一个元素用来存放蛇头的位置,数组的第一个元素代表的是蛇的头部,后面的则是代表蛇的尾部,这样在做蛇的移动时,先根据用户的按键确定蛇头部的位置,其余的则可以将数组的数据逐个的向后移动一个位置,这样就得到了蛇这次的位置。
           在经过老师的讲解之后,自己决定对这个程序再做一点改进,以前的游戏,每次的食物都是一样的,蛇每次吃到食物则可以加一分,这次做这样的改进:增加一种食物类型,我给她启名叫做超级食物,它的分值给它定义成五分,但它的出现是随机的,而且每次出现的时间是有限的,以增加游戏的难度。
为了实现这个功能,我对自己的dislplayavle1类的paint()以及线程的函数都做了改进。增加了issuperfood变量,用以表明现在出现的食物是否是超级食物,而且我还增加了superfooddelay和superfoodtime。superfooddelay表示这次超级食物出现的持续时间,这里的持续时间的意思是以蛇的移动的步子来计算的,蛇每移动一次,持续时间则减去一个数值。superfoodtime是表示在吃到多少次食物之后超级食物才会出现。这里的 superfoodtime和superfooddelay都是随机产生的数,以实现超级食物是随机出现的。在线程的run()函数中也做了改动,每次在判断蛇吃到食物之后,superfoodtime减少一个数值,当superfoodtime减少到零时,表示超级食物应该出现。这时候,置issuperfood为一,表明现在出现的食物是超级食物。在线程的run()中还要做到,如果是在超级食物出现的时间里,蛇在用户的控制下移动一个步子,但是没有吃到这个超级食物,则superfooddelay的值减少一,当其为零时,表示这次超级食物的出现时间已经到了,应该出现的是普通的食物。
    在用户在superfooddelay的步子之后仍然没有吃到这个超级食物,不光这个超级食物消失,出现普通的食物,程序中还产生了下次出现的超级食物的superfoodtime和superfooddelay。
   Run()函数中,如果本次出现的是普通的食物,而且用户玩家吃到了这个食物,则superfoodtime 的值减少一,当玩家吃到了superfoodtime次普通的食物之后,超级食物出现。
        在超级食物出现的时间里,如果用户吃到了这个超级食物,则分值加五,而且程序中还产生了下次出现的超级食物的superfoodtime和superfooddelay。


图表 4     
        在增加了超级食物之后,游戏的记分也要做改变。本人用foodscore来表示吃到食物应该得到的分数。一开始foodscore为一,在超级食物出现的时间里面,foodscore为五,表示超级食物的分数为五分。当用户没有吃到超级食物,则foodscore变为一,当用户吃到了超级食物之后,foodscore也要变为一。因为在吃到超级食物之后,出现的是普通的食物。
        由于要突出表示超级食物,所以超级食物的颜色我采用了绿色,这样在paint()函数中我也做了自己的修改,在paint()函数中,将根据isasuperfood的值(isasuperfood为一,表示现在出现的食物是超级食物),分别绘制不同的食物。
          由于在本程序中当用户退出游戏时要保存游戏中的数据,在用户进入游戏的时候需要读取游戏中的数据,这里的游戏中的数据指的是:本次游戏用户的得分curscore,到目前为止游戏的最高分highscore,用户游戏中途退出时的蛇的位置snake,以及这次游戏是结束了,还是中途退出end。在这里,我使用RecordStrore类,把这些数据都存入这个记录集,每个数据作为记录集中的一个记录。RecordStrore类的具体使用方法在前面的本程序所使用的类当中已经有了说明。本人在用RecordStrore类的对象存储游戏数据时遇到了问题,花费了很长时间调试解决。这在后面的本程序中遇到的问题中有详细的解决说明。
        为了实现用户在玩游戏时,自己推出时,并不是马上退出该游戏,而是给用户出现一个列表,让用户自己选择是继续玩游戏,还是查看一下现在的分数或者查看一下游戏的最高分数。为了实现这个功能,我在MIDLET 的quit()函数中做了自己的改变。增加了isquit变量,在用户进入游戏之后isquit为零,而当用户在isquit为零(即在游戏中)退出时,quit()函数依据isquit为零,并不做真正的退出,而是为用户提供一个列表供选择,并置isquit为一,这样用户再次选择退出时,isquit为一,表明这次是真正的退出了。
        为了实现不能够出现蛇回头的情况,我设置了两个标志oldflag和newflag,oldflag用以记录上次用户的按键,newflag用以记录这次用户的按键,如果上次用户按的是上,而这次按下,则用户的按键信息作废,仍然认为用户的按键是按了上,相同的处理用在上次按了右,这次按左等等,总之,如果紧接着的两次按键相反,认为第二次是同上次一样的。


说明:为了防止网络上可以查找到本毕业设计的论文及实际界面信息保护购买者的利益1、本

计算机毕业设计

样本提供的只是有关此设计论文和程序的简单介绍,要想取得完整的作品,需要你与本站联系。2、本样本只是从论文中摘录一部分,在内容、字体、字号排版上与实际作品有一定的差别,请以本站实际提供的作品为准。需要了解本计算机毕业设计的具体详细信息请联系本站客服。



相关评论
广告联系QQ:45157718 点击这里给我发消息 电话:13516821613 杭州余杭东港路118号雷恩国际科技创新园  网站技术支持:黄菊华互联网工作室 浙ICP备06056032号