黄金矿工小游戏为什么到达指定目标分数后不跳转下一关捏

黄金矿工小游戏一共设置了五关,第一关到达目标积分后不跳转第二关,时间结束后显示失败,比较源码十多遍了也不知道问题出在哪里,求指点

img

img

源码如下(源码state2是药水,state3是失败,state4是成功,我没有写药水,所以我的state2是失败,state3是成功)

img

img

img

设置断点跟,先看if到底进入没有,到底哪个变量的值不正确
如果进入了if,那么后面到底怎么运行的
我看你代码里直接写了个dispose,你是把当前窗体释放了吗

这玩意咋看 哦

if(Bg.count>=bg.goal)这里怎么Bg一会大写 一会小写,是不是有问题,另外没有全部代码不好判断,最好是文本代码

你直接把源码放到问题的代码块里,这样方便帮你debug查错,你这贴图片咋看呀

JAVA小游戏黄金矿工

可以借鉴下

package game;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
 
public class GameWin extends JFrame {
    //0未开始 1 运行中 2 商店 3 失败 4 胜利
    static int state;
    //存储金块,石块
    List<Object> objectList = new ArrayList<>();
    Bg bg = new Bg();
    //引入线类
    line line = new line(this);
    //引入金块类
    //Gold gold=new Gold();
    {
        //是否可以放置
        boolean isPlace = true;
        for (int i = 0; i < 11; i++) {
            double random = Math.random();
            Gold gold;//存放当前生成的金块
            if (random < 0.3) {
                gold = new GoldMini();
            } else if (random < 0.7) {
                gold = new Gold();
            } else {
                gold = new GoldPlus();
            }
 
            for (Object obj : objectList) {
                if (gold.getRec().intersects(obj.getRec())) {
                    //不放置,需要重新生成
                    isPlace = false;
                }
            }
            if (isPlace) {
                objectList.add(gold);
            } else {
                isPlace = true;
                i--;
            }
        }
        for (int i = 0; i < 5; 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(WindowConstants.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;
                    case 1:
                        //左键编码为1
                        //左右摇摆点击左键
                        if (e.getButton() == 1 && line.state == 0) {
                            line.state = 1;
                        }
                        //抓取返回,点击右键
                        if (e.getButton() == 3 && line.state == 3 && Bg.waterNum > 0) {
                            Bg.waterFlag = true;
                            Bg.waterNum--;
                        }
                        break;
                    case 2:
                        if (e.getButton() == 1) {
                            bg.shop = true;
                        }
                        if (e.getButton() == 3) {
                            state = 1;
                            bg.startTime = System.currentTimeMillis();
                        }
                        break;
                    case 3:
                    case 4:
                        if (e.getButton() == 1) {
                            state = 0;
                            bg.reGame();
                            line.reGame();
                        }
                        break;
                    default:
                        break;
                }
            }
        });
        while (true) {
            repaint();
            nextlevel();
            //设置延迟
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    //下一关
    public void nextlevel() {
        if (bg.gameTime() && state == 1) {
            if (Bg.count >= bg.goal) {
                if (Bg.level == 5) {
                    state = 4;
                } else {
                    state = 2;
                    Bg.level++;
                }
            } else {
                state = 3;
            }
            dispose();
            GameWin gameWin = new GameWin();
            gameWin.launch();
        }
    }
    @Override
    public void paint(Graphics g) {
        //解决图片闪动问题
        offScreenImage = this.createImage(768, 1000);
        Graphics gImage = offScreenImage.getGraphics();
        bg.paintSelf(gImage);
        if (state == 1) {
            //绘制物体
            for (Object obj : objectList) {
                obj.paintSelf(gImage);
            }
            line.paintSelf(gImage);
        }
        //gold.paintSelf(gImage);
        g.drawImage(offScreenImage, 0, 0, null);
    }
 
    public static void main(String[] args) {
        //调用上面类
        GameWin gameWin = new GameWin();
        //调用类中方法
        gameWin.launch();
    }
}

源码发下呢