Java大鱼吃小鱼的项目实战 您所在的位置:网站首页 大鱼吃小鱼游戏素材 Java大鱼吃小鱼的项目实战

Java大鱼吃小鱼的项目实战

2024-07-18 03:57| 来源: 网络整理| 查看: 265

前言:

游戏参考于B站尚学堂大鱼吃小鱼,主体框架不变,代码稍有改动

大鱼吃小鱼: 大鱼吃小鱼经典版是一款趣味十足的休闲益智类游戏,通关吃掉比自己的小鱼让自己变大,成为海洋霸主。

游戏Java知识:变量、数据类型、判断语句、循环结构、类的继承、简单窗口创建、图形图片的绘制、双缓存、鼠标事件、键盘事件

代码运行环境:jdk-14.0.2

操作方法:w,a,s,d控制小鱼方向(英文)

游戏代码主要框架:

游戏素材包:

敌方鱼类:

我方鱼类:

游戏代码:

1.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,700,500); break; case 1: GameUtils.drawWord(g,"积分"+GameUtils.count,Color.ORANGE,50,200,120); GameUtils.drawWord(g,"难度"+GameUtils.level,Color.ORANGE,50,600,120); GameUtils.drawWord(g,"等级"+fishLevel,Color.ORANGE,50,1000,120); break; case 2: GameUtils.drawWord(g,"积分"+GameUtils.count,Color.ORANGE,50,200,120); GameUtils.drawWord(g,"难度"+GameUtils.level,Color.ORANGE,50,600,120); GameUtils.drawWord(g,"等级"+fishLevel,Color.ORANGE,50,1000,120); GameUtils.drawWord(g,"失败",Color.red,80,700,500); break; case 3: GameUtils.drawWord(g,"积分"+GameUtils.count,Color.ORANGE,50,200,120); GameUtils.drawWord(g,"难度"+GameUtils.level,Color.ORANGE,50,600,120); GameUtils.drawWord(g,"等级"+fishLevel,Color.ORANGE,50,1000,120); GameUtils.drawWord(g ,"胜利",Color.red,80,700,500); break; case 4: GameUtils.drawWord(g,"积分"+GameUtils.count,Color.ORANGE,50,200,120); GameUtils.drawWord(g,"难度"+GameUtils.level,Color.ORANGE,50,600,120); GameUtils.drawWord(g,"等级"+fishLevel,Color.ORANGE,50,1000,120); default: } } }

2.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 paintSelf(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 = -45; this.y = (int)(Math.random()*700+100); this.width = 45; this.height = 69; this.speed = 10; this.count = 1; this.type = 1; this.img = GameUtils.enamy1_img; } } class Enamy_1_R extends Enamy_1_L{ Enamy_1_R(){ this.x = 1400; dir = -1; this.img =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.img =GameUtils.enamyl_2img; } } class Enamy_2_R extends Enamy_2_L{ Enamy_2_R(){ this.x = 1400; dir = -1; this.img = 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 = 20; this.count = 3; this.type = 3; this.img =GameUtils.enamyl_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.enamyr_3img; } } class Enamy_Boss extends Enamy{ Enamy_Boss(){ this.x = -1000; this.y = (int)(Math.random()*700+100); this.width = 200; this.height = 200; this.speed = 80; this.count = 0; this.type = 10; this.img = GameUtils.bossimg; } }

3.MyFish类(我方鱼类):

package com.sxt; 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); } }

4.GameUtils类(工具类):

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 = 60; //关卡等级 static int level = 0; //敌方鱼类集合 public static List EnamyList = new ArrayList(); //背景图 public static Image bgimg = Toolkit.getDefaultToolkit().createImage("images/sea.jpg"); //敌方鱼类 public static Image enamy1_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 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); } }

5.GameWin类(主窗口类):

package com.sxt; import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ; 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暂停,5重新开始*/ //定义游戏默认状态 static int state = 0; Image offScreenImage; //宽高 int width = 1440; int height = 900; double random; //计数器 int time = 0; //背景 Bg bg = new Bg(); //敌方鱼类 Enamy enamy; //是否生成boss boolean isboss = false; //boss类 Enamy boss; //我方鱼类 MyFish myFish = new MyFish(); public void launch(){ this.setVisible(true); this.setSize(width,height); this.setLocationRelativeTo(null); //this.setResizable(false); this.setTitle("大鱼吃小鱼"); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); this.addMouseListener(new MouseAdapter() { @Override public 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); //WASD if (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){ switch (state){ case 1: state = 4; GameUtils.drawWord(getGraphics(),"游戏暂停!!!",Color.red,50,600,400); 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 (true){ repaint(); time++; try { Thread.sleep(40); } catch (InterruptedException e) { e.printStackTrace(); } } } @Override 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: logic(); myFish.paintSelf(gImage); for (Enamy enamy:GameUtils.EnamyList) { enamy.paintSelf(gImage); } if (isboss){ boss.x = boss.x + boss.dir * boss.speed; boss.paintSelf(gImage); if (boss.x= enamy.type) { enamy.x = -200; enamy.y = -200; GameUtils.count = GameUtils.count + enamy.count; } else { 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(); } }

结束语:

游戏还是有很多缺陷的地方,关卡不多可以设置一些关卡,也可以加一些道具,随机引发鱼潮之类的玩法,可以自己去改善,去修改代码!

游戏源码下载运行时,如果出错可评论区留言,也可复制错误搜索解决,很多问题都是比较常见的。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有