SuanFa/JiangJun.cs

(开头部分) 27KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Collections;
using System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;

namespace Chess.SuanFa // 算法
{
    /// <summary>
    /// 将军
    /// </summary>
    class JiangJun  // 将军
    {
        /// <summary>
        /// 棋子移动后,判断对方是否被绝杀
        /// </summary>
        /// <param name="moveQiZi">最后移动的棋子</param>
        /// <returns>true=已被绝杀</returns>
        public static bool IsJueSha(int moveQiZi)
        {

            int[] jiangJunQiZi = { -1, -1, -1 };
            if (moveQiZi < 16) jiangJunQiZi = IsJiangJun(16); // 检查红帅是否被将军。
            if (moveQiZi >= 16) jiangJunQiZi = IsJiangJun(0); // 检查黑将是否被将军
            GlobalValue.jiangJunTiShiText = "战况信息:"; // 在棋盘上部用文字显示棋局状态,主要用于调试,后期可优化为图像模式
            if (jiangJunQiZi[0] == -1) return false;  // 没有被将军时,则不需检测是否绝杀

            string gongJiQiZi1; // 第一个攻击棋子的名字
            if (jiangJunQiZi[1] != -1) gongJiQiZi1 = GlobalValue.qiZiImageFileName[jiangJunQiZi[1]]; else gongJiQiZi1 = "";
            string gongJiQiZi2; // 第二个攻击棋子的名字
            if (jiangJunQiZi[2] != -1) gongJiQiZi2 = "和" + GlobalValue.qiZiImageFileName[jiangJunQiZi[2]]; else gongJiQiZi2 = "";

            if (jiangJunQiZi[0] == 0) // 被将军的是黑将
            {
                GlobalValue.jiangJunTiShiText = System.Environment.NewLine + "【黑将】正被将军!";

                bool[,] points = MoveCheck.GetPathPoints(0, GlobalValue.QiPan); // 获取黑将的可移动路径
                bool selfCanMove = false;
                for (int i = 3; i <= 5; i++)
                    for (int j = 0; j <= 2; j++)
                    {
                        if (points[i, j] == true && !MoveCheck.IsKilledPoint(0, i, j, GlobalValue.QiPan)) // 检查黑将可移动路径是否是对方的攻击点
                        {
                            selfCanMove = true; // 如果不是对方的攻击点,则可移动到请该点。
                            break;
                        }
                    }
                if (selfCanMove)  // 黑将可移动解杀时
                {
                    GlobalValue.jiangJunTiShiText += System.Environment.NewLine + "【黑将】被" + gongJiQiZi1 + "将军,可移动位置解杀。";
                    return false;
                }
                else  // 黑将不可移动时
                {
                    if (jiangJunQiZi[2] != -1) // 如果是双将
                    {
                        if ((jiangJunQiZi[1] is 21 or 22) || (jiangJunQiZi[2] is 21 or 22))
                        {
                            GlobalValue.jiangJunTiShiText += Environment.NewLine + "【黑将】不能移动,被" + gongJiQiZi1 + gongJiQiZi2 + "双将绝杀!";
                            return true;
                        }
                        GlobalValue.jiangJunTiShiText += Environment.NewLine + "【黑将】被" + gongJiQiZi1 + gongJiQiZi2 + "双将,请求外援!";
后面还有 475 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。