• 步骤 :
  • 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鱼

  1. 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;}
}
  1. 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;}
}
  1. 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;}
}
  1. 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;}
}

代码所需要的图片

  1. 游戏界面
    images/start.png

  1. 游戏运行界面
    images/bg.jpg

  2. super鱼
    images/fish17.png

  3. big鱼
    images/fish03.png

  4. middle鱼
    images/fish12.png

  5. 自己鱼和mini鱼
    images/fish08.png

大鱼吃小鱼java程序设计相关推荐

  1. 《Java程序设计》第十一周学习总结

    20175334 <Java程序设计>第十一周学习总结 教材学习内容总结 第十三章 URL类 一个URL对象通常包含最基本的三部分信息:协议.地址.资源. URL对象调用 InputStr ...

  2. 20175320 2018-2019-2 《Java程序设计》第2周学习总结

    20175320 2018-2019-2 <Java程序设计>第2周学习总结 教材学习内容总结 本周学习了教材的第二章及第三章的内容.在这两章中介绍了Java编程中的基本数据类型与数组以及 ...

  3. 20145101《Java程序设计》第4周学习总结

    20145101<Java程序设计>第4周学习总结 教材学习内容总结 第六章 继承与多态 继承:避免多个类间重复定义共同行为. 把相同代码提升为父类 运用extends关键字的子类会继承扩 ...

  4. java程序设计_Java程序设计:学习笔记(4-5)(未完工)

    声明: 本文内容基于"吉首大学软件学院-Java程序设计(Java面向对象程序设计)"网课与个人实践经验修改编写而成.本文属于Arcadia项目组成部分.若有错误或不足之处存在请联 ...

  5. 20155307 2016-2017-2 《Java程序设计》第10周学习总结

    20155307 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程:就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据 ...

  6. 20155204 2016-2017-2 《Java程序设计》第3周学习总结

    20155204 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 一个原始码中可以有多个类定义,但只能有一个公开类. 留心Scanner对于每一种类型的nex ...

  7. java课设推荐,《Java程序设计》课程设计报告推荐.docx

    <Java程序设计>课程设计报告推荐 <Java程序设计>课程设计报告2015-2016学年 第一学期设计题目整数进制转换学生姓名邹晓刚学 号0专业班级信管1303指导教师 姜 ...

  8. 计算机浙大网java网站,网络课程—非计算机专业JAVA程序设计语言

    <非计算机专业JAVA程序设计语言> 一.主要目标和主要内容: 该课程面向全校非计算机专业理工类本科生,是程序设计语言类必修的公共基础课之一.该课程的前导课程是<大学计算机基础> ...

  9. Java程序设计经典习题15道

    Java程序设计总复习题 1.编写一个Java程序在屏幕上输出"你好!".(p13,例1-1) //programme name Helloworld.java public cl ...

  10. java程序设计pdf下载_Java程序设计(迟立颖) PDF扫描版[21MB]

    Java程序设计由浅入深地介绍了Java的基础知识,并结合具体的实例重点阐述了Java面向对象的概念及其程序设计方法,还介绍了图形用户界面(GUI)等知识.全书共分11章,内容包括Java概述.Jav ...

最新文章

  1. 寻找汽车连接的解决方案
  2. 用 Docker 构建、运行、发布来一个 Spring Boot 应用
  3. [BZOJ 4827][Hnoi2017]礼物
  4. vue隐藏浏览器_一分钟学会Vue的条件渲染和列表渲染
  5. 利用iperf进行WiFi吞吐量的测试方法
  6. 记一道简单的Java面试题,但答错率很高!
  7. Postfix疯狂外发垃圾邮件之分析与解决
  8. NGINX防御CC攻击教程
  9. 安装ps2021后,解决adobe一直发送消息的办法
  10. LabVIEW显示Unicode字符
  11. 机器学习,深度学习,免费数据集汇总
  12. SSD【目标检测篇】
  13. 更换苹果推送服务证书Apple Push Services Certificate
  14. Mac 安装谷歌浏览器驱动
  15. 最实用的计算机系统清理加速,最实用的win7电脑清理垃圾方法分享
  16. 虚拟机下ROS调用笔记本摄像头
  17. 【论文阅读】Coupled Iterative Refinement for 6D Multi-Object Pose Estimation
  18. 20多岁的年纪,做什么将来才不后悔?
  19. Arithmetic Progression 题解(随机数使用)
  20. pbl和sbl_ROKSO、SBL、XBL、PBL、DBL 是什么意思?

热门文章

  1. 未来十年最容易消失和最不易被取代的22个职业,越看越心惊!附相关专业
  2. 常见数据类型的API
  3. Out-of-Band(OOB)调研
  4. 趣图:没想到 CSS 深灰色是这样的
  5. 《关键对话》如何高效能沟通之何谓关键对话
  6. 【黑马旅游网】项目完结+未完成功能实现+个人总结+bug记录
  7. 研究背调:云安全--CASB、CSPM、CWPP
  8. Spring Cloud在国内中小型公司能用起来吗?
  9. CSS 伪类 after 右侧线
  10. Java并发编程3——线程状态转换