我正在设计一个Scratch游戏。这款游戏被认为是一艘宇宙飞船在太空中旅行,避开小行星。这些小行星从屏幕右侧固定的X位置开始,然后水平地向左移动,直到它们撞上固定的X位置,它们就会消失。小行星将在2-6之间分组开始(这是一个随机生成的数字),每组间隔约1秒。
假设游戏一次抛出最多6颗小行星,我想确保每颗小行星都离下一颗很远。我尝试使用两个变量并比较距离,但这不起作用。我可以把一组小行星Y产卵的位置放到一个列表中。例如,在我的列表中,我有:
0, 100, 5, 30, -20正如您所看到的,该列表中有两个相邻的项目。我要做的是防止发生这种情况,所以第三项应该是其他值,比如-50,如果生成了一个六项,确保它也很远。
有人能用伪代码来实现这样的事情吗?不管它是用哪种编程语言编写的,我大概都能把它的大意转换成Scratch。
发布于 2020-07-02 02:51:59
有一种方法可以在没有试错循环的情况下做到这一点。不是选择随机位置,而是选择随机距离,然后缩放它们以适合屏幕。
粗略地说,方法如下。下面的列表表示相邻小行星之间的距离(按Y坐标排序),以及最外面的小行星与屏幕边缘之间的距离。例如,如果一组包含6个小行星,那么您需要每个元素包含7个元素的列表。
L2现在包含距离列表,这些距离包括:
屏幕高度遵循L1
的高度
最后一步是根据L2中的距离定位每颗小行星相对于其邻居的位置。
注意:如果步骤3给出一个负数,那么很明显屏幕上没有足够的空间来容纳所有的小行星。更糟糕的是,一个天真的“试错”算法会导致无限循环。当然,解决方案是修改参数;您不能在最小距离为100的情况下将6颗小行星拟合到360像素。
发布于 2020-06-28 16:23:41
为此,您需要遍历数组中以前的每个条目,将该值与新值进行比较,如果有任何元素太接近,则更改该值。此过程需要重复,直到找到合适的数字。如果该数字小于某个最小距离,则将变量tooClose设置为yes,并重置该值。在循环开始时,将tooClose设置为yes,以便至少生成一个随机数。然后,在循环开始时,将该值随机化,并将tooClose设置为no,然后,我使用值i遍历前面的所有条目,比较每个元素,如果太接近,则将tooClose设置为yes。数字之间的比较是通过减法,然后是绝对值来完成的,这将确保结果是正的,给出两个数字之间的差值作为正值。
以下是代码的截图:

https://stackoverflow.com/questions/62619800
复制相似问题