首页

毕业论文

首页 毕业论文 问题

java贪吃蛇毕业论文摘要

发布时间:

java贪吃蛇毕业论文摘要

Java贪吃蛇技术选型一般需要考虑以下几点:

熊猫红绿宝石全生命,蓝宝石六个冥想加三个护甲的。。。感觉还是生命好用些,这游戏护甲意义感觉不是特别大毕竟三件穿甲减甲装。。

我不懂JAVA,但是我可以告诉你我用C++写过的贪吃蛇的思想;我定义一个2维数组里面存了一些点,即屏幕的坐标点,比如你要绘制一个正方形,你可以保存它的两个顶点坐标到数组里面,然后把你的窗口的坐标都保存起来,再定义一个2维数组,先全0,为1表示有方块,移动的时候就对这个数组里的数据进行操作,然后绘制到桌面上判断第二个数组的数值,是1的话到第一个数组相同的索引里面取出坐标然后绘制,这样可以少了很多复杂的问题,至于如何判断你得自己动动脑子了!多思考才能收获。

用一个数组将蛇头的行径记录下来,然后第二段的下一个方格设置为蛇头走过的方格,这样子蛇走过的路径都是前一段走过的,最后将跟着蛇头走了,比如蛇身的路径 for(int i=snakeLength-1;i>0;i--){ rows[i]=rows[i-1];//依次将蛇前面一段走过行的路段赋值给蛇的下一段 cols[i]=cols[i-1];//依次将蛇前面一段走过列的路段赋值给蛇的下一段 } for(int i=1;i

毕业论文贪吃蛇摘要

蛇引诱夏娃吃了苹果之后,就被贬为毒虫,阴险的象征。 而蛇吃东西是整只动物吞进去的,大概在文艺复兴的时候(好象是那个时候但是不确定)就有人发明的一种游戏,是现在贪吃蛇的前身。后来慢慢的发展就变成了今天的贪吃蛇了。 蛇引诱夏娃吃了苹果之后,就被贬为毒虫,阴险的象征。 而蛇吃东西是整只动物吞进去的,大概在文艺复兴的时候(好象是那个时候但是不确定)就有人发明的一种游戏,是现在贪吃蛇的前身。后来慢慢的发展就变成了今天的贪吃蛇 贪吃蛇游戏背景

蛇引诱夏娃吃了苹果之后,就被贬为毒虫,阴险的象征。 而蛇吃东西是整只动物吞进去的,大概在文艺复兴的时候(好象是那个时候但是不确定)就有人发明的一种游戏,是现在贪吃蛇的前身。后来慢慢的发展就变成了今天的贪吃蛇了。

贪吃蛇游戏背景

基于MD5的加盐消息摘要Java实现、Java、3D虚拟现实技术在水下发射模拟中的应用。1、基于MD5的加盐消息摘要Java实现作者赵一凡,卞良,丛昕,对Java实现问题做出了具体分析,可作为js贪吃蛇参考文献。2、Java、3D虚拟现实技术在水下发射模拟中的应用作者洪华军,许统华,吴建波,针对Java、3D虚拟现实做出了剖析,可作为js贪吃蛇参考文献。

基于贪吃蛇java毕业论文

学生课程设计(论文)题 目: 贪吃蛇游戏程序设计指导学生姓名: 学 号:200910801001所在院(系): 计算机学院专 业: 计算机科学与技术班 级: 2009级一班指导教师: 何春燕 职称: 讲 师2010年06月 18日目录摘要…………………………………………………………61、设计要求………………………………………………….72、所用仪器设备…………………………………………….73、具体设计过程…………………………………………….、程序功能……………………………………………设计思想……………………………………………….设计的具体实现…………………………………… 总体流程图………………………………………….、程序代码编写及注释………………………………..调试问题及解决方法…………………………………调试结果…………………………………………….设计心得体会………………………………………………、参考文献………………………………………………..26摘 要编写C语言程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时计10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。作为一个完整的程序,尤其是一个完整的游戏,必须考虑人机交流与用户体验。游戏的界面不能太丑,更不能连个简单的界面都没有。游戏应该有个比较漂亮的界面,在有必要硬件支持和软件的支持下,游戏开发者必须最大限度的使游戏美观。游戏的美观是一方面,游戏的内在素质是另一方面。一个游戏的优劣,最终由玩家决定。在游戏与玩家见面之前,游戏开发者要设计一种让玩家投入的游戏模式,并且在一定的游戏规则下进行。关键词 贪吃蛇 流程图 c语言 源程序 turbo C贪吃蛇游戏程序设计1、设计要求通过游戏程序设计,提高编程兴趣与编程思路,巩固C语言中所学的知识,合理的运用资料,实现理论与实际相结合。(1).收集资料,分析课题,分解问题,形成总体设计思路;(2).深入分析各个小问题,列出大纲,编写各部分程序模块;(3).对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍;(4).上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行;(5).完成课程设计报告,并进行答辩C语言是一种易学易懂的通用程序设计语言,由于它具有功能性强,运用简洁,灵活兼有高级语言与低级语言的优点,以及“目标程序效率高”可移植性和能在各种系统上普遍实现等特点使它成为当今世界上的主流程序设计语言之一,同时被选作目前全世界广泛应用,同时也是大学生必修的科目。作为一位当代的大学生更要很好的利用它,学好一门设计语言,实现学以至用。制作C程序报告,可以巩固和加深自己对C语言课程的基本知识的理解和掌握,并且能够掌握C语言编程和程序调试的基本技能。通过游戏程序的设计训练可以提高自己的基本技能,更好地掌握字符串的表示方法和字符串函数的功能、Tc图形操作的基本知识、键盘上特殊键的获取以及图形方式下光标的显示,提高自己编程兴趣与编程水平,学会如何正确的书写程序设计说明文档,提高运用C语言解决实际问题的能力,巩固C语言语法规则的理解和掌握,学会通过源程序写出流程图,提高自学以及查阅资料的能力。2、所用仪器设备1、能正常工作的计算机一台; 2、WindowsXP;3、TC程序; 4、Microsoft Word2003;3、具体设计过程、程序功能贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体叉蛇头撞倒自己身体游戏结束。 设计思想程序关键在于表示蛇的图形及蛇的移动。用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇。.设计的具体实现(1)函数定义函数定义是对各个基础函数的定义,并且设置需要运用的信息,便于调用#define N 200#include <>/*图形头文件*/#include <>/*包含rand等函数*/#include <>/*包含bios函数*/#define LEFT 0x4b00/*光标左键值*/#define RIGHT 0x4d00/*光标右键值*/#define DOWN 0x5000/*光标下键值*/#define UP 0x4800/*光标上键值*/#define ESC 0x011b/*ESC的ASCII码*/int i,key;/*图形坐标变量及按键变量*/int score=0;/*得分*/int gamespeed=10000;/*游戏速度自己调整*/struct Food{int x;/*食物的横坐标*/int y;/*食物的纵坐标*/int yes;/*判断是否要出现食物的变量*/}food;/*食物的结构体*/struct Snake{int x[];/*蛇的横坐标*/int y[];/*蛇的纵坐标*/int node;/*蛇的节数*/int direction;/*蛇移动方向*/int life;/* 蛇的生命,0活着,1死亡*/}snake;void Init(void);/*图形驱动*/void Close(void);/*图形结束*/void DrawK(void);/*画界面函数*/void GameOver(void);/*结束游戏*/void GamePlay(void);/*玩游戏具体过程*/void PrScore(void);/*输出成绩*/void main(void)/*主函数*/(2)主函数main( )主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原型说明,然后初始化图形系统,调用函数DrawK()画出开始画面,调用函数GamePlay(),即玩游戏的具体过程,游戏结束后调用Close()关闭图形系统,结束程序void main(void)/*主函数*/{Init();/*图形驱动*/DrawK();/*开始画面*/GamePlay();/*玩游戏具体过程*/Close();/*图形结束*/}void Init(void)/*图形驱动*/{int gd=DETECT,gm;initgraph(&gd,&gm,"c:\\tc"); /*第一个参数表示图形适配器的类型,第二个为在该类型下图形的显示模式,第三个参数指定驱动程序所在目录。*/cleardevice();}(3) 画界面函数DrawK( )主界面是一个封闭的围墙,用两个循环语句分别在水平和垂直方向输出连续的宽度和高度均的矩形方块,表示围墙,为了醒目,设置为白色。void DrawK(void)/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/{setbkcolor(0);/*设置当前背景颜色*/setcolor(YELLOW);/*设置当前画线颜色*/setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/for(i=50;i<=600;i+=10)/*画围墙*/{rectangle(i,40,i+10,49); /*上边*/rectangle(i,451,i+10,460);/*下边*/}for(i=40;i<=450;i+=10){rectangle(50,i,59,i+10); /*左边*/rectangle(601,i,610,i+10);/*右边*/}}(4)游戏具体过程函数GamePlay( )这是游戏的主要组成部分,他采用将前一节的坐标赋给后一节,用背景颜色将最后节去除,当蛇头的坐标与食物的坐标相等时,表示食物被吃掉了。void GamePlay(void)/*玩游戏具体过程*/{randomize();/*随机数发生器*/;/*1表示需要出现新食物,0表示已经存在食物*/;/*活着*/;/*方向往右*/[0]=100;[0]=100;/*蛇头*/[1]=110;[1]=100;/*蛇第二节*/;/*节数*/PrScore();/*输出得分*/while(1)/*可以重复玩游戏,压ESC键结束*/{while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/{if()/*需要出现新食物*/{()%400+60;()%350+60;while(!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/;while(!=0);;/*画面上有食物了*/}if()/*画面上有食物了就要显示*/{setcolor(GREEN);/*食物的颜色*/rectangle();}for(i=;i>0;i--)/*蛇的每个环节往前移动,贪吃蛇的关键算法*/{[i]=[i-1];[i]=[i-1];}switch() /*定义1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/{case 1:[0]+=10;break;case 2: [0]-=10;break;case 3: [0]-=10;break;case 4: [0]+=10;break;}for(i=3;i<;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/{if([i]==[0]&&[i]==[0]){GameOver();/*显示失败*/;break;}}if([0]<55||[0]>595||[0]<55||[0]>455)/*蛇是否撞到墙壁*/{GameOver();/*本次游戏结束*/; /*蛇死*/}if()/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/break;if([0]==[0]==)/*吃到食物以后*/{setcolor(0);/*把画面上的食物东西去掉*/rectangle();[]=-20;[]=-20; /*-20表示尾巴长一节*//*新的一节先放在看不见的位置,下次循环就取前一节的位置*/;/*蛇的身体长一节*/;/*画面上需要出现新的食物*/score+=10;PrScore();/*输出新得分*/}setcolor(4);for(i=0;i<;i++)/*画出蛇*/rectangle([i],[i],[i]+10,[i]-10);delay(gamespeed);setcolor(0);/*用黑色去除蛇的的最后一节*/rectangle([],[],[]+10,[]-10);} /*endwhile(!kbhit)*/if()/*如果蛇死就跳出循环*/break;key=bioskey(0);/*接收按键*/if(key==ESC)/*按ESC键退出*/break;elseif(key==UP&&!=4)/*判断是否往相反的方向移动*/;elseif(key==RIGHT&&!=2);elseif(key==LEFT&&!=1);elseif(key==DOWN&&!=3);}/*endwhile(1)*/}(5)游戏结束函数GameOver( )游戏结束,清除屏幕,输出分数,显示游戏结束信息。void GameOver(void)/*游戏结束*/{cleardevice();PrScore();setcolor(RED);settextstyle(0,0,4);outtextxy(200,200,"guojian");getch();}void PrScore(void)/*输出成绩*/{char str[10];setfillstyle(SOLID_FILL, WHITE);bar(50,15,200,35);setcolor(6);settextstyle(0,0,2);sprintf(str,"score:%d",score);outtextxy(55,20,str);}void Close(void)/*图形结束*/{getch();closegraph();} 总体流程图}、程序代码编写及注释#define N 200#include <>#include <>#include <>#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011bint i,key;int score=0;/*得分*/int gamespeed=50000;/*游戏速度自己调整*/struct Food{int x;/*食物的横坐标*/int y;/*食物的纵坐标*/int yes;/*判断是否要出现食物的变量*/}food;/*食物的结构体*/struct Snake{int x[N];int y[N];int node;/*蛇的节数*/int direction;/*蛇移动方向*/int life;/* 蛇的生命,0活着,1死亡*/}snake;void Init(void);/*图形驱动*/void Close(void);/*图形结束*/void DrawK(void);/*开始画面*/void GameOver(void);/*结束游戏*/void GamePlay(void);/*玩游戏具体过程*/void PrScore(void);/*输出成绩*//*主函数*/void main(void){Init();/*图形驱动*/DrawK();/*开始画面*/GamePlay();/*玩游戏具体过程*/Close();/*图形结束*/}/*图形驱动*/void Init(void){int gd=DETECT,gm;initgraph(&gd,&gm,"c:\\tc");cleardevice();}/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/void DrawK(void){/*setbkcolor(LIGHTGREEN);*/setcolor(11);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/for(i=50;i<=600;i+=10)/*画围墙*/{rectangle(i,40,i+10,49); /*上边*/rectangle(i,451,i+10,460);/*下边*/}for(i=40;i<=450;i+=10){rectangle(50,i,59,i+10); /*左边*/rectangle(601,i,610,i+10);/*右边*/}}/*玩游戏具体过程*/void GamePlay(void){randomize();/*随机数发生器*/;/*1表示需要出现新食物,0表示已经存在食物*/;/*活着*/;/*方向往右*/[0]=100;[0]=100;/*蛇头*/[1]=110;[1]=100;;/*节数*/PrScore();/*输出得分*/while(1)/*可以重复玩游戏,压ESC键结束*/{while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/{if()/*需要出现新食物*/{()%400+60;()%350+60;while(!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/;while(!=0);;/*画面上有食物了*/}if()/*画面上有食物了就要显示*/{setcolor(GREEN);rectangle();}for(i=;i>0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/{[i]=[i-1];[i]=[i-1];}/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/switch(){case 1:[0]+=10;break;case 2: [0]-=10;break;case 3: [0]-=10;break;case 4: [0]+=10;break;}for(i=3;i<;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/{if([i]==[0]&&[i]==[0]){GameOver();/*显示失败*/;break;}}if([0]<55||[0]>595||[0]<55||[0]>455)/*蛇是否撞到墙壁*/{GameOver();/*本次游戏结束*/; /*蛇死*/}if()/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/break;if([0]==[0]==)/*吃到食物以后*/{setcolor(0);/*把画面上的食物东西去掉*/rectangle();[]=-20;[]=-20;/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/;/*蛇的身体长一节*/;/*画面上需要出现新的食物*/score+=10;PrScore();/*输出新得分*/}setcolor(4);/*画出蛇*/for(i=0;i<;i++)rectangle([i],[i],[i]+10,[i]-10);delay(gamespeed);setcolor(0);/*用黑色去除蛇的的最后一节*/rectangle([],[],[]+10,[]-10);} /*endwhile(!kbhit)*/if()/*如果蛇死就跳出循环*/break;key=bioskey(0);/*接收按键*/if(key==ESC)/*按ESC键退出*/break;elseif(key==UP&&!=4)/*判断是否往相反的方向移动*/;elseif(key==RIGHT&&!=2);elseif(key==LEFT&&!=1);elseif(key==DOWN&&!=3);}/*endwhile(1)*/}/*游戏结束*/调试问题及解决方法将已改好的程序复制到Turbo C时,由于软件的内容过多会出现右移,以致大部分的内容无法复制到Turbo C的界面上,最后导致软件无法运行。解决方法:在改程序时应该把格式设置好,注意左对齐,同时一行的语句尽量的短,最好是一个语句占一行。在将程序输入到TC中,对源程序进行编译、运行,发现程序存在的多处错误, 如下图所示:可以按照程序运行的错误提示对原程序进行修改,在调试过程中有时也会遇到不懂的问题,我去图书馆或上网查阅一些资料或者是向老师请教也解决了对源程序一一修改直到运行成功。调试结果1. 下图为程序调试编译结果:2下图为程序调试运行结果(即贪吃蛇游戏界面)4设计心得体会经过短短两星期的计算机软件技术实习,让我对C程序有了一个更深的了解,以前总认为C语言很枯燥,认为那些我们所设计的程序没有什么用处,但现在通过设计贪吃蛇游戏这个程序使我懂得了如何将所学的知识运用于生活当中。虽然在刚开始设计程序时不太明白如何去设计这程序,但当我看完《C语言课程设计案例精编》并用C语言做出这个贪吃蛇程序后,让我深深感受到C程序的神奇。在设计这个程序中我主要学会了如何运用以下有关C语言的知识1) 函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序十分重要,在修改这个程序的过程中也能很快找到程序各模块的作用,大大增加了程序的可读性。2) 分析函数先从main()函数入手。Main()函数是C源程序编译时的开始,从main()函数开始读函数可将其他函数的功能理解得更透彻。3) 在做程序的时候先列框架,将这个程序所要达到的目的(功能)分析出来,选择正确的数据结构然后在将程序模块化,按照模块编写函数更加简单合理。4) 我还了解了很多的库函数的作用,如字符串函数中有很多对字符串进行处理的函数,起功能我都有所了解。同时我也获得了许多宝贵的经验:1) 在设计程序之前,务必要对你所设计的题目和内容有一个系统的了解,知道所设计的题目和内容包含那些资源。2) 设计程序采用什么编程语言并不是非常重要,关键要有一个清晰的思路和一个完整的软件流程图,因而,要先把设计原理与思路搞清楚,再把流程图画出来,这样设计起来就简单多了。3) 在设计程序时,不能妄想一次就将整个程序设计好,“反复修改,不断改进”是程序设计的必经之路,发现错误也是取得成绩的一种。4) 要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便。5、参考文献1.郭翠英,《C语言课程设计案例精编》,中国水利水电出版社,徐金梧,杨德斌等,《TURBO C实用大全》,机械工程出版社,李丽娟 《C语言程序设计教程》 人民邮电出版社4林华聪 《C语言程序设计思想与实践》 冶金工业出版社5张继温 《C语言程序设计教程》 高等教育出版社6 潘云鹤,董金祥等著.计算机图形学——原理、方法及应用.北京:高等教育出版社, 孙家广等,计算机图形学(第三版),清华大学出版社,20048 陈元琰编著.计算机图形学实用技术.北京:科学出版社,20009和青芳著.计算机图形学原理及算法教程.北京:清华大学出版社10 陆润民.C语言绘图教程.北京:清华大学出版社,1996

按照你的思路 可以让食物的坐标随机产生 然后判断坐标中的数值是1还是0 是1 不就是和蛇的身体重复吗 然后再重新产生食物 循环判断 当是0时就是不在蛇的身体上时再显示食物其实你把地图用二维数组表示很占资源的 你直接用一个数组来记录蛇的身体坐标不就能省下很多吗 我的是这样用的 int snake[maxLength]={头的X坐标,头的Y坐标,第二个节点的X坐标,第二个节点的Y坐标,...}用一维数组而不是二维数组是因为一维数组的访问效率要比二维数组高。 蛇移动的时候只需要改变头的坐标,然后其他的整体后移就行了。在判定是否撞到自己或者墙壁时 只需要判断下一步时头的坐标是否等于身上其他点的坐标(从第四个点开始,因为蛇头不会撞到第二和第三个节点)和障碍墙壁的坐标

设计游戏,首先就要设计界面。首先看一下我设计的一个界面。界面分为左边的游戏区与右边的控制区。游戏区包含“得分信息”和贪吃蛇的游戏区,右边控制区有“开始”“暂停”“停止”按钮,等级选择单选框以及游戏排行榜。所以我们需要定义swing组件,并在类初始化时初始化这些组件,添加组件。因为后面设计游戏的时候,我们要确切知道游戏区的大小,所以这里设置游戏区固定大小值。本来想用布局来更好的管理,但作者对布局也掌握不够,所以就先设置固定大小吧。定义我们的游戏。贪吃蛇游戏其实就是包含很多细小网格,然后蛇在网格中移动。蛇由一连串的网格组成,为了视觉效果,蛇身用蓝色标记,食物用红色标记,背景白色。如第一张图片所示。所以,我们需要定义二维数组,保存网格信息,保存蛇身和食物的位置信息等。初始化时,还需要添加键盘事件控制上下左右移动。食物的位置信息是二维的,所以我简单定义了一个类用来保存二维信息。接着就是实现游戏的功能了。开始,暂停,停止按钮添加事件控制游戏开始。等级按钮定义游戏难度等。开始游戏后,我们定义一个定时器。蛇身按照指定的方向移动,方向是通过初始化时添加的键盘事件,键盘的上下左右按钮来控制。蛇身是连续的位置信息,保存到队列中,所以蛇身的移动就是队首增加一个位置,队尾减少位置,然后重新绘画游戏区就可以了。在蛇身移动时进一步做吃掉食物、撞墙、撞到自己的处理。这是游戏的主要逻辑。最后,游戏结束我们弹出一个对话框提示是否保存游戏得分。我们制作了排行榜信息,只保留前10名的游戏得分。首先定义了一个实现Comparable接口的游戏得分类,按得分高,时间最早来排序。游戏结束时保存得分信息,看是否进入到排行榜中。而之前在初始化排行榜组件时就会加载游戏排行榜信息。通过保存和读取排行榜信息,我们也熟悉一下文件读取操作,还有集合、排序算法的功能。

java贪吃蛇游戏毕业论文

能。1、贪吃蛇简单些,而且可扩展的不少,方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。2、在这个游戏设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用c语言的图形库函数。3、在设计开发过程中,要对c语言的图形库函数有一定的了解,利用图形库函数实现一些功能。

用MVC方式实现的贪吃蛇游戏,共有4个类。运行GreedSnake运行即可。主要是观察者模式的使用,我已经添加了很多注释了。1、/* * 程序名称:贪食蛇 * 原作者:BigF * 修改者:algo * 说明:我以前也用C写过这个程序,现在看到BigF用Java写的这个,发现虽然作者自称是Java的初学者, * 但是明显编写程序的素养不错,程序结构写得很清晰,有些细微得地方也写得很简洁,一时兴起之 * 下,我认真解读了这个程序,发现数据和表现分开得很好,而我近日正在学习MVC设计模式, * 因此尝试把程序得结构改了一下,用MVC模式来实现,对源程序得改动不多。 * 我同时也为程序增加了一些自己理解得注释,希望对大家阅读有帮助。 */package mvcTest;/** * @author WangYu * @version * Description: * * Create on :Date :2005-6-13 Time:15:57:16 * LastModified: * History: */public class GreedSnake { public static void main(String[] args) { SnakeModel model = new SnakeModel(20,30); SnakeControl control = new SnakeControl(model); SnakeView view = new SnakeView(model,control); //添加一个观察者,让view成为model的观察者 (view); (new Thread(model)).start(); }} -------------------------------------------------------------2、package mvcTest;// ;import ;/** * MVC中的Controler,负责接收用户的操作,并把用户操作通知Model */public class SnakeControl implements KeyListener{ SnakeModel model; public SnakeControl(SnakeModel model){ = model; } public void keyPressed(KeyEvent e) { int keyCode = (); if (){ // 运行状态下,处理的按键 switch (keyCode) { case : (); break; case : (); break; case : (); break; case : (); break; case : case : (); break; case : case : (); break; case : case : (); break; default: } } // 任何情况下处理的按键,按键导致重新启动游戏 if (keyCode == || keyCode == || keyCode == ) { (); } } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { }}-------------------------------------------------------------3、/* * */package mvcTest;/** * 游戏的Model类,负责所有游戏相关数据及运行 * @author WangYu * @version * Description: * * Create on :Date :2005-6-13 Time:15:58:33 * LastModified: * History: */// .*;import ;import ;import ;import ;/** * 游戏的Model类,负责所有游戏相关数据及运行 */class SnakeModel extends Observable implements Runnable { boolean[][] matrix; // 指示位置上有没蛇体或食物 LinkedList nodeArray = new LinkedList(); // 蛇体 Node food; int maxX; int maxY; int direction = 2; // 蛇运行的方向 boolean running = false; // 运行状态 int timeInterval = 200; // 时间间隔,毫秒 double speedChangeRate = ; // 每次得速度变化率 boolean paused = false; // 暂停标志 int score = 0; // 得分 int countMove = 0; // 吃到食物前移动的次数 // UP and DOWN should be even // RIGHT and LEFT should be odd public static final int UP = 2; public static final int DOWN = 4; public static final int LEFT = 1; public static final int RIGHT = 3; public SnakeModel( int maxX, int maxY) { = maxX; = maxY; reset(); } public void reset(){ direction = ; // 蛇运行的方向 timeInterval = 200; // 时间间隔,毫秒 paused = false; // 暂停标志 score = 0; // 得分 countMove = 0; // 吃到食物前移动的次数 // initial matirx, 全部清0 matrix = new boolean[maxX][]; for (int i = 0; i < maxX; ++i) { matrix[i] = new boolean[maxY]; (matrix[i], false); } // initial the snake // 初始化蛇体,如果横向位置超过20个,长度为10,否则为横向位置的一半 int initArrayLength = maxX > 20 ? 10 : maxX / 2; (); for (int i = 0; i < initArrayLength; ++i) { int x = maxX / 2 + i;//maxX被初始化为20 int y = maxY / 2; //maxY被初始化为30 //nodeArray[x,y]: [10,15]-[11,15]-[12,15]~~[20,15] //默认的运行方向向上,所以游戏一开始nodeArray就变为: // [10,14]-[10,15]-[11,15]-[12,15]~~[19,15] (new Node(x, y)); matrix[x][y] = true; } // 创建食物 food = createFood(); matrix[][] = true; } public void changeDirection(int newDirection) { // 改变的方向不能与原来方向同向或反向 if (direction % 2 != newDirection % 2) { direction = newDirection; } } /** * 运行一次 * @return */ public boolean moveOn() { Node n = (Node) (); int x = ; int y = ; // 根据方向增减坐标值 switch (direction) { case UP: y--; break; case DOWN: y++; break; case LEFT: x--; break; case RIGHT: x++; break; } // 如果新坐标落在有效范围内,则进行处理 if ((0 <= x && x < maxX) && (0 <= y && y < maxY)) { if (matrix[x][y]) { // 如果新坐标的点上有东西(蛇体或者食物) if (x == && y == ) { // 吃到食物,成功 (food); // 从蛇头赠长 // 分数规则,与移动改变方向的次数和速度两个元素有关 int scoreGet = (10000 - 200 * countMove) / timeInterval; score += scoreGet > 0 ? scoreGet : 10; countMove = 0; food = createFood(); // 创建新的食物 matrix[][] = true; // 设置食物所在位置 return true; } else // 吃到蛇体自身,失败 return false; } else { // 如果新坐标的点上没有东西(蛇体),移动蛇体 (new Node(x, y)); matrix[x][y] = true; n = (Node) (); matrix[][] = false; countMove++; return true; } } return false; // 触到边线,失败 } public void run() { running = true; while (running) { try { (timeInterval); } catch (Exception e) { break; } if (!paused) { if (moveOn()) { setChanged(); // Model通知View数据已经更新 notifyObservers(); } else { (null, "you failed", "Game Over", ); break; } } } running = false; } private Node createFood() { int x = 0; int y = 0; // 随机获取一个有效区域内的与蛇体和食物不重叠的位置 do { Random r = new Random(); x = (maxX); y = (maxY); } while (matrix[x][y]); return new Node(x, y); } public void speedUp() { timeInterval *= speedChangeRate; } public void speedDown() { timeInterval /= speedChangeRate; } public void changePauseState() { paused = !paused; } public String toString() { String result = ""; for (int i = 0; i < (); ++i) { Node n = (Node) (i); result += "[" + + "," + + "]"; } return result; }}class Node { int x; int y; Node(int x, int y) { = x; = y; }} ------------------------------------------------------------4、package mvcTest;// .*;import .*;import ;import ;import ;import ;/** * MVC模式中得Viewer,只负责对数据的显示,而不用理会游戏的控制逻辑 */public class SnakeView implements Observer { SnakeControl control = null; SnakeModel model = null; JFrame mainFrame; Canvas paintCanvas; JLabel labelScore; public static final int canvasWidth = 200; public static final int canvasHeight = 300; public static final int nodeWidth = 10; public static final int nodeHeight = 10; public SnakeView(SnakeModel model, SnakeControl control) { = model; = control; mainFrame = new JFrame("GreedSnake"); Container cp = (); // 创建顶部的分数显示 labelScore = new JLabel("Score:"); (labelScore, ); // 创建中间的游戏显示区域 paintCanvas = new Canvas(); (canvasWidth + 1, canvasHeight + 1); (control); (paintCanvas, ); // 创建底下的帮助栏 JPanel panelButtom = new JPanel(); (new BorderLayout()); JLabel labelHelp; labelHelp = new JLabel("PageUp, PageDown for speed;", ); (labelHelp, ); labelHelp = new JLabel("ENTER or R or S for start;", ); (labelHelp, ); labelHelp = new JLabel("SPACE or P for pause", ); (labelHelp, ); (panelButtom, ); (control); (); (false); (); (true); } void repaint() { Graphics g = (); //draw background (); (0, 0, canvasWidth, canvasHeight); // draw the snake (); LinkedList na = ; Iterator it = (); while (()) { Node n = (Node) (); drawNode(g, n); } // draw the food (); Node n = ; drawNode(g, n); updateScore(); } private void drawNode(Graphics g, Node n) { ( * nodeWidth, * nodeHeight, nodeWidth - 1, nodeHeight - 1); } public void updateScore() { String s = "Score: " + ; (s); } public void update(Observable o, Object arg) { repaint(); }}-------------------------------------------------------------

贪吃蛇是一款经典的电子游戏,它通常用于基础编程教学。在Java中,您可以使用Java 2D图形编程技术来创建和渲染游戏画面。您还可以使用Java的键盘输入处理技术来捕获玩家的按键操作。此外,您可以使用Java的多线程技术来控制游戏的速度和动态。

java贪吃蛇代码步骤毕业论文

这种小游戏,小程序你可以到蛙课网上去看看,我一直在这个网站上学习。

给邮箱我发给你,几百行。

主要用了这个类:import .*;import .*;@SuppressWarnings("serial")public class MainClass extends JFrame {ControlSnake control;Toolkit kit;Dimension dimen;public static void main(String[] args) {new MainClass("my snake");}public MainClass(String s) {super(s);control = new ControlSnake();(true);kit = ();dimen = ();add(control);setLayout(new BorderLayout());setLocation( / 3, / 3);// (FWIDTH, FHEIGHT);setDefaultCloseOperation();setResizable(false);setVisible(true);}public static final int FWIDTH = 315;public static final int FHEIGHT = 380;}import .*;import .*;import .*;import .*;import ;import ;@SuppressWarnings("serial")public class ControlSnake extends JPanel implements ActionListener {Random rand;ArrayList list, listBody;String str, str1;static boolean key;int x, y, dx, dy, fx, fy, flag;int snakeBody;int speed;public ControlSnake() {snakeBody = 1;str = "上下左右方向键控制 P键暂停...";str1 = "现在的长度为:" + snakeBody;key = true;flag = 1;speed = 700;rand = new Random();list = new ArrayList();listBody = new ArrayList();x = 5;y = 5;(new Point(x, y));((0));dx = 10;dy = 0;fx = (30) * 10 + 5;// 2fy = (30) * 10 + 5;// 2setBackground();setSize(new Dimension(318, 380));final Timer time = new Timer(speed, this);();addKeyListener(new KeyAdapter() {public void keyPressed(KeyEvent e) {if (() == 37) {dx = -10;dy = 0;} else if (() == 38) {dx = 0;dy = -10;} else if (() == 39) {dx = 10;dy = 0;} else if (() == 40) {dx = 0;dy = 10;} else if (() == 80) {if (flag % 2 == 1) {();}if (flag % 2 == 0) {();}flag++;}}});}public void paint(Graphics g) {();(0, 0, 400, 400);();(3, 3, 305, 3);(3, 3, 3, 305);(305, 3, 305, 305);(3, 305, 305, 305);();for (int i = 0; i < (); i++) {((i).x, (i).y, 9, 9);}(x, y, 9, 9);();(fx, fy, 9, 9);();str1 = "现在的长度为:" + snakeBody;(str, 10, 320);(str1, 10, 335);}public void actionPerformed(ActionEvent e) {x += dx;y += dy;if (makeOut() == false) {(null, "重新开始......");speed = 700;snakeBody = 1;x = 5;y = 5;();(new Point(x, y));();((0));dx = 10;dy = 0;}addPoint(x, y);if (x == fx && y == fy) {speed = (int) (speed * );//速度增加参数if (speed < 200) {speed = 100;}fx = (30) * 10 + 5;// 2fy = (30) * 10 + 5;// 2snakeBody++;// 2} // 2repaint();}public void addPoint(int xx, int yy) {// 动态的记录最新发生的50步以内的移动过的坐标// 并画出最新的snakeBodyif (() < 100) {//蛇身长度最长为(new Point(xx, yy));} else {(0);(new Point(xx, yy));}if (snakeBody == 1) {(0);(0, (() - 1));} else {();if (() < snakeBody) {for (int i = () - 1; i > 0; i--) {((i));}} else {for (int i = () - 1; () < snakeBody; i--) {((i));}}}}public boolean makeOut() {if ((x < 3 || y < 3) || (x > 305 || y > 305)) {return false;}for (int i = 0; i < () - 1; i++) {for (int j = i + 1; j < (); j++) {if ((i).equals((j))) {return false;}}}return true;}}

代码太多,邮箱给我,发给你。

相关百科

热门百科

首页
发表服务