2016-07-29 4 views
0

私は初心者で、より多くのクラスを持つシンプルなゲームを構築しています。私は、プログラムを閉じて再オープンしたようにすべてを初期値にリセットするTry Again関数を追加したいが、実際にはそれを実行しない。この関数は、初期化を含まないクラスから呼び出さなければなりません。 ゲーム内のすべてを初期値にリセットする再試行ボタン

public class game extends JPanel implements ActionListener{ 

private static final long serialVersionUID = 1L; 
private Menu menu; 
private GameOver gameover; 


//variables 
public static int cyclesToWait = 50; 
public static int enemiesKilled = 0; 
public static int life = 3; 
int roundCount = 0; 
Timer gamelooptimer; 

//objects 
Player p; 
ControllerEnemy c; 
ControllerRocket r; 
ControllerExplosion e; 


//is it new round or not --> for enemy control 
public static enum ROUND{ 
    INPROGRESS, 
    NEW 
} 

public static enum STATE{ 
    MENU, 
    GAME, 
    OVER 
}; 

public static STATE State = STATE.MENU; 
public static ROUND Round = ROUND.INPROGRESS; 

public game(){ 

    setFocusable(true); 

    gamelooptimer = new Timer(10, this); 
    gamelooptimer.start(); 

    p = new Player(MainClass.width/2 - 60, 400); 
    c = new ControllerEnemy(); 
    r = new ControllerRocket(); 
    e = new ControllerExplosion(); 
    menu = new Menu(); 
    gameover = new GameOver(); 

    addKeyListener(new KeyInput(p)); 
    addMouseListener(new MouseInput()); 
} 

public void paint(Graphics g){ 
    super.paint(g); 
    Graphics2D g2d = (Graphics2D) g; 
    g2d.drawImage(getBackgroundImage(), 0, 0, null); 

    Font fnt = new Font("arial", Font.BOLD, 22); 
    g.setFont(fnt); 


    if(State == STATE.GAME){ 
     p.draw(g2d); 
     p.draw(g2d); 
     c.draw(g2d); 
     r.draw(g2d); 
     e.draw(g2d); 
     g.drawString("Round: " + roundCount, MainClass.width - 125, 22); 
     g.drawString("Enemies Killed: " + enemiesKilled, MainClass.width/2 - 95, 22); 
     if(cyclesToWait < 50) 
      cyclesToWait++; 
    } 
    else if (State == STATE.OVER) 
     gameover.render(g); 
    else 
     menu.render(g); 


} 



@Override 
public void actionPerformed(ActionEvent e) { 
    repaint(); 
    if(State == STATE.GAME){  
     p.update(); 
     c.update(); 
     r.update(); 
    } 
    if(Round == ROUND.NEW) 
     roundCount += 1; 
} 
private Image getBackgroundImage(){ 
    ImageIcon i = new ImageIcon(getClass().getResource("/images/Background.png")); 
    return i.getImage(); 
} 

が助けてくれてありがとう:

は、ここに私の初期クラスです。

答えて

0

コンストラクタのすべてのゲーム関連の初期化コードをinitGameメソッドにリファクタリングします。これでコンストラクタでそのメソッドを呼び出すことができ、initGame()を呼び出すreset()メソッドを呼び出すことができます。 [再試行]ボタンはresetGame()に電話する必要があります。

public game(){ 
    setFocusable(true); 

    initGame(); 
} 

public void resetGame() { 
    initGame(); 
} 

private void initGame() { 
    gamelooptimer = new Timer(10, this); 
    gamelooptimer.start(); 

    p = new Player(MainClass.width/2 - 60, 400); 
    c = new ControllerEnemy(); 
    r = new ControllerRocket(); 
    e = new ControllerExplosion(); 
    menu = new Menu(); 
    gameover = new GameOver(); 

    addKeyListener(new KeyInput(p)); 
    addMouseListener(new MouseInput()); 
} 
関連する問題