背景:拼图方格大小可以是16x16、8x8或4x4,难度随着颜色数量的相似度而变化。七种颜色的数量各不相同,游戏的目标是在拼图格内找到最多/最少的颜色
我希望颜色尽可能聚集在一起,而不是分散在整个拼图网格中,并且每个坐标只能由一种颜色占据。最终生成的结果预计会完全填满并形成七块拼图,每种颜色都有自己的一面,就像七巧板
如何在益智游戏中创建聚类颜色算法? 谢谢你的帮助!
示例:(4x4)
{ row: 0, column: 0, color: 0}
{ row: 0, column: 1, color: 1}
{ row: 0, column: 2, color: 2}
{ row: 0, column: 3, color: 3}
{ row: 1, column: 0, color: 3}
{ row: 1, column: 1, color: 4}
{ row: 1, column: 2, color: 0}
{ row: 1, column: 3, color: 1}
{ row: 2, column: 0, color: 2}
{ row: 2, column: 1, color: 3}
{ row: 2, column: 2, color: 2}
{ row: 2, column: 3, color: 1}
{ row: 3, column: 0, color: 1}
{ row: 3, column: 1, color: 1}
{ row: 3, column: 2, color: 1}
{ row: 3, column: 3, color: 3}
let maxRow = 16;
let maxColumn = 16;
let pixel = 1; // 1 = 16x16, 2 = 8x8, 4 = 4x4
let ground = [0, 1, 2, 3, 4];
let colorsCount = [0, 0, 0, 0, 0];
let similar = 10; // 1-10
let colorBlock: { row: number, column: number, color: number }[] = [...];
function createColors(grade: number = 1) {
ground = _.shuffle([0,1,2,3,4]);
var b = [];
for (var i = 0; i < 5; i++) {
for (var j = 0; j < (5*similar) - (i * ((1*similar)+1 - grade)); j++) {
b.push(ground[i]);
}
}
colorBlock = [];
colorsCount = [0, 0, 0, 0, 0];
for (var r = 0; r < 16; r += pixel) {
for (var c = 0; c < 16; c += pixel) {
var color = _.sample(b) ?? 0;
colorsCount[color] += 1;
colorBlock.push({ row: r, column: c, color: color })
}
}
}
while (true) {
createColors();
let duplicateOrZero = _.filter(colorsCount, (val, i, iteratee) => _.includes(iteratee, val, i + 1) || val === 0)
if (duplicateOrZero.length === 0) { break; }
}
...//Grouping Algorithm