Skip to content

Southhill/xiangqi-engine

Repository files navigation

Description

xiangqi is chinese chess game engine

Rules

1. chessboard rules

整个棋盘以“河界”分为相等的两部分。为了比赛记录和学习棋谱方便起见,现行规则规定:按九条竖线从右至左用中文数字一至九来表示红方的每条竖线,用阿拉伯数字1只至9来表示黑方的每条竖线。己方的棋子始终使用己方的线路编号,无论棋子是否“过河”。

2. play rules

对弈开始之前,红黑双方应该把棋子摆放在规定的位置。任何棋子每走一步,进就写“进”,退就写“退”,如果像车一样横着走,就写“平”。

3. record rules

现行的记谱法一般使用四个字来记录棋子的移动。 第一个字表示需要移动的棋子。 第二个字表示移动的棋子所在的直线编码(红黑方均为由己方底线从右向左数),红方用汉字,黑方用阿拉伯数字表示。当同一直线上有两个相同的棋子,则采用前、后来区别,如“后车平四”、“前马进7”。 第三个字表示棋子移动的方向,横走用”平“,向对方底线前进用”进“,向己方底线后退用”退“。 第四个字分为两类:棋子在直线上进退时,表示棋子进退的步数;当棋子平走或斜走的时候,表示所到达直线的编号。

Evaluate

1. 审局

  1. 子力价值对比
  2. 强子(車,馬,炮)所处的位置
  3. 全盘子力之间的联系和作用
  4. 要害部位是否受到攻击(要害部位指中路,两肋底线,及两翼三七路线)

2. chess value table

棋子名称 活动范围 子力价值
中央 边线 角落 开局 中局 残局
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

3. alphaBeta算法

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
}

Reference links

  1. 象棋(棋类益智游戏)_百度百科

Note

内存:数据 < 类 simulate: 输入棋谱,返回对应棋谱以及对应的评估值 mirror->多个模拟方向->this.player.allChessTread.forEach(tread => mirror.simulate(tread)) ->多个模拟深度

About

chinese chess engine

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published