如何在java中使用随机数组编号和计时器?

时间:2013-10-29 22:15:21

标签: java arrays random timer slick2d

我正在制作一个2D Java游戏,我正试图弄清楚如何每隔几秒钟(2或3)生成一个图像,从数字数组中随机选取y轴。我不知道如何在屏幕上同时显示多个相同的图像,制作计时器,或从阵列中获取随机数。

有人可以帮我这个吗?我已经坚持了大约3个星期,也有一些关于碰撞的提示会受到赞赏。

*总的来说,我正试图在从阵列中随机挑选的y处生成图像 “int [] blocky = {0,29,50,79,109,138,168,204,222,248,276,304,334,363,393,418,443};”

2 个答案:

答案 0 :(得分:1)

假设你的数字数组看起来像这样,在你班级的某个地方初始化:

int [] numbers = new int [] {123,321,456,765,923,931};

您可以创建一个如下所示的方法:

private int getRandomNumberFromArray(){
     int min = 0;
     int max = numbers.length;

     return numbers[min + (int)(Math.random() * ((max - min) + 1))];
}

然后你可以像这样调用这个方法:

int randomNumberFromArray = getRandomNumberFromArray();

查看this thread以获取Java随机实现的详细说明。

至于你的其他问题,我不太清楚你想要完成什么。请提供更多详情。


更新

随着您的OP更新,我想我对您要做的事情有了更好的了解。请允许我修改。

首先,为了使用Slick2D显示图像,here是一个很好的短视频教程。我建议你查看他关于这个主题的系列,因为它们非常简洁明了。

至于你的计时器,我发现了这段代码here

int time;

public void update(GameContainer container, int delta) {
    time += delta;
}

public void render(GameContainer container, Graphics g) {
    g.drawString("Time : " + time/1000, 100, 100);
}

这将绘制一个简单的计时器,在x = 100,y = 100的屏幕上自动更新。这是您可以用于测试目的的东西。至于你的随机间隔,你可以扩展上面这样的代码。

int time;
int deadline; // initialize this somewhere in the start of your game

public void update(GameContainer container, int delta) {
    time += delta;
}

public void render(GameContainer container, Graphics g) {
    g.drawString("Time : " + time/1000, 100, 100);

    // if the current time has passed the deadline, do something
    if(time > deadline){
        int min = 2;
        int max = 3;
        deadline = time + ((min + (int)(Math.random() * ((max - min) + 1))) * 1000); // reset the interval timer

        // draw the image
        int x = 100;
        int y = getRandomNumberFromArray(); // this is the method I provided in my first part of the answer
        Image img = new Image("path/file.png");
        g.drawImage(img, x, y) // image file, x, y
    }
}

这段代码创建了一个作为随机间隔计时器的截止日期。截止日期是当前时间的总和,将添加2到3之间的数字(乘以1000,因为时间以毫秒为单位)。当前时间超过此截止日期时,将创建随机图像。

至于显示多个图像,我会参考之前链接的教程。我认为这可以通过跟踪ArrayList中的图像来实现。然后在render()方法中渲染所有这些图像。但我不太确定,因为我只知道一些Slick2D的基础知识。

我没有测试任何这个,但我希望能指出你正确的方向。

更新2

至于评论中的建议,这将是实现这一点的一种方式。

ArrayList<DrawnImage> images; // make sure you initialize this at the beginning as: images = new ArrayList<Image>();
int time;
int deadline; // initialize this somewhere in the start of your game

public void update(GameContainer container, int delta) {
    time += delta;
}

public void render(GameContainer container, Graphics g) {
    g.drawString("Time : " + time/1000, 100, 100);

    // if the current time has passed the deadline, do something
    if(time > deadline){
        int min = 2;
        int max = 3;
        deadline = time + ((min + (int)(Math.random() * ((max - min) + 1))) * 1000); // reset the interval timer

        // draw the image
        int x = 100;
        int y = getRandomNumberFromArray(); // this is the method I provided in my first part of the answer
        images.add(new DrawnImage(new Image("path/file.png"), x, y));

        for(DrawnImage di : images){
            g.drawImage(di.image, di.x, di.y); // image file, x, y
        }
    }
}

DrawnImage类

public class DrawnImage {
    public Image image;
    public float x;
    public float y;

    public DrawnImage(Image image, float x, float y){
        this.image = image;
        this.x = x;
        this.y = y;
    }
}

答案 1 :(得分:0)

根本不需要计时器。

while (true) {
    Thread.sleep(x); //x is the number of milliseconds you want the computer to wait for
    int y = Math.random() * array.length;  //array is the name of the array
    //Create your new image, with y-value as array[y]
}