Exemple #1
0
        /// <summary>
        /// 得到棋子的类型,是7种类型之一,实际对应着从1到7的整数
        /// 通过把它们从0到6编号,可以在编程中减少许多if...else if或switch语句
        /// </summary>
        /// <param name="piece">棋子的ID号:RED_ROOK,RED_KNIGHT,...RED_KING,BLACK_ROOK,BLACK_KNIGHT,...BLACK_KING</param>
        /// <returns>返回TYPE_ROOK,...TYPE_KING这7个整数之一;其它情况都返回-1</returns>
        public static int PieceType(int piece)
        {
            // 提高性能,因为b0,b1,...,b6分别代表不同的棋子,这样只要找到1出现的位置就是棋子的类型
            // 参看TYPE_ROOK和RED_ROOK, BLACK_ROOK等常量的定义即可
            return(BitHack64.Log2((ulong)piece & 0x7F));

            //if (piece == RED_ROOK) return TYPE_ROOK;
            //else if (piece == RED_KNIGHT) return TYPE_KNIGHT;
            //else if (piece == RED_CANNON) return TYPE_CANNON;
            //else if (piece == RED_BISHOP) return TYPE_BISHOP;
            //else if (piece == RED_ADVISOR) return TYPE_ADVISOR;
            //else if (piece == RED_PAWN) return TYPE_PAWN;
            //else if (piece == RED_KING) return TYPE_KING;

            //else if (piece == BLACK_ROOK) return TYPE_ROOK;
            //else if (piece == BLACK_KNIGHT) return TYPE_KNIGHT;
            //else if (piece == BLACK_CANNON) return TYPE_CANNON;
            //else if (piece == BLACK_BISHOP) return TYPE_BISHOP;
            //else if (piece == BLACK_ADVISOR) return TYPE_ADVISOR;
            //else if (piece == BLACK_PAWN) return TYPE_PAWN;
            //else if (piece == BLACK_KING) return TYPE_KING;
            //else return -1;
        }