标准化棋盘游戏符号

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

我有一个 Hnefatafl 游戏的棋盘游戏符号,我需要顺时针旋转。在 Hnefatafl 游戏中,我们使用 11x11 的棋盘,文件从 A 到 K,排名从 1 到 11。 所以,这是符号的前三个动作:

“1.k8-i8 g7-j7;2.k5-j5 h6-h9;3.k7-k9 f8-c8;”

旋转后的符号必须是这样的:

“1.h1-h3 g5-g2;2.e1-e2 f4-i4;3.g1-i1 h6-h9;”

如何使用 JavaScript 函数旋转棋盘并规范化符号?

javascript matrix rotation notation normalize
1个回答
0
投票

当你旋转棋盘时,你可以看到原来在文件A中的任何东西现在都在第11位;文件 K 中的任何内容现在都排在第 1 位,等等。

一般情况下,取排名字母的序号位置,从11中减去。

旧文件 旧文件 ascii 值 减97(序号) 新排名(11 - 序号)
'啊' 97 0 11
'b' 98 1 10
'c' 99 2 9
... ... ... ...
'k' 107 10 1

同样,旧的等级可以用类似的方式映射

旧排名 新文件
1 a
2 b
3 c
...
11 k

所以如果你的坐标是以下形式:

{
    file: 'a',
    rank: 11,
}

然后你可以使用这样的函数来转换它们:

const transform = (oldSpace) => {
    return {
        rank: 11 - (oldSpace.file.charCodeAt(0) - 97)
        file: String.fromCharCode(oldSpace.rank + 96)
    };
};

然后你可以将它们转换到新的坐标系。

console.log(transform({ file: 'k', rank: 8 })); // => h1
console.log(transform({ file: 'i', rank: 8 })); // => h3
console.log(transform({ file: 'g', rank: 7 })); // => g5
console.log(transform({ file: 'j', rank: 7 })); // => g2
© www.soinside.com 2019 - 2024. All rights reserved.