java课程设计贪吃蛇.docx
《java课程设计贪吃蛇.docx》由会员分享,可在线阅读,更多相关《java课程设计贪吃蛇.docx(17页珍藏版)》请在冰点文库上搜索。
java课程设计贪吃蛇
华北科技学院
课程设计说明书
面向对象程序设计(Java)
班级:
B091(14)姓名:
xxxx
设计题目:
贪吃蛇
设计时间:
2012-01-09至2012-01-13
指导教师:
xxxx
评语:
_________________________________
_________________________________________
_________________________________________
_________________________________________
_________________________________________
评阅成绩:
___________评阅教师:
_____________
课程设计说明书
1、课程设计的目的
首先Java是一种易学易懂的通用程序设计语言,由于它具有功能性强,运用简洁,灵活兼有高级语言与低级语言的优点,以及“目标程序效率高”可移植性和能在各种系统上普遍实现等特点使它成为当今世界上的主流程序设计语言之一,同时被选作目前全世界广泛应用,同时也是大学期间好多专业的必修课程。
作为当代的大学生要很好的利用它,学好一门设计语言,实现学以至用。
再者《JAVA程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。
实践教学环节是必不可少的一个重要环节。
本课程的程序设计专题实际是我们学习完java课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使我较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为我综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
2、功能模块简介和系统结构图
整体功能
一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,当一只按着某一键的时候就会一值加速。
蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记100分,接着又随机出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。
模块划分
贪吃蛇游戏设计与实现,主要分为以下三个模块:
游戏主界面模块和游戏控制模块和查看游戏游戏基本信息模块。
游戏主界面模块:
游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面以及玩游戏所得的分数。
游戏控制模块:
这个模块是游戏的中心环节,我将它添加在了菜单条里边,主要完成控制游戏,有开始游戏,退出游戏,以及选择游戏的难易程度,还有加快蛇的爬行速度。
以及计算当前的分数,以及蛇吃的食物个数。
其中难易程度包括了困难,一般及简单。
查看游戏基本信息模块:
有查看游戏的最高记录以及游戏八本或者作者等基本信息。
性能:
本软件在设计方面本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。
系统结构图
图2菜单图图3贪吃蛇界面
运行说明
进入主界面后单击游戏,会弹出它的子菜单,然后选择开始游戏此时就会触发ks(开始游戏)事件,此时会出现蛇和食物,通过键盘的控制可以实现蛇的移动方向以及移动速度。
当吃到事物的时候蛇的长度就增加,当蛇的长度增加时移动的速度也会加快,并且会随机出现新的食物。
当吃不到食物或者碰到了墙壁或者碰到了自身时就会死亡。
单击难易程度菜单时弹出它的子菜单,有简单,一般和困难,分别控制游戏的难易程度,单击积分排行时会出现最高分的记录。
3、主要源程序及代码
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
publicclassTanChiSheextendsJFrameimplementsActionListener,KeyListener,Runnable
{
JMenuBarmenuBar;
JMenuyouXi,ny,fs,gy;
JMenuItemks,tc,zz,fsi;
JCheckBoxMenuItemjd,yb,kn;
intlength=6;
Toolkittoolkit;
inti,x,y,z,objectX,objectY,object=0,growth=0,time;
intdifficult=2;
intm[]=newint[50];
intn[]=newint[50];
Threadshe=null;
intlife=0;
intfoods=0;
intfenshu=0;
publicvoidrun()
{
time=500;
for(i=0;i<=length-1;i++)
{
m[i]=90-i*10;n[i]=60;
}
x=m[0];
y=n[0];
z=4;
while(she!
=null)
{
check();
try
{
she.sleep(time);
}
catch(Exceptionee)
{
System.out.println(z+"");
}
}
}
publicTanChiShe()
{
setVisible(true);
menuBar=newJMenuBar();
Containercon=getContentPane();
toolkit=getToolkit();
youXi=newJMenu("游戏");
ks=newJMenuItem("开始(新)游戏");
tc=newJMenuItem("推出");
ny=newJMenu("难易程度");
jd=newJCheckBoxMenuItem("简单");
yb=newJCheckBoxMenuItem("一般");
kn=newJCheckBoxMenuItem("困难");
fs=newJMenu("积分排行");
fsi=newJMenuItem("最高记录");
gy=newJMenu("关于");
zz=newJMenuItem("关于作者");
gy.add(zz);
ny.add(jd);
ny.add(yb);
ny.add(kn);
fs.add(fsi);
youXi.add(ks);
youXi.add(tc);
menuBar.add(youXi);
menuBar.add(ny);
menuBar.add(fs);
menuBar.add(gy);
zz.addActionListener(this);
ks.addActionListener(this);
tc.addActionListener(this);
addKeyListener(this);
fsi.addActionListener(this);
KeyStrokekeyOpen=KeyStroke.getKeyStroke('O',InputEvent.CTRL_DOWN_MASK);
ks.setAccelerator(keyOpen);
KeyStrokekeyExit=KeyStroke.getKeyStroke('X',InputEvent.CTRL_DOWN_MASK);
tc.setAccelerator(keyExit);
setJMenuBar(menuBar);
setTitle("贪吃蛇");
setResizable(false);
setBounds(300,200,400,400);
validate();
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
publicstaticvoidmain(Stringargs[])
{
TanChiShetcs=newTanChiShe();
}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==ks)
{
length=6;
life=0;
foods=0;
if(she==null)
{
she=newThread(this);
she.start();
}
elseif(she!
=null)
{
she=null;
she=newThread(this);
she.start();
}
}
if(e.getSource()==tc)
{
System.exit(0);
}
if(e.getSource()==zz)
{
JOptionPane.showMessageDialog(this,"成晓晓"+"\n\n"+"\n");
}
if(e.getSource()==fsi)
{
JOptionPane.showMessageDialog(this,"最高记录为"+fenshu+"");
}
}
publicvoidcheck()
{
isDead();
if(she!
=null)
{
if(growth==0)
{
reform();
}
else
{
upgrowth();
}
if(x==objectX&&y==objectY)
{
object=0;
growth=1;
toolkit.beep();
}
if(object==0)
{
object=1;
objectX=(int)Math.floor(Math.random()*39)*10;
objectY=(int)Math.floor(Math.random()*29)*10+50;
}
this.repaint();
}
}
voidisDead()
{
if(z==4)
{
x=x+10;
}
elseif(z==3)
{
x=x-10;
}
elseif(z==2)
{
y=y+10;
}
elseif(z==1)
{
y=y-10;
}
if(x<0||x>390||y<50||y>390)
{
she=null;
}
for(i=1;i{
if(m[i]==x&&n[i]==y)
{
she=null;
}
}
}
publicvoidupgrowth()
{
if(length<50)
{
length++;
}
growth--;
time=time-10;
reform();
life+=100;
if(fenshu{
fenshu=life;
}
foods++;
}
publicvoidreform()
{
for(i=length-1;i>0;i--)
{
m[i]=m[i-1];
n[i]=n[i-1];
}
if(z==4)
{
m[0]=m[0]+10;
}
if(z==3)
{
m[0]=m[0]-10;
}
if(z==2)
{
n[0]=n[0]+10;
}
if(z==1)
{
n[0]=n[0]-10;
}
}
publicvoidkeyPressed(KeyEvente)
{
if(she!
=null)
{
if(e.getKeyCode()==KeyEvent.VK_UP)
{
if(z!
=2)
{
z=1;
check();
}
}
elseif(e.getKeyCode()==KeyEvent.VK_DOWN)
{
if(z!
=1)
{
z=2;
check();
}
}
elseif(e.getKeyCode()==KeyEvent.VK_LEFT)
{
if(z!
=4)
{
z=3;
check();
}
}
elseif(e.getKeyCode()==KeyEvent.VK_RIGHT)
{
if(z!
=3)
{
z=4;
check();
}
}
}
}
publicvoidkeyReleased(KeyEvente)
{
}
publicvoidkeyTyped(KeyEvente)
{
}
publicvoidpaint(Graphicsg)
{
g.setColor(Color.DARK_GRAY);
g.fillRect(0,50,400,400);
g.setColor(Color.pink);
for(i=0;i<=length-1;i++)
{
g.fillRect(m[i],n[i],10,10);
}
g.setColor(Color.green);
g.fillRect(objectX,objectY,10,10);
g.setColor(Color.white);
g.drawString("当前分数"+this.life,6,60);
g.drawString("当前已吃食物数"+this.foods,6,72);
}
}
4、程序总结
运行结果
通过这次课程设计,我对这学期所学的JAVA语言程序设计有一个更深刻的了解,将所学的知识应用于实践,由于所学知识有限,为了使游戏能够实现自己预先的构想,我通过上网和去图书馆找程序,比较好的流程图及功能模块,不断阅读修改代码使程序达到预期所要实现的目标,完成课程设计后,可以感觉到自己对Java程序的又有了新的认识。
虽然花了好大劲做完了这个小程序,但是其中还是有很多不足的地方,首先由于我的个人能力有限,没有设置贪吃蛇的暂停与继续,没有给游戏添加背景音乐只设置了重新开始和推出游戏以及难易程度,最高纪录。
再者贪吃蛇的界面设置的不够好看,我是根据java课程的大实验做的,所以将模块功能的按钮放在了菜单里边,这样玩家看到的游戏界面给玩家身临其境的感觉不是很强。
即便是程序有好几处不足的地方,但是还是有优点的,如可以使用键盘是蛇移动的速度加快,能将玩家的分数进行记录。
能够显示最高纪录,当蛇吃到事物的时候会有系统的提示音,可以设置游戏的难易程度等。
希望在以后的实践中能够将这些不足都改掉,首先添加上暂停和继续功能,这样就方便了玩家在玩的过程中有事的话就可以暂停游戏等到忙完了在接着玩,添加上这个功能之后贪吃蛇这个游戏显得更加人性化。
再者将画布分成两个区域,左边用来放游戏的主界面(贪吃蛇的运行及食物),右边放置功能按钮,这样玩家在玩得过程中如果想改变一下玩的难易程度等时就不用点击菜单,直接点击自己想要的就可以实现,这样就方便了玩家,也使游戏界面显得更加的具有游戏的特色。
........忽略此处.......