如何非顺序使用LCG生成带种子的随机无限2D地牢?
2D地牢随机生成问题
- 目标:制作一款2D地牢游戏,地牢内每个格子有相同概率成为实心块或空气块,支持无限生成且与种子绑定——相同种子对应完全一致的地牢。
- 最初实现思路:取格子的x、y坐标相乘,加上地牢种子后作为LCG(线性同余生成器)的种子,以此判断格子类型,原本认为这种方式编程难度低。
- 实际问题:当x=0或y=0时,这些格子的种子始终等于地牢种子,生成的数值完全相同;其余格子也会出现明显的非随机规律,这是由LCG的函数特性导致的。
- 当前困境:需要设计更复杂的格子种子计算公式来提升随机性,但暂未找到合适方案。曾尝试引入三角函数,但不确定这是否是最优解,担心会快速出现重复模式。
一维简化测试代码
#include "MRandom.h"//A LCG library created by my or anyone. #include <iostream> using namespace std; int main(){ for(int x = 0; x < 100; x++){ setSeed(x); int n = random(); cout<<n<<endl; } return 0; }
该代码的输出呈现明显规律:数值增长至LCG模数后回到LCG的c值,再次线性增长,重复出现弱随机的模式。
内容的提问来源于stack exchange,提问作者MorsaHelada
相关产品推荐
相关产品推荐

