




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
滨江学院 Java程序设计实习报告题 目 大嘴鱼游戏 专 业 计算机科学与技术 年级班级 计科2 学 号 20112308053 学生姓名 刘松 学 期 2015-2016 任课教师 方忠进 1 项目简介1.1项目意义实现小时候PC上经典游戏,大嘴鱼。练习JAVA基础技能。掌握图片绘制方法,刷新方法。以及多线程的使用,文件读取与操作,字符串的分析等诸多技能。完成课程设计。1.2项目说明大嘴鱼游戏规则介绍:无需开始,使用键盘的上,下,左,右键控制大嘴鱼的方向,每吃1条小鱼,得分加1分。每吃10条小鱼,大嘴鱼将升级:大小加1,速度加2。游戏操作:启动系统,游戏开始,按上下左右键控制大嘴鱼的移动方向。 1.3关键技术本项目采用JAVA编程语言进行开发。使用JFrame做窗体,Graphice做画笔绘制图形。其中关键技术包括:1、画面的绘制与更新 。2、小鱼自动刷新的设计 。3、大嘴鱼方向的控制 。4、小鱼被吃掉以及碰撞的检测 。5、更新大嘴鱼得到的分数。6、地图的生成与制作7、地图集的解析8、碰撞检测的代替2总体设计2.1主类设计主类界面类小鱼大嘴鱼资源类地图类行走路径类2.2游戏功能的设计大嘴鱼在吃到小鱼后会升级,速度加快。每吃10条小鱼,大嘴鱼将升级:大小加1,速度加2。3详细设计与实现3.1大嘴鱼的设计首先生成创建imgae,获取image的画笔Graphics,利用Graphics完成游戏界面的绘制。Food类的绘制,遍历Food集合,向Food类的paint方法传入画笔。绘制大嘴鱼,小鱼。Food对象用自身方法绘制自己。另绘制积分字段,根据游戏时长绘制游戏状态。最后讲image画入Frame中,完成界面的绘制过程。 Frame继承了Runnable方法,在其run方法中,每30毫秒,调用repaint方法,重绘场景,完成地图场景的刷新。/* * (#)fish.BigMouthFish.java 2008-7-31 * Copy Right Information: Tarena * Project: fish * JDK version used: jdk1.6.4 * Comments: 大嘴鱼类 * Version: 1.0 * SrDateModified ByWhy & What is modified * 1.2008-7-31 小猪 新建 */package fish;import java.awt.Color;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.Timer; /* * 大嘴鱼类 * 此类继承AcitonListener,实现AcitonPerformed方法,练习ActionListener的另一种实现方法 * 此类还练习定时器Timer的使用 * 此类还练习图形类Graphics的使用 * 2008-7-31 * author达内科技Tarena Training Group * version1.0 * sinceJDK1.6(建议) */public class BigMouthFish implements ActionListener/* 大嘴鱼嘴的方向:0-上 */public static int UP = 0;/* 大嘴鱼嘴的方向:1-右 */public static int RIGHT = 1;/* 大嘴鱼嘴的方向:2-下 */public static int DOWN = 2;/* 大嘴鱼嘴的方向:3-左 */public static int LEFT = 3;/* 大嘴鱼的身体大小,以size为半径画圆 */public int size = 50;/* 大嘴鱼现在的方向(以嘴的方向为基准) */public int direction = RIGHT;/* 大嘴鱼身体的颜色 */private Color color = Color.CYAN;/* 大嘴鱼的位置x */public int posx = 80;/* 大嘴鱼的位置y */public int posy = 80;/* 大嘴鱼的速度,鱼每次前进的像素 */public int speed = 4;/* 大嘴鱼眼睛的大小 */private int eyesize = size/5;/* 大嘴鱼眼睛的位置x */private int eyeposx = posx+size/2;/* 大嘴鱼眼睛的位置y */private int eyeposy = posy+size/5;/* 大嘴鱼眼睛的颜色 */private Color eyecolor = Color.RED;/* 大嘴鱼嘴的最大角度的一半 */private int maxMonth = 30;/* 大嘴鱼现在嘴角的角度 */private int monthsize = 30;/* 大嘴鱼的嘴是否张开 */private boolean isOpen = true;private Timer time = null;/* * 大嘴鱼缺省构造函数. * 创建一个位置为(200,200),大小为50,方向为右,颜色为Color.CYAN,速度为10的大嘴鱼 */public BigMouthFish() /this的使用。this(200,200,50,RIGHT,Color.CYAN,4);/* * 根据位置、大小、方向、颜色、速度构造一个大嘴鱼。 * param posx 大嘴鱼的位置x。 * param posy 大嘴鱼的位置y。 * param size 大嘴鱼的大小。 * param direction 大嘴鱼的方向:0-上;1-右;2-下;3-左。出入错误时,默认改为1。 * param color 大嘴鱼的颜色。 * param speed 大嘴鱼的速度。 */public BigMouthFish(int posx,int posy,int size,int direction,Color color,int speed) this.posx = posx;this.posy = posy;this.size = size;if(direction=1 | direction=2 | direction=3 | direction=4)this.direction = direction;this.color = color;this.speed = speed;eyesize = size/7;initEye();time = new Timer(FishPool.reTime,this);time.start(); /* * 大嘴鱼移动。根据鱼的方向移动鱼。 */public void move()switch (direction) case 0:posy-;break;case 1:posx+;break;case 2:posy+;break;case 3:posx-;break;default:break;/* * 改变大嘴鱼身体的颜色。 * param color 欲改变大嘴鱼身体的颜色 */public void changeColor(Color color)this.color = color;/* * 改变大嘴鱼的方向 * param direction 欲改变大嘴鱼的方向 */public void changeDir(int direction)this.direction = direction;/* * 使用画笔绘画大嘴鱼.大嘴鱼的头像:一个扇形的是鱼脸,上面有一个小圆是眼睛 * 1.保存画笔颜色 * 2.绘制大嘴鱼的脸 * 3.绘制大嘴鱼的眼睛 * 4.恢复画笔颜色 * param g 画笔 */public void paint(Graphics g)/保存画笔的颜色Color c = g.getColor();/绘制鱼脸g.setColor(color);/从(posx,posy)点开始,绘制宽为size,高为size,开始角度为(direction%2=0?(direction+1):(direction-1)*90+monthsize,弧度为360-2*maxMonth的弧形g.fillArc(posx, posy, size, size, (direction%2=0?(direction+1):(direction-1)*90+monthsize, 360-2*monthsize);/绘制鱼眼initEye();g.setColor(eyecolor);g.fillOval(eyeposx, eyeposy, eyesize, eyesize);/恢复画笔颜色g.setColor(c);/* * 大嘴鱼张嘴闭嘴事件 * 此处只负责鱼的角度的变化,不负责鱼的重绘。 * 重绘在鱼池中实现。 * 这样的好处:保证鱼的绘制和步伐分开。显示层和逻辑层单独处理。(面向对象的责任问题)。 * param e 事件对象 */public void actionPerformed(ActionEvent e) if(isOpen)monthsize -= 2;if(monthsize=maxMonth)isOpen = true;/* * 方向改变时,眼睛的改变。 */private void initEye()switch (direction) case 0:eyeposx = posx+size/7;eyeposy = posy+size/2-eyesize;break;case 1:eyeposx = posx+size/2;eyeposy = posy+size/7;break;case 2:eyeposx = posx+size*5/7;eyeposy = posy+size/2;break;case 3:eyeposx = posx+size/2-eyesize;eyeposy = posy+size/7;break;default:break;3.2小鱼的设计小鱼15秒内如果没被吃掉,将在10秒后消失。消失前会闪烁不停。/* * (#)fish.FishBean.java 2008-7-31 * Copy Right Information: Tarena * Project: fish * JDK version used: jdk1.6.4 * Comments: 豆豆类 * Version: 1.0 * SrDateModified ByWhy & What is modified * 1.2008-7-31 小猪 新建 */package fish;import java.awt.Color;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.Timer; /* * 豆豆类 * 2008-7-31 * author达内科技Tarena Training Group * version1.0 * sinceJDK1.6(建议) * authorAdministrator */public class FishBean implements ActionListener/* 小鱼的位置x */public int posx = 190;/* 小鱼的位置y */public int posy = 190;/* 小鱼的大小,以size为半径画豆豆(圆)。 */public int size = 10;/* 小鱼的当前颜色 */private Color color = Color.MAGENTA;/* 小鱼的新颜色 */private Color newColor = Color.MAGENTA;/* 小鱼的旧颜色 */private Color oldColor = Color.GRAY;/* 小鱼消失时的闪烁时间 */public static int flickerTime = 350;/* 小鱼消失时的闪烁次数 */public static int filckerNum = 8;private int hasFileckedNum = 0;/* 小鱼消失时闪烁的定时器 */private Timer timer = null;/* * 缺省构造函数。按位置(40,40),大小15,颜色Color.MAGENTA构造一个豆豆。 */public FishBean() this(190,190,10,Color.MAGENTA,Color.GRAY);/* * 按照位置、大小、颜色构造一个豆豆类。 * param posx 豆豆的水平坐标x。 * param posy 豆豆的垂直坐标y。 * param size 豆豆的大小。 * param newColor 豆豆的颜色。 * param oldColor 豆豆的旧颜色 */public FishBean(int posx,int posy,int size,Color newColor,Color oldColor) this.posx = posx;this.posy = posy;this.size = size;this.newColor = newColor;this.oldColor = oldColor;this.color = newColor;timer = new Timer(flickerTime,this);/* * 移动豆豆到新的位置。 * param posx 豆豆的新水平坐标x。 * param posy 豆豆的新垂直坐标y。 */public void newPos(int posx,int posy)this.posx = posx;this.posy = posy;/* * 绘制豆豆。 * param g 画笔 */public void paint(Graphics g)Color c = g.getColor();g.setColor(color);g.fillOval(posx, posy, size, size);g.setColor(c);/* * 停止Timer。 */public void stopTimer()color = newColor;timer.stop();hasFileckedNum = 0;/* * 启动Timer。 */public void runTimer()timer.start();/* * 定时器事件。 */public void actionPerformed(ActionEvent e) hasFileckedNum+;if(color.equals(newColor) | color=newColor)color = oldColor;elsecolor = newColor;/定时器运行的次数完成时,停止定时器。if(hasFileckedNum=filckerNum & timer.isRunning()stopTimer();/* * Timer定时器是否运行中。 * return 返回Timer是否运行中。 */public boolean timerIsRunning()return timer.isRunning();3.3碰撞检测代替的实现该游戏并不对大嘴鱼进行碰撞检测。省去了地图绘制过程。利用之前所生成的坐标点集合。大嘴鱼并不对地图边缘进行碰撞检测。/* * (#)tools.FishUtilities.java 2008-7-31 * Copy Right Information: Tarena * Project: tools * JDK version used: jdk1.6.4 * Comments: 检测大嘴鱼和小鱼碰撞类。 * Version: 1.0 * SrDateModified ByWhy & What is modified * 1.2008-7-31 小猪 新建 */package tools;import fish.BigMouthFish;import fish.FishBean; /* * 检测大嘴鱼和小鱼碰撞类。 * 此类练习Math的静态函数的使用。 * 2008-7-31 * author达内科技Tarena Training Group * version1.0 * sinceJDK1.6(建议) * authorAdministrator */public class FishUtilities /* * 返回大嘴鱼是否吃掉了小鱼。 * 方式:检测2鱼(圆)之间是否相切或相交。 * 判断2圆心之间的距离小于2圆半径之和。此处判断小于大嘴鱼的半径即可。让大嘴鱼可以吃掉小鱼。 * param fish * param bean * return 返回大鱼是否吃掉小鱼。 */public static boolean isInteraction(BigMouthFish fish,FishBean bean)return Math.pow(fish.posx+fish.size/2-be
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 经贸外事考试题及答案
- 今年地理考试题及答案
- 自动钻床买卖合同范本
- 门面补充协议与原合同
- 租赁音响出租合同范本
- 活动指导策划合同范本
- 电脑配件租赁合同范本
- 销售策划服务合同范本
- 吉林省白城市工厂消防安全测试题八(含答案)
- 殡葬专业考试试题及答案
- 高级考评员职业技能鉴定考试题库(含答案)
- 8《荷花淀》《小二黑结婚》《党费》群文阅读课件 2024-2025学年统编版高中语文选择性必修中册
- GB/T 10069.3-2024旋转电机噪声测定方法及限值第3部分:噪声限值
- 汛期安全隐患重点排查清单
- JB-T 12192-2015 深锥浓缩机介绍
- 石油化工设备维护检修规程设备完好标准SHS
- 带状疱疹疼痛科治疗课件
- 非物质文化遗产从概念到实践
- 救助管理机构护送服务规范
- 《产品形态设计》课程标准
- 胸部保养知识讲座
评论
0/150
提交评论