admin管理员组

文章数量:1568344

2024年1月13日发(作者:)

武汉理工大学华夏学院

课程设计报告书

课程名称: 智能手机软件开发

题 目:

捕鱼达人

系 名: 信息工程系

专业班级: 计算机1112

* 名: ***

学 号: ***********

****: ***

2014

年 6

月 20

武汉理工大学华夏学院信息工程系

课 程 设 计 任 务 书

课程名称:智能手机软件开发课程设计 指导教师: 凌伟

班级名称: 计算机1111 开课系、教研室: 自动化与计算机

三、课程设计目的与任务

本课程的设计的目的是通过实践使同学们经历智能手机软件开发的全过程和受到一次综合训练,以便能较全面地理解、掌握和综合运用所学的智能手机开发的知识。结合具体的开发案例捕鱼达人,理解并初步掌握智能手机开发的主要环节和步骤以及智能手机游戏开发的知识。

二、课程设计的内容与基本要求

1、课程设计题目

捕鱼达人

2、课程设计内容

要求学生根据所学的软件工程的理念,利用所学的Android 手机开发的知识,开发一个智能手机游戏捕鱼达人,并针对该手机游戏软件进行需求分析,总体设计、详细设计、编码、测试。

游戏操作

鼠标移动/键盘方向键←→控制炮台射击方向,点击鼠标左键/按空格键射击撒网抓鱼,点击下方的红色+号和-号按钮/数字键1-8键/方向键↑键/滑动鼠标滑轮切换炮台

游戏背景音乐设计

游戏背景动画设计

游戏界面设计

游戏关卡设计

游戏积分榜的设计

三、课程设计步骤及时间进度和场地安排

本课程设计将安排在第18周, 教育技术中心。具体安排如下:

第一天,系统开发平台搭建及主流开发工具安装

第二天,游戏界面的设计

第三天,游戏业务的设计

第四天,游戏关卡的设计

第五天,系统调试 测试 打包和验收

周次

第18周

地点

星期一

第1-8节

现教221

星期二

第1-8节

现教221

星期三

第1-8节

现教221

星期四

第1-8节

现教221

星期五

第1-8节

现教221

四、课程设计考核及评分标准

课程设计考核将综合考虑学生考勤和参与度,系统设计方案正确性,系统设计和开发效果以及课程设计报告书的质量。具体评分标准如下:

设置六个评分点

(1)设计方案正确,具有可行性、创新性; 25分

(2)系统开发效果较好; 25分

(3)态度认真、刻苦钻研、遵守纪律; 10分

(4)设计报告规范、课程设计报告质量高、参考文献充分 20分

(5)课程设计答辩概念清晰,内容正确 10分

(6)课程设计期间的课堂考勤、答疑与统筹考虑。 10分

按上述六项分别记分后求和,总分按五级记分法记载最后成绩。

优秀(100~90分),良好(80~89分),中等(70~79分),及格(60~69分),

不及格(0~59分)

1.设计题目 ..................................................................................................................................... 1

2.开发环境 ..................................................................................................................................... 1

3.需求分析 ..................................................................................................................................... 1

3.1设计目的 ............................................................................................................................ 1

3.2、设计要求 ......................................................................................................................... 1

4.概要设计....................................................................................................................................... 2

4.1设计原理及其分析 ............................................................................................................ 2

4.2本游戏的模块图 ................................................................................................................ 2

5.详细设计....................................................................................................................................... 4

5.1游戏欢迎界面的设计 ........................................................................................................ 4

5.2 游戏背景的设计 ............................................................................................................... 5

5.3游戏中鱼的设计 ................................................................................................................ 6

5.4 渔网的设计 ....................................................................................................................... 8

5.5游戏的平衡设计 ................................................................................................................ 9

6.测试与运行 ............................................................................................................................... 11

6.1进行游戏测试 .................................................................................................................. 11

6.2体力值为零的时弹出对话框。 ...................................................................................... 11

6.3游戏结束后进行选择 ...................................................................................................... 12

7.心得体会 ................................................................................................................................... 13

8.参考文献..................................................................................................................................... 13

附录: ............................................................................................................................................ 14

1.设计题目

捕鱼达人

2.开发环境

Eclipse软件开发环境,PC机一台,windows操作系统。

3.需求分析

3.1设计目的

捕鱼达人这个项目是一个娱乐性的游戏开发,该游戏可以给人们带来娱乐的同时还可以给人感官上的享受,所以很受人们的欢迎。本次游戏的程序设计包含,java swing组件的合理运用,还有图像的变动达到一个动态的动画效果,线程的运用,游戏的异常处理,等方面的知识。培养学生运用所学知识的基础理论、基本知识和基本技能,分析解决实际问题能力的一个重要环节。它与课堂教学环节彼此配合,相辅相成,在某种程度上是课堂学习的继续、深化和检验。它的实践性和综合性是其它教学环节所不能代替的。课程设计能使学生受到必需的综合训练,在不同程度上提高各种能力。通过课程设计,使学生熟练掌握Java语言课程中所学的理论知识,通过综合Java语言的基本知识来解决实际问题,加强学生分析和解决问题的能力。

3.2、设计要求

框架:2个场景,WelcomePanel,FishGame。

流程:1)WelcomePanel :该场景是专门用来做一个欢迎动画的。

2)FishGame :用来运行游戏的载体窗口。与用户交流的界面,鱼儿在该window窗体上游动,玩家在上面捕鱼,然后计分等等。

4.概要设计

4.1设计原理及其分析

1.初始化界面需要800*500大小,需要一个游戏开始欢迎界面,游戏框上显示“欢迎捕鱼达人游戏”,3秒之后进入游戏界面,命名为“捕鱼达人”

2.在程序中,我们需要对每一条鱼进行操作(移动,游动,捕鱼,死亡,复活),所以每条鱼我们将它定义为一个对象的线程,便于对鱼的完美操作与控制,游戏中我们定义了7种小鱼和4种大鱼,每条鱼都有两条,所以鱼池中有22条鱼,鱼的数量达到了一定的饱和。

3.鱼的每次移动,它的水平坐标改变了,所以我们需要将它移动之后的状态重画(repaint()方法)出来,从而达到鱼是在移动的。

4.捕鱼的效果,我们被网赋一个能量值,可以改变网的大小,来改变网的能量的大小,而鱼就需要有一个血量值(大鱼的血量高,小鱼血量低),当网在鱼的范围之内的时候,点击鼠标左键让鱼扣除相应的血量值,鼠标右键控制网的大小,点击一下改变一下网的大小,当鱼的血量小于0的时候,鱼就会弹跳几下然后消失,达到捕鱼成功。

5.每个游戏都是需要平衡的,所以我们不能一直捕鱼下去。体力值,计分,捕鱼条数,等数据来平衡游戏。当体力值小于0 的时候就结束游戏,而捕一条鱼,加上相应鱼的分数,而捕鱼条数上就加1,体力值也相应的回复一部分,不同的鱼分数不同,回复体力值也不同,基本上大鱼分数高,小于分数低。最后判定输赢就是看分数的高低。

4.2本游戏的模块图

分别有:鱼的模块,网的模块,鱼池的模块,游戏的模块,每一个模块相当于一个类,

鱼模块:主要实现鱼图片的加载,鱼游动效果,鱼游动,还有鱼的一些基本属性,

比如鱼的坐标,大小,还有血量值。一些基本方法,鱼的构造方法。

网模块:主要实现渔网图片的加载,渔网的属性有坐标,大小的宽和高,还有渔网的powe

r值,渔网中还有一个改变渔网大小的方法。

鱼池模块:将鱼类的对象,网类的对象都在本类中进行调用,并将相应对象的图片显示出来,并将游戏的背景‘画’出来。

欢迎模块:将欢迎的图片加载进来。

游戏模块

图4.1系统模块图

图4.2 系统类图

5.详细设计

5.1游戏欢迎界面的设计

创建游戏的运行界面的框架,带有main()函数的类,类,专门用来承载游戏的运行,在主函数中创建JFram类的一个对象,即创建window视窗,然后设置大小,默认居中显示,大小不可以改变等功能,具体代码如下:

final JFrame welcome =new JFrame("欢迎光临");

e(643,435);

ationRelativeTo(null);

izable(false);

ible(true);

图5.1游戏运行的框架

创建类,专门用来创建‘画笔’(即paint()方法),画出要显示出来的欢迎界面,既然是开始界面,我们还要去掉边框,还要等待几秒钟后才能进入游戏界面。所以王某要创建一个Timer类的一个对象,来合理分配时间上的任务。实现代码如下:

在WelcomePanel类中:

public class WelcomPanel extends JPanel{

BufferedImage bg;

public WelcomPanel(){

try {

bg=(new File("images/"));//加载本地的图片

tackTrace();} }

} catch (IOException e) {

public void paint(Graphics g){ //g相当于是画笔

age(bg,0,0,null); //画图片

} }

然后在FishGame类中的main()函数中创建WelcomPanel类的一个对象,将画出来的动画在创建好的JFrame框架上显示出来。具体代码如下:

ecorated(true);//隐藏框架,大小不可变

WelcomPanel wel=new WelcomPanel();

(wel);

ible(true); //显示

显示效果如下:

图5.2欢迎图画显示

5.2 游戏背景的设计

创建的类要继承JPanel类,用paint()的方法画出游戏运行的效果出来,首先画出游戏的背景出来。具体画出的过程如WelcomPanel类的方法类似。

然后再在类中的main()添加如下代码:

final JFrame win = new JFrame("捕鱼达人游戏");

e(800,500);

ationRelativeTo(null);

aultCloseOperation(_ON_CLOSE);

Pool buyu=new Pool();(buyu);

Timer timer = new Timer();

le(new TimerTask() {

public void run() { //3秒之后,欢迎界面关闭,游戏窗口打开

ible(false);

ible(true);

}

}, 3000);

();

//调用Pool类对象buyu的action()方法

运行后的游戏背景如下图:

图5.3游戏运行背景

5.3游戏中鱼的设计

创建类。在这个类之中,我们要创建鱼的对象,但是为了方便启动每一条鱼,我们将的类继承了Thread类,这样,每一条鱼就相当于一个线程,每一个线程我们就可以对它分别进行控制,比如移动,速度,血量,当然还有鱼游动的效果。在玩家所看见鱼儿游动的效果其实就是鱼儿游动的一张张图片在不停的变换。我们所做的鱼儿素材只有静态的图片。根据研究,只要换的图片帧数达到23张每秒我们就会认为图片就是动的 。所以在鱼儿游动的时候我们还要调用(1000/60)相当于1秒钟换了60张图片。速度上已经相当快了。这里我们在构造方法里面写出BufferedImage类的一个数组对象,将鱼游动的不同图片用缓冲技术将图片加载到游戏中去,加快游戏运行速度,当然由于鱼的类型不同,所以需要写出两个变量出来s1和s2,s1代表不同种类的鱼类,s2代表同一种鱼的不同的游动的样子。将代码写入类的构造方法中,如下:

for(int i=0;i<10;i++)

{images[i]=(new File("images/fish"+s1+"_"+s2+".png")); }

该构造函数是一个带参数的构造函数,s1就是传过来的参数,鱼的种类有1~9种,加上大于2种共11种鱼。

鱼的移动,鱼有几个属性如下:x,y代表鱼的左上角的坐标,width,height代表当前鱼的图片的一个宽和高。我们就对这次的实验做一个简单的要求。所有的鱼儿都是从最右边开始的。用一个Random 的随机函数随机出鱼出场的位置:x=t(780+width)-width;y=t(470+height)-height;

speed=t(4)+3;//3~6 这几句代码的意思是随机出鱼出场的位置在右边,且高度不能超过游戏界面的高度,而随机出来的速度,可以使鱼儿游的快与慢。不至于所有的鱼儿以相同频率游动。再写一个step()方法,每(1000/10)秒,鱼儿就左移一次:x-=speed;图片也相应的换一次image=images[i++%10]; 这里与10取余的意思是我们每一种鱼都有10张游动的图片。当然鱼游出界的时候,鱼儿就重新随机出新的位置来具体实现代码如下:

public void run(){

int i=0;

while(true){

x-=speed;

image=images[i++%10];//鱼儿每游动一下换一帧图片

if(x<-width){//如果鱼过了左边界,就出场

getOut(); } //该方法是用来对鱼的出场处理,给鱼重新随机出新的位置

try {

(1000/10) ;

} catch (InterruptedException e) {tackTrace(); } } }

鱼的类王某已经创建完毕,所以王某接下来就是要在Pool类的piant()方法中画出鱼,在此游戏中,王某把每一条鱼都创建了两次,使得鱼池中的鱼不至于嫌少,

代码如下:

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

Fish f = fishes[i];

age(, f.x, f.y, null);

}

以上代码中,g相当于是paint方法中的一个画笔,用循环的方法将各种鱼画出来,fishes[22]数组代表的是22条鱼,即Fish类的一个数组对象(或者线程)。在画板中画出鱼后,王某还要启动该鱼的线程:用for循环将每条鱼的线程启动:fishes[i].start(),i取值0~22。

其实这样的话鱼已经可以移动了,但是,在运行出来以后,其实鱼还没动,这是因为,画面定格了,所以我们需要调用系统的repaint()方法,将鱼游动之后的样子画出来,通过不停的重画,使鱼儿游动起来。在Pool类中添加action()方法,用一个死循环,不停的重画,然后线程停顿一下(1000/10)。最后在中的main()方法中用Pool的对象调用action()方法即可。运行效果如下:

图5.4 在游戏中画出鱼

5.4 渔网的设计

创建类。与创建鱼的方法类似。渔网有x,y,表示渔网左上角的坐标,width,height表示渔网的款和高,power,代表渔网的能量值,渔网的网号鱼大,power值越大。渔网有7中图片,用BufferedImage 的数组将本地的7个渔网图片都加载进来,在构造方法中写如下主要代码:

for (int i = 0; i < 7; i++)

images[i] = (new File("images/net_" + (i + 1)+ ".png"));

同样的道理,在Pool类中的piant()方法中画出渔网,

if () {

age(, net.x - / 2, net.y - / 2, null);}

show是渔网的一个boolean属性,当他为true时,显示渔网,否则不显示,这是因为当我们鼠标出去游戏界面的时候,不需要显示渔网。而且在游戏中,王某的渔网是跟着鼠标动的,鼠标在哪,我们的渔网就在哪,所以我们用鼠标监听来处理该事件,鼠标右键点击一下,我们就换一下网,同样的网的power值也将改变。具体代码在Pool类中写:

public void initMouseAdapter() {

MouseAdapter m = new MouseAdapter() { // 监听鼠标移动的方法

public void mouseMoved(MouseEvent e) { //渔网的位置等于鼠标的位置

int x = ();int y = ();

net.x = x;net.y = y;}

public void mousePressed(MouseEvent e) { //鼠标右键触发来改变渔网的大小

// 点击左键捕鱼,右键改变网的大小

int n = ifiers(); // 获得鼠标的左右位置

n(n);

if (n == 4) {

++;ThePower();}

public void mouseEntered(MouseEvent e) { //鼠标进入,渔网显示

= true;}

public void mouseExited(MouseEvent e) { //鼠标出来,渔网不显示

= false;} };

seListener(m); //添加鼠标事件监听

seMotionListener(m);

}

5.5游戏的平衡设计

这个游戏的基本元素都已经设计出来了。鱼池,鱼,网等都已经实现了,但毕竟这是一个游戏,所以我们还在本游戏中添加了一些游戏的分数,鱼的条数,体力值,还有血量。大体的就是

在我们有限的体力值内,可以改变渔网的大小(鼠标右键点击,点一下,渔网变大一下,当渔网的编号大于6时,渔网编号重新变为0),来扣除鱼的血量。当网的中心位置在鱼的图片范围之内是,鼠标左键点击一下就扣除鱼的血量值,具体扣多少要看当前渔网的power值。而鱼的血量是根据鱼的大小来设定的,大于血量厚,小鱼血量薄,当鱼死之后,鱼就会翻身弹跳几下,实现过程是在鱼死之后根据以上鱼儿游动的效果一样,换上几张鱼被捕之后的图片即可实现。而当鱼死后,会加上相应的分数,和回复一定的体力值。当体力值为0的时候,游戏就结束,判断输赢就根据分数来判断。

在定义属性有:int blood; //鱼的血量

static int

count; //捕鱼条数的计数,静态的属性实现累加

static int

score; //捕鱼后得到的分数

再在该类中添加如下方法,使鱼在死之后进行翻身,达到更好的捕鱼体验,鱼死后就会count++代表又捕到了一条鱼,而分数根据鱼的种类(index属性)的5倍。

private void turnOver() {

for(int j=0;j<3;j++) {

for(int i=0;i<;i++)

{image=catchFish[i];

try {(1000/15);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

tackTrace();

}}}count++;

score+=index*5;

}

在类中我们添加static int physics_power;属性,用来记录当前的用户体力值。该游戏的主要操作是靠鼠标来操作的,所以添加了鼠标监听,然后通过n =

ifiers()这句代码获得鼠标的左右位置,左边点击时n=4,代表我们捕鱼的动作。点击鼠标右边,n=16,代表我们可以变换渔网的大小,在鼠标左击之后,鱼儿扣血,相应的体力值减少,然后判断,体力值是否小于零,如果小于零就弹出对话框,问用户是否结束。。具体实现的代码如下:

public void initMouseAdapter() {

public void mousePressed(MouseEvent e) {

int n = ifiers();// 获得鼠标的左右位置

if (n == 4) {++;

if ( == 8) { = 1;}

if(physics_power<){--;}

ThePower();}

if (n == 16) { //捕鱼

if(physics_power<=0){

ssageDialog(getRootPane(), "游戏结束了");

int m=nfirmDialog(getRootPane(), "是否进行下一局");

if(m==_OPTION){

n("下一局");

newPool();//该方法是将所有数据清零,然后重新开始游戏

}else if(m==_OPTION){

n("游戏结束");

(0);}}else{

for(int i=0;i<;i++)

he(fishes[i]);//网捕鱼

physics_power-=;

if(physics_power<&&physics_power!=0)

{=physics_power;

ThePower();}}}}

为了提高用户的体验度,我们将以上的属性都在页面上显示出来,有如下属性:当前的网的大小或者所当前渔网的power值,还有当前的体力值,还有捕鱼的条数,分数,所以我们需要在类中的piant()方法中添加如下代码:

or();

Font font = new Font("宋体", , 25);t(font);

ring("当前的能量大小为:" + , 0, 30);

ring("体力值为"+physics_power, 400,30 );

or();

Font font1 = new Font("宋体", , 15);t(font1);

ring("点击右键改变网的大小", 0, 50);

ring("当前的条数为"+,0 ,70);

ring("得分为:"+, 0, 90);

6.测试与运行

6.1进行游戏测试

图6.1捕鱼过程

6.2体力值为零的时弹出对话框。

图6.2 游戏结束

6.3游戏结束后进行选择

点击确定按钮后,再度提示,增加游戏体验度。点击‘是’就会重新开始一局游戏,所有数据清零,点击‘否’就会结束游戏,而点击‘取消’不做任何操作。

图6.3 游戏结束后选择

经过以上的测试与运行,游戏的效果已经很好了,至于其他的问题暂时还没有找到。

7.心得体会

这一个新星期的课程设计我相信我学到了很多。通过老师给我们带入门,我们终于看到了游戏编程的过程。一个星期,5天的时间,我们经过老师的悉心教导,我们完成了2048,捕鱼达人,FlappyBird等三个游戏,其进度不可谓不快。在学习的过程中,我们充分利用了所学的知识,将之融汇,贯通,最后得到这样的成品出来,心中不免有点小激动。

在试验过程中我们对与java的swing组建的应用更是如鱼得水,游戏的各个板块都与之相关,比如JFrame类创建游戏运行的视窗也是相当于画板,将游戏的效果显示出来,Pannel类画出背景,鱼,网等。还有,我对于面向对象的理念更加的清晰,以前对于面向过程,面向对象的概念还不是很懂,如今明白,面向对象,简而言之是万物皆对象,在我编程的过程中,鱼是一个对象,渔网也是一个对象,还有里面的鱼池也是一个对象,甚至是游戏运行的视窗也是JFrame的一个对象。每个对象都有自己的属性,方法,单斐然还有构造器,对对象进行初始化。

在我的程序设计过程中,我充分的体会到了“实践出真知”这一点,书本上的知识是不够的,只有把理论与实践相结合才能够真正的学到知识。一个游戏的设计,不可能一步到位,还需要不断的完善和补充。同时,游戏中还存在许多问题,有待在日后的使用中发现和解决。编程前的深思熟虑是减少程序调试工作量的重要方法,只有进行充分考虑,才会减少调试过程中的工作量。虽然在开始写程序之前我们做了多的准备工作,但在真正的写程序时仍然发现许多问题,有些问题是分析时的疏漏,有些则是如果不做无论如何也想不到的。

8.参考文献

[1]徐迎晓.JAVA语法及网络应用设计[M].清华大学出版社.

[2]李尊朝 苏军.JAVA语言程序设计(第二版)[M].北京:中国铁道出版社,2007.10

[3]李明 袁晓君.Java计算机语言函数应用[M].北京:科学出版社,2000

[4]黄晓东.JAVA课程设计案例精编(第二版)[M].北京:中国水利水电出版社,2007

附录:

游戏运行类:

package me;

import ;

import ask;

import ;

public class FishGame {

public static void main(String[] args) {

final JFrame welcome =new JFrame("欢迎光临");

e(643,435);

ationRelativeTo(null);

izable(false);

ecorated(true);//隐藏框架,大小不可变

WelcomPanel wel=new WelcomPanel();

(wel);

ible(true); //显示游戏界面

final JFrame win = new JFrame("捕鱼达人游戏");

e(800,500);

ationRelativeTo(null);

aultCloseOperation(_ON_CLOSE);

Pool buyu=new Pool();

Timer timer = new Timer();

public void run() {

}

ible(false);

ible(true);

(buyu);

le(new TimerTask() {

}, 3000);

();}}

鱼类:

package me;

import cs;

import edImage;

import ;

import ption;

import ;

import O;

import ;

public class Fish extends Thread{

BufferedImage image;

BufferedImage[] images=new BufferedImage[10];

BufferedImage[] catchFish;

int x;

int y;

int height;

int width;

int blood;

int index;//鱼的下标

static int count;

static int score;

Random random=new Random();//随机函数生成器

public Fish(int index){

=index;

if(index<8){

catchFish=new BufferedImage[2];

catchFish=new BufferedImage[4]; }

String s1=(index<10?"0":"")+index;

}else{

int speed;//鱼的游动速度

String s2;

try {

//image=(new File("images/fish"+s1+"_"));

for(int i=0;i<10;i++)

{

s2=(i==9?"":"0")+(i+1);

}

for(int j=0;j<;j++){

catchFish[j]=(new

}

images[i]=(new File("images/fish"+s1+"_"+s2+".png"));

File("images/fish"+s1+"_catch_0"+(j+1)+".png"));

} catch (IOException e) {

// TODO Auto-generated catch block

tackTrace(); }

//设置图片的长宽高

width=images[0].getWidth();

height=images[0].getHeight();

//设置图片的显示范围

x=t(780+width)-width;

y=t(470+height)-height;

speed=t(4)+3;//3~6

blood=index*3;}

public void run(){

while(true){

}

x-=speed;

image=images[i++%10];

if(x<-width){//如果鱼过了左边界,就出场

}

if(blood<=0){

turnOver();

getOut();

blood=index*3; }

;

int i=0;

getOut();

try {

(1000/10)

} catch (InterruptedException e) {

// TODO Auto-generated catch block

tackTrace();

}}

//死鱼翻身

for(int j=0;j<3;j++) {

for(int i=0;i<;i++)

{image=catchFish[i];

try {

(1000/15);

// TODO Auto-generated catch block

tackTrace(); }}}

} catch (InterruptedException e) {

private void turnOver() {

count++;

score+=index*5;}

/*鱼出场地 方法*/

private void getOut() {

}}

// TODO Auto-generated method stub

x=800;

y=t(470+height)-height;

speed=t(4)+3;//3~6

渔网类:

package me;

import edImage;

import ;

import ption;

import O;

public class Net {

int x;// 图片中心点

int y;

int width;

int height;

int power = 1;

boolean show;// 网是否显示

BufferedImage image;

BufferedImage[] images = new BufferedImage[7];

public Net() {

try {

for (int i = 0; i < 7; i++)

images[i] = (new File("images/net_" + (i + 1)+ ".png"));

} catch (IOException e) {

n("网的图片加载出错");

tackTrace(); }

image = images[0];

width = th();

height = ght();}

image = images[p - 1];

width = th();

height = ght(); }

if(catchOn(fish)){

//鱼掉血判断鱼是否死了

-=power; }

}

public void changeThePower(int p) {

public void catchThe(Fish fish) {

if(<=0){

s_power+=; }

//判断网的中心是否在鱼的身上,是否捕上了这条鱼

private boolean catchOn(Fish fish) {

if(fish.x<=x&&x<=fish.x+

&&fish.y+>=y&&fish.y<=y)

}} return true; return false;

鱼池类:

package me;

import ;

import ;

import cs;

import ;

import dapter;

import vent;

import edImage;

import ;

import ption;

import O;

import ;

import nPane;

import ;

public class Pool extends JPanel {

BufferedImage bg;

// 创建一条鱼的对象

Fish[] fishes = new Fish[22];

Net net = new Net();

static int physics_power;

public Pool() {

try {

bg = (new File("images/"));

// TODO Auto-generated catch block

tackTrace(); }//初始化鱼

} catch (IOException e) {

newPool();}

for (int i = 0; i < 9; i++) {

fishes[i] = new Fish(i + 1);

fishes[9 + i] = new Fish(i + 1); }

public void newPool(){

fishes[18] = new Fish(13);

fishes[19] = new Fish(14);

fishes[20] = new Fish(13);

fishes[21] = new Fish(14);

=1;

ThePower();

physics_power=100;

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

fishes[i].start(); }

=0;

=0;}

public void initMouseAdapter() {

MouseAdapter m = new MouseAdapter() {

// 监听鼠标移动的方法

public void mouseMoved(MouseEvent e) {

int x = ();

int y = ();

// n(x+","+y);

net.x = x;

net.y = y; }

// 点击左键捕鱼,右键改变网的大小

int n = ifiers();// 获得鼠标的左右位置

n(n);

if (n == 4) {

++;

if ( == 8) {

= 1;}

if(physics_power<)

{--;}

ThePower();

//捕鱼

if(physics_power<=0){

//是否继续下一局

}

public void mousePressed(MouseEvent e) {

if (n == 16) {

ssageDialog(getRootPane(), "游戏结束了");

int m=nfirmDialog(getRootPane(), "是否进行下一局");

if(m==_OPTION){

n("下一局");

newPool();

n("游戏结束");

(0); }}

}else if(m==_OPTION){

else{

for(int i=0;i<;i++)

}

he(fishes[i]);//网捕鱼

physics_power-=;

if(physics_power<&&physics_power!=0)

{=physics_power;

}}

ThePower();}

public void mouseEntered(MouseEvent e) {

= true;}

= false; } };

public void mouseExited(MouseEvent e) {

seListener(m);

seMotionListener(m);}

age(bg, 0, 0, null);

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

public void paint(Graphics g) {

Fish f = fishes[i];

age(, f.x, f.y, null);}

if () {

or();

Font font = new Font("宋体", , 25);

t(font);

ring("当前的能量大小为:" + , 0, 30);

ring("体力值为"+physics_power, 400,30 );

or();

Font font1 = new Font("宋体", , 15);

t(font1);

ring("点击右键改变网的大小", 0, 50);

ring("当前的条数为"+,0 ,70);

ring("得分为:"+, 0, 90);

initMouseAdapter();

while (true) {

repaint();

try {(1000 / 24);

} catch (InterruptedException e) {

}}}

}

age(, net.x - / 2, net.y - / 2, null);}

public void action(){

tackTrace(); }

欢迎游戏类:

package me;

import cs;

import edImage;

import ;

import ption;

import O;

import ;

public class WelcomPanel extends JPanel{

BufferedImage bg;

public WelcomPanel(){

try {

bg=(new File("images/"));

// TODO Auto-generated catch block

tackTrace(); } }

} catch (IOException e) {

public void paint(Graphics g){

age(bg,0,0,null);}}

设计过程中质疑(或答辩)记载:

1.这里面鱼是怎么移动的?

答:这里面是通过鱼的一个run()方法实现的,因为鱼的类继承了Thread类

所以只要将鱼的对象()便可以调用run()方法,而在该方法中,每过一段时间(这个时间很短,(1000/20)),鱼的横左边就会减去它当前的速度,然后用repaint方法将鱼移动后的形态重画出来,鱼就移动了。

2.鱼的游动效果是怎样实现的?

答:我们先将该一种鱼的每个游动形态的图片加载到一个BufferedImage的一个数组中,然后在鱼儿的run()方法中,鱼每次移动一次,就将鱼的图片换成数组中的一张图片,循环下去,鱼就游动了。

3.鱼是怎么被捕到的?

答:鱼的图片是有大小的,而渔网我们看做是一个点,只要渔网的中心点在鱼图片的范围之内,且点击鼠标左键,鱼儿就会扣血,当然扣血量的大小按当前渔网的power值来扣。当鱼的血量小于零的时候,鱼就会捕到了,然后调用写好的getOut()方法将鱼送出来,还要将鱼的血量重新赋值,使鱼又可以进来鱼池中。

指导教师评语:

签名:

年 月 日

本文标签: 游戏设计鼠标渔网