我正在尝试使用PRNG创建一个由1和0无限生成的地图,但只存储一个可视的7x7网格。例如,在屏幕上,您将看到一个7x7网格,其中显示了部分1和0的地图,当您向右推时,它会将1和0移动并将下一行放在原位。
如果您向左移动,由于它是伪随机生成的,它会重新生成并显示原始地图。您可以无限制地向任何方向移动。
我的问题是,初始地图看起来不那么随机,并且在向右或向左滚动时模式重复出现,我认为这与我生成数字的方式有关。例如,您可以从查看x = 5000和y = 10000开始,因此需要从这两个值生成唯一的种子。(复杂度是视口大小的变量)
为了简化需求,我需要能够设置以下内容:
Level[x,y]=Returnrandom(offsetx,offsety)
其中的html标签需要保留。
如果您向左移动,由于它是伪随机生成的,它会重新生成并显示原始地图。您可以无限制地向任何方向移动。
我的问题是,初始地图看起来不那么随机,并且在向右或向左滚动时模式重复出现,我认为这与我生成数字的方式有关。例如,您可以从查看x = 5000和y = 10000开始,因此需要从这两个值生成唯一的种子。(复杂度是视口大小的变量)
void CreateMap(){
if(complexity%2==0) {
complexity--;
}
if (randomseed) {
levelseed=Time.time.ToString();
}
psuedoRandom = new System.Random(levelseed.GetHashCode());
offsetx=psuedoRandom.Next();
offsety=psuedoRandom.Next();
levellocation=psuedoRandom.Next();
level = new int[complexity,complexity];
middle=complexity/2;
for (int x=0;x<complexity;x++){
for (int y=0;y<complexity;y++){
int hashme=levellocation+offsetx+x*offsety+y;
psuedoRandom = new System.Random(hashme.GetHashCode());
level[x,y]=psuedoRandom.Next(0,2);
}
}
}
这是我用来控制左右移动的代码:
void MoveRight(){
offsetx++;
for (int x=0;x<complexity-1;x++){
for (int y=0;y<complexity;y++){
level[x,y]=level[x+1,y];
}
}
for (int y=0;y<complexity;y++){
psuedoRandom = new System.Random(levellocation+offsetx*y);
level[complexity-1,y]=psuedoRandom.Next(0,2);
}
}
void MoveLeft(){
offsetx--;
for (int x=complexity-1;x>0;x--){
for (int y=0;y<complexity;y++){
level[x,y]=level[x-1,y];
}
}
for (int y=0;y<complexity;y++){
psuedoRandom = new System.Random(levellocation+offsetx*y);
level[0,y]=psuedoRandom.Next(0,2);
}
}
为了简化需求,我需要能够设置以下内容:
Level[x,y]=Returnrandom(offsetx,offsety)
其中的html标签需要保留。
int RandomReturn(int x, int y){
psuedoRandom = new System.Random(Whatseedshouldiuse);
return (psuedoRandom.Next (0,2));
}