红石电路吧 关注:32,187贴子:153,000
  • 13回复贴,共1

红石井字棋人机对弈

只看楼主收藏回复

本人在制作这台红石井字棋机器前,尽可能观摩了以往红石玩家制作井字棋的方案,所以现在做这台机器的目标是,在玩家走出导向失败的步数时,机器响应必胜的走法而不是和棋。


IP属地:辽宁来自Android客户端1楼2024-08-12 18:23回复
    我最开始做这台机器时,是想做类似卷积神经网络那样的AI的,但是用红石做这种是比较费力的。
    正当我研究如何给棋盘的九个落点赋权时,一个手持五连发穿黑夹克的寸头男人冲了过来,12毫米顶在我脑袋上说听说你还想做人工智能的井字棋,你有这实力吗,给我乖乖做穷举我就放过你,放过你这台机器。我不得已叫了声“yeah”,遂妥协。


    IP属地:辽宁来自Android客户端2楼2024-08-12 18:24
    回复
      言归正传,井字棋有九个格子,做穷举首先想到的是它有9!种可能即362880种复盘。但实际上当有三个子连线时棋局已经结束,所以不至于这么多。除去对称得来的图形,粗略估计有三百多种复盘。这里的思路就是对玩家下棋的线路和机器下棋的线路一共十八条线进行穷举,并通过各种办法减少查表。基本方法就是检测两子连线,如下图,先手的两子连线将导致后手进行堵截,可称之为两子判定。




      IP属地:辽宁来自Android客户端3楼2024-08-12 18:24
      回复
        而后手也在随时检测先手是否对自己的两子连线进行堵截,如未堵截则直接三子连线,先手只有提前在己方的堵截线路中通电才能预防。这时检测的是机器一方的两个子和玩家一方的一个子,可称之为三子判定。



        IP属地:辽宁来自Android客户端4楼2024-08-12 18:31
        回复
          补发一下两子判定


          IP属地:辽宁来自Android客户端5楼2024-08-12 18:32
          回复
            这两种判定单元可以代替大部分穷举情况。
            而对于一些没有连线的布局,只需设置近似译码器的数据库,且兼具防止伪码的功能。这种情况不是很多,基本出现在第一回合到第二回合,也有少数出现在第三第四回合,往往也是两方相互设计的时刻。




            IP属地:辽宁来自Android客户端6楼2024-08-12 18:33
            回复
              为了压缩空间使整台机器处于单人玩家的加载范围内,整个的步线呈双排线卷曲叠压式。九条主线执行玩家落子,九条副线执行机器落子。十八条落子线伴随着另外十八条逻辑运算的判定线,副线的点亮由判定线控制。



              IP属地:辽宁来自Android客户端7楼2024-08-12 18:35
              回复
                当棋盘落满子或已有三子连线时,就到了和棋与胜利判定,比较简单,这里是用与门检测胜利,回合计步器检测落满和棋。



                IP属地:辽宁来自Android客户端8楼2024-08-12 18:36
                回复
                  回合计步器使用的移位器配合模电,可以借由玩家按下按钮的顺序判断目前处于第几回合,当计步到第六步时,说明棋局已经结束。由此控制相应的判定线锁存进行运算,这样避免了判定线运算完毕后被后续的落子影响,再次运算。


                  IP属地:辽宁来自Android客户端9楼2024-08-12 18:37
                  回复
                    至于落子棋盘和显示屏幕,只需略做步线即可。在五乘五的红石灯屏幕上显示圆与叉两种图形。顶部还有平局和胜方显示。



                    IP属地:辽宁来自Android客户端10楼2024-08-12 18:37
                    回复


                      IP属地:广东来自Android客户端12楼2024-08-13 15:12
                      收起回复
                        赶稿仓促,图做错了,补发一下数据库的单元


                        IP属地:辽宁来自Android客户端13楼2024-08-14 08:24
                        回复