2015-11-20 16 views
1

這裏是交易,基本上我必須有一個代碼,有一個桶可以捕捉落下的水果,每次捕捉它時,你都會得到一個新的水果落下的點。我該如何在此代碼中移動一個隨機對象?

所以我知道如何讓水桶移動,以及如何讓水果一旦到達底部就再次出現。但是,我不知道如何使它實際上下降。到目前爲止,我得到了一個開關,但不知道該怎麼做。我得到的果實隨機出現,這是一個開始。無論如何,這是我的代碼。所有幫助讚賞。再次,我需要有一個隨機的水果下降,一旦他們中的一個達到底部。

import java.awt.Color; 
 
import java.awt.event.KeyEvent; 
 

 
import acm.graphics.GOval; 
 
import acm.graphics.GPolygon; 
 
import acm.graphics.GRect; 
 
import acm.program.GraphicsProgram; 
 
import acm.util.RandomGenerator; 
 

 
import java.awt.event.*; 
 

 
public class FruitCatcher extends GraphicsProgram { 
 
\t private static final int APPLET_WIDTH = 500; 
 
\t private static final int APPLET_HEIGHT = 500; 
 
\t private static final int BUCKET_X = 250; 
 
\t private static final int BUCKET_Y = 500; 
 
\t private static final int BUCKET_SPEED = 10; 
 
\t private static final int BUCKET_SPEED2 = -10; 
 

 
\t private GPolygon Bucket; 
 

 
\t public void init() { 
 
\t \t setSize(APPLET_WIDTH, APPLET_HEIGHT); 
 
\t \t addKeyListeners(); 
 
\t } 
 

 
\t public void run() { 
 
\t \t RandomGenerator random = new RandomGenerator(); 
 

 
\t \t makeBucket(); 
 
\t \t for (int i = 1; i <= 3; i++) { 
 

 
\t \t \t int randomX = random.nextInt(0, 300 - 20); 
 

 
\t \t \t addFruit(i, randomX, 0); 
 
\t \t } 
 
\t \t while (true) 
 
\t \t \t ; 
 

 
\t } 
 

 
\t public void makeBucket() { 
 
\t \t Bucket = new GPolygon(BUCKET_X, BUCKET_Y); 
 
\t \t Bucket.addVertex(-60, 0); 
 
\t \t Bucket.addVertex(-70, -85); 
 
\t \t Bucket.addVertex(10, -85); 
 
\t \t Bucket.addVertex(0, 0); 
 

 
\t \t add(Bucket); 
 
\t \t Bucket.setFilled(true); 
 
\t \t Bucket.setFillColor(Color.GRAY); 
 
\t } 
 

 
\t public void addFruit(int a, int x, int y) { 
 

 
\t \t switch (a) { 
 
\t \t case 1: 
 
\t \t \t GRect Banana = new GRect(x, y, 10, 60); 
 
\t \t \t Banana.setColor(Color.YELLOW); 
 
\t \t \t Banana.setFilled(true); 
 
\t \t \t add(Banana); 
 
\t \t \t break; 
 
\t \t case 2: 
 
\t \t \t GOval lime = new GOval(x, y, 20, 20); 
 
\t \t \t lime.setColor(Color.GREEN); 
 
\t \t \t lime.setFilled(true); 
 
\t \t \t add(lime); 
 
\t \t \t break; 
 
\t \t case 3: 
 
\t \t \t GOval Orange = new GOval(x, y, 30, 30); 
 
\t \t \t Orange.setColor(Color.ORANGE); 
 
\t \t \t Orange.setFilled(true); 
 
\t \t \t add(Orange); 
 
\t \t } 
 

 
\t } 
 

 
\t public void keyPressed(KeyEvent event) { 
 
\t \t int keyCode = event.getKeyCode(); 
 
\t \t switch (keyCode) { 
 
\t \t case KeyEvent.VK_LEFT: 
 
\t \t \t if (Bucket.getX() > 0) { 
 
\t \t \t \t Bucket.move(-BUCKET_SPEED, 0); 
 
\t \t \t } 
 
\t \t \t break; 
 
\t \t case KeyEvent.VK_RIGHT: 
 
\t \t \t if (Bucket.getX() < APPLET_WIDTH) { 
 
\t \t \t \t Bucket.move(BUCKET_SPEED, 0); 
 
\t \t \t } 
 
\t \t \t break; 
 
\t \t } 
 
\t } 
 
}

在我的代碼,你可以看到,而(真)我只是假設是我會寫它。但是,我實際上在那裏會遇到一些損失。

+0

什麼是不工作?把所有東西扔出來說「完成這個項目」並不會讓我們繼續前進。 (和代碼片段是完整的HTML/JS/CSS,而不是Java。) – Teepeemm

+0

嗯,我假設我把東西放在while(true)循環的頂部,因爲那是我運行代碼的地方。但是,我遇到了問題,將代碼的底部添加到while方法的頂部。你不能只做BLANK.move(0,2);或者什麼,因爲沒有什麼可以放。 – Gohawks

回答

2
  • 你需要保持引用的列表的所有水果,這樣你就可以在以後對其進行操作
  • 遊戲循環的每次迭代,將每個水果下來
  • 你可能想實現一些時間機制,使水果的速度不依賴於CPU的速度。

    package jsyn; 
    
    import java.awt.Color; 
    import java.awt.Component; 
    import java.awt.event.KeyEvent; 
    import java.util.ArrayList; 
    import java.util.List; 
    
    import acm.graphics.GOval; 
    import acm.graphics.GPolygon; 
    import acm.graphics.GRect; 
    import acm.program.GraphicsProgram; 
    import acm.util.RandomGenerator; 
    
    import java.awt.event.*; 
    
    public class FruitCatcher extends GraphicsProgram { 
    private static final int APPLET_WIDTH = 500; 
    private static final int APPLET_HEIGHT = 500; 
    private static final int BUCKET_X = 250; 
    private static final int BUCKET_Y = 500; 
    private static final int BUCKET_SPEED = 10; 
    private static final int BUCKET_SPEED2 = -10; 
    
    //Speed of fruit falling 
    private static final int FRUIT_PX_PER_MS = 10; 
    
    private GPolygon Bucket; 
    
    public void init() { 
        setSize(APPLET_WIDTH, APPLET_HEIGHT); 
        addKeyListeners(); 
        fruits = new ArrayList<Component>(); 
    } 
    
    // Keep list of fruits 
    List<GObject> fruits; 
    
    public void run() { 
        RandomGenerator random = new RandomGenerator(); 
    
        makeBucket(); 
        for (int i = 1; i <= 3; i++) { 
    
         int randomX = random.nextInt(0, 300 - 20); 
    
         addFruit(i, randomX, 0); 
        } 
    
        long last = System.currentTimeMillis(); 
        while (true) { 
         long current = System.currentTimeMillis(); 
         update(current - last); 
         last = current; 
        } 
    } 
    
    void update(long delta) { 
        for (GObject fruit : fruits) { 
         //this code may not work, replace with code that moves fruit down 
         fruit.setLocation(fruit.getX(), fruit.getY() + delta * FRUIT_PX_PER_MS); 
        } 
    } 
    
    public void makeBucket() { 
        Bucket = new GPolygon(BUCKET_X, BUCKET_Y); 
        Bucket.addVertex(-60, 0); 
        Bucket.addVertex(-70, -85); 
        Bucket.addVertex(10, -85); 
        Bucket.addVertex(0, 0); 
    
        add(Bucket); 
        Bucket.setFilled(true); 
        Bucket.setFillColor(Color.GRAY); 
    } 
    
    public void addFruit(int a, int x, int y) { 
    
        switch (a) { 
        case 1: 
         GRect Banana = new GRect(x, y, 10, 60); 
         Banana.setColor(Color.YELLOW); 
         Banana.setFilled(true); 
         add(Banana); 
         fruits.add(Banana); 
         break; 
        case 2: 
         GOval lime = new GOval(x, y, 20, 20); 
         lime.setColor(Color.GREEN); 
         lime.setFilled(true); 
         add(lime); 
         fruits.add(lime); 
         break; 
        case 3: 
         GOval Orange = new GOval(x, y, 30, 30); 
         Orange.setColor(Color.ORANGE); 
         Orange.setFilled(true); 
         add(Orange); 
         fruits.add(Orange); 
        } 
    
    } 
    
    public void keyPressed(KeyEvent event) { 
        int keyCode = event.getKeyCode(); 
        switch (keyCode) { 
        case KeyEvent.VK_LEFT: 
         if (Bucket.getX() > 0) { 
          Bucket.move(-BUCKET_SPEED, 0); 
         } 
         break; 
        case KeyEvent.VK_RIGHT: 
         if (Bucket.getX() < APPLET_WIDTH) { 
          Bucket.move(BUCKET_SPEED, 0); 
         } 
         break; 
        } 
    } 
    }