Ejemplo n.º 1
0
 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();
 }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
 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();
 }
Ejemplo n.º 4
0
        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;
        }
Ejemplo n.º 5
0
 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;
 }