c - 如何在 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)
随机接收?
解决方案
想象一下,您将y
轴向下弯曲到左侧,这样实际上它就变成了x
轴的“负部分”。
生成 和 之间的随机value
数。-MAX_Y
+MAX_X
如果得到的数字是0
你的观点是(0, 0)
;如果是肯定的,你的观点是(value, 0)
,否则是(0, -value)
。
注意:如果您的x
轴大于y
轴,这将更有可能在x
轴上生成点。
推荐阅读
- haskell - 如何使用图表后端正确设置图表?
- c - “arm-none-linux-gnueabi-gcc”与“arm-linux-gnueabi-gcc”的编译差异
- python - 如何在数据框中合并同一对象的数据?
- scala - scala (spark) zio 将 future 转换为 zio
- ios - 在子 TableView 中获取父单元格的 indexPath
- regex - 在datastudio中的第一个+字符之后替换/删除所有内容
- node.js - setupProxy 中的超时在 localhost 中有效,但在 dokku 部署应用程序中无效
- c# - 尝试将训练图像上传到自定义视觉项目时出现未经授权的错误
- python - Django TypeError 对象在模板中不可迭代
- python - 用于去抖动的 Python 装饰器,包括函数参数