2013-11-21 110 views
0

我正在創建一款青蛙式遊戲,並且在讓程序去做我想做的事情方面做得非常好。但是,我開始認爲要完成遊戲,我將不得不使用方式來編寫很多代碼,並且必須以更簡單的方式實現相同的結果。我不是在尋找答案,只需要一些更多的信息。需要青蛙式遊戲幫助

問題1:我可以使用哪些圖像來表示正在移動的圖標或汽車?我目前使用JButtons。問題是難以讓按鈕移動均勻,我想使用24個不同的移動圖標,從我學到的東西到目前爲止,我將不得不爲每個圖標添加一個新的JButton。

問題2:我得到的Jbutton圖標移動的方式是使用計時器延遲,然後使用計數器遞增x值。這在很大程度上是有效的,但是在屏幕上移動圖標有沒有更好的,也許更簡單的方法?

任何提示,教程等非常感謝。

這裏是我創建得到的圖標移動的一類:

public class EnemyJPanel extends JButton { 

JButton enem = new JButton(); 
JButton enem12 = new JButton(); 
JButton enem13 = new JButton(); 
JButton enem1 = new JButton("1"); 
JButton enem2 = new JButton("2"); 
JButton enem3 = new JButton("3"); 
JButton enem4 = new JButton("4"); 
JButton score = new JButton("Score"); 
JButton enem5 = new JButton("5"); 
JButton enem6 = new JButton("6"); 
JButton enem7 = new JButton("7"); 
JButton enem8 = new JButton("8"); 
JButton yard = new JButton("50 Yard Line"); 
    int i = 16; 
    int u = 576; 
    int d = 16; 
    int n = 576; 
    int k = 16; 
    int l = 16; 
    int dummyval = 16; 
public EnemyJPanel(){ 
    super(); 
     setLayout(null); 
     enem1.setBounds(16,300,40,55); 
     enem2.setBounds(16,245,40,55); 
     enem3.setBounds(16,190,40,55); 
     enem4.setBounds(16,135,40,55); 
     score.setBounds(16,80,601,55); 
     yard.setBounds(16,355,601,55); 
     enem5.setBounds(16,410,40,55); 
     enem6.setBounds(16,465,40,55); 
     enem7.setBounds(16,520,40,55); 
     enem8.setBounds(16,575,40,55); 
     enem12.setBounds(16,300,40,55); 
     enem13.setBounds(16,300,40,55); 
     add(enem1); 
     add(enem2); 
     add(enem3); 
     add(enem4); 
     add(score); 
} 
public void addEnemy(){ 
    enem1.setBounds(16,300,40,55); 
     enem2.setBounds(16,245,40,55); 
     enem3.setBounds(16,190,40,55); 
     enem4.setBounds(16,135,40,55); 
     score.setBounds(16,80,601,55); 
     add(enem1); 
     add(enem2); 
     add(enem3); 
     add(enem4); 
     add(score); 
} 
     public void enemyMovement(){ 
    i++;u--;d++;n--; // increments lateral movement from a timer in 
    dummyval++; // the dummy value is needed to keep the icons looping 
    dummyval = dummyval + 2; 
    enem1.setBounds(i,300,40,55); 
    i = i + 2; 
    if (dummyval > 176){ 

    k++; k = k + 2; 
     enem12.setBounds(k,300,40,55); 
    } 
    if (k > 176){ 
     l++; 
     l = l + 2; 
     enem13.setBounds(l,300,40,55); 
    } 
    enem2.setBounds(u,245,40,55); 
    enem3.setBounds(d,190,40,55); 
    enem4.setBounds(n,135,40,55); 
    enem5.setBounds(i,410,40,55); 
     enem6.setBounds(u,465,40,55); 
     enem7.setBounds(d,520,40,55); 
     enem8.setBounds(n,575,40,55); 
    if(i > 576){ // resets button 
     i = 16; 
    } 
    if(k > 576){ 
     k = 16; 
    } 
    if(u < 16){ 
     u = 576; 
    } 
    u = u - 2; // increase lateral speed 
     if(d == 576) { 
     d = 16; 
    } 
    if(n < 16){ 
     n = 576; 
    } 
    n = n - 5; //increases lateral speed 


    } 
} 

回答

2

問題是創建,因爲您嘗試管理所有的「東西」分開。它看起來像你可能會丟失在classes 首先是一些基本信息,我將創建一個自定義類,像

class ButtonObject extends JButton 
{ 
    public ButtonObject(String text, int x, int y, int width, int height) 
    { 
     super(text); 
     this.setBounds(x, y, width, height); 
    } 
} 

您可能還需要看一看arrays和創建新的ButtonObject的數組。

for loop將幫助您完成陣列中的所有對象。

ButtonObject[] enemies = new ButtonObject[10]; 
for (int i = 0; i < 10; i++) 
{ 
    String text = String.valueOf(i); 
    int y = 300 - (i * 55); 
    enemies[i] = new ButtonObject(text, 16, y, 40, 55); 
} 

可能有比按鈕更好的方法,但爲了簡單起見,您可能想要堅持使用它們。

+0

我試過類似的數組;但是,我無法添加JButton。該方法是否允許我這樣做? – user1566796

+0

只要方法對變量具有[access](http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html)並且不是靜態方法,方法就不會限制變量的賦值(一個關鍵字'static'的方法) – DoubleDouble