2016-02-04 5 views
-2

У меня есть эта игра, где мяч падает на экран. Проблема в том, что мяч только идет вправо. Я считаю, что проблема заключается в переходе от метода LR к основному игровому циклу. Я создал переменную, и она берет метод LR и запускает его внутри цикла, который обновляет и очищает холст каждую секунду. Вот код:Java Bean Drop, Only Going Right

package cats; 

public class BeanDrop { 

public static void main(String[] args) throws InterruptedException { 
    mainGameLoop(); 
    } 
public static void mainGameLoop() throws InterruptedException{ 
    double x = .5; 
    double y = .9; 
    while (true){ 
    int choice = LR(); 
    arena(); 
    ball(x , y); 
    if (choice == 1){ 
     // right outcome 
     x = x + .1; 
    } 
    else if(choice == 2){ 
     //left outcome 
     x = x -.1; 
    } 
    y = y - .1; 
    Thread.sleep(1000); 
    StdDraw.clear(); 
    } 
} 
public static void arena(){ 
    StdDraw.picture(.5, .5, "balldrop.jpeg"); 
} 

private static int LR(){ 
    int choice = ((int) Math.random() * 2 + 1); 
    return choice; 
} 
public static void ball(double x , double y){ 
    StdDraw.picture(x, y, "ball.jpeg",.05,.05); 
} 
} 

ответ

1

Взгляните на это: How do I generate random integers within a specific range in Java?

Что он говорит, в принципе использовать это, чтобы получить случайное число:

Random rand; 

// nextInt is normally exclusive of the top value, 
// so add 1 to make it inclusive 
int randomNum = rand.nextInt((max - min) + 1) + min; 

return randomNum; 

Так что для вас, вы можете использовать это:

private static int LR(){ 
    int choice = rand.nextInt(2) + 1; 
    return choice; 
} 

EDIT: You mu го сделать экземпляр Random и назовите его рандов в верхней части кода:

private Random rand; 

И есть это, прежде чем инициализировать цикл игры:

rand = new Random(); 
+1

вы забыли + мин в конце .. . должен быть int choice = rand.nextInt (2) + 1; –

+0

@RomainHippeau Нет, это сгенерирует (случайно) два разных ответа, хотя, я думаю, вы полуправильно, потому что это будет генерировать 0 или 1, поэтому я отредактирую ответ, чтобы отразить это, спасибо :) –

+1

просто применяя формула в ссылке. Мы хотим сгенерировать 1 или 2, а не 0 или 1, чтобы вы вернули, потому что сейчас правильно. –