找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 9973|回复: 8

经典游戏再现——井字棋

[复制链接]
发表于 2016-8-3 20:09:38 | 显示全部楼层 |阅读模式
本帖最后由 青岛同兴维修 于 2016-8-30 10:44 编辑

          前一阵子搭建了一个EV3打印机   正好赶上这次比赛   稍微改造了一下   加入了人工智能算法  可以简单下棋   但是我水平有限  无法编出五子棋那种困难的算法   只能搞个井字棋出来嘚瑟一下       硬件搭建一共用了一套EV3    没有加入其他零件也没有使用备件库      比完赛变回打印机继续研究打印算法      

    不当家不知柴米贵   以前没有真正试过用EV3编辑比较复杂的算法  这次领教了 真的很麻烦  而且这个井字棋游戏更加坑爹   玩过井字棋的人都知道  这个游戏非常简单  棋步变化也很少    一般成年人玩  先手赢不了后手输不了  用算法来解棋也很麻烦   

      首先  本着完美主义的思想   我用了最缺德带冒烟的算法   穷举   说白了就是你走A我就走B你走C我就走D  你占角我就放中间    因为井字棋一共9格 每手走两个棋子 最多走4次就会分胜负   一共也没有几种变化 完全可以把每种走法都预测出来  根本不用计算  也就是没有算法的算法   坑爹的结果出来了   只要玩家不犯傻   经过测试  永恒的平局   不可能赢EV3   因为每种走法都有相应的对策   

      后来想想改变了算法   用了胜利公式算法   就是用判断胜利的那个公式   反向推倒出哪个位置更容易胜利   这个算法网络上有很多 大部分是用C语言写的    和五子棋的算法差不多 不过没有那么复杂  先判断对方是否会赢如果会赢就堵死他  如果不会就判断自己哪个位置会赢   当然必输的先手占角一定要用中间来堵死  一般两手棋过后才会用到算法 来计算输赢  

      经过测试还是不行  因为井字棋太过简单  还是永恒的平局  只要玩家是不会犯傻的成年人几乎不可能赢EV3

      最后只有使出杀手锏了  就是现在完成公布出来的这个算法  因为反正也是给孩子们玩的  孩子高兴就好   所以最终版用了随机算法 我上网玩了一些井字棋小游戏  发现他们也是随机的算法  电脑根本不会封堵你的棋胡乱落棋  我去玩几乎都是我胜利   现在用的算法就是哪里有空位子我就放哪里   然后判断输赢 虽然这样玩家胜利的 概率非常大  但是因为是随机  电脑也有概率封堵你也有概率胜利 后面的视频中就有EV3胜利的

       下面介绍程序的工作流程 也是游戏流程

     程序开始是打印头落笔抬笔 打印滑车的左右复位 纸张边界的定位 和棋盘中点的定位 因为EV3重复精度不高 定位不准确 所以每次打印头动作后都要运行复位程序以便保证下次动作的精度

      复位后是画棋盘程序  这时按动左面的按钮画棋盘   按动右面按钮跳过画棋盘

     画完棋盘后 首先是EV3先下棋  当然这是随机的  原来设计的是EV3先手就占角 然后只要中间空就占中  这样就很容易赢   后来放弃了  永恒的平手就是从占角开始的   

     轮到玩家下棋的时候   左面的按钮是X轴打印头滑车左右移动 到一边就回头
右面的按钮是整个机体Y轴移动  也是到边界间就返回  当选好位置后按住两边的按钮不松手 打印头动了 就说明落棋了 但是如果这个位置 已经有棋子 就不会落棋会自动改其他位置  

     如果一方三个棋子连成直线  程序会判断出来 并且屏幕会显示玩家赢了还是EV3赢了还是平局 语音也会提示    如果玩家赢了会说GOOD   EV3赢了会说EV3  平局会说 GAMEOVER   然后退出游戏   

     本想让程序更复杂语音屏幕提示更丰富 但是我发现我水平有限经常在运行中出错退出  我又找不出哪里的问题  本来有很多循环中断模块  都被我去掉了  不断的精简程序  终于能顺利运行完成了  就变成现在这个样子了

    论坛的 各大高手们   帮我改改这个问题多多的程序吧  让她更完善更完美        



这个是EV3赢了





    


zzz.png
XXX.png
qipan.png
shengli.png
xiaqi.png
shuiji.png
shuru.png

      
IMG_20160829_220638_缩小大小.jpg
IMG_20160829_220641_缩小大小.jpg
IMG_20160829_220626_缩小大小.jpg
IMG_20160829_222208_缩小大小.jpg
IMG_20160829_222156_缩小大小.jpg





IMG_20160829_222158_缩小大小.jpg
IMG_20160829_222200_缩小大小.jpg
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
 楼主| 发表于 2016-10-21 19:58:16 | 显示全部楼层
diner_master 发表于 2016-10-21 12:20
大神啊,你的程序看着都头晕,更别说理解了。

不捉急 慢慢来 有时间我直播 讲解 这个 程序  
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复 1 0

使用道具 举报

发表于 2016-8-3 23:05:17 | 显示全部楼层
厉害,佩服。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-8-4 08:02:33 | 显示全部楼层
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-8-11 13:40:28 | 显示全部楼层
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-10-10 21:30:15 来自手机 | 显示全部楼层
棒棒哒
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-10-21 12:20:02 | 显示全部楼层
大神啊,你的程序看着都头晕,更别说理解了。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2017-7-8 17:58:52 | 显示全部楼层
666~可惜截屏看不清
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2017-11-5 08:38:17 | 显示全部楼层
您的那个棋盘的程序,并没有触碰传感器的程序
那个程序应该放在什么地方求教
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-12-22 21:19 , Processed in 0.150902 second(s), 27 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表