我在做Asteroids中的C(Atari)。我为小行星设计了ADT,所有的ADT都与一颗小行星有关。
我需要创建一个随机位置的小行星,但是在(0, y)(x, 0)内随机
我有我的功能:

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轴上生成它们。
我做这件事的方式,我想不出我该怎么做。如何才能使小行星_create()作为参数接收到asteroid_create()(0, y)中的任意位置?

最佳答案

想象一下,你弯曲了y轴向下到左边,所以实际上它变成了x轴的“负部分”。
value-MAX_Y之间生成一个随机数+MAX_X
如果得到的数字是0你的点是(0, 0);如果是正的,你的点是(value, 0),否则是(0, -value)
注意:如果你的x轴大于y轴,这将更有可能在x轴上生成点。

关于c - 如何在x和y轴上创建小行星,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57208947/

10-09 08:45