xiangqi is chinese chess game engine
整个棋盘以“河界”分为相等的两部分。为了比赛记录和学习棋谱方便起见,现行规则规定:按九条竖线从右至左用中文数字一至九来表示红方的每条竖线,用阿拉伯数字1只至9来表示黑方的每条竖线。己方的棋子始终使用己方的线路编号,无论棋子是否“过河”。
对弈开始之前,红黑双方应该把棋子摆放在规定的位置。任何棋子每走一步,进就写“进”,退就写“退”,如果像车一样横着走,就写“平”。
现行的记谱法一般使用四个字来记录棋子的移动。 第一个字表示需要移动的棋子。 第二个字表示移动的棋子所在的直线编码(红黑方均为由己方底线从右向左数),红方用汉字,黑方用阿拉伯数字表示。当同一直线上有两个相同的棋子,则采用前、后来区别,如“后车平四”、“前马进7”。 第三个字表示棋子移动的方向,横走用”平“,向对方底线前进用”进“,向己方底线后退用”退“。 第四个字分为两类:棋子在直线上进退时,表示棋子进退的步数;当棋子平走或斜走的时候,表示所到达直线的编号。
- 子力价值对比
- 强子(車,馬,炮)所处的位置
- 全盘子力之间的联系和作用
- 要害部位是否受到攻击(要害部位指中路,两肋底线,及两翼三七路线)
棋子名称 | 活动范围 | 子力价值 | |||||
红 | 黑 | 中央 | 边线 | 角落 | 开局 | 中局 | 残局 |
帅 | 将 | 4 | 3 | 2 | - | - | - |
仕 | 士 | 4 | - | 1 | 1 | 2 | 2 |
相 | 象 | 4 | 2 | - | 2 | 2 | 3 |
马 | 马 | 8/6/4 | 4/3 | 2 | 4 | 5 | 5 |
车 | 车 | 17 | 17 | 17 | 10 | 10 | 10 |
炮 | 炮 | 17/13 | 17/14 | 17/15 | 5 | 5 | 6 |
兵 | 卒 | 1/3 | 1/2 | 1 | 2 | 1/3/5 | 3/2/1 |
function alphaBeta(alphaVal, betaVal, depth) {
if (depth === 0) {
return evaluate()
}
// 生成全部走法
// 排序全部走法
for (走法) {
const val = -alphaBeta(alphaVal, betaVal, depth - 1)
if (val >= betaVal) {
return betaVal
}
if (val > alphaVal) {
alphaVal = val
}
}
return alphaVal
}
内存:数据 < 类 simulate: 输入棋谱,返回对应棋谱以及对应的评估值 mirror->多个模拟方向->this.player.allChessTread.forEach(tread => mirror.simulate(tread)) ->多个模拟深度