动物换位游戏java课设.docx

上传人:b****7 文档编号:25356162 上传时间:2023-06-07 格式:DOCX 页数:20 大小:211.03KB
下载 相关 举报
动物换位游戏java课设.docx_第1页
第1页 / 共20页
动物换位游戏java课设.docx_第2页
第2页 / 共20页
动物换位游戏java课设.docx_第3页
第3页 / 共20页
动物换位游戏java课设.docx_第4页
第4页 / 共20页
动物换位游戏java课设.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

动物换位游戏java课设.docx

《动物换位游戏java课设.docx》由会员分享,可在线阅读,更多相关《动物换位游戏java课设.docx(20页珍藏版)》请在冰豆网上搜索。

动物换位游戏java课设.docx

动物换位游戏java课设

成绩评定表

学生姓名

班级学号

专业

课程设计题目

基于Java的动物换位游戏软件设计

 

 

组长签字:

成绩

 

日期

2013年月日

课程设计任务书

学院

信息学院

专业

学生姓名

班级学号

课程设计题目

基于Java的动物换位游戏软件设计

实践教学要求与任务:

采用java技术设计动物换位游戏软件,设计要求如下:

(1)程序分为3个级别,用户可以通过界面上提供的菜单来选择“初级”、“中级”和“高级”这三个级别。

对于“初级”级别,在水平排列的7块石头上的左右各有3个类型相同的动物,中间的石头上没有动物;对于“中级”级别,在水平排列的9块石头上的左右各有4个类型相同的动物,中间的石头上没有动物;对于“高级”级别,在水平排列的11块石头上的左右各有5个类型相同的动物,中间的石头上没有动物。

(2)用鼠标单击一个动物,如果该动物的前方的石头上没有动物,该动物就跳跃到该石头上,如果该动物前方的石头上有其他的动物,但隔位上的石头没有动物,该动物就越过自己前面的动物跳跃到石头上,其他情形时,该动物不跳跃(跳跃时不能超过2块石头)。

(3)左面的动物只能向右方跳跃,右面的动物只能向左方跳跃。

(4)用户可以通过单击界面上提供的按钮,让程序自动完成动物换位。

(5)可以随时单击界面上提供的按钮,重新开始当前的级别。

(6)用户通过菜单选项,可以选择左、右动物的图像。

工作计划与进度安排:

第18周:

布置课程设计任务,查阅资料,分组设计,程序调试。

第19周:

程序调试,编写课程设计报告,验收,答辩。

指导教师:

2013年6月20日

专业负责人:

2013年6月20日

学院教学副院长:

2013年6月20日

1.设计目的..................................................4

2.设计内容..................................................4

3.课程软件主要功能........................................4

4.类总体设计................................................4

类组合关系图...........................................5

主类.....................................................5

其他类...................................................5

5.类详细设计(画UML图)....................................6

6.关键类成员函数流程图及代码.........................7

总体流程图.............................................7

程序代码...............................................8

7.软件运行结果.............................................14

8.结论.......................................................16

参考文献.......................................................16

 

1.设计目的

1.通过实验,使学生进一步加深面向对象的编程设计思想;

2.训练掌握、加深理解并巩固《Java程序设计》课程中所学到的基本概念、编程思路;

3.综合运用Java程序设计的编程方法,能够利用这些程序设计方法来解决工程和科研中常见的实际问题;

4.培养分析解决问题的实际动手能力,进一步提高进行大型程序设计的能力。

2.设计要求

设计GUI界面的动物换位游戏,游戏的结果是让左右两组动物交换位置。

具体内容如下:

程序分为4个级别,用户可以通过界面上提供的菜单选择“初级”、“中级”、“高级”、“自定义”这4个级别。

对于“初级”级别,在水平排列的7块石头上的左右各有3个类型相同的动物,中间的石头上没有动物;对于“中级”级别,在水平排列的9块石头上的左右各有4个类型相同的动物,中间的石头上没有动物;对于“高级”级别,在水平排列的11块石头上的左右各有5个类型相同的动物,中间的石头上没有动物;对于“自定义”级别,用户可以输入自己想设置的一个动物数量(输入的数必须是偶数),在水平排列的N块石头上的左右各有(N-1)/2个类型相同的动物,中间的石头上没有动物。

3.课程软件主要功能

程序分为不同的级别,左右各有动物,中间石头没有动物,将左右动物交换,不可后退。

用鼠标单击一个动物,如果该动物前方的石头上没有动物,该动物就跳跃到该石头上,如果该动物前方的石头上有动物,但隔位上的石头没有动物,该动物就越过自己前面的动物跃到石头上,其他情形时,该动物不能跳跃。

如果对游戏有疑问可以点击帮助,查看游戏规则。

不能持续玩的可以点自动演示,将自动完成游戏,可以帮助游戏者更好的了解系统的主体功能

4.类总体设计

设计动物换位时需要编写10个Java源文件:

、、、、、、、、和。

动物换位除了需要编写上述10个Java源文件所给出的类外,还需要Java系统提供的一些重要的类,如:

JmenuItem、File和Jbutton类等。

动物换位所用到的一些重要的类以及之间组合关系如图4-1所示。

类组合关系图

以下是10个Java源文件的总体设计:

图4-1类之间的组合关系

主类

ChangeAnimalWindow类负责创建动物换位的主窗口,该类含有main方法,程序从该类开始执行。

其他类

Animal类是JPanel的一个子类,创建的对象是ChangeAnimalWindow类的重要成员之一,用来表示“动物”。

Point类负责创建确定位置的对象,使用Point对象,可以确定Animal以及Stone对象在窗体中的位置。

Stone类是JButton的一个子类,创建的对象表示“石头”。

HandleMouse类所创建的对象负责处理鼠标事件。

AutoMoveAnimal类所创建的对象使用算法完成动物的自动换位。

Customdlg类所创建的对象用来设置“自定义”级别的动物数量。

People对象封装用户的名字和成绩,以便ShowRecordDialog对象可以排序。

Record类是包中JDialog对话框的子类,当用户成功完成相应级别的游戏时,Record创建的对象负责保存用户的名字和成绩到相应的级别文件中。

ShowRecordDialog类是包中JDialog对话框的子类,当用户单击查看相应的级别排行榜时,ShowRecordDialog创建的对象负责显示用户的成绩。

5.类详细设计(画UML图)

ChangeAnimalWindow类是包中的JFrame的一个子类,并实现了ActionListener接口,标明该类的主要成员变量和方法的UML图如图5-1所示。

以下是UML图中有关数据和方法的详细说明:

图5-1ChangeAnimalWindow类的UML图

 

6.关键类成员函数流程图及代码

总体流程图

图6-1总体流程图

程序代码

import.*;

import.*;

import.*;

importclassChangeAnimalWindowextendsJFrameimplementsActionListener{

intamountOfAnimal=6;

intdistance=80;

Animal[]animal;

Point[]point;

Stone[]stone;

HandleMousehandleMouse;

AutoMoveAnimalautoMoveAnimal;

FileleftImageFile,rightImageFile;

JButtonrenew,quit,autoButton=null;

JMenuBarbar;

JMenumenuGrade,menuImage;

JMenuItemoneGradeItem,twoGradeItem,threeGradeItem;

JMenuItemleftIamge,rightIamge,defaultImage;

JPanelpCenter;

ChangeAnimalWindow(){

pCenter=newJPanel();

;

(null);

handleMouse=newHandleMouse();

autoMoveAnimal=newAutoMoveAnimal();

leftImageFile=newFile("");

rightImageFile=newFile("");

init();

bar=newJMenuBar();

menuGrade=newJMenu("选择级别");

menuImage=newJMenu("选择动物图像(JPG,GIF)");

oneGradeItem=newJMenuItem("初级");

twoGradeItem=newJMenuItem("中级");

threeGradeItem=newJMenuItem("高级");

leftIamge=newJMenuItem("左面动物的图像");

rightIamge=newJMenuItem("右面动物的图像");

defaultImage=newJMenuItem("左右面动物的默认图像");

(oneGradeItem);

(twoGradeItem);

(threeGradeItem);

(leftIamge);

(rightIamge);

(defaultImage);

(menuGrade);

(menuImage);

setJMenuBar(bar);

(this);

(this);

(this);

(this);

(this);

(this);

renew=newJButton("重新开始");

(this);

autoButton=newJButton("自动演示");

(this);

quit=newJButton("撤消");

(this);

JPanelnorth=newJPanel();

(renew);

(quit);

(autoButton);

Stringmess="互换左右动物位置";

JLabelhintMess=newJLabel(mess,;

(hintMess);

add(north,;

add(pCenter,;

JPanelsouth=newJPanel();

(handleMouse);

add(south,;

setVisible(true);

setBounds(60,60,710,300);

validate();

setDefaultCloseOperation;

}

publicvoidinit(){

animal=newAnimal[amountOfAnimal];

 

point=newPoint[amountOfAnimal+1];

stone=newStone[amountOfAnimal+1];

intspace=distance;

for(inti=0;i<;i++){

point[i]=newPoint(space,100);

space=space+distance;

}

for(inti=0;i<;i++){

animal[i]=newAnimal();

animal[i].addMouseListener(handleMouse);

if(i<2){

animal[i].setIsLeft(true);

}

else{

animal[i].setIsLeft(false);

}

}

for(inti=0;i<;i++){

stone[i]=newStone();

(stone[i]);

stone[i].setSize(distance*8/9,18);

intw=stone[i].getBounds().width;

inth=stone[i].getBounds().height;

stone[i].setLocation(point[i].getX()-w/2,point[i].getY());

point[i].setThisStone(stone[i]);

}

for(inti=0;i<;i++){

animal[i].setSize(distance*6/7,distance*3/4);

intw=animal[i].getBounds().width;

inth=animal[i].getBounds().height;

(animal[i]);

if(i<2){

animal[i].setIsLeft(true);

animal[i].setLeftImage(leftImageFile);

animal[i].repaint();

animal[i].setLocation(point[i].getX()-w/2,point[i].getY()-h);

animal[i].setAtPoint(point[i]);

point[i].setThisAnimal(animal[i]);

point[i].setIsHaveAnimal(true);

}

else{

animal[i].setIsLeft(false);

animal[i].setRightImage(rightImageFile);

animal[i].repaint();

animal[i].setLocation(point[i+1].getX()-w/2,point[i+1].getY()-h);

animal[i].setAtPoint(point[i+1]);

point[i+1].setThisAnimal(animal[i]);

point[i+1].setIsHaveAnimal(true);

}

}

(point);

(true);

(point);

();

}

publicvoidsetAmountOfAnimal(intm){

if(m>=2&&m%2==0)

amountOfAnimal=m;

}

publicvoidremoveAnimalAndStone(){

for(inti=0;i<;i++){

if(point[i].getThisAnimal()!

=null)

(point[i].getThisAnimal());

}

for(inti=0;i<;i++){

if(point[i].getThisStone()!

=null)

(point[i].getThisStone());

}

();

();

}

publicvoidneedDoing(){

init();

();

();

(true);

(point);

}

publicvoidactionPerformed(ActionEvente){

if()==oneGradeItem){

distance=80;

removeAnimalAndStone();

setAmountOfAnimal(6);

needDoing();

}

elseif()==twoGradeItem){

distance=70;

removeAnimalAndStone();

setAmountOfAnimal(8);

needDoing();

}

elseif()==threeGradeItem){

distance=60;

removeAnimalAndStone();

setAmountOfAnimal(10);

needDoing();

}

elseif()==renew){

removeAnimalAndStone();

needDoing();

}

elseif()==autoButton){

removeAnimalAndStone();

needDoing();

(false);

();

intx=().x+().width/2;

inty=().y+().height;

(x,y);

().width/2,120);

(true);

}

elseif()==quit){

ArrayListstep=();

intlength=();

intstart=-1,end=-1;

if(length>=2){

end=(length-1);

start=(length-2);

(length-1);

(length-2);

Animalani=point[end].getThisAnimal();

intw=().width;

inth=().height;

(point[start].getX()-w/2,point[start].getY()-h);

(point[start]);

point[start].setThisAnimal(ani);

point[start].setIsHaveAnimal(true);

point[end].setIsHaveAnimal(false);

}

}

elseif()==leftIamge){

JFileChooserchooser=newJFileChooser();

FileNameExtensionFilterfilter=newFileNameExtensionFilter(

"JPG&GIFImages","jpg","gif");

(filter);

intstate=(null);

Filefile=();

if(file!

=null&&state=={

leftImageFile=file;

for(inti=0;i<;i++){

if(animal[i].getIsLeft()==true){

animal[i].setLeftImage(leftImageFile);

animal[i].repaint();

}

}

}

}

elseif()==rightIamge){

JFileChooserchooser=newJFileChooser();

FileNameExtensionFilterfilter=newFileNameExtensionFilter(

"JPG&GIFImages","jpg","gif");

(filter);

intstate=(null);

Filefile=();

if(file!

=null&&state=={

rightImageFile=file;

for(inti=0;i<;i++){

if(animal[i].getIsLeft()==false){

animal[i].setRightImage(rightImageFile);

animal[i].repaint();

}

}

}

}

elseif()==defaultImage){

leftImageFile=newFile("");

rightImageFile=newFile("");

for(inti=0;i<;i++){

if(animal[i].getIsLeft()==true)

animal[i].setLeftImage(leftImageFile);

else

animal[i].setRightImage(rightImageFile);

animal[i].repaint();

}

}

validate();

}

publicstaticvoidmain(Stringargs[]){

newChangeAnimalWindow();

}

}

7.软件运行结果

进入游戏主界面:

图7-1主界面图

 

当用户不知怎么游戏时,可以按下自动演示,可以帮助用户更好的了解,当用

户按下自动演示时如图所示:

图7-2自动演示按钮调试图

选择级别菜单调试如图所示:

图7-3选择难度中级图

用户觉得动物图像太单调时,本系统可以有一个选择不同动物图像的功能,根据用户需求,可以选择左边图像或右边图像,当然也可以恢复默认图像,根据多变的选择如图所示:

图7-4选择左边动物图

8.结论

这此课程设计我们做的是“动物换位”游戏,主要是让左右两边相同数量的动物通过中间一个空的石头,左边的动物要全部跳到右边的石头上,右边的动物要全部跳到左边的石头上。

游戏中采用的技术主要有:

AWT组件及事件处理、输入输出流、Java与多媒体、JavaSwing和图形图像等。

虽然游戏的基本功能都已实现,但还是存在许多问题尚待解决,还是有许多需要改进的地方。

比如对“自定义”级别动物数量设置中,数量输入时不能太大,否则在主窗口显示的动物图像会非常窄小。

建议应设定一个上限,当达到上限时弹出提示信息,提醒用户“您输入的数量太大”。

对“我超时了吗”,如果超时,则弹出提示消息后,左右两边图像被其他图像代替。

但是如果在没有关闭游戏时,重新开始再玩一盘,如果再超时,同样弹出提示信息,但图像不会再调换。

因此,建议能在此改进,使得能不停调换。

对“英雄榜”中记录用户玩游戏时的成绩,但不能在当玩家成绩在排行榜中排进前三弹出提示信息。

在此希望在以后的学习中继续有所改进,争取做到更好。

最后通过这次课程设计让我对Java语言的运用更加的熟练,在与同学交流沟通方面也有所收获。

在实践中成长,在思考中奋进,学习的路程是很遥远的,所以我们要在不断的淬炼中更加努力向前。

9.参考文献

[1]耿祥义,张跃平.?

Java2实用教程(第三版)[M].北京:

清华大学出版社,2006

[2]耿祥义.?

Java课程设计(第三版)[M].北京:

清华大学

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

当前位置:首页 > 医药卫生 > 预防医学

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

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