Java项目黄金矿工小游戏

一、功能点

本项目分为15个功能点:1.窗口绘制2.勾爪往返旋转3.物体批量绘制4.双缓存解决闪动问题5.点和矩形碰撞检测6.多种类物体随机生成7.物体堆叠检测8.多种类抓取速度判定9.积分设置10.关卡设置11.重新开始12.单关卡倒计时13.金块的快速拉取14.石块爆破15.商店购物。

二、项目结构

代码结构:

 结构体:

功能实现:

在Game类中继承JFrame,对屏幕上window的对象,能够最大化、最小化、关闭。

设置了5种游戏状态(参数为state)
        0:游戏未开始
        1:游戏运行中
        2:进入商店
        3:游戏失败
        4:游戏胜利

创建石块,金块的列表集合,随机生成石块,金块,同时判断是否发生了重叠,如重叠则不可生成。

初始化窗口信息,大小、位置、标题等,根据游戏的状态应用鼠标点击,具体为左右摇摆,点击左键,抓取返回,点击右键。

当满足本关卡获胜条件,通过重复绘制图片游戏进入下一关。

调用画笔类绘制金块,石块。

三:类

主类:Game

背景类:BackGround

绳索类:Rope

父类:Object

子类:Rock,Gold

四:代码解读:

主类Game类:

public class Game extends JFrame {
    //0未开始,1表示运行中,2表示商店,3表示失败,4表示胜利
    static int state;
    //存储金块,石块
    List<Object> objectList = new ArrayList<>();

    //将图片载入到程序当中
   BackGround bg = new BackGround();
   Rope line = new Rope(this);
    {
        //是否可以放置
        boolean isPlace = true;
        for (int i=0;i<11;i++){
            double random = Math.random();
            Gold gold;//存放当前生成的金块
            if(random<0.3){
                gold = new SmallGold();
            }else if(random<0.7){
                gold = new Gold();
            }else {
                gold = new BigGold();
            }
           for (Object obj:objectList){
               if(gold.getRec().intersects(obj.getRec())){
                   //不可放置,需重新生成
                   isPlace = false;
                   i--;
               }
           }
           if (isPlace){
               objectList.add(gold);
           }else {
               isPlace = true;
               i--;
           }
        }
        for (int i=0;i<3;i++){
            Rock rock = new Rock();
            for (Object obj:objectList){
                if (rock.getRec().intersects(obj.getRec())){
                    isPlace = false;
                }
            }
            if (isPlace){
                objectList.add(rock);
            }else {
                isPlace = true;
                i--;
            }
        }
    }

   Image offScreenImage;

    void launch(){  //初始化窗口信息
        this.setVisible(true); //设置窗口是否可见
        this.setSize(768,1000);//设置窗口大小
        this.setLocationRelativeTo(null);//设置窗口位置,使窗口居中
        this.setTitle("黄金矿工");//设置窗口标题
        setDefaultCloseOperation(EXIT_ON_CLOSE);//创建关闭窗口的方法

        addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                switch (state){
                    case 0:
                        if (e.getButton()==3){
                            state = 1;
                            bg.startTime = System.currentTimeMillis();
                        }
                        break;
                    cas
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值