我有一个 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 函数旋转棋盘并规范化符号?
当你旋转棋盘时,你可以看到原来在文件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