项目说明

此项目总共代码量为400行左右,在b站有教程(时长1h),适合于刚刚学完了java的同学做第一个项目。

程序运行效果图

图1-1运行效果图

玩法说明

玩家鼠标左键开始游戏,空格键暂停,用WASD控制小鱼的移动,游戏一共有四种难度,并有三种普通鱼和一种boss鱼,吃掉普通鱼会获得相应的积分,无法吃掉boss鱼,积分达到300,游戏胜利。

图1-2boss鱼

最终打包可运行文件下载

点击下载

以下为项目实现部分------------------------------------------------

文件组织形式

demo2中创建以下几个类,images文件为图片资源,私信获取哦

源码部分

Bg.java

package demo1;import java.awt.*;public class Bg
{void paintSelf(Graphics g, int fishLevel){g.drawImage(GameUtils.bgimg,0,0,null);switch (GameWin.state){case 0:GameUtils.drwaWord(g,"开始",Color.red,80,700,500);break;case 1:GameUtils.drwaWord(g,"积分"+GameUtils.count,Color.orange,50,200,120);GameUtils.drwaWord(g,"难度"+GameUtils.level,Color.orange,50,600,120);GameUtils.drwaWord(g,"等级"+fishLevel,Color.orange,50,1000,120);break;case 2:GameUtils.drwaWord(g,"积分"+GameUtils.count,Color.orange,50,200,120);GameUtils.drwaWord(g,"难度"+GameUtils.level,Color.orange,50,600,120);GameUtils.drwaWord(g,"等级"+fishLevel,Color.orange,50,1000,120);GameUtils.drwaWord(g,"失败",Color.red,80,700,500);break;case 3:GameUtils.drwaWord(g,"积分"+GameUtils.count,Color.orange,50,200,120);GameUtils.drwaWord(g,"难度"+GameUtils.level,Color.orange,50,600,120);GameUtils.drwaWord(g,"等级"+fishLevel,Color.orange,50,1000,120);GameUtils.drwaWord(g,"胜利",Color.red,80,700,500);break;case 4:break;default:}}
}

Enamy.java

package demo1;import java.awt.*;public class Enamy
{//定义图片Image image;//定义物体坐标int x;int y;int width;int height;//移动速度int speed;//方向int dir = 1;//1为向右 -1为向左//类型int type;//分值int count;//绘制自身方法public void paintSelf(Graphics g){g.drawImage(image,x,y,width,height,null);}//获取自身矩形用于碰撞检测public Rectangle getRec(){return new Rectangle(x,y,width,height);}
}//敌方鱼左类
class Enamy_1_L extends Enamy
{Enamy_1_L(){this.x = -45;this.y = (int)(Math.random()*700 + 100);this.width = 45;this.height = 69;this.speed = 10;this.count = 1;this.type = 1;this.image = GameUtils.enamyl_img;}
}//敌方鱼右类
class Enamy_1_R extends Enamy_1_L
{Enamy_1_R(){this.x = 1400;dir = -1;this.image = GameUtils.enamyr_img;}
}class Enamy_2_L extends Enamy
{Enamy_2_L(){this.x = -100;this.y = (int)(Math.random()*700+100);this.width = 100;this.height = 100;this.speed = 5;this.count = 2;this.type = 2;this.image = GameUtils.enamyl_2img;}
}class Enamy_2_R extends Enamy_2_L
{Enamy_2_R(){this.x = 1400;dir = -1;this.image = GameUtils.enamyr_2img;}
}class Enamy_3_L extends Enamy
{Enamy_3_L(){this.x = -300;this.y = (int)(Math.random()*700+100);this.width = 300;this.height = 150;this.speed = 15;this.count = 3;this.type = 3;this.image = GameUtils.enamyl_3img;}@Overridepublic Rectangle getRec(){return new Rectangle(x + 40, y + 30,width - 80,height +- 60);}
}class Enamy_3_R extends Enamy_3_L
{Enamy_3_R(){this.x = 1400;dir = -1;this.image = GameUtils.enamyr_3img;}
}class Enamy_Boss extends Enamy
{Enamy_Boss(){this.x = -1000;this.y = (int)(Math.random()*700+100);this.width = 170;this.height = 170;this.speed = 40;this.count = 0;this.type = 10;this.image = GameUtils.bossimg;}
}

GameUtils.java

package demo1;import java.awt.*;
import java.util.ArrayList;
import java.util.List;public class GameUtils
{//方向static  boolean UP = false;static  boolean DOWN = false;static  boolean LEFT = false;static  boolean RIGHT = false;//分数static  int count = 0;//关卡等级static int level = 0;//敌方鱼类集合public static List<Enamy> EnamyList = new ArrayList<>();//背景图public static Image bgimg = Toolkit.getDefaultToolkit().createImage("images/sea.jpg");//图标public static Image icon = Toolkit.getDefaultToolkit().createImage("images/icon.png");//敌方鱼类public static Image enamyl_img = Toolkit.getDefaultToolkit().createImage("images/enemyFish/fish1_r.gif");public static Image enamyr_img = Toolkit.getDefaultToolkit().createImage("images/enemyFish/fish1_l.gif");public static Image enamyl_2img = Toolkit.getDefaultToolkit().createImage("images/enemyFish/fish2_r.png");public static Image enamyr_2img = Toolkit.getDefaultToolkit().createImage("images/enemyFish/fish2_l.png");public static Image enamyl_3img = Toolkit.getDefaultToolkit().createImage("images/enemyFish/fish3_r.png");public static Image enamyr_3img = Toolkit.getDefaultToolkit().createImage("images/enemyFish/fish3_l.png");public static Image bossimg = Toolkit.getDefaultToolkit().createImage("images/enemyFish/boss.gif");//我方鱼类public static Image MyFishimg_L = Toolkit.getDefaultToolkit().createImage("images/myFish/myfish_left.gif");public static Image MyFishimg_R = Toolkit.getDefaultToolkit().createImage("images/myFish/myfish_right.gif");//绘制文字的工具类public  static void drwaWord(Graphics g,String str,Color color,int size, int x, int y){g.setColor(color);g.setFont((new Font("仿宋",Font.BOLD,size)));g.drawString(str,x,y);}
}

GameWin.java

package demo1;import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;public class GameWin extends JFrame
{//游戏的五种状态 0未开始 1游戏中 2通关失败 3通关成功 4暂停//游戏默认状态static int state = 0;Image offScreenImage;//宽高int width = 1440;int height = 900;double random;//计数器int time = 0;//背景Bg bg = new Bg();//敌方鱼类Enamy enamy;//boss类Enamy boss;//是否生成bossboolean isboss = false;//我方鱼类MyFish myFish = new MyFish();public void lanch(){this.setVisible(true);this.setSize(width,height);this.setLocationRelativeTo(null);this.setResizable(false);this.setTitle("大鱼吃小鱼");this.setIconImage(GameUtils.icon);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);this.addMouseListener(new MouseAdapter(){@Overridepublic void mouseClicked(MouseEvent e){super.mouseClicked(e);if(e.getButton() == 1 && state == 0){state = 1;repaint();}if(e.getButton() == 1 && state == 2 || state == 3){reGame();state = 1;}}});//键盘移动this.addKeyListener(new KeyAdapter(){@Override//按压public void keyPressed(KeyEvent e){super.keyPressed(e);//WASDif(e.getKeyCode() == 87){GameUtils.UP = true;}if(e.getKeyCode() == 83){GameUtils.DOWN = true;}if(e.getKeyCode() == 65){GameUtils.LEFT = true;}if(e.getKeyCode() == 68){GameUtils.RIGHT = true;}if(e.getKeyCode() == 32){if(state == 1){state = 4;GameUtils.drwaWord(getGraphics(),"游戏暂停!!!",Color.red,50,600,400);}else if(state == 4) state = 1;}if(e.getKeyCode() == 75)//后路,按k 增加50积分{GameUtils.count += 50;}}@Override//抬起public void keyReleased(KeyEvent e){super.keyPressed(e);//WASDif(e.getKeyCode() == 87){GameUtils.UP = false;}if(e.getKeyCode() == 83){GameUtils.DOWN = false;}if(e.getKeyCode() == 65){GameUtils.LEFT = false;}if(e.getKeyCode() == 68){GameUtils.RIGHT = false;}}});while(true){repaint();time ++;try{Thread.sleep(40);}catch (InterruptedException e){e.printStackTrace();}}}public void paint(Graphics g){//懒加载模式初始化对象 双缓存解决闪屏问题offScreenImage = createImage(width,height);Graphics  gImage = offScreenImage.getGraphics();bg.paintSelf(gImage,myFish.level);//游戏状态switch (state){case 0:break;case 1:myFish.paintSelf(gImage);logic();for(Enamy enamy:GameUtils.EnamyList){enamy.paintSelf(gImage);}if(isboss){boss.x = boss.x + boss.dir * boss.speed;boss.paintSelf(gImage);if(boss.x < 0){gImage.setColor(Color.red);gImage.fillRect(boss.x,boss.y,2400,boss.height/30);}}break;case 2:for(Enamy enamy:GameUtils.EnamyList){enamy.paintSelf(gImage);}if(isboss){boss.paintSelf(gImage);}break;case 3:myFish.paintSelf(gImage);break;case 4:return;default:}g.drawImage(offScreenImage,0,0,null);}void logic(){//关卡难度if(GameUtils.count<5){GameUtils.level = 0;GameUtils.level = 0;myFish.level = 1;}else if(GameUtils.count<=15){GameUtils.level = 1;}else if(GameUtils.count<=50){GameUtils.level = 2;myFish.level = 2;}else if(GameUtils.count <= 150){GameUtils.level = 3;myFish.level = 2;}else if(GameUtils.count <= 300){GameUtils.level = 4;myFish.level = 3;}else if(GameUtils.count > 300){state = 3;//游戏胜利}random = Math.random();//敌方鱼生成switch (GameUtils.level){case 4:if(time % 60 == 0){boss = new Enamy_Boss();isboss = true;}case 3:case 2:if(time % 30 == 0){if(random > 0.5){enamy = new Enamy_3_L();}else{enamy = new Enamy_3_R();}GameUtils.EnamyList.add(enamy);}case 1:if(time % 20 == 0){if(random > 0.5){enamy = new Enamy_2_L();}else{enamy = new Enamy_2_R();}GameUtils.EnamyList.add(enamy);}case 0:if(time % 10 == 0){if(random > 0.5){enamy = new Enamy_1_L();}else{enamy = new Enamy_1_R();}GameUtils.EnamyList.add(enamy);}break;default:}//移动方向for(Enamy enamy:GameUtils.EnamyList){enamy.x += enamy.dir * enamy.speed;//和boss鱼类碰撞检测if(isboss){if(boss.getRec().intersects(enamy.getRec())){enamy.x = -200;enamy.y = -200;}if (boss.getRec().intersects(myFish.getRec()))state = 2;}//我方鱼与敌方鱼碰撞检测if(myFish.getRec().intersects(enamy.getRec())){if(myFish.level >= enamy.type){enamy.x = -200;enamy.y = -200;GameUtils.count = GameUtils.count + enamy.count;}else //我方鱼被高级鱼吃掉{state = 2;}}}}public static void main(String[] args){GameWin gameWin = new GameWin();gameWin.lanch();}//重新开始void reGame(){GameUtils.EnamyList.clear();time = 0;myFish.level = 1;GameUtils.count = 0;myFish.x = 700;myFish.y = 500;myFish.width = 50;myFish.height = 50;boss = null;isboss = false;}}

MyFish.java

package demo1;import java.awt.*;public class MyFish
{//图片Image img = GameUtils.MyFishimg_L;//坐标int x = 700;int y = 500;int width = 50;int height = 50;//移动速度int speed  = 20;//等级int level = 1;void logic(){if(GameUtils.UP){y = y - speed;}if(GameUtils.DOWN){y = y + speed;}if(GameUtils.LEFT){x = x - speed;img = GameUtils.MyFishimg_L;}if(GameUtils.RIGHT){x = x + speed;img = GameUtils.MyFishimg_R;}}//绘制自身的方法public void paintSelf(Graphics g){logic();g.drawImage(img,x,y,width + GameUtils.count,height + GameUtils.count,null);}//获取自身矩形的方法,用于碰撞检测public Rectangle getRec(){return new Rectangle(x,y,width + GameUtils.count,height + GameUtils.count);}
}

java项目大鱼吃小鱼相关推荐

  1. 出自北大教授java项目大鱼吃小鱼游戏开发教学 附带源码和资料

    课程介绍: 大鱼吃小鱼,又称吞食鱼,是一款动作类小游戏.通过不断的吞吃比自己小的鱼类快速成长,最终成为海洋霸主. 本课程讲解一个大鱼吃小鱼游戏的详细开发过程.只要60分钟就可以完成一个你自己亲手开发出 ...

  2. 用JAVA来制作大鱼吃小鱼游戏,JAVA项目实战

    大鱼吃小鱼,又称吞食鱼,是一款动作类小游戏.通过不断的吞吃比自己小的鱼类快速成长,最终成为海洋霸主. 本课程讲解一个大鱼吃小鱼游戏的详细开发过程.只要60分钟就可以完成一个你自己亲手开发出来的Java ...

  3. java项目开发大鱼吃小鱼只需两小时

    上大学之前没必要去花钱培训哈.四年的时间足够自学了 可以参考我一下的建议: 看一些视频和书籍,注意你需要把基础打好.现在B站上等很多第三方网站上有免费的,其实质量很不错的我把我自己整理的一些比较好的书 ...

  4. github javaguide_GitHub上收获Star数排名前10的Java项目

    1. CS-Notes star:92.1k 介绍:技术面试必备基础知识.Leetcode.计算机操作系统.计算机网络.系统设计.Java.Python.C++ :地址:https://cyc2018 ...

  5. 新建eclipse的java项目报错处理

    新建eclipse的java项目报错处理:选中报错的项目文件夹→右击选择属性(ALT+Enter)→java构建路径→库→双击"构建路径上的JAR和类文件夹"下面的项→选择备用JR ...

  6. Java开发环境的搭建以及使用eclipse从头一步步创建java项目

    原文:出自本人的Linux博客http://blog.csdn.net/unix21/article/details/18813173 一.Java 开发环境的搭建 这里主要说windows环境下怎么 ...

  7. eclipse中java项目转换为web项目

    2019独角兽企业重金招聘Python工程师标准>>> 经常在eclipse中导入web项目时,出现转不了项目类型的问题,导入后就是一个java项目,有过很多次经历,今天也有同事遇到 ...

  8. eclipse中如何将java项目转为java Web项目

    有时候我们在eclipse中导入web项目时,系统当做一个java项目导入进来了.这时候在启动tomcat的服务器时无法找到该项目. 那么可以通过如下操作来将java项目转换为web项目. 1. 选择 ...

  9. 将一个普通的java项目转化为maven项目

    在学习Spring事务时,我参考的书的源码不是maven项目,整本书依赖的100多个jar包都在一个文件夹里,我本来对spring每个模块的学习源码都放在一个Github仓库里,每一个项目都是mave ...

  10. java项目_JNPF快速开发平台-简单快速高效开发java项目

    ◆JNPF快速开发平台 JNPF快速开发平台采用前后端分离技术.采用B/S架构开发,形成一站式开发多端(APP+PC)使用. 使用JNPF开发平台可以简单.快速.高效的构建各种类型java项目. ◆J ...

最新文章

  1. binary_crossentropy(二元交叉熵)的定义
  2. python教程:文件读写
  3. 几种排序算法性能的比较
  4. 河南版权登记,给自己的“孩子”一个身份证
  5. python批量识别图中文字自动命名_python实现批量命名照片
  6. div中iframe高度自适应问题
  7. 星益云聚合收银台系统
  8. 重构javascript_JavaScript代码清理:如何重构以使用类
  9. aws rds恢复数据库_使用AWS Glue将数据从AWS S3加载到AWS RDS SQL Server数据库
  10. 并发包 concurrent(一) Atomic
  11. StringUtil字符串小工具-功能扩展
  12. python: module ‘urllib‘ has no attribute ‘unquote‘(url解码)
  13. 如何理解IT、OT、CT?
  14. UltraCompare v21.00分析
  15. 为什么要读“无用”的古文
  16. 用 Python 在股票交易中实现布林带策略
  17. 何朝曦:构建云化安全能力的三个建议
  18. mysql 2509错误解决方法
  19. Qt图例类QLegend详解
  20. Hive自定义分区器流程

热门文章

  1. rime 简体中文 linux,Rime (简体中文)
  2. Oracle中字符串截取最全方法总结
  3. LSTM预测股票收盘价
  4. 马铃薯淀粉生产线的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  5. Tautology (logic)介绍
  6. 电容式 指纹识别 android 智能硬件
  7. jupyter添加快捷方式
  8. python输出星号等腰三角形_Python 打印矩形、直角三角形、等腰三角形、菱形
  9. CF898D. Alarm Clock(贪心 双指针)
  10. w ndows无法完成格式化,windows无法完成格式化怎么办【图文教程】