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

上传人:b****5 文档编号:27694110 上传时间:2023-07-04 格式:DOCX 页数:60 大小:885.48KB
下载 相关 举报
基于Java的动物换位游戏软件设计.docx_第1页
第1页 / 共60页
基于Java的动物换位游戏软件设计.docx_第2页
第2页 / 共60页
基于Java的动物换位游戏软件设计.docx_第3页
第3页 / 共60页
基于Java的动物换位游戏软件设计.docx_第4页
第4页 / 共60页
基于Java的动物换位游戏软件设计.docx_第5页
第5页 / 共60页
点击查看更多>>
下载资源
资源描述

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

《基于Java的动物换位游戏软件设计.docx》由会员分享,可在线阅读,更多相关《基于Java的动物换位游戏软件设计.docx(60页珍藏版)》请在冰豆网上搜索。

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

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

Java课程设计报告

 

题目:

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

 

学院

信息学院

专业

电子信息工程

学生姓名

班级学号

课程设计题目

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

实践教学要求与任务:

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

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

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

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

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

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

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

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

(7)设置一个方法,可以在上面记录游戏成功者的成绩,并且把它记录下来,以便游戏优胜者在以后观看。

(8)设置了一个游戏英雄榜按钮,上面有一个英雄菜单选项,按下这个选项后,可以查看成绩记录。

工作计划与进度安排:

第18周:

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

第19周:

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

指导教师:

年月日

专业负责人:

年月日

学院教学副院长:

年月日

 

1.设计目的

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

具体要求如下:

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

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

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

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

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

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

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

(7)设置一个方法,可以在上面记录游戏成功者的成绩,并且把它记录下来,以便游戏优胜者在以后观看。

(8)设置了一个游戏英雄榜按钮,上面有一个英雄菜单选项,按下这个选项后,可以查看成绩记录。

 

队员:

注释:

在我们这一组中,我们分工合作,在这当中,XXX负责音乐部分,XXX背景色的转换,而我主要负责游戏英雄榜,使得当用户换位成功后,系统能保存用户的成绩到用户;当用户查看换位的最好成绩时,系统能提供读取文件数据的界面。

 

2.总体设计

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

ChangeAnimalWindow.java、Point.java、Animal.java、Stone.java、HandleMouse.java和AutoMoveAnimal.java。

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

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

 

2.1ChangeAnimalWindow.java(主类)

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

ChangeAnimalWindow类的成员变量中有五种重要类型的对象:

Animal、Point、Stone、HandleMouse和AutoMoveAnimal对象。

ChangeAnimalWindow将在后面的详细设计中阐述。

ChangeAnimalWindow类创建的窗口以及其中的主要成员对象如图2.2所示

2.2Animal.java

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

如图2.3所示

 

 

图2.3Animal类效果图

2.3Point.java

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

2.4Stone.java

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

2.5HandleMouse.java

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

2.6AutoMoveAnimal.java

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

2.7Record.java

Record类是JDialog对话框的子类,当换位成功后,Record对象负责保存用户的成绩到用户。

2.8ShowRecord.java

ShowRecord类是JDialog对话框的子类,当用户查看换位的最好成绩时,ShowRecord对象负责提供读取文件数据的界面。

 

3、程序流程及主要源代码

3.1ChangeAnimalWindow类

ChangeAnimalWindow创建的窗口效果如图3.1所示.

图3.1ChangeAnimalWindow类效果图

3.1.2UML图

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

 

以下是UML图中有关方法的详细说明.

3.1.2.1成员变量

•amountOfAnimal是Int型数据,默认值是6.amountOfAnimal的值用来确定ChangeAnimalWindow窗体中"动物"的数目,即Animal对象的数目。

•distance是int型数据,默认值是80.distance的值用来确定Point对象之间的距离,进而可以确定Animal之间,Stone之间的距离以及Animal和Stone对象外观的大小。

•animal是Animal型数组,其长度为amountOfAnimal。

•Point是Point型数组,其长度为amountOfAnimal+1。

•Stone是Stone型数组,其长度为amountOfAnimal+1。

•HandleMouse是HandleMouse类创建的鼠标事件监视器,用来监视animal数组中Animal对象触发的鼠标事件。

•auroMoveAnimal是AutoMoveAnimal类创建的对话框。

通过该对话框可以实现程序向将左右动物交换位置。

•bar是JMenuBar创建的菜单条,用来添加菜单,bar被放置在窗口的顶部。

•MenuGrade是JMenu创建的菜单,其名字为"选择级别"menuImage也是JMenu创建的菜单,其名字为"选择动物图像(jPG,GIF)"menuGrade和menuImage被添加到菜单条bar中。

•oneGradeItem,twoGradeItem和threeGradeItem是JMenultem创建的菜单项,它们的名字依次为"初级"、"中级"和..高级",这三个菜单项被添加到菜单项menuGrade中。

LeftImage、rightImage和defaultImage也是JMenultem创建的菜单项,其名字依次为"左面动物的图像"、"右面动物的图像"、"左右面的动物的默认图像",这三个菜单项被添加到菜单项menumage中。

oneGradeItem,twoGradeItem和1threeGradeItem以及leftImage、rightImage和defaultImage都将当前窗口注册为向己的ActionEvcnt事件监视器。

•renew、quit和autoButton是JButton创建的按钮对象,名字依次为"重新开始"、"撤销"和"自动演示"Renew、quit和autoButton都将在当前接口注册为自己的ActionEvent事件监视器。

3.1.2.2方法

•ChangcAnimalWindow()是构造方法,负责完成窗口的初始化。

init()方法负责完成AnimalStonePoint对象的创建。

•setamountOfAnimal(int)方法负责设置动物的个数,即amountOfAnimal的值。

•removeAnimalAndStone()方法负责从窗体中移掉动物和石头,即移掉Animal对象和Stone对象。

•needDoing()方法负责执行一些经常需要重复执行的代码。

•ActionPerformed(ActionEvent)方法是ChangeAnimalWindow类实现的ActionListener接口中的方法。

ChangeAnimalWindow创建的窗口是oneGradeltem,twoGradeItem、threeGradeItem、leftImage、rightImagedefaultImage菜单项和renewquitautoButton按组的ActionEvent事件监视器。

当用户选中某个菜单项或单击按钮时,筒口将执行actionPerformed(ActionEvent)方法进行相应的操作。

如果用户选中oneGradeItem、twoGradeItem和threeGradeItem三个菜单项的某一项时,actionPerformed(ActionEvent)方法所执行的操作就是改变amountOfAnimal的值,_执行needDoing()方法,完成必要的初始化。

如果用户选中leftlmage和rightImage菜单项的某一个时,actionPerformed(ActionEvent)方法所执行的操作就是改变leftImageFile和rightImageFile的引用。

当用户单击renew按钮时,actionPerformed(ActionEvent)方法所进行的操作是保持当前的amountofAnimal的值,并执行needDoing()方法,完成必要的初始化,当用户单击quit按钮时,ActionPeformed(ActionEvent)方法所进行的操作是撤销当前"动物"的前一次跳跃。

当用户单击autoButton按钮时,actionPerformed(ActionEvent)方法所进行的操作是弹出autoMoveAnimal对话框,用户可以通过该对话框让程序显示动物换位过程。

•main(String)方法是程序运行的入口方法。

3.1.2.3源代码

importjavax.swing.*;

importjava.awt.*;

importjava.awt.event.*;

importjava.util.ArrayList;

importjava.io.*;

importjava.util.*;

importjavax.swing.filechooser.*;

publicclassChangeAnimalWindowextendsJFrameimplementsActionListener{

intamountOfAnimal=6;

intdistance=80;

Animal[]animal;

Hashtablehashtable=newHashtable();

Point[]point;

Stone[]stone;

HandleMousehandleMouse;

AutoMoveAnimalautoMoveAnimal;

FileleftImageFile,rightImageFile,heroFile;

JButtonrenew,quit,autoButton=null;

JMenuBarbar;

JMenumenuGrade,menuImage,menuHero,yingyue;

JMenuItemoneGradeItem,twoGradeItem,threeGradeItem;

JMenuItemleftIamge,rightIamge,defaultImage;

JMenuItemhero,bofang;

ShowRecordshowHeroRecord=newShowRecord(this,hashtable);

JPanelpCenter;

ChangeAnimalWindow(){

pCenter=newJPanel();

pCenter.setBackground(Color.lightGray);

pCenter.setLayout(null);

handleMouse=newHandleMouse();

autoMoveAnimal=newAutoMoveAnimal();

leftImageFile=newFile("dog.jpg");

rightImageFile=newFile("cat.jpg");

heroFile=newFile("英雄.txt");

init();

bar=newJMenuBar();

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

yingyue=newJMenu("音乐");

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

menuHero=newJMenu("游戏英雄榜");

oneGradeItem=newJMenuItem("初级");

twoGradeItem=newJMenuItem("中级");

threeGradeItem=newJMenuItem("高级");

bofang=newJMenuItem("播放");

bofang.addActionListener(this);

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

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

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

hero=newJMenuItem("英雄");

hero.addActionListener(this);

menuGrade.add(oneGradeItem);

menuGrade.add(twoGradeItem);

menuGrade.add(threeGradeItem);

menuImage.add(leftIamge);

menuImage.add(rightIamge);

menuImage.add(defaultImage);

menuHero.add(hero);

bar.add(menuGrade);

bar.add(menuImage);

bar.add(yingyue);

yingyue.add(bofang);

bar.add(menuHero);

setJMenuBar(bar);

oneGradeItem.addActionListener(this);

twoGradeItem.addActionListener(this);

threeGradeItem.addActionListener(this);

leftIamge.addActionListener(this);

rightIamge.addActionListener(this);

defaultImage.addActionListener(this);

hero.addActionListener(this);

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

renew.addActionListener(this);

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

autoButton.addActionListener(this);

quit=newJButton("撤消");

quit.addActionListener(this);

JPanelnorth=newJPanel();

north.add(renew);

north.add(quit);

north.add(autoButton);

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

JLabelhintMess=newJLabel(mess,JLabel.CENTER);

north.add(hintMess);

add(north,BorderLayout.NORTH);

add(pCenter,BorderLayout.CENTER);

JPanelsouth=newJPanel();

south.add(handleMouse);

add(south,BorderLayout.SOUTH);

setVisible(true);

setBounds(60,60,710,300);

validate();

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

publicvoidinit(){

animal=newAnimal[amountOfAnimal];

point=newPoint[amountOfAnimal+1];

stone=newStone[amountOfAnimal+1];

intspace=distance;

for(inti=0;i

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

space=space+distance;

}

for(inti=0;i

animal[i]=newAnimal();

animal[i].addMouseListener(handleMouse);

if(i

animal[i].setIsLeft(true);

}

else{

animal[i].setIsLeft(false);

}

}

for(inti=0;i

stone[i]=newStone();

pCenter.add(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

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

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

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

pCenter.add(animal[i]);

if(i

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);

}

}

handleMouse.setPoint(point);

handleMouse.setCountTime(true);

autoMoveAnimal.setPoint(point);

autoMoveAnimal.setStep();

}

publicvoidsetAmountOfAnimal(intm){

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

amountOfAnimal=m;

}

publicvoidremoveAnimalAndStone(){

for(inti=0;i

if(point[i].getThisAnimal()!

=null)

pCenter.remove(point[i].getThisAnimal());

}

for(inti=0;i

if(point[i].getThisStone(

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

当前位置:首页 > 求职职场 > 简历

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

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