Мой проект внезапно остановится, и я не могу остановить его - PullRequest
0 голосов
/ 31 октября 2018

Я недавно работал над следующим, после нажатия кнопки run, а затем, пройдя через несколько графических интерфейсов, он загрузится на Panal, который запускает игру, проблема в том, что он не делает то, что должен делать. ниже приведен код, который доставляет мне неприятности. я обратился к своему преподавателю по ИТ за помощью, он тоже не уверен, что идет не так.

    package edge;

    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import javax.swing.ImageIcon;
    import javax.swing.Timer;

public class Dungeon1 extends javax.swing.JPanel implements ActionListener, KeyListener {

    private static final long serialVersionUID = 1L;

    Timer timer = new Timer(1, this);
    Player player = new Player();
    DungeonBackground db = new DungeonBackground(0, 0);
    Enemy e1 = new Enemy(200, 200);

    /**
     * Creates new form Dungeon1
     */
    public Dungeon1() {
        initComponents();
        setSize(1366, 706);
        timer.start();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();

        setBackground(new java.awt.Color(0, 0, 0));
        setRequestFocusEnabled(false);

        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edge/Dundeon 1 - 1.jpg"))); // NOI18N
        jLabel1.setText("\n");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 707, Short.MAX_VALUE)
        );
    }// </editor-fold>                        

    public void Paint(Graphics g) {
        super.paint(g);
        Graphics2D g2d = (Graphics2D) g;

        ImageIcon img = new ImageIcon("Dundeon 1 - 1.jpg");
        IMG = img.getImage();
        g2d.drawImage(IMG, 0, 0, null);

        if (firstform == true && secondform == false && thirdform == false) {
            ImageIcon imageIcon2 = new ImageIcon("enemy1.bmp");
            g2d.drawImage(imageIcon2.getImage(), e1.getX(), e1.getY(), this);
        } else if (secondform == true && firstform == false && thirdform == false) {
            ImageIcon imageIcon3 = new ImageIcon("enemy1-1.bmp");
            g2d.drawImage(imageIcon3.getImage(), e1.getX(), e1.getY(), this);
            secondform = false;
            thirdform = true;
            firstform = false;
        } else if (thirdform == true && firstform == false && secondform == false) {
            ImageIcon imageIcon4 = new ImageIcon("enemy1-2.bmp");
            g2d.drawImage(imageIcon4.getImage(), e1.getX(), e1.getY(), this);
            firstform = true;
            secondform = false;
            thirdform = false;
            RageGUI rg1 = new RageGUI();
            rg1.setVisible(true);
        }
        ImageIcon imageIcon = new ImageIcon("characterfinal.jpg");
        g2d.drawImage(imageIcon.getImage(), player.getX(), player.getY(), this);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e1.getX() == (player.getX() + 190) && e1.getY() == player.getY()
                || e1.getY() == (player.getY() - 190) && e1.getX() == player.getX()) {
            firstform = false;
            secondform = true;
        }
        if (e1.getX() == (player.getX() - 190) && e1.getY() == player.getY()) {
            firstform = false;
            secondform = true;
        }
        if (e1.getY() == (player.getY() - 190) && e1.getX() == player.getX()) {
            firstform = false;
            secondform = true;
        }
        while (e1isalive == true) {
            double rdn = Math.random();
            if (rdn <= 0.25) {
                e1.MoveSequence1();
            }
            if (rdn <= 0.5) {
                e1.MoveSequence2();
            }
            if (rdn <= 0.75) {
                e1.MoveSequence3();
            }
            if (rdn <= 1) {
                e1.MoveSequence4();
            }

        }
        if (player.getX() == 87 && player.getY() == 81 && player.getDirection() == 4) {
            player.MoveLeft();
            player.MoveDown();
        }
        if (player.getX() == 380 && player.getY() == 500 && player.getDirection() == 4) {
            player.MoveLeft();
        }
        if (player.getX() == 91 && player.getY() == 520 && player.getDirection() == 4) {
            player.MoveLeft();
        }
        if (player.getX() == 85 && player.getY()== 355 && player.getDirection() == 4) {
            player.MoveLeft();
        } 
        if (player.getX() == 284 && player.getY() == 399 && player.getDirection() == 3) {
            player.MoveRight();
        }
        if (player.getX() == 284 && player.getY() == 399 && player.getDirection() == 1) {
            player.MoveDown();
        }
        if (player.getX() == 649 && player.getY() == 515 && player.getDirection() == 3) {
            player.MoveRight();
        }
        if (player.getX() == 811 && player.getY() == 243 && player.getDirection() == 2) {
            player.MoveUp();
        }
        if (player.getX() == 811 && player.getY() == 243 && player.getDirection() == 1) {
            player.MoveDown();
        }
        if (player.getX() == 671 && player.getY() == 365 && player.getDirection() == 4) {
            player.MoveLeft();
        }
        if (player.getX() == 940 && player.getY() == 350 && player.getDirection() == 3) {
            player.MoveLeft();
        }
        if (player.getX() == 812 && player.getY() == 513 && player.getDirection() == 1) {
            player.MoveDown();
        }
        if (player.getX() == 140 && player.getY() == 150 && player.getDirection() == 4) {
            player.MoveLeft();
        }
        if (player.getX() == 900 && player.getY() == 600 && player.getDirection() == 3 ) {
            player.MoveRight();
        }
        if (player.getX() == 1159 && player.getY() == 461 && player.getDirection() == 3 ) {
            player.MoveRight();
        }
        if (player.getX() == 660 && player.getY() == 110 && player.getDirection() == 4 ) {
            player.MoveLeft();
        }
        if (player.getX() == 995 && player.getY() == 285 && player.getDirection() == 1) {
            player.MoveDown();
        }
        if (player.getX() == 1160 && player.getY() == 120 && player.getDirection() == 3 ) {
            player.MoveRight();
        }
        if (player.getX() == 393 && player.getY() == 634 && player.getDirection() == 4) {

            System.out.println("do you want to die???"
                    + " or did you think you found a secret way out of the dungeon??"
                    + " well you are right, you win");
            RageQuitGUI rg = new RageQuitGUI() ;
            rg.setVisible(true) ;
        }
        repaint();
    }

    @Override
    public void keyTyped(KeyEvent ke) {

    }

    @Override
    public void keyPressed(KeyEvent ke) {
         if (ke.getKeyCode() == KeyEvent.VK_W) {
            player.MoveUp();
            System.out.println("w key has been pressed");
        } else if (ke.getKeyCode() == KeyEvent.VK_A) {
            player.MoveLeft();
            System.out.println("a key has been pressed");
        } else if (ke.getKeyCode() == KeyEvent.VK_D) {
            player.MoveRight();
            System.out.println("d key has been pressed");
        } else if (ke.getKeyCode() == KeyEvent.VK_S) {
            player.MoveDown();
            System.out.println("s key has been pressed");
        }
        if (ke.getKeyCode() == KeyEvent.VK_ALT + KeyEvent.VK_F4) {
            RageQuitGUI rg = new RageQuitGUI();
            rg.setVisible(true);
        }
    }

    @Override
    public void keyReleased(KeyEvent ke) {

    }
    boolean e1isalive = true;
    boolean firstform = true;
    boolean secondform = false;
    boolean thirdform = false;
    Image IMG;
//  sometimes the code works and soetimes it doesnt.
    // Variables declaration - do not modify                     
    private javax.swing.JLabel jLabel1;
    // End of variables declaration                   
}

1 Ответ

0 голосов
/ 01 ноября 2018

Не знаю, решит ли это вашу проблему, но вот некоторые проблемы:

  1. Вы переопределяете метод Paint(...). Там нет такого метода. Существует строчный paint(...) метод. Однако при использовании Swing вы должны переопределить метод paintComponent(...).

  2. Метод рисования - это просто рисование, а не любая другая обработка. Вы не можете контролировать, когда Swing будет вызывать метод paintComponent (), поэтому метод рисования должен просто рисовать текущее состояние класса, а не изменять его. Итак:

    1. Не делай I / O. Метод должен быть эффективным. Вы не хотите продолжать читать файлы
    2. Не создавать новые объекты
    3. Не изменяйте свойства вашего класса (т.е. firstForm, secondForm ...)
  3. Не используйте цикл while (...) для анимации. Анимация будет происходить слишком быстро, и вы увидите только конечный результат. Вместо этого вы должны использовать Swing Timer для планирования анимации. Я вижу, вы используете таймер в другом месте вашего кода. Не используйте 1 мс для таймера. Таймер не настолько точен и генерирует слишком много событий. Минимум должен быть около 16, что даст вам 60 кадров в секунду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...