当前位置: 首页 > 面试题库 >

我不确定什么是不正确的

任伟
2023-03-14
问题内容

我正在创建一个小型Java Jpanel游戏,其中应该有一个火箭,它通过箭头上下移动,并通过太空射击。
触发方法应按以下方式工作:按下空格键,东西触发并在屏幕上移动,然后当它碰到某个x时,它就会消失。此外,您只能发射一次,直到另一颗子弹消失为止。
我不知道我在做什么错。首先,在我的代码启动后,您会看到子弹在屏幕上飞舞。
2,子弹没有消失。
第三,即使其他子弹仍然可见,它也允许我再次开火。

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
import java.io.IOException;
import java.util.Random;   
import javax.imageio.ImageIO;
import javax.swing.*;
@SuppressWarnings("serial")

public class SpaceGame extends JPanel implements ActionListener{
    Timer t = new Timer(2, this);

    private ImageIcon rocket,asteroid,bullet;
    private JLabel rocketlabel,ast1,ast2,ast3,bulletLabel;
    public static int y=90,dy=0,bulletX=110,bulletY,i=0,canFire;
    //public sound sound;
    static boolean bulletFired=false;;
    static JFrame f = new JFrame();

    SpaceGame(){
        this.setBackground(Color.black);
        rocket = new ImageIcon(getClass().getResource("rocketFinal.png"));
        rocketlabel= new JLabel(rocket);
        this.add(rocketlabel);
        asteroid = new ImageIcon(getClass().getResource("asteroid.png"));
        ast1=new JLabel(asteroid);
        ast2=new JLabel(asteroid);
        ast3=new JLabel(asteroid);
        bullet = new ImageIcon(getClass().getResource("bulletReal.png"));
        bulletLabel = new JLabel(bullet);
        canFire=1;
        bulletLabel.setVisible(false);
         this.add(ast1);this.add(ast2);this.add(ast3);this.add(bulletLabel);

        f.addKeyListener(new controller());

        this.setLayout(null);
        this.setVisible(true);
    }

    public class controller implements KeyListener{

        @Override
        public void keyPressed(KeyEvent e) {
            int keyCode = e.getKeyCode();

               if(keyCode== KeyEvent.VK_UP) {

                    dy=-1;

                   }
                if(keyCode== KeyEvent.VK_DOWN) {

                   dy=1;
                }
              if(keyCode== KeyEvent.VK_SPACE) {
                   if(canFire==0) {

                       System.out.println(String.valueOf(canFire));
                       bulletFired = true;

                       bulletY = y; 
                       bulletX=110;
                       }canFire=1;                      
              }
             }

        @Override
        public void keyReleased(KeyEvent e) {
            int key = e.getKeyCode();

            switch(key) {
            case KeyEvent.VK_UP: dy=0; break;
            case KeyEvent.VK_DOWN: dy=0; break;

            }
        }

        @Override
        public void keyTyped(KeyEvent e) {
            // TODO Auto-generated method stub              
        }

    }
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        rocketlabel.setBounds(45,y,rocket.getIconWidth(),80);
        fireBullet();

        paintStars(g);
        t.start();
    }

    public void paintStars(Graphics g) {
        g.setColor(Color.yellow);
        for(int i=0; i<5;i++) {

            Random rand = new Random();
            int o = rand.nextInt(500);
            int p = rand.nextInt(300);
            g.fillOval(o, p, 3, 3);

        }
    }
    public void actionPerformed(ActionEvent e) {
        if(y==-20) y=249;
        if(y==250)y=-20;
        y+=dy;
        if(bulletFired=true) {
            bulletX++;
            if(bulletX==455)bulletFired=false;bulletLabel.setVisible(false);System.out.println(String.valueOf(bulletX)); canFire=0;

        }

        repaint();
    }
    public void fireBullet(){
    if(bulletFired=true) {
        bulletLabel.setVisible(true);
        bulletLabel.setBounds(bulletX,bulletY+25,bullet.getIconHeight(),bullet.getIconWidth());
    }

   }

    public static void main(String[] args) {
        String filepath = "SpaceGameMusic.wav";
        musicStuff musicPlayer = new musicStuff();

        musicPlayer.playMusic(filepath);
        SpaceGame t = new SpaceGame();

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(t);
        f.setSize(500,335);
        f.setVisible(true);
        f.setResizable(false);
    }
}

问题答案:

问题很简单,我忘记了在if(boolean)语句中使用==。



 类似资料:
  • 因此,我试图找出每个月(本例中为6月至7月)销售额变化最大的客户。 以下是我为了这个实践而创建的模型数据: 根据以上两个表,答案应该是CustomerID为10的客户,1998年6月至7月销售额增加350.28。 下面是我实现目标的代码;基本上,我创建了两个视图,一个是每年每个客户6月份的销售额总和,另一个是每年每个客户7月份的销售额总和,然后从7月份的销售额中减去6月份的销售额: 但是,我的输出

  • 问题内容: 我正在尝试使用CASE表达式创建一个持久化的计算列: MSDN明确表示CASE是确定性的,这里 但是,我得到一个错误: 消息4936,级别16,状态1,行1表’Calendar’中的计算列’PreviousDate’无法保留,因为该列是不确定的。 当然,我可以创建一个标量UDF并将其显式声明为确定性的,但是有没有更简单的方法呢?我已经在获取最新的Service Pack中。谢谢。 问题

  • 首先,使用setspn命令为用户注册服务主体名称。 setspn-CS/dummy@abc.com dummy user setspn-l虚拟用户 给出输出为 CS公司/dummy@abc.com 接下来,当使用 /mapUser 选项执行 ktpass 命令时,将修改用户帐户的服务主体名称,以便删除域组件。 ktpass/pass Password @ 123-out dummy . 1 . k

  • 我通过使用map函数迭代来显示我的状态,这是一个数组。此外,我有一个按钮,在点击反转数组。 我认为我想做什么是相当明显的。但这对我不起作用,我不知道为什么。我必须单击两次来完成第一次还原,出现了奇怪的情况,即呈现的数组和Chrome中React开发工具在组件状态中显示的数组不匹配。 我无法解释这种行为。我开始认为这与我从道具中获得阵列有关,但我真的不知道。有什么想法吗?

  • 以下是他们关于协会课程的演讲幻灯片: 有时,关联具有的属性或行为不仅仅属于两端的类。我们可以使用关联类对此进行建模。假设下图对学生分配到模块的模型进行了建模。 属性< code>finalMark不适合关联的任何“end”。此外,有必要为每个学生(每个模块)记录一个以上的分数,反之亦然。因此,属性< code>finalMark是< code>Student和< code>Module之间关联的属

  • 我在react窗口列表元素中使用React/MUI Popover,并且无法正确定位Popover-它总是在窗口的左上角结束(组件无法在锚元素[in the docs])。 所以为了暂时解决这个问题,我决定使用参数来设置一个绝对位置——在我的例子中,就在窗口的中间。那也不行。 我已经查看了Chrome开发工具中的值,一切似乎都正常(即,我使用该工具时确实得到了一个锚定;我得到了有效的位置左/顶值;