2016-04-12 11 views
0

Yılan yapan her bir Point nesnesini saklamak için bir ArrayList kullandığım için bir yılan oyunu yapmaya çalışıyorum. Aşağıdaki kod yılan oluşturur:Neden bu işe yaramayacaksın (java'da ArrayList)?

private void createSnake() { 
    for (int i = 0; i < maxLenght; i++) { 
     snakeParts.add(new Point(head.x, head.y + (i * 16))); 
    } 

} 

maxLenght varsayılan olarak 3'e ayarlanır ve bu kod sadece bir kez denir; Bunu yapmak istediğim, bir sütunun sol üst köşesinde, yılanın ilk üç bölümünü temsil eden 3 Nokta nesnesi oluşturmaktır, ancak bir nedenden dolayı, ya sadece sol üst köşede bir tane oluşturur ya da üçünü oluşturur, ancak aynı pozisyonda, nasıl çalıştırabilirim?

Not: Timer render yöntemini kullanıyorum, bu her ne kadar render işlemi kullanmasaydı, (saniye) her saniye gerçekleşmesi gerekiyordu?

Şimdiden teşekkürler.

DÜZENLEME: Bu Yılan sınıfının Yapıcı ise

public ArrayList<Point> snakeParts; 
public Point head; 

public Snake() { 
    snakeParts = new ArrayList<Point>(); 
    head = new Point(0, 0); 

    curDir = 1; 

    createSnake(); 

} 

DÜZENLEME 2: Bu sınıf

public class Renderer extends JPanel { 

@Override 
protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.setColor(Color.BLACK); 
    g.fillRect(0, 0, Core.frame.getWidth(), Core.frame.getHeight()); 

    Snake snake = new Snake(); 
    g.setColor(Color.WHITE); 
    for (Point point : snake.snakeParts) { 
     g.fillRect(snake.head.x, snake.head.y, 16, 16); 
    } 
} 
+2

Eğer ayıklayıcısında size kod adım olduğu 'maxLenght' ne senin olması bekleniyor? Sanırım her zaman 1'dir. –

+3

Ne demek demek çalışmıyor? İstisnaları görüyor musunuz? Daha fazla ayrıntı eklemek, cevap almakta yardımcı olacaktır. – Sachin

+0

İçine bakmak için daha fazla kod verebilir misiniz? 'Point' yapıcınızı ve Arraylist 'u nasıl beyan edip tanımlıyorsunuz? – SRJ

cevap

2

Sizin yöntem

for (Point point : snake.snakeParts) { 
    g.fillRect(snake.head.x, snake.head.y, 16, 16); 
} 

Yani çizdiğiniz olduğunu kılmak olduğunu her nokta için aynı Dikdörtgen.

doğru olacaktır:

for (Point point : snake.snakeParts) { 
    g.fillRect(point.x, point.y, 16, 16); 
} 
+0

Teşekkürler, bu çözüldü o! Benim için ne aptal bir hata: S – SvelterEagle