昨天在B站大神那边,学习了一个用Java变成的小游戏,大鱼吃小鱼。

给大家把游戏的想换代码给大家分享一下。

GameWin---游戏主窗口

package com.sxt;/*
* @author 加墨少言
*@version 2021100100001
*
* */
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 = 1180;int height =640;double random;//计数器int time=0;Bg bg=new Bg();//敌方鱼类Enamy enamy;//敌方BOSS类Enamy boss;//是否生成BOSSboolean isboss=false;//我方鱼类MyFish myFish=new MyFish();public void launch(){this.setVisible(true);//显示窗口this.setSize(width,height);//调用窗口尺寸大小this.setLocationRelativeTo(null);//窗口居中显示this.setResizable(false);//窗口大小不可调整this.setTitle("小鱼成长历险记"+"  "+"2021100100001");//定义窗口名称this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭窗口,自动停止运行//创建鼠标点击事件,点击为1,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;}//监听键盘空格键(32),暂停游戏,在1和4之间切换if(e.getKeyCode()==32){switch (state){case 1:state=4;GameUtils.drawWord(getGraphics(),"游戏暂停!!!",Color.GREEN,120,350,500);break;case 4:state=1;break;}}}@Override//抬起public void keyReleased(KeyEvent e){super.keyReleased(e);if(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循环,40毫秒,调用一次repaintwhile (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.painSelf(gImage);}//添加BOSSif(isboss){boss.x=boss.x+boss.dir*boss.speed;boss.painSelf(gImage);//BOSS出现预警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.painSelf(gImage);}if(isboss){boss.painSelf(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;myFish.level=1;//积分为15及15以下时,等级为1}else if(GameUtils.count<=15){GameUtils.level=1;//积分为50及50以下时,等级为2//鱼类等级为2}else if (GameUtils.count<=50){GameUtils.level=2;myFish.level=2;//积分为150及150以下时,等级为3//鱼类等级为3}else if(GameUtils.count<=150){GameUtils.level=3;myFish.level=3;//积分为300及300以下时,等级为4//鱼类等级为3}else if (GameUtils.count<=300){GameUtils.level=4;myFish.level=3;//当积分超过300,跳转界面3(胜利)}else if (GameUtils.count>300){state =3;}//定义一个随机函数random=Math.random();//通过难度等级,生成对应的鱼switch (GameUtils.level) {case 4://90秒时,开始出现BOSS鱼类if(time%90==0){if (random>0){boss=new Enamy_Boss();isboss=true;}}case 3:case 2://60秒时,开始出现3号鱼类if(time%60==0){if(random>0.5){enamy=new Enamy_3_L();}else {enamy=new Enamy_3_R();}GameUtils.EnamyList.add(enamy);}case 1://30秒时,开始出现2号鱼类if(time%30==0){if(random>0.5){enamy=new Enamy_2_L();}else {enamy=new Enamy_2_R();}GameUtils.EnamyList.add(enamy);}case 0://10秒时,开始添加1号鱼类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.x+enamy.dir*enamy.speed;if(isboss){//如果BOSS矩形和敌方鱼类矩形碰撞,敌方鱼类扭转到制定位置if(boss.getRec().intersects(enamy.getRec())){enamy.x=-200;enamy.y=-200;}//如果BOSS矩形和玩家鱼矩形碰撞,跳转到界面2(失败)if(boss.getRec().intersects(myFish.getRec())){state=2;}}//我方鱼与敌方鱼碰撞检测if(myFish.getRec().intersects(enamy.getRec())){//如果我的鱼类等级,高于鱼类类型,吃掉鱼,获得积分,地方鱼类重新出现在指定位置if(myFish.level>=enamy.type){System.out.println("吃啦");System.out.println("获得"+GameUtils.count+"积分");enamy.x=-200;enamy.y=-200;GameUtils.count=GameUtils.count+enamy.count;}else {//不然,跳转到界面2(失败)state=2;}}}}//重新开始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;}//主方法public static void main(String[] args){GameWin gameWin =new GameWin();gameWin.launch();}
}

Bg---游戏背景图片

package com.sxt;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.drawWord(g,"开始",Color.red,80,450,350);break;case 1:GameUtils.drawWord(g,"积分"+GameUtils.count,Color.ORANGE,30,200,70);GameUtils.drawWord(g,"难度"+GameUtils.level,Color.ORANGE,30,600,70);GameUtils.drawWord(g,"等级"+fishlevel,Color.ORANGE,30,1000,70);break;case 2:GameUtils.drawWord(g,"积分"+GameUtils.count,Color.ORANGE,30,200,70);GameUtils.drawWord(g,"难度"+GameUtils.level,Color.ORANGE,30,600,70);GameUtils.drawWord(g,"等级"+fishlevel,Color.ORANGE,30,1000,70);GameUtils.drawWord(g,"失败",Color.red,200,350,350);break;case 3:GameUtils.drawWord(g,"积分"+GameUtils.count,Color.ORANGE,30,200,70);GameUtils.drawWord(g,"难度"+GameUtils.level,Color.ORANGE,30,600,70);GameUtils.drawWord(g,"等级"+fishlevel,Color.ORANGE,30,1000,70);GameUtils.drawWord(g,"胜利",Color.red,150,700,500);break;case 4:break;default:}}
}

GameUtil----工具类

package com.sxt;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("img/sea.jpg");//敌方鱼类public static Image enemyl_img=Toolkit.getDefaultToolkit().createImage("img/enemyfish/fish1_l.jpg");public static Image enemyr_img=Toolkit.getDefaultToolkit().createImage("img/enemyfish/fish1_r.jpg");public static Image enemyl_2img=Toolkit.getDefaultToolkit().createImage("img/enemyfish/fish2_l.jpg");public static Image enemyr_2img=Toolkit.getDefaultToolkit().createImage("img/enemyfish/fish2_r.jpg");public static Image enemyl_3img=Toolkit.getDefaultToolkit().createImage("img/enemyfish/fish3_l.jpg");public static Image enemyr_3img=Toolkit.getDefaultToolkit().createImage("img/enemyfish/fish3_r.jpg");public static Image bossimg=Toolkit.getDefaultToolkit().createImage("img/enemyfish/boss.jpg");//我方鱼public static Image MyFishimg_L=Toolkit.getDefaultToolkit().createImage("img/myfish/myfish_left.jpg");public static Image MyFishimg_R=Toolkit.getDefaultToolkit().createImage("img/myfish/myfish_right.jpg");//绘制文字的工具类public static void drawWord(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);}
}

MyFish----我的鱼

package com.sxt;import java.awt.*;public class MyFish {//图片Image img=GameUtils.MyFishimg_L;//坐标int x=700;int y=500;int width=94;int height=57;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);}
}

Enamy----敌方鱼类

package com.sxt;import java.awt.*;public class Enamy {//定义图片Image img;//定义物体坐标int x;int y;int width;int height;//移动速度int speed;//方向int dir = 1;//类型int type;//分值int count;//绘制自身的方法public void painSelf(Graphics g){g.drawImage(img,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=-57;this.y=(int)(Math.random()*700+100);this.width=57;this.height=30;this.speed=5;this.count=1;this.type=1;this.img=GameUtils.enemyl_img;}
}
class Enamy_1_R extends Enamy_1_L{Enamy_1_R(){this.x=1400;dir=-1;this.img=GameUtils.enemyr_img;}
}
//定义第二类鱼
class Enamy_2_L extends Enamy{Enamy_2_L(){this.x=-100;this.y=(int)(Math.random()*700+100);this.width=69;this.height=37;this.speed=7;this.count=2;this.type=2;this.img=GameUtils.enemyl_2img;}
}
class Enamy_2_R extends Enamy_2_L{Enamy_2_R(){this.x=1400;dir=-1;this.img=GameUtils.enemyr_2img;}
}
//定义第三类鱼
class Enamy_3_L extends Enamy{Enamy_3_L(){this.x=-300;this.y=(int)(Math.random()*700+100);this.width=64;this.height=39;this.speed=13;this.count=4;this.type=4;this.img=GameUtils.enemyl_3img;}@Override//因为鱼体积过大,从新定义碰撞矩形public 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.img=GameUtils.enemyr_3img;}
}//定义BOSS类
class Enamy_Boss extends Enamy{Enamy_Boss(){this.x=-1000;this.y=(int)(Math.random()*700+100);this.width=300;this.height=300;this.speed=20;this.type=10;this.count=0;this.img=GameUtils.bossimg;}
}

链接:https://pan.baidu.com/s/1XcoB1Ve5xrs1Le0rWlj1rw 
提取码:aabb

JAVA初级游戏项目(大鱼吃小鱼)相关推荐

  1. 【java游戏项目】适合初学者练习的java小游戏--大鱼吃小鱼

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

  2. 今天分享的Java开源游戏项目是桌球游戏,初学者也可以用来练习喔~

    今天分享的Java开源游戏项目是桌球游戏,初学者也可以用来练习喔~ [源码+教程]Java桌球游戏_Java初级项目_Java练手项目_Java项目实战_Java游戏开发实战教学_Java小游戏_体验 ...

  3. 年底了,如何准备 Java 初级和高级的技术面试?

    作者:hsm_computer 来自:cnblogs.com/JavaArchitect/p/9032323.html 本人最近几年一直在做java后端方面的技术面试官,而在最近两周,又密集了面试了一 ...

  4. 面试总结----java初级工程师

    最近在找java初级工程师的工作,投了很多简历都没有反馈,只收到了几个面试通知,可能是因为工作年限和项目经历都不是很丰富,另外一个原因可能是之前接触的技术不新,对于现在想进互联网公司来说,技术上不太符 ...

  5. java的编译器怎么出来_怎样掌握ava编译器的使用,教程在这里,如何进行Java初级学习...

    原标题:怎样掌握ava编译器的使用,教程在这里,如何进行Java初级学习 Java的学习中,并没有那么的繁琐,只需要我们逐步掌握,就能够发觉java是全世界最好的编程语言之一.那么今天就带领大家进行简 ...

  6. 如何准备Java初级和高级技术的面试呢?

    IT行业的崛起带动了一大批的新兴职业,Java数据开发就是其中之一,作为IT行业的刚需职位,企业对合格的Java开发人员求贤若渴, 在各大主流招聘平台上, Java相关职位数量一直名列前茅,那么我们如 ...

  7. java面试总结(一)-----如何准备Java初级和高级的技术面试

    java面试总结(一)--如何准备Java初级和高级的技术面试 本文内容来自:https://mp.weixin.qq.com/s?__biz=MzAxNDMwMTMwMw==&mid=224 ...

  8. java吃货联盟系统源码_小项目,吃货联盟,java初级小项目,源代码

    小项目,吃货联盟,java初级小项目,源代码 1importjava.util.Scanner;23/**4* 吃货联盟订餐管理系统5*6*/7publicclassOrderingMsg {8pub ...

  9. 编程java好学吗,java初级编程好学吗

    先就业后付款 java初级编程好学吗 IT培训网面向所有课程学员提供先就业后付款学习方案,保证学员稳定就业,可谓0学费!免除学习压力. 正文: java初级编程好学吗,计算机专业的学生怎样练习编程才能 ...

最新文章

  1. 电子商务网站是这样诞生的
  2. C# Get network adapter info.
  3. 【职场】技术P7往后是一道坎?
  4. 黑马程序员_集合学习1
  5. 掌握 Angular2 的服务 (service)
  6. 使用 SQL 语句实现一个年会抽奖程序
  7. go 怎么等待所有的协程完成_理解真实世界中 Go 的并发 BUG
  8. innerXml,outerXml,innerText的不同
  9. 最新小白详细描述在centos7.5上安装python3并使用Nginx+virtualenv+supervisor来部署tornado项目(整理集合结合实际)系列1
  10. 【Java_基础】java中static与final关键字的区别
  11. cs231n作业——softmax
  12. linux上apk免杀,kali 免杀工具shellter安装以及使用(示例代码)
  13. VSCode使用Windows用户名而不是config中设置的User
  14. 为什么边缘概率密度是联合概率密度的积分_看懂蒙特卡洛积分(一) 概率分布变换与随机采样...
  15. segmentation fault(core dump);Run-Time Check Failure #3 -The variable 'p' is being used without bein
  16. 微信小程序实现拍照功能
  17. 神奇密码锁 bfs
  18. [Android Studio]开发APP应用出现软件程序打开闪退的排错
  19. 企业网站制作之PageAdmin自助建站系统
  20. VMWare Player设置双屏显示

热门文章

  1. 从原始文档到KNN分类算法实现(一)
  2. Android 如何批量改变字体颜色
  3. 赵小楼《天道》《遥远的救世主》深度解析(10)肖亚文对丁元英有没有动过心思?
  4. Python图像处理丨带你掌握傅里叶变换原理及实现(含图片见解)
  5. IDEA插件之输入法自动切换【Smart Input Source】
  6. IIS中应用程序池和站点通过命令启停方法
  7. IIS应用程序池标识的权限说明
  8. Praat语音标注说明
  9. 模块和包管理工具npm
  10. LightOJ 1070 Algebraic Problem (推导+矩阵快速幂)