大鱼吃小鱼java程序设计
- 步骤 :
- 1、创建窗口对象Ui
- 2、背景的绘制
- 3、键盘的监听事件
-显示接口
-添加监听事件
- 4、将己方鱼放上去
- 5、让小鱼移动
- 6、其他的鱼并引导(先创建集合将鱼装起来,获得每个对象,画图)
- 7、吃鱼
- 8、被吃
package 大鱼吃小鱼;import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;import javax.swing.*;public class Ui extends JFrame implements KeyListener {FishPanel fishPanel = new FishPanel();//创建打开界面 鱼 对象public Ui() {this.setTitle( "大鱼吃小鱼" );//标题//this.setBounds(100,20,1440,900);//设置大小this.setSize( 1440 , 900 );//设置窗口大小//设置窗体关闭后台随之关闭this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );//默认关闭this.setLocationRelativeTo( null );//窗口居中this.add(fishPanel);//生成背景界面fishPanel.action();//生成其他鱼的工具this.setVisible( true );//画面显示this.addKeyListener( this );}public static void main(String [] args) {new Ui();//创建对象}@Overridepublic void keyTyped(KeyEvent e) {// TODO 自动生成的方法存根}@Overridepublic void keyPressed(KeyEvent e) { //键盘按压走keyPressed方法// TODO 自动生成的方法存根System.out.println(0);//System.out.println( e.getKeyCode() );fishPanel.move(e.getKeyCode());}@Overridepublic void keyReleased(KeyEvent e) {// TODO 自动生成的方法存根//fishPanel.move(e.getKeyCode());}}
package 大鱼吃小鱼;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;import javax.swing.ImageIcon;
import javax.swing.JPanel;/*** * 背景的绘制* */public class FishPanel extends JPanel {//0:游戏加载;1:游戏开始;2:游戏暂停;3:游戏结束int state = 0;//游戏状态Image bkImg = new ImageIcon("images/bg.jpg").getImage();Image over = new ImageIcon("images/bg.jpg").getImage();Image zan = new ImageIcon("images/bg.jpg").getImage();Image start = new ImageIcon("images/start.png").getImage();ArrayList<Fish> fishs = new ArrayList<Fish>();//装其他鱼的集合int miniFish = 0 , middleFish = 0 , bigFish = 0 ,superFish = 0 ;//各种鱼在初始界面鱼的数量 int score = 0;//初始分数public FishPanel() {myFish = new MyFish();//music = new Music();oldzhanLi=myFish.zhanLi;}MyFish myFish = new MyFish();//己方鱼int oldzhanLi = myFish.zhanLi;/*** 绘制的方法* g 画笔对象*/public void paint(Graphics g) {//画图必备路径super.paint(g);// g 画笔对象System.out.println("zzzzz");//绘制游戏背景界面switch(state) {case 0://游戏加载g.drawImage(start, 0, 0, 1440, 900, 0, 0, 500,300, null);break;case 1://游戏开始drawBackGround(g);//背景绘制drawMyFish(g);//绘制己方的小鱼drawFishs(g);//绘制其他的鱼g.setColor(Color.white);Font f = new Font("黑体",Font.BOLD,20);g.setFont(f); g.drawString("当前得分:"+score, 15, 20);//"当前分数"在界面的位置g.drawString("战斗力:"+myFish.zhanLi, 200, 20);//"战斗力"在界面的位置break;case 2://游戏暂停g.drawImage(zan, 0, 0, null);break;case 3://游戏结束//g.drawImage(over, 0, 0, null);break;drawBackGround(g);//背景绘制drawMyFish(g);//绘制己方的小鱼drawFishs(g);//绘制其他的鱼g.drawString("当前得分:"+score, 15, 20);//"当前分数"在界面的位置g.drawString("战斗力:"+myFish.zhanLi, 200, 20);//"战斗力"在界面的位置g.setColor(Color.white);//"游戏结束"的字体颜色Font ff = new Font("黑体",Font.BOLD,50);//"游戏结束"字体为黑体,粗细为BOLD,大小为50g.setFont(ff);g.drawString("游戏结束",600 ,450);//"游戏结束"在界面的位置break;}}/*** 绘制其他的方法* @param g*/private void drawFishs(Graphics g) {// TODO 自动生成的方法存根for(int i = 0 ; i < fishs.size() ; i ++ ) {Fish fish = fishs.get(i);fish.draw(g);}}/*** 绘制游戏开始的背景* @param g*/private void drawBackGround(Graphics g) {// TODO 自动生成的方法存根g.drawImage(bkImg, 0, 0, 1440, 900, 0, 0, 2048, 1024, null);}/*** 绘制己方小鱼的方法* @param g*/private void drawMyFish(Graphics g) {// TODO 自动生成的方法存根myFish.draw(g);}/*** 键盘监听事件执行的方法 */public void move(int keycode) {switch(keycode) {case KeyEvent.VK_SPACE://空格键,进入游戏开始的界面if(state == 0) {state = 1;}break;case KeyEvent.VK_LEFT://左键if(state == 1) {//当游戏结束时鱼不能动myFish.moveLeft();//己鱼repaint();//敌方鱼}break;case KeyEvent.VK_RIGHT://右键if(state == 1) {//当游戏结束时鱼不能动myFish.moveRight();//己鱼repaint();//敌方鱼}break;case KeyEvent.VK_UP://上键if(state == 1) {//当游戏结束时鱼不能动myFish.moveUp();//己鱼repaint();//敌方鱼}break;case KeyEvent.VK_DOWN://下键if(state == 1) {//当游戏结束时鱼不能动myFish.moveDown();//己鱼repaint();//敌方鱼}break;}}/*** 定时器的方法:* 创建其他鱼* 不断的改变其他鱼的位置*/int index=1;public void action() {Timer timer=new Timer();timer.schedule(new TimerTask() {public void run() {if(state == 1) {//创建其他鱼,不断的改变其他鱼的位置createFishs();//吃鱼hitFish();//当鱼跑出圈外,我们要删除集中的鱼repaint();}}},20,10);//鱼生成周期}/*** 吃鱼 */private void hitFish() {// TODO 自动生成的方法存根for( int i = 0 ; i < fishs.size() ; i ++ ) {Fish fish = fishs.get(i);//检查碰撞:如果是true则执行碰撞,否则没有参数碰撞if( hit(fish) ) {//产生碰撞:第一种情况吃掉其他鱼;第二种情况己方鱼被吃游戏结束if(myFish.zhanLi >= fish.zhanLi) {//自己鱼能吃掉敌方鱼,变强switch(fish.zhanLi) {case 1 ://吃最小鱼加一分score ++;break;case 2 ://吃中下等鱼加二分score += 2;break;case 3 ://吃中上等鱼加五分score += 5;break;case 4 ://吃大鱼加十分score += 10;break;}//升级if(score >= 5) {myFish.zhanLi = 2;}if(score >= 25) {myFish.zhanLi = 3;}if(score >= 45) {myFish.zhanLi = 4;}//其他鱼要消失fishs.remove(i);//自己鱼变大if(myFish.zhanLi > oldzhanLi) {myFish.x1 = (int)(myFish.x1*1.1);myFish.y1 = (int)(myFish.y1*1.1);oldzhanLi = myFish.zhanLi;}}else {//自己鱼被吃,游戏结束//游戏状态分 0:游戏加载;1:游戏开始;2:游戏暂停;3:游戏结束state = 3;//游戏结束}}}}/*** 检查碰撞:如果是true则执行碰撞,否则没有参数碰撞 * @param fish* @return*/private boolean hit(Fish fish) {// TODO 自动生成的方法存根//找出自己鱼的坐标和其他鱼的坐标int x = myFish.x + (myFish.x1 - myFish.x)/2;//己方鱼的x中心int y = myFish.y + (myFish.y1 - myFish.y)/2;//己方鱼的y中心if(x >= fish.x && x <= fish.x + fish.length) {if(y >= fish.y && y <= fish.y + fish.height) {return true;}}return false;}/*** 生成其他鱼对象*/private void createFishs() {// TODO 自动生成的方法存根if(miniFish ++ % 200 == 0) {//生成最小的鱼的速度fishs.add(new MiniFish());}if(middleFish ++ % 400 == 0) {//生成中等下的鱼的速度fishs.add(new MiddleFish());}if((bigFish ++ % 1000) == 0) {//生成中等上的鱼的速度fishs.add(new bigFish());}if((superFish++%5000)==0) {//生成大的鱼的速度fishs.add(new superFish());}}
}
鱼的父类
package 大鱼吃小鱼;import java.awt.Graphics;
import java.awt.Image;public class Fish {int x,y;//己鱼的初始位置int length,height;//己鱼的宽和高boolean isMoveLeft = true;//己鱼的初始方向Image image;//己鱼的图片Image[] img = new Image[10];//裁剪大小的范围int sx1,sy1;int sx2,sy2;int zhanLi;int step;int count;//绘制public void draw(Graphics g) {}public void move() {}
}
绘制各种鱼
有mini鱼、middle鱼、big鱼、super鱼
- mini鱼
package 大鱼吃小鱼;import java.awt.Graphics;import javax.swing.ImageIcon;/**1. 最小鱼2. @author jin3. */
public class MiniFish extends Fish{public MiniFish() {int r = (int)(Math.random()*2);//取随机值,要么1,要么0if(r == 0) {isMoveLeft = false;//朝向左移,从右边进x = -68;}else {isMoveLeft = true;//朝向右移,从右边进x = 1440;}y = (int)(Math.random()*900);//y取随机值length = 68;height = 55;zhanLi = 1;//界面坐标step = 0;image = new ImageIcon("images/fish08.png").getImage();}/*** 绘制最小鱼的功能,向左向右移动*/public void draw(Graphics g) {super.draw(g);if( isMoveLeft ) {//己鱼方向向左sy1=height*step;sx1=0;sy2=height*step+height;sx2=length;//画最小鱼的图g.drawImage(image, x--, y, x+length, y+height, sx1, sy1, sx2, sy2, null);}else {//己鱼方向向右sx2=0;sy2=height*step;sx1=length;sy1=height*step+height;//画最小鱼的图g.drawImage(image, x++, y, x+length, y+height, sx1, sy1, sx2, sy2, null);}}public void move() {// TODO Auto-generated method stubif(step<1){step++;}elsestep=0;}
}
- middle鱼
package 大鱼吃小鱼;/*** 中等下鱼* @author jin**/
import java.awt.Graphics;import javax.swing.ImageIcon;public class MiddleFish extends Fish {public MiddleFish() {int r = (int)(Math.random()*2);//取随机值,要么1,要么0if(r == 0) {isMoveLeft = false;//朝向左移,从右边进x = -68;}else {isMoveLeft = true;//朝向右移,从右边进x = 1440;}y = (int)(Math.random()*900);//y取随机值length = 96;height = 29;zhanLi = 2;//界面坐标step = 0;image = new ImageIcon("images/fish12.png").getImage();}/*** 绘制中等鱼的功能,向左向右移动*/public void draw(Graphics g) {super.draw(g);if( isMoveLeft ) {//己鱼方向向左sy1=height*step;sx1=0;sy2=height*step+height;sx2=length;//画最小鱼的图g.drawImage(image, x--, y, x+length, y+height, sx1, sy1, sx2, sy2, null);}else {//己鱼方向向右sx2=0;sy2=height*step;sx1=length;sy1=height*step+height;//画最小鱼的图g.drawImage(image, x++, y, x+length, y+height, sx1, sy1, sx2, sy2, null);}}public void move() {// TODO Auto-generated method stubint step = 0;if(step<2) {step++;}elsestep=0;}
}
- big鱼
package 大鱼吃小鱼;
import java.awt.Graphics;import javax.swing.ImageIcon;
/*** 中等上鱼* @author jin**/
public class bigFish extends Fish {public bigFish() {int r = (int)(Math.random()*2);//取随机值,要么1,要么0if(r == 0) {isMoveLeft=false;//朝向左移,从右边进x=-310;}else {isMoveLeft=true;//朝向右移,从右边进x=1440;}y=(int)(Math.random()*900);length= 310;height= 104;zhanLi=3;//界面坐标step=0;image = new ImageIcon("images/fish03.png").getImage();}/*** 绘制最小鱼的功能,向左向右移动*/public void draw(Graphics g){if(isMoveLeft) {//左移sy1=height*step;sx1=0;sy2=height*step+height;sx2=length;g.drawImage(image, x--, y, x+length, y+height, sx1, sy1, sx2,sy2, null);}else {//右移sx2=0;sy2=height*step;sx1=length;sy1=height*step+height;g.drawImage(image, x++, y, x+length, y+height, sx1, sy1, sx2,sy2, null);}}public void move() {// TODO Auto-generated method stubif(step<8){step++;}elsestep=0;}
}
- super鱼
package 大鱼吃小鱼;
import java.awt.Graphics;import javax.swing.ImageIcon;public class superFish extends Fish {public superFish() {int r = (int)(Math.random()*2);//取随机值,要么1,要么0if(r == 0) {isMoveLeft=false;//朝向左移,从右边进x=-380;}else {isMoveLeft=true;//朝向右移,从右边进x=1440;}y=(int)(Math.random()*900);length= 380;height= 210; zhanLi=4;//界面坐标step=0;image = new ImageIcon("images/fish17.png").getImage();}/*** 绘制最小鱼的功能,向左向右移动*/public void draw(Graphics g){if(isMoveLeft) {//左移sy1=height*step;sx1=0;sy2=height*step+height;sx2=length;g.drawImage(image, x--, y, x+length, y+height, sx1, sy1, sx2,sy2, null);}else {//右移sx2=0;sy2=height*step;sx1=length;sy1=height*step+height;g.drawImage(image, x++, y, x+length, y+height, sx1, sy1, sx2,sy2, null);}}public void move() {// TODO Auto-generated method stubif(step<1) {step++;}elsestep=0;}
}
代码所需要的图片
- 游戏界面
images/start.png
游戏运行界面
images/bg.jpg
super鱼
images/fish17.png
big鱼
images/fish03.png
middle鱼
images/fish12.png
自己鱼和mini鱼
images/fish08.png
大鱼吃小鱼java程序设计相关推荐
- 《Java程序设计》第十一周学习总结
20175334 <Java程序设计>第十一周学习总结 教材学习内容总结 第十三章 URL类 一个URL对象通常包含最基本的三部分信息:协议.地址.资源. URL对象调用 InputStr ...
- 20175320 2018-2019-2 《Java程序设计》第2周学习总结
20175320 2018-2019-2 <Java程序设计>第2周学习总结 教材学习内容总结 本周学习了教材的第二章及第三章的内容.在这两章中介绍了Java编程中的基本数据类型与数组以及 ...
- 20145101《Java程序设计》第4周学习总结
20145101<Java程序设计>第4周学习总结 教材学习内容总结 第六章 继承与多态 继承:避免多个类间重复定义共同行为. 把相同代码提升为父类 运用extends关键字的子类会继承扩 ...
- java程序设计_Java程序设计:学习笔记(4-5)(未完工)
声明: 本文内容基于"吉首大学软件学院-Java程序设计(Java面向对象程序设计)"网课与个人实践经验修改编写而成.本文属于Arcadia项目组成部分.若有错误或不足之处存在请联 ...
- 20155307 2016-2017-2 《Java程序设计》第10周学习总结
20155307 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程:就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据 ...
- 20155204 2016-2017-2 《Java程序设计》第3周学习总结
20155204 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 一个原始码中可以有多个类定义,但只能有一个公开类. 留心Scanner对于每一种类型的nex ...
- java课设推荐,《Java程序设计》课程设计报告推荐.docx
<Java程序设计>课程设计报告推荐 <Java程序设计>课程设计报告2015-2016学年 第一学期设计题目整数进制转换学生姓名邹晓刚学 号0专业班级信管1303指导教师 姜 ...
- 计算机浙大网java网站,网络课程—非计算机专业JAVA程序设计语言
<非计算机专业JAVA程序设计语言> 一.主要目标和主要内容: 该课程面向全校非计算机专业理工类本科生,是程序设计语言类必修的公共基础课之一.该课程的前导课程是<大学计算机基础> ...
- Java程序设计经典习题15道
Java程序设计总复习题 1.编写一个Java程序在屏幕上输出"你好!".(p13,例1-1) //programme name Helloworld.java public cl ...
- java程序设计pdf下载_Java程序设计(迟立颖) PDF扫描版[21MB]
Java程序设计由浅入深地介绍了Java的基础知识,并结合具体的实例重点阐述了Java面向对象的概念及其程序设计方法,还介绍了图形用户界面(GUI)等知识.全书共分11章,内容包括Java概述.Jav ...
最新文章
- 寻找汽车连接的解决方案
- 用 Docker 构建、运行、发布来一个 Spring Boot 应用
- [BZOJ 4827][Hnoi2017]礼物
- vue隐藏浏览器_一分钟学会Vue的条件渲染和列表渲染
- 利用iperf进行WiFi吞吐量的测试方法
- 记一道简单的Java面试题,但答错率很高!
- Postfix疯狂外发垃圾邮件之分析与解决
- NGINX防御CC攻击教程
- 安装ps2021后,解决adobe一直发送消息的办法
- LabVIEW显示Unicode字符
- 机器学习,深度学习,免费数据集汇总
- SSD【目标检测篇】
- 更换苹果推送服务证书Apple Push Services Certificate
- Mac 安装谷歌浏览器驱动
- 最实用的计算机系统清理加速,最实用的win7电脑清理垃圾方法分享
- 虚拟机下ROS调用笔记本摄像头
- 【论文阅读】Coupled Iterative Refinement for 6D Multi-Object Pose Estimation
- 20多岁的年纪,做什么将来才不后悔?
- Arithmetic Progression 题解(随机数使用)
- pbl和sbl_ROKSO、SBL、XBL、PBL、DBL 是什么意思?