public override int[] Moves(Situation situation, bool capture = false) { int pos = situation.Positions[this]; int dest = 0; List<int> moves = new List<int>(); for (int k = 0; k < 4; k++) { dest = pos + setps[k]; for (; situation.Pieces[dest] == null && situation.InChessboard(dest); dest += setps[k]) { if (!capture) { moves.Add(pos | (dest << 8) | (this.Code << 16)); } } if (situation.InChessboard(dest)) { dest += setps[k]; while (situation.Pieces[dest] == null && situation.InChessboard(dest)) { dest += setps[k]; } if (situation.InChessboard(dest) && situation.Pieces[dest].Side != Side) { moves.Add(pos | (dest << 8) | (this.Code << 16)); } } } return moves.ToArray(); }
public override bool CanMove(Situation situation, int dest) { if (!situation.InChessboard(dest))//如果如果目标位置不在棋盘中 { return false; } if (!situation.InFort(dest))//如果如果目标位置不在九宫格中 { return false; } if (situation.Pieces[dest] != null && situation.Pieces[dest].Side == this.Side) { return false; } int setp = situation.Positions[this] - dest; for (int n = 0; n < setps.Length; n++) { if (setp == setps[n]) { return true; } } return false; }
public override int[] Moves(Situation situation, bool capture = false) { int pos = situation.Positions[this]; int dest = 0; ChessPiece destPiece = null; List<int> moves = new List<int>(); for (int i = 0; i < 8; i++) { dest = pos + setps[i, 0]; destPiece = situation.Pieces[dest]; if (!situation.InChessboard(dest) || situation.Pieces[pos + setps[i, 1]] != null || (destPiece != null && destPiece.Side == this.Side)) { continue; } //pcDst = ucpcSquares[sqDst]; if (capture && destPiece == null) { continue; } moves.Add(pos | (dest << 8) | (this.Code << 16)); } return moves.ToArray(); }
public override bool CanMove(Situation situation, int dest) { if (!situation.InChessboard(dest))//如果如果目标位置不在棋盘中 { return false; } if (situation.Pieces[dest] != null && situation.Pieces[dest].Side == this.Side) { return false; } int setp = dest - situation.Positions[this]; if (situation.InHomeHalf(this, dest))//未过河 { return (this.Code & 16) == 0 ? setp == -16 : setp == 16; } for (int n = 0 + ((this.Code & 16) >> 4); n < 3 + ((this.Code & 16) >> 4); n++) { if (setp == setps[n]) { return true; } } return false; }
public override bool CanMove(Situation situation, int dest) { if (!situation.InChessboard(dest))//如果如果目标位置不在棋盘中 { return false; } if (!situation.InHomeHalf(this,dest)) { return false; } if (situation.Pieces[dest] != null && situation.Pieces[dest].Side == this.Side) { return false; } int pos = situation.Positions[this]; int setp = dest - pos; for (int n = 0; n < setps.GetLength(0); n++) { if (setps[n, 0] == setp && situation.Pieces[pos + setps[n, 1]] == null) { return true; } } return false; }