在益智游戏中创建聚类颜色算法

问题描述 投票:0回答:0

背景:拼图方格大小可以是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

typescript algorithm math lodash
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.