Добавить кнопку перезагрузки

171
22 марта 2019, 23:00

как ??? В игре Добавить кнопку перезагрузки после проигрыша, чтобы кнопка появлялись в JPanel после проигрыша и при нажатии на неё приложение стартовало снова.

k`

public class MainWindow extends JFrame {
public MainWindow(){
    setTitle("Snake");
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    setSize(340,370);
    setResizable(false);
    setLocation(300,200);
    add(new GameField());
    setVisible(true);
}
public static void main(String[] args) {
    MainWindow mw = new MainWindow();
  }
  }
  public class GameField extends JPanel 
  implements ActionListener{
private final int SIZE =300;
private final int DOT_SIZE = 16;
private final int ALL_DOTS = 400;
private Image dot;
private Image apple;
private int appleX;
private int appleY;
private int[] x = new int[ALL_DOTS];
private int[] y = new int[ALL_DOTS];
private int dots;
private Timer timer;
private boolean left = false;
private boolean right = true;
private boolean up = false;
private boolean down = false;
private boolean inGame = true;
public GameField() {
    setBackground(Color.gray);
    loadImages();
    initGame();
    addKeyListener(new FieldKeyListener());
    setFocusable(true);
}
public void initGame(){
    dots = 3;
    for (int i = 0; i < dots; i++) {
        x[i] = 48 - i*DOT_SIZE;
        y[i] = 48;
    }
    timer = new Timer(250,this);
    timer.start();
    createApple();
}
public void createApple(){
    appleX = new 
Random().nextInt(20)*DOT_SIZE;
    appleY = new 
Random().nextInt(20)*DOT_SIZE;
}
public void loadImages(){
    ImageIcon iia = new ImageIcon("apple.png");
    apple = iia.getImage();
    ImageIcon iid = new ImageIcon("dot.png");
    dot = iid.getImage();
}
@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);

    for(int x=0; x <= SIZE*DOT_SIZE; 
 x+=DOT_SIZE){
        g.drawLine(x, 0, x, SIZE*DOT_SIZE);
    }
    for(int y=0; y <= SIZE*DOT_SIZE; 
   y+=DOT_SIZE){
        g.drawLine(0, y,SIZE*DOT_SIZE, y );
    }
    if(inGame){
   g.drawImage(apple,appleX,appleY,this);
        for (int i = 0; i < dots; i++) {
            g.drawImage(dot,x[i],y[i],this);
        }
    }
    else {
        String str = "Game Over !!!";
        Font f = new Font( 
    "Arial",Font.BOLD, 24); //размер шрифта 
   в конце
        g.setColor(Color.red);
        g.setFont (f);
        g.drawString (str, 85, SIZE/2);
    }
}
public void move(){
    for (int i = dots; i > 0; i--) {
        x[i] = x[i-1];
        y[i] = y[i-1];
    }
    if(left){
        x[0] -= DOT_SIZE;
    }
    if(right){
        x[0] += DOT_SIZE;
    } if(up){
        y[0] -= DOT_SIZE;
    } if(down){
        y[0] += DOT_SIZE;
    }
}
public void checkApple(){
    if(x[0] == appleX && y[0] == appleY){
        dots++;
        createApple();
    }
}
public void checkCollisions(){
    for (int i = dots; i >0 ; i--) {
        if(i>4 && x[0] == x[i] && y[0] == 
y[i]){
            inGame = false;
        }
    }
    if(x[0]>SIZE){
        inGame = false;
    }
    if(x[0]<0){
        inGame = false;
    }
    if(y[0]>SIZE){
        inGame = false;
    }
    if(y[0]<0){
        inGame = false;
    }
}
@Override
public void actionPerformed(ActionEvent e) {
    if(inGame){
        checkApple();
        checkCollisions();
        move();
    }
    repaint();
}
class FieldKeyListener extends KeyAdapter{
    @Override
    public void keyPressed(KeyEvent e) {
        super.keyPressed(e);
        int key = e.getKeyCode();
        if(key == KeyEvent.VK_LEFT && 
    !right){
            left = true;
            up = false;
            down = false;
        }
        if(key == KeyEvent.VK_RIGHT && 
   !left){
            right = true;
            up = false;
            down = false;
        }
        if(key == KeyEvent.VK_UP && !down){
            right = false;
            up = true;
            left = false;
        }
        if(key == KeyEvent.VK_DOWN && !up){
            right = false;
            down = true;
            left = false;
        }`
Answer 1

могу только написать как это делал я в свое время, хоть Вы и просите немного другое, вдруг это поможет.

newGame.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                remove(gameField);
                gameField = new GameField();
                add(gameField);
                gameField.revalidate();
            }
        });

gameField - это мой класс со всей прорисовкой, т.е. по нажатию на кнопку newGame выполняется удаление прорисовки, и ее повторное создание, но у меня кнопка постоянно видна, но если вы хотите сделать ее изначально невидимой, просто создайте ее заранее, и потом после срабатывания метода о завершении игры, дайте ей setVisible(true);

READ ALSO
Как открывать все полученные url в webview?

Как открывать все полученные url в webview?

Есть приложение которое работает с wordpress, контент открывается через webviewИ вот когда я нажимаю на ссылку в webview она открывается во внешнем браузере,...

122
Правильная реализация enum в java

Правильная реализация enum в java

В учебных целях делаю приложение которое собирает строку (банковский счёт) из разных значений согласно этой таблице первые 3 символа счёта...

146
Как правильно обрабатывать RuntimeException?

Как правильно обрабатывать RuntimeException?

Как правильно обрабатывать RuntimeException? Например, у меня есть следующий код:

139
зависимости тестов в TestNG

зависимости тестов в TestNG

Помогите пожалуйста установить зависимостиУ меня есть тесты:

170