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

  • 相关阅读:
    金蝶软件常用基础SQL数据表
    改变cxgrid行字体颜色
    C#默认修饰符
    const和static
    怎么写动态游标
    Report Machine支持导出PDF
    C1TrueDBGrid注册码
    免费在线思维导图工具Mindv V1.1.0发布
    支持中文输入的免费的Silverlight Richtextbox
    云计算浅谈之一:云计算介绍
  • 原文地址:https://www.cnblogs.com/china_x01/p/4524626.html
Copyright © 2011-2022 走看看