在围棋中,一子两用,可谓妙手,而一子三用,则可称之为神来之笔。在解决征子问题时,一不小心,也来了个神来之笔,其代码如下:

        // 征子判断,p1, p2 为气,p2 为前进方向,p 为逃跑之子。
bool CanLevy(Pos p1, Pos p2, Pos p, bool isBlack = true)
{
if (!IsCusp(p1, p2)) return true;
if (p == m_InvalidPos) return true; List<Pos> selfPoses = isBlack ? BlackPoses : WhitePoses;
List<Pos> otherPoses = !isBlack ? BlackPoses : WhitePoses; // 征而被叫,岂不大笑?
var p1_links = LinkPoses(p1).Intersect(otherPoses).ToList();
if (p1_links.Count == && p1_links.Intersect(EmptyPoses).Count() == )
return false;
var p2_links = LinkPoses(p2).Intersect(otherPoses).ToList();
if (p2_links.Count == && p2_links.Intersect(EmptyPoses).Count() == )
return false; int count = ;
while (true) {
if (!InRange(p2.Row, p2.Col))
break;
bool isRow = p2.Row - p.Row == ? true : false;
int rowOffset = isRow ? (count == ? p1.Row - p2.Row : p2.Row - p1.Row) : ;
int colOffset = isRow ? : (count == ? p1.Col - p2.Col :p2.Col - p1.Col);
Pos pos = new Pos(p2.Row + rowOffset, p2.Col + colOffset);
var rounds = count < ? LinkPoses(pos) : RoundTwoPoses(pos);
foreach (var r in rounds) {
if (isBlack && count < ) continue; // 黑需先走两步
if (selfPoses.Contains(r))
return false;
if (otherPoses.Contains(r)) {
return true;
}
}
count++;
p1 = p;
p = p2;
p2 = pos;
} return true;
}

其中,count 变量,分别控制符号转换(count == 0),排除旧有(count < 5),黑棋预走(count < 2) 三种情况,并且三种情况皆不可少。

现在可以看看效果图了:

当 白10 征子时,不可逃,电脑选择了 黑11,而 白12 时,可以逃了,电脑就聪明的选择了 黑13,堪称完美!

完整代码下载,可参看上一篇博客。

x01.Weiqi.11: 神来之笔的更多相关文章

  1. x01.Weiqi.12: 定式布局

    定式 下一步当将定式保存到数据库中,如布局中的代码所示,但其初始的代码更有利于理解.以小飞挂为例: // 0 // + 0 0 // + // // + List<Pos> P_LuSta ...

  2. x01.Weiqi.10: 死活问题

    估计得不错,点目后,仅一个方法:UpdateMeshes5() 就完美解决了梅花六.刀把五.斗笠四.盘角曲四等死活问题.先来看看效果图: 其代码如下: void UpdateMeshes5(bool ...

  3. x01.Weiqi.9: 点目功能

    添加点目功能,虽不中,不远也.还是先看看截图吧. 确保其可行,再看一张: 其点目结果,还是比较令人满意的.这主要得益于多遍扫描,如编译器的词法分析阶段,下面的代码可以证明: private void ...

  4. x01.Weiqi.7: 调整重绘

    GitHub 谁方便谁拍,谁重要拍谁.在这个砖头满天飞的时代,一个好的生态显得尤为重要.  红颜小头发,要的很简单. 也许成绝唱,只因鱼断肠. 姚贝福娃的离去,除感叹人生无常外,活着做点有意义的事情, ...

  5. x01.os.11: IPC 路线图

    学习的最好方法就是看代码,所以我们不妨跟着 IPC 的调用路线图,来学习学习 IPC. 从 x01.Lab.Download 下载代码后,首先进入 main.c 文件,在 TestA 中,有这么一句: ...

  6. x01.Weiqi.8: 一点改进

    原来的代码全部删除,进行了深层次重构,得其意而忘其言.得意之处有二: 1.关于显示 以 StoneSize 属性为依托,在 set 中加了一句:Width = Height = m_StoneSize ...

  7. x01.Weiqi.13: 鼎力推荐

    鼎力推荐 : 点击后即可观看,小伙子讲的很有深度. 说到深度,自然离不了深度学习.AlphaGo 的横空出世,似乎很有学习的必要. MuGo: 点击下载后,发现是 python,自然免不了一番学习,好 ...

  8. python3之内置函数

    1.abs() 取数字的绝对值 >>> print(abs(-28)) 28 >>> print(abs(-2.34)) 2.34 >>> pri ...

  9. (二十一)python 3 内置函数

    阅读目录 1.abs() 2.dict() 3.help() 4.min() 5.setattr() 6.all() 7.dir() 8.hex() 9.next() 10.slice() 11.an ...

随机推荐

  1. SQL Server 2016 SP1 标准版等同企业版?!

    上周微软发布了SQL Server的历史性公告:SQL Server 标准版的SP1提供你和企业版一样得功能.你不信的话?可以点击这里. 这改变了整个关系数据库市场,重重打击了Oracle.在今天的文 ...

  2. C# GDI+ 处理文本的两个小技巧

    private void button7_Click(object sender, EventArgs e) { Graphics g = this.CreateGraphics(); g.FillR ...

  3. jQuery弹出美女大图片

    效果:http://hovertree.com/texiao/jqimg/2/ 效果图: 下载:http://hovertree.com/h/bjaf/jdaqepet.htm HTML代码: < ...

  4. C# 发送Http请求 - WebClient类

    WebClient位于System.Net命名空间下,通过这个类可以方便的创建Http请求并获取返回内容. 一.用法1 - DownloadData string uri = "http:/ ...

  5. ABySS非root权限安装

    本文转自  http://yangl.net/2015/11/12/abyss_install/ ABySS: ABySS is a de novo, parallel, paired-end seq ...

  6. 转载:《TypeScript 中文入门教程》 16、Symbols

    版权 文章转载自:https://github.com/zhongsp 建议您直接跳转到上面的网址查看最新版本. 介绍 至ECMAScript 2015开始,symbol成为了一种新的原始类型,就像n ...

  7. 从头开始搭建一个dubbo+zookeeper平台

    本篇主要是来分享从头开始搭建一个dubbo+zookeeper平台的过程,其中会简要介绍下dubbo服务的作用. 首先,看下一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多之后 ...

  8. iscroll总结

    iScroll基本信息 官网:http://cubiq.org/iscroll-4 更新:2012.07.14 版本:v4.2.5 兼容:iPhone/Ipod touch >=3.1.1, i ...

  9. Java基础知识回顾

    Java回顾之I/O Java回顾之网络通信 Java回顾之多线程 Java回顾之多线程同步 Java回顾之集合 Java回顾之序列化 Java回顾之反射 Java回顾之一些基础概念 Java回顾之J ...

  10. input checkbox 扩大点击范围

    <div style="width:100%;height:100px;"><input type="checkbox" onclick=&q ...