Java 程序世界生成

Java 程序世界生成,java,random,Java,Random,我正在生成我的世界(随机的,无限的和二维的),在x乘y的区域中,当我到达x的末端时,一个新的区域形成。如果在第一节我有山,我如何才能使它在第二节这些山将继续?有什么办法可以让这一切发生吗 看起来是这样的 1221 1=产生的土地 2=将填充两块土地的未生成土地 我现在明白了: 有没有办法让这个流程更好?如果我正确理解了您的问题,下面是一个解决方案: 如果生成山丘之间的增量(差值)并将其上限设置为固定值(因此更改不会太大),则在生成新的山丘时,可以从上一个剖面中继承最后一个山丘的值,并应用第一

我正在生成我的世界(随机的,无限的和二维的),在x乘y的区域中,当我到达x的末端时,一个新的区域形成。如果在第一节我有山,我如何才能使它在第二节这些山将继续?有什么办法可以让这一切发生吗

看起来是这样的

1221

1=产生的土地

2=将填充两块土地的未生成土地

我现在明白了:


有没有办法让这个流程更好?

如果我正确理解了您的问题,下面是一个解决方案:


如果生成山丘之间的增量(差值)并将其上限设置为固定值(因此更改不会太大),则在生成新的山丘时,可以从上一个剖面中继承最后一个山丘的值,并应用第一个随机生成的增量(新剖面的)如果我正确理解了您的问题,这里有一个解决方案:


如果生成山丘之间的增量(差值)并将其上限设置为固定值(因此更改不会太大),则在生成新的山丘时,可以从上一个剖面中继承最后一个山丘的值,并应用第一个随机生成的增量(新剖面的)这似乎只是一个算法问题。您的生成机制需要一个起点。在最初的调用中,它将是0,在随后的调用中,它将是前一个“块”的结束位置


如果我这样做的话,我可能会利用某种分布,比如10%的时间是+/13,25%的时间是+/-2,25%的时间是0,40%的时间是+/-1,来计算下一个点的高度。您的生成机制需要一个起点。在最初的调用中,它将是0,在随后的调用中,它将是前一个“块”的结束位置


如果我这样做的话,我可能会使用某种分布,比如10%的时间是+/13,25%的时间是+/-2,25%的时间是0,40%的时间是+/-1,来计算下一个点的高度,我将创建一个访问器方法,为所述hill的延续提供一个值,以开始下一节。在单个剖面中绘制山丘时,似乎正在为山丘创建一个随机高度,以使其受到某个值的约束。使用此新的访问器方法扩展该功能

我的想法是可能实现这一点

public class DrawHillSection {
    private int index;
    private int x[50];
    public void drawHillSection() {
        for( int i = 0; i < 50; i++) {
            if (i == 0) {
                getPreviousHillSectionHeight(index - 1)
            }
            else {
                ...
                // Your current implementation to create random
                //   height with some delta-y limit.
                ...
            }
        }
    }

    public void getPreviousHillSectionHeight(int index)
    {
        return (x[49].height);
    }
}
公共类DrawHillSection{
私有整数索引;
私有整数x[50];
公共无效drawHillSection(){
对于(int i=0;i<50;i++){
如果(i==0){
getPreviousHillSectionHeight(索引-1)
}
否则{
...
//您当前的实现将创建随机
//高度有一定的delta-y限制。
...
}
}
}
public void getPreviousHillSectionHeight(int索引)
{
返回(x[49]。高度);
}
}

如果您按顺序生成这些“山”,我将创建一个访问器方法,为所述山的延续提供一个值,以开始下一节。在单个剖面中绘制山丘时,似乎正在为山丘创建一个随机高度,以使其受到某个值的约束。使用此新的访问器方法扩展该功能

我的想法是可能实现这一点

public class DrawHillSection {
    private int index;
    private int x[50];
    public void drawHillSection() {
        for( int i = 0; i < 50; i++) {
            if (i == 0) {
                getPreviousHillSectionHeight(index - 1)
            }
            else {
                ...
                // Your current implementation to create random
                //   height with some delta-y limit.
                ...
            }
        }
    }

    public void getPreviousHillSectionHeight(int index)
    {
        return (x[49].height);
    }
}
公共类DrawHillSection{
私有整数索引;
私有整数x[50];
公共无效drawHillSection(){
对于(int i=0;i<50;i++){
如果(i==0){
getPreviousHillSectionHeight(索引-1)
}
否则{
...
//您当前的实现将创建随机
//高度有一定的delta-y限制。
...
}
}
}
public void getPreviousHillSectionHeight(int索引)
{
返回(x[49]。高度);
}
}

我看到你的山丘从上到下不断延伸。你说它们不是连续的是什么意思?翻转效果是由于屏幕截图功能中的镜像造成的,问题是悬崖被切掉了。我看到你的山从上到下一直延伸。你说它们不是连续的是什么意思?翻转效果是由于屏幕截图功能中的一个镜像造成的,问题是悬崖突然被切断