Tic Tac Toe 井字棋的sas实现 | 您所在的位置:网站首页 › 无聊时怎样打发时间 › Tic Tac Toe 井字棋的sas实现 |
相信大家小时候都玩过这款小游戏,在纸上简单画上一个井字,一个人画圆,另一个人画叉,直至一方连成三点一线。这款简单的小游戏简直是自习课上打发时间的利器。那么如何在sas中实现呢,让我们在工作之余也能和sas来一场精彩battle! 截图来自日志窗口首先我们来观察这个棋盘,不难发现,这个游戏总共有八种赢的可能性。 井字棋 已知可以赢的排列已经在上图中画出,以上述的组合搭建一个胜利的字典数据集。 想要完成这个游戏,我们首先要解决两个小问题: 1. 怎么算赢? 我们已经完成了胜利的字典数据集搭建。剩下只需要对数据集中已经被填入“⚪”或者“×”的变量位置取出,判断现有的变量位置是否满足字典数据集的其中一种形式。需要注意的是,如果所有的九个空位都被填入了棋子,但仍然没有胜利的一方,此时已经达成平局。 2. 怎么下能赢? 这一点是机器进行逻辑判断的思考过程。通过计算每一步的成功的可能性,来获得当前情况下的最优解。假设机器执“×”,我们来思考一下,如果一条线上已经存在了两个“×”,那么这个时候直接将剩余的空位补上“×”,哒哒~胜利啦!那如果没有两个“×”,反而有两个“⚪”,那么当务之急是先别让对方赢啊,把剩下的空格上补上“×”。通过列举这些情景我们就可以得到当下的棋面中就有可能胜利的一种或多种组合。如果多个位置都有相同的可能呢,随便选一个就好啦! 上述代码中有一个小小的点可以改善机器的成功率,这里就留做一个小坑。看看谁的火眼金睛可以发现,哈哈。 解决了上述问题,用sas实现这个游戏就没什么难度了。 玩过两局可能就会发现很难在机器先手的情况下获胜。其实这是这个游戏的特性,如果两个玩家都做出最好的选择,最终往往是平局结束的。“井字棋”更像是一种由占据优势的X锻炼劣势下的O去寻找能够平局的方式的过程。当然如果机器随机到位置5进行开局,抓住机会,获胜的时间到了! |
CopyRight 2018-2019 实验室设备网 版权所有 |