zoukankan      html  css  js  c++  java
  • x01.Weiqi.9: 点目功能

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

                       

    确保其可行,再看一张:

                       

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

     1                private void InitMeshes()
     2         {
     3             UpdateMeshes1();
     4             
     5             if (StepCount < 120) return;
     6 
     7             UpdateMeshes2();
     8             UpdateMeshes3();
     9             UpdateMeshes4(5);
    10             UpdateMeshes4(8); // 二次扫描有必要
    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 == 0) return;
     5 
     6             List<Pos> tmp = new List<Pos>();
     7             foreach (var pos in copyPoses) {
     8                 if (tmp.Count == 0) tmp.Add(pos);
     9                 var links = LinkPoses(pos);
    10                 if (tmp.Intersect(links).Count() > 0) {
    11                     links.ForEach(l => {
    12                         if (copyPoses.Contains(l) && !tmp.Contains(l))
    13                             tmp.Add(l);
    14                     });
    15                 }
    16             }
    17             for (int i = 0; i < 4; i++) {    // 确保不遗漏到疯狂程度
    18                 foreach (var pos in copyPoses) {
    19                     var links = LinkPoses(pos);
    20                     if (tmp.Intersect(links).Count() > 0) {
    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

  • 相关阅读:
    泛型
    java unicode补充字符带来的码点和代码单元问题
    GIT相关
    Html5 Canvas学习
    解决animate动画连续播放bug
    自定义对象级别的组件开发
    关于常用却忘记的css,jQuery
    json格式初涉
    ajax
    jquery.validation.js的自定义方法
  • 原文地址:https://www.cnblogs.com/china_x01/p/4524626.html
Copyright © 2011-2022 走看看