我实际上正在为游戏开发“地面指标引擎”。我基本上所做的是将真实的地图数据复制到另一个关联数组中,并使用一些指标属性(如生育率或湿度)对其进行映射,这是一个示例代码:
this.metricsMap = {};
this.generatedFertilities = {};
for (var i = 0; i < this.groundMap.data.length; i++) {
this.generatedFertilities[i] = this.groundMap.data[i].map(function () {
// TODO
});
}
for (var i = 0; i < this.groundMap.data.length; i++) {
this.metricsMap[i] = this.generatedFertilities[i].map(function (res) {
return {
ownedBy: "",
fertility: res,
humidity: 50
}
});
}
地图数据是一个关联数组[32][32]。我想生成具有一致性和“数字波”的相应“生育力矩阵”,这是我想尝试在较小的关联数组上制作的大图:
[68, 69, 70, 71, 72, 73, 74, 75, 74, 73],
[69, 70, 71, 72, 73, 74, 75, 74, 73, 72],
[70, 71, 72, 73, 74, 75, 74, 73, 72, 71],
[71, 72, 73, 74, 75, 74, 73, 72, 71, 60],
[72, 73, 74, 75, 74, 73, 72, 71, 60, 59],
[73, 74, 75, 74, 73, 72, 71, 60, 59, 58],
[74, 75, 74, 73, 72, 71, 60, 59, 58; 57],
[75, 74, 73, 72, 71, 60, 59, 58; 57, 56],
[74, 73, 72, 71, 60, 59, 58; 57, 56, 55],
[73, 72, 71, 60, 59, 58; 57, 56, 55, 54]
我们可以想象更多的“模式”,例如,矩阵中间有更多的浓度。
我尝试了很多这样的事情:
var baseRand = Math.floor(Math.random() * 100) + 1;
for (var i = 0; i < this.groundMap.data.length; i++) {
var counter = 0;
this.generatedFertilities[i] = this.groundMap.data[i].map(function () {
counter++;
// think of i like the y axis and counter like the x axis
if(i % 8 == 0){
if(counter < 8){
return Math.abs(Math.floor(baseRand++));
} else {
return Math.abs(Math.floor(baseRand--));
}
} else {
if(counter > 8){
return Math.abs(Math.floor(baseRand--));
} else {
return Math.abs(Math.floor(baseRand++));
}
}
});
}
但这并没有把我带到某个地方,而且我在它背后的数学问题上遇到了麻烦。你们将如何设计这样的算法?