定式

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

                //     0
// + 0 0
// +
//
// +
List<Pos> P_LuStar_UpFlyOne
{
get
{
var temp = new List<Pos>();
temp.Add(new Pos(3, 3)); // 第一步:左上星
temp.Add(new Pos(2, 5)); // 第二步:小飞挂
temp.Add(new Pos(5, 2)); // 第三步:小飞守
temp.Add(new Pos(1, 3)); // 第四步:小飞进角
temp.Add(new Pos(2, 2)); // 第五步:三三守
temp.Add(new Pos(2, 8)); // 第六步:拆二
return temp;
}
}

具体使用,可参照 Board.Pattern.cs 的完整代码,其关键点,一个是四角八变换,一个是棋子颜色的控制。

布局

严格说,应称作全局,但保留布局这个说法,因为它的作用并没改变,其着眼点仍然是布局。这是显而易见的,你不可能整局棋都按着保存的棋谱进行。Board.Layout.cs 开头的注释说的比较清楚,复制如下:

/**
* Board.Layout.cs (c) 2015 by x01
* -------------------------------
* 1.有了定式打基础,布局也就顺理成章了。基本上是一个路数,
* 只是第一步需调整到(3,3)位,方便变换而已。
* 2.暂只考虑二连星。任他多路来,我只一路去,这相当合理。
* 3.将数据库中保存的棋谱导出添加到 Layouts 中,对局足够多足够好时,
* 棋力大进是可以预期的。
* 4.本只准备保存布局的几步棋,但忽然发现保存整盘棋是有意义的,尤其对付
* gnu-go 时,因为 gnu-go 对相同棋形的反应也相同,这就为战胜它提供了
* 可能。以二连星对二连星为例,保存 200 到 2000 黑先胜 gnu-go 的棋谱
* 到数据库中,然后以此来对付 gnu-go,当有取胜的可能。此猜想并没验证,
* 因为即使 200 到 2000 局棋,也需约 200 到 2000 小时方可完成。很显然,
* 没有那么多时间去验证其可行性。
* 5.棋形处理较弱,而不按定式布局走棋时,又不得不倚靠棋形处理,
* 看来,棋形处理才是真正的关键。而要处理好棋形,不仅仅是棋形的问题,
* 还有大小,死活,全局相关等诸多问题需要解决。
*/

代码下载链https://github.com/chinax01/x01.Weiqi

x01.Weiqi.12: 定式布局的更多相关文章

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

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

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

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

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

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

  4. x01.Weiqi.11: 神来之笔

    在围棋中,一子两用,可谓妙手,而一子三用,则可称之为神来之笔.在解决征子问题时,一不小心,也来了个神来之笔,其代码如下: // 征子判断,p1, p2 为气,p2 为前进方向,p 为逃跑之子. boo ...

  5. x01.os.12: 在 windows 中写 OS

    在 windows 中写操作系统,需要一系列的辅助工具.在此,要感谢川谷秀实!所有工具,都在 z_tools 文件夹中.有了大师的帮助,不妨也来尝试在 windows 中写一把 OS. 源代码及工具可 ...

  6. HTML+CSS学习笔记 (12) - CSS布局模型

    标签:HTML+CSS css布局模型 清楚了CSS 盒模型的基本概念. 盒模型类型, 我们就可以深入探讨网页布局的基本模型了.布局模型与盒模型一样都是 CSS 最基本. 最核心的概念. 但布局模型是 ...

  7. ExtJS中layout的12种布局风格

    总览 extjs的容器组件都可以设置它的显示风格,它的有效值有 1. absolute,2. accordion, 3. anchor, 4. border, 5. card, 6. column, ...

  8. 前端学习笔记2017.6.12 DIV布局网页

    DIV的功能就是把网页划分成逻辑块的. 看下豆瓣东西页面的布局,我们来分析下. 按照先从上到下的原则,把这个页面分成几个块: 首先是最顶端的这个条,这是一个DIV,我们给它起个名字,叫banner 然 ...

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

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

随机推荐

  1. 关于JavaScript定时机制的总结

    要理解JavaScript的定时机制,就要知道JavaScript的运行机制. 首先声明,JavaScript是单线程运行(JavaScript引擎线程)事件驱动. 一.浏览器中有多个线程 一款浏览器 ...

  2. 开源服务专题之------ssh防止暴力破解及fail2ban的使用方法

    15年出现的JAVA反序列化漏洞,另一个是redis配置不当导致机器入侵.只要redis是用root启动的并且未授权的话,就可以通过set方式直接写入一个authorized_keys到系统的/roo ...

  3. Mac OS X平台下QuickLook开发教程

    一.引言 Quick Look技术是Apple在Mac OS X 10.5中引入的一种用于快速查看文件内容的技术.用户只需要选中文件单击空格键即可快速查看文件内容,可以在不打开文件的情况下快速浏览内容 ...

  4. 用javascript编写的小游戏(getElementById , setInterval , clearInterval , window.onload , innerText 和页面跳转, 标签的使用)

    (1)图片轮转 <script type="text/javascript" > ; setInterval(function(){ var dom=document. ...

  5. 【原创】kafka server源代码分析(二)

    十四.AbstractFetcherManager.scala 该scala定义了两个case类和一个抽象类.两个case类很简单: 1. BrokerAndFectherId:封装了一个broker ...

  6. LINQ to SQL语句(16)之对象标识

    对象标识 运行库中的对象具有唯一标识.引用同一对象的两个变量实际上是引用此对象的同一实例.你更改一个变量后,可以通过另一个变量看到这些更改. 关系数据库表中的行不具有唯一标识.由于每一行都具有唯一的主 ...

  7. ActiveX(一)第一个简单的Demo

    说道ActiveX,我的第一直觉就是Flash,利用ActiveX.我们可以创建丰富的可交互式应用程序.同时.利用ActiveX特性.我们可以实现Js 与 ActiveX 的无缝连接(包括数据共享.和 ...

  8. C#基础知识五之abstract virtual关键字

    abstract 用关键字abstract修饰的类叫做抽象类,且只能作为基类,也不能实例化. 用abstract定义的抽象类中不一定只包含抽象方法 ,可以包含非抽象方法. abstract定义的方法一 ...

  9. [Asp.net 5] Logging-日志系统的基本架构(下)

    接上节内容,我们继续讲解日志的其他部分. ILoggerProvider以及扩展类 我们在上节的架构图上并没有看到有直接实现该接口的实现类.那么如果将Logger类直接使用会有什么结果呢? var f ...

  10. c#动态加载卸载DLL的方法

    这篇文章介绍了c#动态加载卸载DLL的方法,有需要的朋友可以参考一下 c#中通过反射可以方便的动态加载dll程序集,但是如果你需要对dll进行更新,却发现.net类库没有提供卸载dll程序集的方法.在 ...