编写算法,让go程序玩扫雷,教学模式教你扫雷。

jan-bar · · 947 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

## [github地址,点击跳转](https://github.com/jan-bar/minesweeping) ## 使用方法 1. 使用win32api因此只支持在window下运行 2. 使用截图分析,为精确像素识别,显示器缩放必须为100%,下图所示 ![suofang.jpg](https://static.studygolang.com/220316/0b325076223ebceb190edc7201397d40.jpg) 4. 确保先运行[winmine](winmine.exe)这个扫雷游戏 5. 执行`go run mine.go`,然后键盘输入'Y'或'N'选择模式 6. 当需要人工猜雷时,点击鼠标左键或右键完成一次操作即可 ## 扫雷算法 扫雷算法 ```text 1. X格子周围可点击数量 + X格子周围已标记雷数量 = X格子显示数值 用右键将所有可点击位置标雷 2. X格子周围已标记雷数量 = X格子显示数值 用中键点击X格子,点开非雷区域 3. 两个相邻格子待标雷数多的为A,待标雷数少的为B A待标雷数 - B待标雷数 = A可点击数 - AB 相交位置数 A除相交位置以外的可点击位置全是雷,用右键全部标记为地雷 4. 两个相邻格子A和B待标雷数量相同,A的可点击数为a,B的可点击数为b,相交格子数为c 如果a = c,则格子B除开相交位置的可点击位置一定不是雷 如果b = c,则格子A除开相交位置的可点击位置一定不是雷 5. todo 发现更精确扫雷方法 6. todo 发现更精确猜雷方法 ``` 下面是效果图 ![mine.gif](https://static.studygolang.com/220316/d8424c18053b71b503c332ecd6e861fd.gif) ## 教学模式 使用教学模式会将鼠标定位到操作位置,并打印这样做的原因,方便使用者学习如何扫雷, 如何分析该用鼠标[左,中,右]键点击哪个位置。 下图所示,坐标`V`表示向下格子数,坐标`>`表示向右格子数 ![teach.gif](https://static.studygolang.com/220316/fc0fececd80001a7730e856d6a04e5a2.gif) ## 关于猜雷 ```text 猜测某个点没有雷,运气成分,如需提高胜率可优化下面代码,下面是关于猜雷的思路 1.(https://tieba.baidu.com/p/1761431400?red_tag=3267954760) (https://zhuanlan.zhihu.com/p/35974785) 上面是我看到比较靠谱的理论,由于计算机虽然笨但运算快,因此我打算实现这个方案 2.死猜,及无论如何都不可能判定哪个是雷,那就只能随机猜一个了 3.这里还要注意一点,及剩余雷数,有时候根据剩余雷数可以提高胜率 按照上面3个步骤,还没发确定是不是雷,妈逼只能靠运气了 到处找教程最终没能找到一个好点的方案,还是随机点击一个位置 ``` * 最终没有找到合适猜雷方案,因此自动猜雷只是随机一个位置点左键 * 还有就是开局,网上也有很多开局技巧,例如先点四个角。我还是用随机点,机器随机比人惯性思维好吧。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

947 次点击  ∙  2 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传