IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java项目大鱼吃小鱼 -> 正文阅读

[Java知识库]java项目大鱼吃小鱼

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

    @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.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;
    //是否生成boss
    boolean 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()
        {
            @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)
                {
                    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);
                //WASD
                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();
            }
        }

    }



    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知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-05 11:54:42  更:2021-12-05 11:57:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:44:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码