2012-01-28 16 views
3

私はカードゲームのためにJFrameを作っています。 restartBtnをクリックしたときにJFrameを再起動します。誰でも助けてくれますか?ボタンをクリックしたときにJFrameを再起動する方法は?

PlayGameクラスには、これはGameFrameクラスはJFrameコンストラクタのためですframe1

public class PlayGame { 

    public static void main(String[] args) { 
     GameFrame frame1 = new GameFrame(); 

     // Set Icon 
     Image icon = Toolkit.getDefaultToolkit().getImage("image/poker_icon.gif"); 
     frame1.setIconImage(icon); 

     frame1.setVisible(true); 
     frame1.setSize(600, 700); 
     frame1.setTitle("Card Game"); 

     // Set to exit on close 
     frame1.setDefaultCloseOperation(GameFrame.EXIT_ON_CLOSE); 
    } 
} 

起動することです。

public class GameFrame extends JFrame implements ActionListener { 

    public JLabel restartLbl; 
    public JButton restartBtn 

    public GameFrame() { 

    restartLbl = new JLabel(restart); 
    restartBtn = new JButton(); 

    restartBtn..addActionListener(this); 
    } 


    public void actionPerformed(ActionEvent e) { 
    if (e.getSource() == restartBtn) { 
    } 
    } 
} 

答えて

6

フレームの再起動をコードする必要があります。開始時のゲームの状態とすべてのコンポーネントの状態を考えてみましょう。一般的には、setupのどこかのポイントとstartのポイントがあります。これらを設定することができれば、setupstartrestartと簡単に使用することができます。

public void actionPerformed(ActionEvent e) { 
    if (e.getSource() == restartBtn) { 
     restart(); 
    } 
    } 

public void restart(){ 
    stop(); // if necessary 
    setup(); // set everything to initial state 
    start(); // start game 
} 

public void stop(){ 
    // stop any timers, threads, operations etc. 
} 

public void setup(){ 
    // set to initial state. 
    // something like recreate the deck, 
    // clear hands and table, shuffle, and deal. 
} 

public void start(){ 
    // code to initiate the game. 
} 

だから、それについて移動する最良の方法は、いくつかの段階として、あなたのゲームを見ることで、そのようなrestartなどのアクションは、他の組み合わせでなければなりません。あなたの実際のゲームコード(またはその計画)について何も知らずに、これを具体的に答えることは難しいです。しかし、私はそれが助けてくれることを望みます:)

EDIT

これは、カードをシャッフル/生成について行くのより良い方法です。

public class GenRandom { 

    int [] cards = new int [GameFrame.NUMBER_OF_CARDS]; 

    public void generateCards() { 
     for (int i = 0; i < cards.length; i++) { // for each index of the array... 
     int card; // declare card 
     do { 
      card = (int) (Math.random() * 51) + 1; // random between 1 and 52 
     } while (contains(card)); // regenerate random card if array already contains. 
     cards[i] = card; // card is unique, so assign value to array index 
     } 
    } 

    private boolean contains(int t){ 
     for(int i = 0; i < GameFrame.NUMBER_OF_CARDS; i++){ // for each index... 
     if(cards[i] == t){ 
      return true; // if the generated card is already in the array.. 
     } 
     } 
     return false; // otherwise reached end, so return false. 
    } 

    public int [] getAllCards() { 
     return cards; 
    } 
} 
+0

私はプレイヤーが5枚のカードを引くゲームを設計しています、コンピュータは、そのカード(各ターンは1枚のカードを比較)大きい5枚のカードを引くと比較します。それから私は、プレイヤーがどのカードをVSにコンピュータを選択させるべきかを5つのカードを表示します。だから私は2つのボタン(再起動)(終了)を作成し、プレイヤーが再びプレイすることを拒否した場合、彼は再起動をクリックすることができます。 – Exorific

+0

thxがたくさんありますが、私はあなたの方法を試しましたが、うまく動作しません。 – Exorific

+0

メイト、ここにあなたのコードを貼り付けてください:http://pastie.org/そしてリンクを投稿してください。 – rtheunissen

2

あなたの好みに応じてコードを修正し、再開ボタンを押してゲームを再開したいと考えました。

ここであなたのPlayGameクラスのmainメソッドで、これに変更してください。 actionPeformed(ActionEvent ae);内部の今

public GameFrame() 
{ 
    // Your previous code as it is, and paste the below lines, after your already 
    // written code, at the end of the constructor. 
    // Set Icon 
    Image icon = Toolkit.getDefaultToolkit().getImage("image/poker_icon.gif"); 
    setIconImage(icon); 
    setSize(600, 700); 
    setTitle("Card Game"); 

    // Set to exit on close 
    setDefaultCloseOperation(GameFrame.EXIT_ON_CLOSE); 
    setVisible(true); 
} 

:それはこのようなものですとしてだけカットし、以前のものと一緒に、GameFrameクラスのコンストラクタにそれを貼り付けて、最初の行を除いて、この中にあったものは何でも

public class PlayGame { 

    public static void main(String[] args) { 

     GameFrame frame1 = new GameFrame();    
    } 

} 

方法、あなたの再スタートボタンのために、これを書いてください。

if (e.getSource() == restartBtn) { 

    this.dispose(); 
    new GameFrame(); 
} 

うまくいけば、これによってクエリが解決する可能性があります。

よろしく

+0

コンストラクタの最後にコードを投稿した後、2回目の試行で完璧に動作します。ありがとうございます。 – Exorific

+0

@Exorific:Hehe、あなたの歓迎と笑い続ける:-)よろしくお願いします。 –

+0

@Exorific:ちょっとした提案GameFrameクラスではなく、PlayGameクラス内で静的変数として宣言することをお勧めします。そうすれば、ゲームを再開しても、それらの値は変更されずにそのまま残ります。よろしくお願いします。 –

関連する問題