java推箱子课程设计Word格式.docx
《java推箱子课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《java推箱子课程设计Word格式.docx(20页珍藏版)》请在冰点文库上搜索。
![java推箱子课程设计Word格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/6/dcfa8b81-0e0f-4566-8103-c42d82c5a467/dcfa8b81-0e0f-4566-8103-c42d82c5a4671.gif)
(7)选关:
选择想要玩的关;
(8)音乐关(开):
默认为开,点击自动关闭音乐和开启音乐.
(9)更换音乐:
从不同的音乐中选取适合玩家的音乐.
程序中主要方法说明
)
(1)界面框架与按钮设计
界面设计中包括了,所有你所直观见到的图形界面,窗体的大小,下拉菜单中的功能菜单,使得玩家能够很直观的见到所有游戏中的功能.界面中有菜单,包括:
"
选项"
设置音乐"
帮助"
,.按钮包括:
重来"
悔一步"
第一关"
,,"
上一关"
下一关"
最终关"
选关"
音乐"
,,,.详细代码:
(2)地图的绘制形成
地图以二维数组的形式进行存储的,不同的数字有着不同的含义.在地图当中不同的数字代表不同的含义我当时是将0~9解读成为不同的图形与图像.
①"
0"
代表"
地图以内的空位"
;
②"
1"
地图中的边缘"
③"
2"
地图以内的空位非点位;
④"
3"
地图中的箱子"
&
⑤"
4"
点位"
⑥"
5"
小人面部朝下"
⑦"
6"
小人面部朝左"
⑧"
7"
小人面部朝右"
⑨"
8"
小人面部朝上"
⑩"
9"
箱子已经到达点位。
(3)推箱子游戏的游戏性
其主要功能是给用户一个友好的游戏界面,游戏中包括50关的地图,推箱子这个游戏的50个地图是事先完成的,将所有地图上面的信息以数字的形式储存在一个20*20的二维数组当中;
然后,每一关都按照数组重新绘制地图,这样就拥有了50张地图
…
(4)小人与箱子移动的算法
移动中包括正移动,与"
的负移动.正移动:
小人上下左右的移动是由本组咸英智组员所做,归结起来上下左右是一个判断的算法,判断都是通过判断小人前面是否是空位箱子或者是墙,如果没有,就移动;
有的话,据判断箱子是否可以移动,最后讨论箱子推过的,小人移动,以及被遮挡住点的图形变化,重新绘制地图,算法判断完毕.传出数据记录在,一个栈当中,以备"
使用.负移动:
通过记录在栈中的数据判断,前一步是的移动方向以及移动使用过的算法,逆向将代码重新运行,同时绘制地图以达到前一步的状态.
(5)移动的代码
在本游戏系统中,给人的视觉感受应该是能感受都动作的变化,逼真的人物动作会使系统更有效.通过控制人物,箱子,空地,障碍物在数组中的位置的改变来控制移动动作.
(6)栈的应用
推箱子中的数据存储是很重要的,不然无法进行"
的操作.本系统采用栈的存储方式来存储并控制人物,箱子的移动和地图的变换.悔一步操作让玩家有了反悔的一步,这节省玩家的时间,避免因错位导致重新开始
》
3.设计结果与分析
程序运行结果
程序的运行结果如下图所示:
图二推箱子游戏第一关界面
图三推箱子游戏第一关界面
尚需解决的问题
游戏的背景音乐比较单一,可以通过在“选项”模式中添加“背景音乐导入”模块,导入玩家自己喜欢的音乐
程序部分代码
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("
推箱子"
setSize(720,700);
setVisible(true);
setResizable(false);
setLocation(150,10);
setDefaultCloseOperation;
Containercont=getContentPane();
(null);
;
Menuchoice=newMenu("
选项"
(renew);
(last);
(next);
(choose);
(back);
();
(exit);
(this);
~
Menusetmuc=newMenu("
设置音乐"
(nor);
(qin);
(po);
(guang);
(eye);
Menuhelp=newMenu("
帮助"
(about);
,
MenuBarbar=newMenuBar();
(choice);
(setmuc);
(help);
setMenuBar(bar);
(false);
lb=newJLabel("
;
lb2=newJLabel("
更换音乐"
|
add(lb);
add(lb2);
(100,20,400,20);
(625,500,55,20);
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);
(625,100,80,30);
'
(625,150,80,30);
(625,200,80,30);
(625,250,80,30);
(625,300,80,30);
?
(625,350,80,30);
(625,400,80,30);
(625,450,80,30);
(625,530,80,20);
("
默认"
(
琴萧合奏"
泡泡堂"
-*
灌篮高手"
eyesonme"
(jc);
sound=newSound();
}
panel=newmainpanel();
add(panel);
validate();
4.设计体会
通过这次课程设计我充分了解了理论与课程设计相结合的重要性,理论基础上必须有实际上的应用,在实际的应用中才能发现个种问题,再灵活的应用理论知识去解决它们.在这一周的学习过程中,我不仅能够把以前所学知识联系起来,并且还学会了一些新的知识.在此期间通过对JAVA设计的系统训练,使我基本上达到了这周的课程设计目的,并且懂得了要想学好课,除了要有扎实的基础知识的功底深厚外,还需要有一定的实践动手能力,操作能力.我们要学习别人的长处,改掉自己的缺点,要懂得用网络,现在的网络包括的知识很多,就是看你能不能把握住,有没有那个心.在网络上要善于讨论,在论坛里向那些高人学习,学习他们学习的方法和思想.虽然课程设计已经完事,可是我们觉得应该继续努力,自己做点东西,增加自己的学习经历和学习经验,不断的深入,了解它的内部,借助它创造财富.课程设计之所以进行的如此顺利,得力于老师的信任和支持,得力于同学们的真诚配合和勤勉不断的努力!
为此,我们深深地感恩!
感谢老师谆谆教导,感恩同学们间的互帮互助.
5.参考文献
[1]马朝晖(译).JAVA教程(第4版).北京:
人民邮电出版社,2007
[2]王国辉等.JAVA程序设计自学手册.北京:
人民邮电出版社,2008
[3]耿祥义.JAVA2实用教程.北京:
清华大学出版社,2006
[4]朱仲杰.JAVA2全方位学习.北京:
机械工业出版社,2006
[5]张思民.JAVA程序设计实践教程.北京:
[6]汤一平.Java语言程序设计.北京:
科学出版社,2006
[7]刘艺.Java程序设计大学教程.北京:
机械工业出版社,2006
[8]耿祥义.Java课程设计.北京:
清华大学出版社,2003
[9]SharonZakhour.Java教程.北京:
6.附录
程序具体代码:
(1)音乐调用代码如下:
classSound
¥
Stringpath=newString("
musics\\"
Stringfile=newString("
Sequenceseq;
Sequencermidi;
booleansign;
voidloadSound()
】
try{
seq=(newFile(path+file));
midi=();
();
(seq);
;
}
%
catch(Exceptionex)
{
sign=true;
}
voidmystop()
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--;
(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--;
(11);
elseif(map[manY-2][manX]==2)
if(maptmp[manY][manX]==4||maptmp[manY][manX]==9)map[manY][manX]=4;
map[manY-2][manX]=3;
map[manY][manX]=8;
elseif(map[manY-1][manX]==9)
]
:
if(map[manY-1][manX]==1)
map[manY][manX]=8;
《
elseif()==btnback||()==back)
if())
(this,"
您还未移动!
else
switch())
case10:
(10);
break;
case11:
case20:
(20);
case21:
(21);
case30:
(30);
case31:
(31);
case40:
(40);
case41:
(41);
();
elseif()==nor)
(0);
elseif()==qin)
(1);
elseif()==guang)
(3);
^
elseif()==eye)
(4);
elseif()==po)
(2);
booleanisMystackEmpty()
return();
intback()
return(Integer)();
voidremove()
(3)栈的代码如下所示:
else