首页 > 解决方案 > 如何在 x 和 y 轴上创建小行星

问题描述

我在做Asteroids(雅达利)C。我ADT为小行星设计的,所有的ADT都与 1 颗小行星有关。

我需要在随机位置创建一个小行星,但随机在(0, y)(x, 0)

我有我的功能asteroid_create()

asteroid_t *asteroid_create(float x, float y, float radio){
    asteroid_t *ast = malloc(sizeof(asteroid_t));

    ast->x_pos = x;
    ast->y_pos = y;

    ast->radio = radio;

    ast->vx = rand_float((1000/ast->radio)-100,(1000/ast->radio)+100);
    ast->vy = rand_float((1000/ast->radio)-100,(1000/ast->radio)+100);

    ast->angle = rand_float(0,2*PI);

    size_t rock_rand = rand() % ASTEROIDS_TYPES;
    ast->name_rock = rocks_dictionary[rock_rand];

    return ast;
}

这创造了一个具有某些固定变量的小行星。然后,在另一个文件中,我创建了一个小行星列表,并插入了我需要的尽可能多的小行星。

bool asteroids_insert(list_t* l){
    asteroid_t *ast = asteroid_create(rand_float(0,WINDOW_WIDTH),rand_float(0,WINDOW_HIGH),AST_INITIAL_RADIO);
    if(!list_append(l,ast))
        return false;
    return true;

}

主要是:

for(size_t i=0; i< ASTEROIDS_INITIAL;i++){
        asteroids_insert(list_asteroids);
    }

通过这种方式,我可以在屏幕上的任何位置创建小行星。我只需要在 y 轴或 x 轴上生成它们。

我这样做的方式,我想不出我怎么能做我需要的。我该怎么做才能让 asteroid_create() 接收作为参数位置(0, y)(x, 0)随机接收?

标签: cmallocabstract-data-type

解决方案


想象一下,您将y轴向下弯曲到左侧,这样实际上它就变成了x轴的“负部分”。

生成 和 之间的随机value数。-MAX_Y+MAX_X

如果得到的数字是0你的观点是(0, 0);如果是肯定的,你的观点是(value, 0),否则是(0, -value)

注意:如果您的x轴大于y轴,这将更有可能在x轴上生成点。


推荐阅读