Как заставить кнопку «proximo» (далее) работать и двигать ракету (foguete) - PullRequest
0 голосов
/ 11 мая 2018

Мне нужно, чтобы моя ракета двигалась соответственно на правильный ответ, если он (она) понял это правильно, она переместится (с планеты (слева) на (правую) планету, иначе она ничего не сделает, я есть счетчик для правильного вопроса, но я не знаю, что делать дальше.

    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Font;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.util.Enumeration;
    import java.util.HashMap;

    import javax.swing.AbstractButton;
    import javax.swing.ButtonGroup;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JRadioButton;


    public class Jogo0 extends JFrame implements ActionListener{

мои переменные

    JPanel QUIZ;
    JRadioButton opcao1;//choice1
    JRadioButton opcao2;//choice2
    JRadioButton opcao3;//choice3
    ButtonGroup escolha;//buttongroup
    JLabel questao; //question
    JButton proximo; //next button
    String [] [] alternativa; //alternatives
    String [] [] correta; //correct answer
    int acerto; //my counter


    int posifogx = 0; 
    int posifogy = 300;

изображения к коду, ракета, фон, планеты

    ImageIcon imagfogut = new         v         ImageIcon(getClass().getResource("Foguetao2.gif")); 
    ImageIcon imagespac = new ImageIcon(getClass().getResource("Background.jpg"));
    ImageIcon imageplantale = new ImageIcon(getClass().getResource("giphy.gif"));
    ImageIcon imageterra = new ImageIcon(getClass().getResource("terra.gif"));


    JLabel fog = new JLabel (imagfogut);
    JLabel background = new JLabel (imagespac);
    JLabel planetale = new JLabel (imageplantale);
    JLabel terra = new JLabel (imageterra);

мой метод jogo, который запустит всю игру
public Jogo0 () {

    Janela(); //window
    Imagens(); //img
    QuizMetodo(); //my quizmethod


                }

    public void Imagens (){ //imgs

    background.setBounds(0, 0, 1920, 1080);
    fog.setBounds(posifogx, posifogy, 300, 200);
    planetale.setBounds(-150, 300, 259, 259);
    terra.setBounds(1000, 0, 379, 379);


                        }


    public void Janela()//window                {

    setTitle("Game");
    setLocation(0,0);
    setVisible(true);
    setSize(1920,1080);
    setLayout(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    add(fog);
    add(planetale);
    add(terra);
    add(background);

                                    }

    public void foguetex(int moverfoguetex) { //position of the rocket
    this.posifogx = moverfoguetex;
    moverfoguetex = moverfoguetex + 100;
                                        }

    public void foguetey(int moverfoguetey) {
    this.posifogy = moverfoguetey;
    moverfoguetey = moverfoguetey + 100;
                                        }

      public synchronized void QuizMetodo(){
      questoes();
      Container cont=getContentPane();
      cont.setLayout(null);          
      cont.setBackground(Color.GRAY);
      escolha=new ButtonGroup();     
      opcao1=new JRadioButton("Opção1",true);
      opcao2=new JRadioButton("Opção2",false);
      opcao3=new JRadioButton("Opção3",false);
      escolha.add(opcao1);
      escolha.add(opcao2);
      escolha.add(opcao3);
      questao= new JLabel("Salve seu planeta!");
      questao.setForeground(Color.WHITE);
      questao.setFont(new Font("tahoma", Font.BOLD, 14));
      proximo=new JButton("Proximo");
      proximo.setForeground(Color.BLACK);                
      proximo.addActionListener(aa);
      opcao1.addActionListener(aa);
      opcao2.addActionListener(aa);
      opcao3.addActionListener(aa);
      QUIZ=new JPanel();
      QUIZ.setBackground(Color.DARK_GRAY);
      QUIZ.setLocation(250,530);
      QUIZ.setSize(800,150);
      QUIZ.setLayout(new GridLayout(6,2));
      QUIZ.add(questao);
      QUIZ.add(opcao1);
      QUIZ.add(opcao2);
      QUIZ.add(opcao3);
      QUIZ.add(proximo);
      cont.add(QUIZ);
      setVisible(true);
      acerto = 0;
      i = acerto;
      lerqr(acerto);
        }

      public String getSelection(){
    String selectedChoice=null;
    Enumeration<AbstractButton> buttons=escolha.getElements(); 
    while(buttons.hasMoreElements()) 
    { 
    JRadioButton temp=(JRadioButton)buttons.nextElement(); 
    if(temp.isSelected()) 
                { 
                            selectedChoice=temp.getText();
                } 
     }  
    return(selectedChoice);

                            }

ActionListener aa = new ActionListener(){ //**I DONT KNOW WHAT TO DO HERE**

    public void actionPerformed(ActionEvent e) {



    }
    };

    public void questoes() { //questions
    alternativa = new String [10][4];

    alternativa[0][0] ="Qual é o composição química da água?";
    alternativa[0][1] = "(2) Hidrogênio e (1) Carbono";
    alternativa[0][2] = "(1) Hidroênio e (2) Oxigênio";
    alternativa[0][3] = "(2) Hidrogênio e (1) Oxigênio";

    alternativa[1][0] = "Pra que serve o Protocolo de Kyoto?";
    alternativa[1][1] = "Defesa dos animais";
    alternativa[1][2] = "Proteção contra emissão de gases";
    alternativa[1][3] = "Codigo da reciclagem";


    correta = new String [10] [2];
    correta[0][0] = "Qual é o composição química da água?";
    correta[0][1] = "(2) Hidrogênio e (1) Oxigênio";

    correta [1][0] = "Pra que serve o Protocolo de Kyoto?";
    correta [1][1] = "Proteção contra emissão de gases";


                        }


    public void lerqr(int id){
    questao.setText("  "+alternativa[id][0]);
    opcao1.setText(alternativa[id][1]);
    opcao2.setText(alternativa[id][2]);
    opcao3.setText(alternativa[id][3]);
    opcao1.setSelected(true);
    }



    public static void main(String[] args) { //my main method


    new Jogo0();
    }

1 Ответ

0 голосов
/ 20 мая 2018

Я точно не знаю, нужны ли вам методы foguetex ();и туманы ();как вы их реализовали, но последняя строка в обоих методах никак не влияет на программу.

Чтобы заставить ракету двигаться и вычислить движение, вы можете просто изменить foguetex ();метод как этот (или напишите метод с другим именем, если вам также нужен foguetex (); для чего-то еще в коде):

public void foguetex(int moverfoguetex) { // position of the rocket
    this.posifogx = moverfoguetex + 100;
}

Это приведет к обновлению значения posifogx до нового x-значение, где должна быть ракета (вы также можете изменить foguetey (); при необходимости).После этого вы хотите обновить позицию вашего JLabel, отображающего ракету.Поэтому вы переназначаете границы JLabel в ActionListener следующим образом (возможно, вы захотите адаптировать его к ActionListener, который вы написали сами):

proximo.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        foguetex(posifogx); //calculating new x-position
        fog.setBounds(posifogx, posifogy, 300, 200); //updating the label's position
    }
});

Надеюсь, это вам поможет.

...