当前位置: 首页 > 知识库问答 >
问题:

Buggy Pipe游戏输出到JFrame

黄昊英
2023-03-14

我曾经以小程序的形式运行我的程序,当时运行良好,但我决定尝试让它在JFrame中运行。我最近遇到了覆盖问题,但我想我终于解决了这个问题。这是我最近一直在做的一个游戏,它基本上是Flappy Bird的再创造。我不打算出售我的完成版,因为我相信功劳不属于我。现在我正在寻找一个管道穿过屏幕,我计划在任何给定的时间在屏幕上最多制作3组管道。

帧未打开的修复错误新错误:不希望的输出

这是我的主要课程(游戏)

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    import javax.swing.Timer;

    public class Game {

        Pipes panel = new Pipes();

        public Game() {
            JFrame f = new JFrame();

            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.add(panel);
            f.setTitle("Pipe Game");
            f.pack();
            f.setLocationRelativeTo(null);
            f.setVisible(true);
            f.setResizable(false);

            Timer timer = new Timer(10, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    panel.move();
                    panel.repaint();
                }
            });
            timer.start();
        }

        public static void main(String args[]) {
            SwingUtilities.invokeLater(new Runnable() {

                @Override
                public void run() {
                    new Game();
                }
            });
        }
}

这是我的课,画(管道)

import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JPanel;

public class Pipes extends JPanel {
    //Declare and initialiaze variables
    int height = setHeight();
    int x1 = 754;   //xVal start
    int x2 = 75;    //pipe width
    int y1 = -1;    //yVal start
    int y2;         //pipe height
    int vel;        //pipe velocity
    int gap = 130;  //gap height

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        y2 = height;
        g.clearRect(0,0,750,500);                       //Clear screen
        g.drawRect(x1,y1,x2,y2);                        //Draw part 1
        g.drawRect(x1-3,y2-1,x2+6,25);                  //Draw part 2
        g.drawRect(x1-3,y2+25+gap,x2+6,25);             //Draw part 3
        g.drawRect(x1,y2+25+gap+25,x2,500-y2-49-gap);   //Draw part 4
    }

    public void move() {
        x1--;
    }

    public int getY() {
        return y2+25;
    }

    public int getX() {
        return x1-3;
    }

    public int setHeight() {
        int num = (int)(9*Math.random() + 1);
        int val = 0;
        if (num == 9)
        {
            val = 295;
        }
        else if (num == 8)
        {
            val = 246;
        }
        else if (num == 7)
        {
            val = 216;
        }
        else if (num == 6)
        {
            val = 185;
        }
        else if (num == 5)
        {
            val = 156;
        }
        else if (num == 4)
        {
            val = 125;
        }
        else if (num == 3)
        {
            val = 96;
        }
        else if (num == 2)
        {
            val = 66;
        }
        else
        {
            val = 25;
        }
        return val;
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(751, 501);
    }
}

共有1个答案

霍书
2023-03-14

我觉得你想要

public void run() {
   new Game();
}

而不是

public void run() {
   new Pipes();
}
 类似资料:
  • 我在Pygame中的游戏有一些问题。我希望窗口右上角的十字架在点击时退出游戏。但它似乎不起作用。我还希望它从空格键获取输入并掷骰子。 代码的其余部分都在下面,但是当我用这个循环时,屏幕会变黑。

  • 尝试用代码块c语言编写一个程序: 生成一个从的随机密码,并要求用户猜测该数字 如果用户猜测正确,则打印猜测是正确的 对于第一个猜测,如果它不正确,应该说热 如果用户的猜测越来越接近秘密,则告诉用户他正在变热 如果他的猜测离得更远的话,也可能是冷的 游戏继续,直到猜到密码 我当前的程序在猜测是热还是冷方面给出了错误的输出,也不确定我应该将vs如果有的话,或者在哪里使用 “else if”。如果不是太

  • 问题内容: 我正在用Java编写游戏,现在是Swing + JOGL-一个带有GLCanvas的JFrame。 我使用etc.事件()处理输入,但似乎无法正常工作: 当我同时按下3个以上的键时,它们无法正确注册 -显然这是键盘的错误,我必须找到替代的控制方案。 窗口丢失后,重新获得焦点,输入完全停止工作… 我究竟做错了什么? 有没有更好的方法来处理Java中的键盘输入? (除非我别无选择,否则我不

  • PS Vita上可游玩存储于PlayStaiton®Vita卡或从PlayStation®Store下载的游戏。 游戏的LiveArea™ 游玩PlayStaiton®Vita卡的游戏 游玩从PlayStation®Store下载的游戏 将使用PS3™下载的游戏复制至PS Vita游玩 在PS Vita游玩PSP™ (PlayStation®Portable)的游戏

  • 包含在程序启动时启动的线程。这个线程包含一个循环,每40毫秒更新一次游戏并重新绘制()board。 备选办法B: 板创建一个摆动计时器。这个计时器的动作监听器是板本身。actionPerformed()方法每40毫秒运行一次,并更新game+repaints Board()。 谢谢