添加点目功能,虽不中,不远也。还是先看看截图吧。

确保其可行,再看一张:

其点目结果,还是比较令人满意的。这主要得益于多遍扫描,如编译器的词法分析阶段,下面的代码可以证明:

  1. private void InitMeshes()
  2. {
  3. UpdateMeshes1();
  4.  
  5. if (StepCount < ) return;
  6.  
  7. UpdateMeshes2();
  8. UpdateMeshes3();
  9. UpdateMeshes4();
  10. UpdateMeshes4(); // 二次扫描有必要
  11. UpdateMeshes5();
  12. UpdateMeshes6();
  13. }

InitMeshes()

主要思路,也不过如此,实现的关键点,在于 UpdateMeshBlocks() 方法:

  1. void UpdateMeshBlocks(List<Pos> poses, List<PosBlock> blocks)
  2. {
  3. List<Pos> copyPoses = poses.ToList();
  4. if (copyPoses.Count == ) return;
  5.  
  6. List<Pos> tmp = new List<Pos>();
  7. foreach (var pos in copyPoses) {
  8. if (tmp.Count == ) tmp.Add(pos);
  9. var links = LinkPoses(pos);
  10. if (tmp.Intersect(links).Count() > ) {
  11. links.ForEach(l => {
  12. if (copyPoses.Contains(l) && !tmp.Contains(l))
  13. tmp.Add(l);
  14. });
  15. }
  16. }
  17. for (int i = ; i < ; i++) { // 确保不遗漏到疯狂程度
  18. foreach (var pos in copyPoses) {
  19. var links = LinkPoses(pos);
  20. if (tmp.Intersect(links).Count() > ) {
  21. links.ForEach(l => {
  22. if (copyPoses.Contains(l) && !tmp.Contains(l))
  23. tmp.Add(l);
  24. });
  25. }
  26. }
  27. }
  28.  
  29. PosBlock block = new PosBlock();
  30. block.Poses = tmp;
  31. blocks.Add(block);
  32.  
  33. copyPoses.RemoveAll(p => tmp.Contains(p));
  34. UpdateMeshBlocks(copyPoses, blocks);
  35. }

UpdaeMeshBlocks()

这同 UpdateStepBlocks() 相同,只是为确保不遗漏,多了几遍而已。

整个程序都是建立在集合的基础上的,更新块成为关键,也就不足为奇了。

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

x01.Weiqi.9: 点目功能的更多相关文章

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

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

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

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

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

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

  4. x01.os.16: 添加功能

    准备工作  1.确保是 win xp,如是 win 8,运行 nasm 需按提示同意安装组件.  2.确保 src 和 z_tools 在同一目录下,nasm 已包含在 z_tools 文件夹中.  ...

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

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

  6. x01.os.5: DOS 功能调用

    DOS 功能调用(INT 21)-------------------------------AH = 0-2E 适用 DOS 1.0 以上版本AH = 2F-57 适用 DOS 2.0 以上版本AH ...

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

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

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

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

  9. x01.os.13: 文件系统

    停了两天电,忽然得空闲.找来破吉他,已然不成弦.           丁丁当当敲,敲到电来到.为把时间捡,熬夜三四点. 从我的置顶随笔 x01.Lab.Download 中下载 x01.os.12.t ...

随机推荐

  1. MySQL4.0命令操作学习笔记

    声明:下列内容并非原创,仅仅是最近学习笔记整理. -------------------------------------- 进入mysql安装路径bin目录下: 1.开启服务 winmysqlad ...

  2. 移动端IM系统的协议选型:UDP还是TCP?

    1.前言 对于有过网络编程经验的开发者来说,使用何种数据传输层协议来实现数据的通信,是个非常基础的问题,它涉及到你的第一行代码该如何编写. 从PC时代的IM开始,IM开发者就在为数据传输协议的选型争论 ...

  3. sealed、new、virtual、abstract与override 趣解

    1. sealed——“断子绝孙” 密封类不能被继承.密封方法可以重写基类中的方法,但其本身不能在任何派生类中进一步重写.当应用于 方法或属性时,sealed修饰符必须始终与override一起使用. ...

  4. C#判断字符串是否是数字

    /// <summary> /// 判断字符串是否是数字 /// </summary> public static bool IsNumber(string s) { if ( ...

  5. 【Win10开发】处理PC上的后退键

    我们知道在win10手机上和平板上都会有后退键,那么PC上该怎么办呢?没关系我们慢慢揭晓. 如果你已经是UWP的忠实用户,那么肯定会见到如下的后退键. 那么我们如何来做出来呢?, 我们首先打开App. ...

  6. csharp: ODP.NET,System.Data.OracleClient(.net 4.0) and System.Data.OleDb读取Oracle g 11.2.0的区别

    ODP.NET: 引用: using Oracle.DataAccess; //Oracle g 11.2.0 using Oracle.DataAccess.Client; using Oracle ...

  7. python基础之异常处理

    Python3 错误和异常 作为Python初学者,在刚学习Python编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍. Python有两种错误很容易辨认:语法错误和异常. ...

  8. 改善SQL语句(转)

    二.改善SQL语句          很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解.比如:   select * from ta ...

  9. <td></td>标签的border 样式在浏览器中显示不出来

    问题: 在一些浏览器中比如360浏览器的兼容模式下, <td style="border:1px solid red;"></td> 标签 中 的内容为空时 ...

  10. Ionic + Cordova 跨平台移动开发环境配置

    1.下载安装JDK(根据各自系统选择32位或64位下载),安装完成之后需要做以下环境变量配置 在“系统变量”中,设置3象属性,JAVA_HOME,PATH,CLASSPATH(大小写无所谓),如果已经 ...