c - 如何在 x 轴和 y 轴上创建小行星



我正在CAsteroids(雅达利(。我为小行星设计了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)

中的位置?

想象一下,您将y轴向下弯曲到左边,因此实际上它成为x轴的"负部分"。

生成一个介于 -MAX_Y+MAX_X 之间的随机数value

如果结果数字为0则你的点为(0, 0);如果为正,则你的点为(value, 0),否则为(0, -value)

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

相关内容

  • 没有找到相关文章

最新更新