java课程设计贪吃蛇游戏设计asdWord文件下载.docx
《java课程设计贪吃蛇游戏设计asdWord文件下载.docx》由会员分享,可在线阅读,更多相关《java课程设计贪吃蛇游戏设计asdWord文件下载.docx(20页珍藏版)》请在冰豆网上搜索。
编程环境:
JDK1.6
开发工具:
Eclipsejdk
3.1设计方案论证
3.1.1设计思路
贪吃蛇游戏设计与实现,主要分为以下二个模块:
游戏主界面模块和游戏控制模块。
在此只实现游戏的游戏主界面模块、游戏控制模块。
并且只是实现移动速度、暂停、重新开始等功能。
游戏主界面模块:
游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面、游戏的速度选择更新界面、新生方块的预览、暂停游戏按钮、重新开始游戏按钮。
从很大程度上决定了玩家对游戏的兴趣问题,因此,游戏的主界面应该力求美观,爽心悦目。
游戏控制模块:
这个模块是游戏的中心环节,主要完成控制游戏的开始、暂停、重新开始等功能。
为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作。
本设计所开发的是基于Java的一个贪吃蛇游戏软件,主要实现游戏的速度控制、游戏的暂停、游戏的退出等功能,分为:
游戏主界面模块、游戏控制模块以二个模块。
3.1.2程序概述
本程序是一个利用Java应用软件制作的贪食蛇小游戏。
在游戏过程中,用户通过点击小键盘区的方向键来控制蛇的运行方向;
游戏运行过程中,如果想暂停,只需要按F3键即可。
重新开始游戏的按键为F2。
当蛇没有吃到食物且碰到墙壁或自己的身体时游戏结束。
本程序的另一个功能是在程序运行窗口的左上角显示,用户在游戏过程中的移动和长度。
3.1.3程序流程图
本次游戏设计的处理流程如图1所示。
3.1.4总设计模块的划分
根据游戏需求中游戏所要实现的功能,整个游戏分为二个模块进行具体的设计,如图2所示。
游戏控制模块的主要框架如图3所示。
游戏暂停控制:
点击“F3”按钮,游戏暂停;
再单击,游戏继续。
游戏重新开始控制:
点击“F2”键后,点击确定,即游戏重新开始。
游戏退出控制:
点击“F4”键好,点击确定,退出游戏界面。
3.1.5类、方法、属性说明
(1)成员变量
表1主要成员变量(属性)
成员变量描述
变量类型
名称
文件菜单中子菜单“新建”
JMenuItem
mFile_New
编辑菜单中子菜单“撤消”
mEdit_Undo
格式菜单中子菜单“颜色”
JMenu
formatMenu_Color
帮助菜单中子菜单“帮助主题”
MenuItem
mHelp_HelpTopics
(2)方法
表2主要方法
方法名
功能
备注
Notepad4()
描述记事本
无
Text.setBackground(Color.black)
设置编辑区默认背景色
Text.setForeground(Color.black)
设置编辑区默认前景色
4.1设计结果与分析
本程序在运行后,能够正常的相应按键事件。
由于程序的主要部分已经集成为一个对象SnakeModel,所以利用键盘就可以实现操作。
蛇前行的过程中,可以任意向其左或右方向改变方向。
点击F3键后游戏就暂停了。
点击F2键游戏重新开始。
点击F4游戏退出。
运行结果如下图4所示:
图4程序运行图
当蛇没有吃到食物且碰到边界或碰撞到自己的身体时,游戏结束。
如果想重新开始即点击“确定”后按F2键,运行结果如下图5所示:
图5重新开始图
4.1.1程序异常处理
在蛇的运行线程过程中,当蛇撞到墙或自己的身体时,将抛出一个Exception类的异常对象,然后使用try-catch去捕捉这个异常,
异常的处理如下:
try{
Thread.sleep(timeInterval);
}
catch(Exceptione)
{
break;
}
心得体会
通过这次课程设计,我对这学期所学的JAVA语言程序设计有一个更深刻的了解,将所学的知识应用于实践,由于所学知识有限,为了使游戏能够实现自己预先的构想,我通过上网和去图书馆找程序,比较好的流程图及功能模块,不断阅读修改代码使程序达到预期所要实现的目标,完成课程设计后,可以感觉到自己对Java程序的又有了新的认识。
总之,通过本次的课程设计,使我平时学到的理论知识得到了很好地升华,理论与实际得到一次很好的结合,为我今后参加工作打下了坚实的基础,使我受益匪浅。
参考文献
[1]赵文靖编著.Java程序设计基础与上机指导.北京:
清华大学出版社,2006
[2]赵毅主编.跨平台程序设计语言——Java.西安:
西安电子科技大学出版社,
[3]王路群.Java高级程序设计.北京:
中国水利水电出版社,2006
[4]雍俊海编著.Java程序设计习题集.北京:
[5]朱福喜编著.Java语言习题与解析.北京:
[6]吴其庆编著.Java程序设计实例教程.北京:
冶金工业出版社,2006
程序代码:
importjava.awt.*;
importjavax.swing.*;
importjava.util.*;
importjava.awt.event.*;
publicclassSheextendsJFrameimplementsActionListener,WindowListener{
JLabelbt1;
JLabelbt2;
MyPaintmp;
JMenuItemkaishi;
JMenuItemzanting;
JMenuItemtuichu;
JRadioButtonchu;
JRadioButtonzhong;
JRadioButtongao;
JRadioButtonchao;
JMenuItemguanyu;
Fontf;
publicShe(){
f=newFont("
宋体"
Font.PLAIN,12);
mp=newMyPaint();
mp.setShe(this);
JMenuBarcaidan=newJMenuBar();
JMenushezhi=newJMenu("
设置"
);
shezhi.setFont(f);
JMenunandu=newJMenu("
难度"
nandu.setFont(f);
JMenubangzhu=newJMenu("
帮助"
bangzhu.setFont(f);
caidan.add(shezhi);
caidan.add(nandu);
caidan.add(bangzhu);
kaishi=newJMenuItem("
开始游戏F2"
kaishi.setFont(f);
kaishi.addActionListener(this);
zanting=newJMenuItem("
暂停/继续F3"
zanting.setFont(f);
zanting.addActionListener(this);
tuichu=newJMenuItem("
退出F4"
tuichu.setFont(f);
tuichu.addActionListener(this);
chu=newJRadioButton("
初级,最快速度195"
true);
chu.setFont(f);
chu.addActionListener(this);
zhong=newJRadioButton("
中级,最快速度225"
zhong.setFont(f);
zhong.addActionListener(this);
gao=newJRadioButton("
高级,最快速度255"
gao.setFont(f);
gao.addActionListener(this);
chao=newJRadioButton("
超级,最快速度275"
chao.setFont(f);
chao.addActionListener(this);
ButtonGroupbg=newButtonGroup();
bg.add(chu);
bg.add(zhong);
bg.add(gao);
bg.add(chao);
nandu.add(chu);
nandu.add(zhong);
nandu.add(gao);
nandu.add(chao);
guanyu=newJMenuItem("
关于"
guanyu.setFont(f);
guanyu.addActionListener(this);
shezhi.add(kaishi);
shezhi.add(zanting);
shezhi.add(tuichu);
bangzhu.add(guanyu);
bt1=newJLabel("
长度:
0"
bt1.setFont(f);
bt2=newJLabel("
移动:
5"
bt2.setFont(f);
JPanelp=newJPanel();
p.setLayout(newGridLayout(1,2));
p.add(bt1);
p.add(bt2);
this.addWindowListener(this);
//添加窗体监听器
this.setJMenuBar(caidan);
this.add(p,BorderLayout.NORTH);
this.add(mp);
this.add(newJLabel("
"
),BorderLayout.WEST);
this.setSize(335,385);
this.setResizable(false);
this.setLocation(300,150);
this.setTitle("
MyPaint"
this.setVisible(true);
publicvoidsetDS(inta,intb){
bt1.setText("
"
+a);
bt2.setText("
+b);
publicvoidsetChu(){
chu.setSelected(true);
mp.setSD(300,110);
this.setDS(0,305-300);
chu.setEnabled(true);
zhong.setEnabled(true);
gao.setEnabled(true);
chao.setEnabled(true);
publicvoidsetNanDu(){
chu.setEnabled(false);
zhong.setEnabled(false);
gao.setEnabled(false);
chao.setEnabled(false);
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==zanting){
mp.setZanTing();
elseif(e.getSource()==kaishi){
mp.setKaiShi();
elseif(e.getSource()==tuichu){
mp.setTuiChu();
elseif(e.getSource()==guanyu){
JLabelgy=newJLabel("
小游戏贪吃蛇V1.0"
gy.setFont(f);
JOptionPane.showMessageDialog(this,gy);
elseif(e.getSource()==chu){
elseif(e.getSource()==zhong){
mp.setSD(250,80);
this.setDS(0,305-250);
elseif(e.getSource()==gao){
mp.setSD(200,50);
this.setDS(0,305-200);
elseif(e.getSource()==chao){
mp.setSD(150,30);
this.setDS(0,305-150);
publicstaticvoidmain(String[]args){
newShe();
/**
*MethodwindowOpened
*
*@parame
*/
publicvoidwindowOpened(WindowEvente){
//TODO:
Addyourcodehere
publicvoidwindowClosing(WindowEvente){
System.exit(0);
publicvoidwindowClosed(WindowEvente){
publicvoidwindowIconified(WindowEvente){
publicvoidwindowDeiconified(WindowEvente){
publicvoidwindowActivated(WindowEvente){
publicvoidwindowDeactivated(WindowEvente){
classMyPaintextendsJPanelimplementsRunnable,KeyListener,FocusListener{
Shes;
Fontf=newFont("
intx=150;
inty=0;
Randomr=newRandom();
intsjx=r.nextInt(300)/10*10;
intsjy=r.nextInt(300)/10*10;
intfx=2;
intsw=0;
intsd=300;
intcs=0;
intd=150;
String[]zx=newString[1000];
booleanzanting=false;
booleanzanting1=false;
booleansiwang=false;
booleanshenti=false;
publicMyPaint(){
Threadt=newThread(this);
t.start();
this.addKeyListener(this);
this.setFocusable(true);
this.addFocusListener(this);
publicvoidsetShe(Shess){
s=ss;
publicvoidsetZanTing(){
if(zanting){
zanting=false;
else{
zanting=true;
publicvoidsetKaiShi(){
JLabelks=newJLabel("
是否重新开始?
ks.setFont(f);
inta=JOptionPane.showConfirmDialog(s,ks);
if(a==0){
x=150;
y=0;
sjx=r.nextInt(300)/10*10;
sjy=r.nextInt(300)/10*10;
fx=2;
sw=0;
sd=300;
cs=0;
siwang=false;
shenti=false;
s.setChu();
s.setDS(sw,305-sd);
publicvoidsetTuiChu(){
JLabeltc=newJLabel("
确定退出吗?
tc.setFont(f);
inta=JOptionPane.showConfirmDialog(s,tc);
s.dispose();
publicvoidsetSD(inta,intb){
sd=a;
d=b;
publicvoidpaint(Graphicsg){
zx[cs]=x+"
/"
+y;
super.paint(g);
g.setColor(Color.BLACK);
g.drawRect(0,0,300,300);
g.fillRect(sjx,sjy,10,10);
g.setColor(Color.BLUE);
g.fillRect(x,y,10,10);
g.setColor(Color.RED);
for(inti=1;
i<
=sw;
i++){
intj=cs-i;
if(j<
0){
j=cs-i+999+1;
String[]s=zx[j].split("
if(x==Integer.parseInt(s[0])&
&
y==Integer.parseInt(s[1])){//蛇撞到自己身上了
siwang=true;
shenti=true;
if(sjx==Integer.parseInt(s[0])&
sjy==Integer.parseInt(s[1])){//食物在蛇身体上
continue;
g.fillRect(Integer.parseInt(s[0]),Integer.parseInt(s[1]),10,10);
publicvoidrun(){
while(true){
cs++;
if(cs==1000){
switch(fx){
case1:
y-=10;
//上
break;
case2:
y+=10;
//下
case3:
x-=10;
//左
case4:
x+=10;
//右
this.repaint();
if(x==sjx&
y==sjy){
sw++;
if(sw==1)