我在做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/