当前位置: 代码迷 >> C# >> x01.Weiqi.9: 点目效能
  详细解决方案

x01.Weiqi.9: 点目效能

热度:102   发布时间:2016-05-05 03:43:33.0
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