2017-08-31 38 views
0

我對編碼還很陌生,所以我只是試圖製作一些簡單的遊戲,如Snake。現在我正試圖讓蘋果吃掉時跟蹤頭部,但我遇到了問題。ArrayList中的動態矩形

我目前擁有它,以便在合適的時間在正確的地方產卵,但它們不會移動。他們產卵並變得靜止。我的尾部件存儲在一個ArrayList中,我不知道如何更新每個刻度的矩形的座標值。如何修改每個矩形的每個矩形的座標值?

這是我到目前爲止。這裏是滋生尾部件和油漆他們

public static ArrayList<Integer> xValues = new ArrayList(1); 
public static ArrayList<Integer> yValues = new ArrayList(1); 
public static ArrayList<Rectangle> tails = new ArrayList(1); 
public static int tail = 1; 

public static void paint(Graphics g) { 
    g.setColor(Color.green); 
    g.fillRect(sx, sy, sWidth, sHeight); 

    if(Apple.collision) { 
     tails.add(new Rectangle(xValues.get(xValues.size() - tail), 
     yValues.get(yValues.size() - tail), sWidth, sHeight)); 
     System.out.println(tails.size()); 
     Apple.collision = false; 
    } 

    for(int i = 0; i < tails.size(); i++) { 
     g.setColor(Color.green); 
     g.fillRect(tails.get(i).x, tails.get(i).y, tails.get(i).width, tails.get(i).height); 
    } 
} 

public static void update() { 
    sx += svx; 
    sy += svy; 

    xValues.add(sx); 
    yValues.add(sy); 
} 

我想要做的就是每場比賽蜱我想1.所以剛纔尾++遞增變量「尾巴」我的蛇類的一部分。當我吃蘋果的時候,我在蘋果課上做這個。

public static void update() { 
    if(Snake.sx == ax && Snake.sy == ay) { 
     ax = (int) ((20 - 0) * random()) * 20; 
     ay = (int) ((20 - 0) * random()) * 20; 
     Snake.tail++; 

     collision = true; 
    } 

但是,這個矩形不是動態的,所以它們不會增加每個勾號的尾部。

我知道我可以通過設置一個for循環找到的長方形的x值,並且有類似

tail.get(i).getBounds().getX; 

但我想不通的程序運行時,我可以怎樣改變座標值。

在此先感謝!

回答

0

爲了保持tails矩形的更新,您必須在每個剔號處通過列表並將每個尾段的座標設置爲它前面的座標,否則您必須添加一個新的矩形並且每剔掉一個最老的(如FIFO隊列)。

但是,由於您已經存儲了所有過去的x/y值,因此tails列表僅包含冗餘信息。您可以完全放下它,只需讀取最後一個x/y值的tail以獲得每個尾部座標。

public static void paint(Graphics g) { 
    g.setColor(Color.green); 
    g.fillRect(sx, sy, sWidth, sHeight); 

    if (Apple.collision) { 
//  tail++; // could do this here instead of in Apple.update 
     System.out.println(tail); 
     Apple.collision = false; 
    } 

    for (int i = 0; i < tail; i++) { 
     g.setColor(Color.green); 
     g.fillRect(xValues.get(xValues.size() - 1 - i), yValues.get(yValues.size() - 1 - i), sWidth, sHeight); 
    } 
} 
+0

太棒了,這讓我對現在更有意義!我只是猜測和檢查,但你做得這麼簡單。非常感謝你! – CoderKlipto