java推箱子课程设计.docx

上传人:b****3 文档编号:4742924 上传时间:2022-12-08 格式:DOCX 页数:19 大小:255.87KB
下载 相关 举报
java推箱子课程设计.docx_第1页
第1页 / 共19页
java推箱子课程设计.docx_第2页
第2页 / 共19页
java推箱子课程设计.docx_第3页
第3页 / 共19页
java推箱子课程设计.docx_第4页
第4页 / 共19页
java推箱子课程设计.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

java推箱子课程设计.docx

《java推箱子课程设计.docx》由会员分享,可在线阅读,更多相关《java推箱子课程设计.docx(19页珍藏版)》请在冰豆网上搜索。

java推箱子课程设计.docx

java推箱子课程设计

推箱子趣味游戏

1.课程设计的目的

随着科学技术的发展,人们的生活水平越来越繁忙,在充满竞争的社会条件下,压力往往带给人们很多烦恼,所以合理的解压方式称为现代人的共同心愿.为了给大家提供一个合理的解压平台,我们在本次课程设计中为大家开发了一款适合休闲娱乐的小游戏,本次课程设计是配合JAVA程序设计课程,深入学习掌握JAVA语言,熟练运用Java工具对系统的编写.通过课程设计各个项目的综合训练,培养学生实际分析问题,编程和动手能力,提高学生的综合素质.

2.设计方案论证

2.1概要设计

2.1.1系统功能描述

2.1.2系统开发环境

(1)硬件环境

CPU:

PentiumIII

600以上内存要求:

600MB以上

内存剩余资源:

128MB以上

(2)软件环境

JDK1.6及其以上版本

2.2详细设计

2.2.1程序流程图

推箱子游戏主要分为初始化模块,画图模块,移动箱子模块,移动小人模块,功能控制模块.推箱子游戏功能模块图如图3.1所示.

图3.1功能模块图

2.2.2程序中自定义类说明

(1)重来:

重新开始当前关;

(2)悔一步:

返回上一移动状态(可以连续返回多步);

(3)第一关:

游戏系统默认开始关为第一关,此按钮可以将关从其它关跳跃到第一关.

(4)上一关:

返回到当前关的上一关;

(5)下一关:

返回到当前关的下一关;

(6)最终关:

跳跃到最后一关,即第五十关;

(7)选关:

选择想要玩的关;

(8)音乐关(开):

默认为开,点击自动关闭音乐和开启音乐.

(9)更换音乐:

从不同的音乐中选取适合玩家的音乐.

2.2.3程序中主要方法说明

(1)界面框架与按钮设计

界面设计中包括了,所有你所直观见到的图形界面,窗体的大小,下拉菜单中的功能菜单,使得玩家能够很直观的见到所有游戏中的功能.界面中有菜单,包括:

"选项""设置音乐""帮助",,.按钮包括:

"重来""悔一步""第一关",,,"上一关""下一关""最终关""选关""音乐",,,,.详细代码:

(2)地图的绘制形成

地图以二维数组的形式进行存储的,不同的数字有着不同的含义.在地图当中不同的数字代表不同的含义我当时是将0~9解读成为不同的图形与图像.

①"0"代表"地图以内的空位";

②"1"代表"地图中的边缘";

③"2"代表"地图以内的空位非点位;

④"3"代表"地图中的箱子";

⑤"4"代表"点位";

⑥"5"代表"小人面部朝下";

⑦"6"代表"小人面部朝左";

⑧"7"代表"小人面部朝右";

⑨"8"代表"小人面部朝上";

⑩"9"代表"箱子已经到达点位。

(3)推箱子游戏的游戏性

其主要功能是给用户一个友好的游戏界面,游戏中包括50关的地图,推箱子这个游戏的50个地图是事先完成的,将所有地图上面的信息以数字的形式储存在一个20*20的二维数组当中;然后,每一关都按照数组重新绘制地图,这样就拥有了50张地图

(4)小人与箱子移动的算法

移动中包括正移动,与"悔一步"的负移动.正移动:

小人上下左右的移动是由本组咸英智组员所做,归结起来上下左右是一个判断的算法,判断都是通过判断小人前面是否是空位箱子或者是墙,如果没有,就移动;有的话,据判断箱子是否可以移动,最后讨论箱子推过的,小人移动,以及被遮挡住点的图形变化,重新绘制地图,算法判断完毕.传出数据记录在,一个栈当中,以备"悔一步"使用.负移动:

通过记录在栈中的数据判断,前一步是的移动方向以及移动使用过的算法,逆向将代码重新运行,同时绘制地图以达到前一步的状态.

(5)移动的代码

在本游戏系统中,给人的视觉感受应该是能感受都动作的变化,逼真的人物动作会使系统更有效.通过控制人物,箱子,空地,障碍物在数组中的位置的改变来控制移动动作.

(6)栈的应用

推箱子中的数据存储是很重要的,不然无法进行"悔一步"的操作.本系统采用栈的存储方式来存储并控制人物,箱子的移动和地图的变换.悔一步操作让玩家有了反悔的一步,这节省玩家的时间,避免因错位导致重新开始

3.设计结果与分析

3.1程序运行结果

程序的运行结果如下图所示:

图二推箱子游戏第一关界面

图三推箱子游戏第一关界面

3.2尚需解决的问题

游戏的背景音乐比较单一,可以通过在“选项”模式中添加“背景音乐导入”模块,导入玩家自己喜欢的音乐

3.3程序部分代码

(1)界面框架与按钮设计

classmainFrameextendsJFrameimplementsActionListener,ItemListener

{

privatestaticfinallongserialVersionUID=1L;

JLabellb;

JLabellb2;

JButtonbtnrenew,btnlast,btnnext,btnchoose,btnfirst,btnover,btnmuc,btnback;

mainpanelpanel;

Soundsound;

JComboBoxjc=newJComboBox();

MenuItemrenew=newMenuItem("重新开始");

MenuItemback=newMenuItem("悔一步");

MenuItemlast=newMenuItem("上一关");

MenuItemnext=newMenuItem("下一关");

MenuItemchoose=newMenuItem("选关");

MenuItemexit=newMenuItem("退出");

MenuItemqin=newMenuItem("琴萧合奏");

MenuItempo=newMenuItem("泡泡堂");

MenuItemguang=newMenuItem("灌篮高手");

MenuItemnor=newMenuItem("默认");

MenuItemeye=newMenuItem("eyesonme");

MenuItemabout=newMenuItem("关于推箱子...");

mainFrame()

{

super("推箱子v2.0");

setSize(720,700);

setVisible(true);

setResizable(false);

setLocation(150,10);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Containercont=getContentPane();

cont.setLayout(null);

cont.setBackground(Color.black);

Menuchoice=newMenu("选项");

choice.add(renew);

choice.add(last);

choice.add(next);

choice.add(choose);

choice.add(back);

choice.addSeparator();

choice.add(exit);

renew.addActionListener(this);

last.addActionListener(this);

next.addActionListener(this);

choose.addActionListener(this);

exit.addActionListener(this);

back.addActionListener(this);

Menusetmuc=newMenu("设置音乐");

setmuc.add(nor);

setmuc.add(qin);

setmuc.add(po);

setmuc.add(guang);

setmuc.add(eye);

nor.addActionListener(this);

qin.addActionListener(this);

po.addActionListener(this);

guang.addActionListener(this);

eye.addActionListener(this);

Menuhelp=newMenu("帮助");

help.add(about);

about.addActionListener(this);

MenuBarbar=newMenuBar();

bar.add(choice);

bar.add(setmuc);

bar.add(help);

setMenuBar(bar);

nor.setEnabled(false);

lb=newJLabel("推箱子",SwingConstants.CENTER);

lb2=newJLabel("更换音乐",SwingConstants.CENTER);

add(lb);

add(lb2);

lb.setBounds(100,20,400,20);

lb.setForeground(Color.white);

lb2.setBounds(625,500,55,20);

lb2.setForeground(Color.white);

btnrenew=newJButton("重来");

btnback=newJButton("悔一步");

btnlast=newJButton("上一关");

btnnext=newJButton("下一关");

btnchoose=newJButton("选关");

btnfirst=newJButton("第1关");

btnover=newJButton("最终关");

btnmuc=newJButton("音乐关");

add(btnrenew);

add(btnlast);

add(btnnext);

add(btnchoose);

add(btnfirst);

add(btnover);

add(btnmuc);

add(btnback);

btnrenew.setBounds(625,100,80,30);

btnrenew.addActionListener(this);

btnback.setBounds(625,150,80,30);

btnback.addActionListener(this);

btnfirst.setBounds(625,200,80,30);

btnfirst.addActionListener(this);

btnlast.setBounds(625,250,80,30);

btnlast.addActionListener(this);

btnnext.setBounds(625,300,80,30);

btnnext.addActionListener(this);

btnover.setBounds(625,350,80,30);

btnover.addActionListener(this);

btnchoose.setBounds(625,400,80,30);

btnchoose.addActionListener(this);

btnmuc.setBounds(625,450,80,30);

btnmuc.addActionListener(this);

jc.setBounds(625,530,80,20);

jc.addItem("默认");

jc.addItem("琴萧合奏");

jc.addItem("泡泡堂");-*

jc.addItem("灌篮高手");

jc.addItem("eyesonme");

jc.addItemListener(this);

cont.add(jc);

sound=newSound();

sound.loadSound();

panel=newmainpanel();

add(panel);

panel.Tuixiangzi(panel.level);

panel.requestFocus();

validate();

4.设计体会

通过这次课程设计我充分了解了理论与课程设计相结合的重要性,理论基础上必须有实际上的应用,在实际的应用中才能发现个种问题,再灵活的应用理论知识去解决它们.在这一周的学习过程中,我不仅能够把以前所学知识联系起来,并且还学会了一些新的知识.在此期间通过对JAVA设计的系统训练,使我基本上达到了这周的课程设计目的,并且懂得了要想学好课,除了要有扎实的基础知识的功底深厚外,还需要有一定的实践动手能力,操作能力.我们要学习别人的长处,改掉自己的缺点,要懂得用网络,现在的网络包括的知识很多,就是看你能不能把握住,有没有那个心.在网络上要善于讨论,在论坛里向那些高人学习,学习他们学习的方法和思想.虽然课程设计已经完事,可是我们觉得应该继续努力,自己做点东西,增加自己的学习经历和学习经验,不断的深入,了解它的内部,借助它创造财富.课程设计之所以进行的如此顺利,得力于老师的信任和支持,得力于同学们的真诚配合和勤勉不断的努力!

为此,我们深深地感恩!

感谢老师谆谆教导,感恩同学们间的互帮互助.

5.参考文献

[1]马朝晖(译).JAVA教程(第4版).北京:

人民邮电出版社,2007

[2]王国辉等.JAVA程序设计自学手册.北京:

人民邮电出版社,2008

[3]耿祥义.JAVA2实用教程.北京:

清华大学出版社,2006

[4]朱仲杰.JAVA2全方位学习.北京:

机械工业出版社,2006

[5]张思民.JAVA程序设计实践教程.北京:

清华大学出版社,2006

[6]汤一平.Java语言程序设计.北京:

科学出版社,2006

[7]刘艺.Java程序设计大学教程.北京:

机械工业出版社,2006

[8]耿祥义.Java课程设计.北京:

清华大学出版社,2003

[9]SharonZakhour.Java教程.北京:

人民邮电出版社,2007

 

6.附录

程序具体代码:

(1)音乐调用代码如下:

classSound

{

Stringpath=newString("musics\\");

Stringfile=newString("nor.mid");

Sequenceseq;

Sequencermidi;

booleansign;

voidloadSound()

{

try{

seq=MidiSystem.getSequence(newFile(path+file));

midi=MidiSystem.getSequencer();

midi.open();

midi.setSequence(seq);

midi.start();

midi.setLoopCount(Sequencer.LOOP_CONTINUOUSLY);

}

catch(Exceptionex)

{

ex.printStackTrace();

}

sign=true;

}

voidmystop()

{

midi.stop();

midi.close();

sign=false;

}

booleanisplay()

{

returnsign;

}

voidsetMusic(Stringe)

{

file=e;

}

}

(2)物移动代码:

voidmoveup()

{

if(map[manY-1][manX]==2||map[manY-1][manX]==4)

{

if(maptmp[manY][manX]==4||maptmp[manY][manX]==9)

map[manY][manX]=4;

else

map[manY][manX]=2;

map[manY-1][manX]=8;

repaint();

manY--;

mystack.push(10);

}

elseif(map[manY-1][manX]==3)

{

if(map[manY-2][manX]==4)

{

if(maptmp[manY][manX]==4||maptmp[manY][manX]==9)

map[manY][manX]=4;

else

map[manY][manX]=2;

map[manY-1][manX]=8;

map[manY-2][manX]=9;

repaint();

manY--;

mystack.push(11);

}

elseif(map[manY-2][manX]==2)

{

if(maptmp[manY][manX]==4||maptmp[manY][manX]==9)map[manY][manX]=4;

else

map[manY][manX]=2;

map[manY-1][manX]=8;

map[manY-2][manX]=3;

repaint();

manY--;

mystack.push(11);

}

else

{

map[manY][manX]=8;

repaint();

}

}

elseif(map[manY-1][manX]==9)

{

if(map[manY-2][manX]==4)

{

if(maptmp[manY][manX]==4||maptmp[manY][manX]==9)

map[manY][manX]=4;

else

map[manY][manX]=2;

map[manY-1][manX]=8;

map[manY-2][manX]=9;

repaint();

manY--;

mystack.push(11);

}

elseif(map[manY-2][manX]==2)

{

if(maptmp[manY][manX]==4||maptmp[manY][manX]==9)

map[manY][manX]=4;

else

map[manY][manX]=2;

map[manY-1][manX]=8;

map[manY-2][manX]=3;

repaint();

manY--;

mystack.push(11);

}

else

{

map[manY][manX]=8;

repaint();

}

}

if(map[manY-1][manX]==1)

{

map[manY][manX]=8;

repaint();

}

}

elseif(e.getSource()==btnback||e.getSource()==back)

{

if(panel.isMystackEmpty())

JOptionPane.showMessageDialog(this,"您还未移动!

");

else

{

switch(panel.back())

{

case10:

panel.backup(10);

break;

case11:

panel.backup(11);

break;

case20:

panel.backdown(20);

break;

case21:

panel.backdown(21);

break;

case30:

panel.backleft(30);

break;

case31:

panel.backleft(31);

break;

case40:

panel.backright(40);

break;

case41:

panel.backright(41);

break;

}

}

panel.requestFocus();

}

elseif(e.getSource()==nor)

{

jc.setSelectedIndex(0);

}

elseif(e.getSource()==qin)

{

jc.setSelectedIndex

(1);

}

elseif(e.getSource()==guang)

{

jc.setSelectedIndex(3);

}

elseif(e.getSource()==eye)

{

jc.setSelectedIndex(4);

}

elseif(e.getSource()==po)

{

jc.setSelectedIndex

(2);

}

booleanisMystackEmpty()

{

returnmystack.isEmpty();

}

intback()

{

return(Integer)mystack.pop();

}

voidremove()

{

mystack.removeAllElements();

}

(3)栈的代码如下所示:

elseif(e.getSource()==btnback||e.getSource()==back)

{

if(panel.isMystackEmpty())

JOptionPane.showMessageDialog(this,"您还未移动!

");

else

{

switch(panel.back())

{

case10:

panel.backup(10);

break;

case11:

panel.backup(11);

break;

case20:

panel.backdown(20);

break;

case21:

panel.backdown(21);

break;

case30:

panel.backleft(30);

break;

case31:

panel.backleft(

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

当前位置:首页 > 法律文书 > 调解书

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

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