Как сбросить JFrame (перезапустить игру)? - PullRequest
1 голос
/ 12 февраля 2012

Это Java-игра, над которой я начал работать. Я пытался добавить кнопку с надписью «RESTART», которая при нажатии сбрасывает всю программу так, как она была в начале (я имею в виду на начало игры).

Вот мой код: Есть две кнопки, а именно «ИГРАТЬ» и «ПРОВЕРИТЬ, КТО ВЫИГРАЛ!»

Для «ИГРАТЬ» Это код:

    int delay = 1000;
 final Timer timer = new Timer();
  timer.schedule(new TimerTask(){
  public void run(){
  String b = "C:\\Users\\COMPUTER\\Desktop\\deck\\.png";
Random r = new Random();
r1 = r.nextInt(upplim)+lolim;
String a = Integer.toString(r1);
String c = "C:\\Users\\COMPUTER\\Desktop\\deck\\"+a+".png";
        l1.setIcon(new ImageIcon(c));  
  }
  },delay, 50);

За "ПРОВЕРЬТЕ, КТО ВЫИГРАЛ!" Это код:

final int p = h;
System.out.println("ANSWER IS:"+p);
        int delay2 = 1000;

     for (int i = 1; i < 53; i++)
{
    while(true)
    {
         next = rng.nextInt(Ulim) + Llim;
        if (!generated.contains(next))
        {
            generated.add(next);
            break;
        }     
    }
    if ( i % 2 == 0 ) 
   {count++;
    deck1[e] = next;deck1count++;
    e++;
} 
   else {count++;
       deck2[f] = next;deck2count++;
    f++;
   }    
    System.out.println(""+next); 
        if(next==p)
        {break;}
}
 if(deck1count==deck2count)
{
count=count-2;
fcard=99;}  

 final Timer timer2 = new Timer();
         timer2.schedule(new TimerTask(){
 public void run(){  
do 
{
System.out.println("dec2       "+deck2[z]);
String a = Integer.toString(deck2[z]);
       String c = "C:\\Users\\COMPUTER\\Desktop\\deck\\"+a+".png";
       l3.setIcon(new ImageIcon(c));

System.out.println("dec1       "+deck1[z]);
String b = Integer.toString(deck1[z]);
       String d = "C:\\Users\\COMPUTER\\Desktop\\deck\\"+b+".png";
       l4.setIcon(new ImageIcon(d)); 

System.out.println("count"+count);
z++;
count=count-2;

if(fcard==99&&count<0)
{l3.setIcon(new ImageIcon("C:\\Users\\COMPUTER\\Desktop\\deck\\99.png"));
}
}while(count>0&&z==p);


if(count<0)
  {timer2.cancel();
  reschk=11;
timer2.purge();
  }
} 
  },delay2, 1000);  

Существует также другой набор кода, который написан для события MouseClicked на ярлыке, но я не думаю, что он мог бы здесь сильно помочь. Я пробовал:

classname.this.dispose();
        classname classname = new classname();

Но это просто отключает всю программу. Есть ли другой способ перезагрузить игру? Спасибо за прочтение. Любая помощь будет оценена.

Ответы [ 3 ]

3 голосов
/ 12 февраля 2012

У вас, очевидно, есть значения, которые обновляются, чтобы вы могли представлять свою игру в различных состояниях.Если вы хотите перезапустить игру, вам просто нужно вернуть все эти значения к исходным начальным значениям.Вы можете написать метод Restart для этого.

Кроме того, dispose () предназначен для закрытия окна.

edit: нет никакого магического метода, который вы можете вызвать для сброса вашей программы.

2 голосов
/ 12 февраля 2012
  1. Для контейнера на основе Swing используйте Таймер Swing вместо util.Timer, в противном случае вывод из util.Timer должен составлять из EDT .
  2. Youне нужно утилизировать старый контейнер и заново создавать новую для свежей игры, вы можете удалить ее содержимое.
  3. все остальное не ясно из кода, размещенного здесь, и вопроса
1 голос
/ 12 февраля 2012

Сохраните состояние игры в отдельном классе и замените его новым экземпляром.

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