我正在C
做Asteroids
(雅达利(。我为小行星设计了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
轴上生成点的可能性更大。