在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示

在Silverlight+WCF 新手实例 象棋 棋子移动-规则[附加上半盘限制](十)中,由Silenus-G提出规则还有点bug:

红车竟然可以走到红马的地盘:这是由于鼠标点在棋子之外的地方时,我们产生的是棋子移动[不是吃子],而在移动之时,我们又没有判断要移动到的位置上是不是有其它棋子从而引发了经济纠纷。因此,解决这个问题,我们只需在点击事件里增加一下判断棋子存不存在就可以了。

而在移动的规则里,这节我们同时进行补充,小调整一下其它两个规则:

1:车和炮的判断语句少了几个“括号”;

2:增加将军面对面可以吃子

下面开始:

对于红车抢马地盘这个问题,我们增加一行if代码就可以解决了,我们回到Chess象棋类里,找到鼠标点击事件:

 void control_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            if (e.OriginalSource is Canvas || e.OriginalSource is Line)
            {
                Chessman chessman =ReadyMoveChessman;
                if (chessman != null)
                {
                    Point fixPoint = FixPoint(e.GetPosition(null));
                    if (FindChessman(fixPoint) == null)//这里是新增加的一行判断语句
                    {
                        Action.MoveTo(chessman, fixPoint);
                    }
                   
                }
            }
        }

OK,红车抢马的事故我们一行代码就解决了,下面为原有规则的车和炮增加括号:

我们回到ChessRule规则类里:

车规则修正:

//这一行是车原有的if判断:
if (x1 == x2 && yCount == 0 || y1 == y2 && xCount == 0)

//加上括号修正为:
if ((x1 == x2 && yCount == 0) || (y1 == y2 && xCount == 0))

炮规则修正:

//这个是炮原有的if语句
if (x1 == x2 && (yCount == 0 && !exits) || (yCount == 1 && exits)
 || y1 == y2 && (xCount == 0 && !exits) || (xCount == 1 && exits))

//现修正括号为:
if (x1 == x2 && ((yCount == 0 && !exits) || (yCount == 1 && exits))
 || y1 == y2 && ((xCount == 0 && !exits) || (xCount == 1 && exits)))

OK,接下来是增加将军面对面的规则了:

同时增加棋子同种颜色判断[目前来说该规则没啥用。吃子规则里同颜色会自动切换,不会产生吃子]:

 /// <summary>
        /// 移动规则
        /// </summary>
        /// <param name="move">棋子</param>
        /// <param name="eat">移动的位置的数组</param>
        /// <returns></returns>
        public bool IsCanMove(Chessman chessman, Point moveTo)
        {
            //...省略N行...            
            if (x2 >= 0 && x2 < 9 && y2 >= 0 && y2 < 10 && !(x1 == x2 && y1 == y2))//在棋盘之内,非原步。
            {
                Chessman man = Action.Parent.FindChessman(moveTo);
                if (man != null && chessman.Color == man.Color)//增加棋子存在和颜色判断
                {
                    return false;
                }
                ChessType chessType = GetChessTypeByName(chessman.Name);
                switch (chessType)
                {
                  //...省略N行...            
                    case ChessType.Jiang:
                        //将军面对面
                        if (man != null && GetChessTypeByName(man.Name) == ChessType.Jiang)
                        {
                            OutCount(chessman.MovePoint, moveTo, out xCount, out yCount);
                            return x1 == x2 && yCount == 0;
                        }
                       //...省略N行...                            }
            }
            return false;
        }

我们增加了棋子查找,然后在将军里判断一下移动到的位置的点上的棋子是不是对方的将军,如果是,就按类似车的规则[只竖走]进行移动。

OK,本节就点到为止了。

转载于:https://www.cnblogs.com/cyq1162/archive/2010/08/09/1795476.html

Silverlight+WCF 新手实例 象棋 棋子移动-规则补充(三十七)相关推荐

  1. Silverlight+WCF 新手实例 象棋 棋子移动-规则[附加上半盘限制](十)

    上上一节,我们对棋子的下半盘棋子做了所有的规则限制,因为我们下棋的总是用下半盘的棋子来下,总没人用上半盘棋来下那么高境界的吧. 不过这节简单追加点代码,让那些企图高境界的人士可以临时性的自己和自己下. ...

  2. Silverlight+WCF 新手实例 象棋 棋子移动-规则[兵、车](七)

    上两节实现了棋子的两种走法,吃子和没移动到线交叉点.不过我们都是没有规则的走,这节为棋子的走法增加规则,棋的规则我就不多说了,基本要找个不会下象棋的很难,就是找到的估计也不会看这文章. 当我们移动棋子 ...

  3. Silverlight+WCF 新手实例 象棋 棋子移动-规则[将、马、士、相、炮](八)

    这节来完成剩下五个种子的规则. 先来将吧 将:只能走一步,而且只能在九宫内行走 看代码,还是和兵的一个样. if  (Math.Abs(y2  -  y1)  +  Math.Abs(x2  -  x ...

  4. Silverlight+WCF 新手实例 象棋 主界面-棋谱-回放(三十九)

    在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 本节完后,同时会更新Silverlight+WCF 新手实例 象棋 专题索引,并顺路提供第八阶段源码 在Silverlight+ ...

  5. Silverlight+WCF 新手实例 象棋 棋子移动-线交叉点(六)

    上一节,我们给棋子赋于了鼠标点击事件,并通过故事板Storyboard 来移动棋子,同时实现了吃棋子. 现在我们在实现鼠标在棋盘上点击,然后棋子就移动到那去. 好了,鼠标在棋盘上点击,这里要为点击的棋 ...

  6. Silverlight+WCF 新手实例 象棋 棋子(三)

    2019独角兽企业重金招聘Python工程师标准>>> 棋盘上有棋子,棋子应该还有一些属性,按原始冲动新建一个棋子类. 上google翻译下棋子E文叫什么,查到了叫Chessman, ...

  7. Silverlight+WCF 新手实例 象棋 棋子定位与象棋类(四)

    上节创建显示了一颗棋子,由于没有margin属性,所以只能靠边站. 现在,我们创建一个象棋类,让它包括棋盘和棋子,同时附加几个常用函数. 还是对着Silverlight类库项目右键添加类:Chess. ...

  8. Silverlight+WCF 新手实例 象棋 主界面-棋谱-回放-结局(四十)

    在线演示地址: Silverlight+WCF 新手实例 象棋 在线演示 在Silverlight+WCF 新手实例 象棋 主界面-棋谱-回放(三十九)中,我们实现了用户的棋谱回放,在文章的下面,我们 ...

  9. Silverlight+WCF 新手实例 象棋 该谁下棋-B下A停(三十)

    2019独角兽企业重金招聘Python工程师标准>>> 在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 上上一节,就是二十八节:Silverlight+WCF ...

  10. Silverlight+WCF 新手实例 象棋 主界面-棋谱-获取列表(三十八)

    2019独角兽企业重金招聘Python工程师标准>>> 在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 在Silverlight+WCF 新手实例 象棋 主界 ...

最新文章

  1. C++ list 的使用
  2. include,require,include_once,require_once区别
  3. 使用log_format为Nginx服务器设置更详细的日志格式
  4. attachEvent 与addEventListener到底有什么区别呢?
  5. yii2-basic后台管理功能开发之四:图片上传FileInput
  6. Istio 将被捐赠给开源基金会 | 云原生生态周报 Vol. 47
  7. 明确需求与功能,优化小打卡的分享刺激点
  8. js中对日期进行加减
  9. 什么是raid 容错式磁盘阵列?
  10. phpcms 指定id范围 调用_Elasticsearch v7 中Java High-Level REST Client同步和异步调用
  11. Visual Studio 2010中添加App_Code文件夹注意事项
  12. jupyter 代码到 pycharm 的迁移
  13. pytorch learning
  14. 【土壤分类】基于matlab GUI多类SVM土壤分类【含Matlab源码 1398期】
  15. 【April Fools Day Contest 2014F】【愚人节脑洞 OEIS大法】000001 输出序列某一项
  16. 修改文件 火车票买下铺_12306修改代码买下铺?12306码农太弱了吧 (转载)
  17. 数学建模优化模型简单例题_简单数学建模100例
  18. 利用npm bin创建可执行命令实现项目代码规范自动化
  19. 变分法:在图像处理中的应用(一)
  20. C++ 的算术、自增自减、位运算、关系与逻辑运算符(数据的操作)

热门文章

  1. C++ main函数的几点细节(转载)
  2. vs2015 hiredis编译使用
  3. JAVAWeb项目 微型商城项目-------(五)用户登录实现
  4. uvm 形式验证_重复使用UVM RTL验证测试进行门级仿真详细过程介绍
  5. maven打包失败:自定义项目工具类打包给其他微服务使用
  6. zookeeper部署
  7. 枚举smb共享期间出错_大量三星手机黑屏系统崩溃,客服:闰4月计算出错
  8. Html+Css打造一个精美的注册页面
  9. python对原数组遍历_Python数组遍历的简单实现方法小结
  10. mysql碎片处理_mysql优化数据库和mysql数据库碎片处理