赞
踩
【_Charloe原创】 2019年4月17日
[前言]
之前学校要求用Linux shell写一个小东西,这次的实际课题是用Linux C写一个小程序。我们小组选择了写鼠标控制的黑白棋,事实上,这是一个人机大战程序。
如果大家对黑白棋这个游戏不太了解,可以百度一下游戏规则。传统黑白棋的棋盘是88的,本程序采用的是1515的棋盘。
[坦白]
在此处进行一个坦白。这个人机大战的程序,并不是完全由小组独立开发完成的。而是借鉴了某位不知名大佬的一些核心代码,在这里我们表示由衷的感激。另外,大佬原程序是基于Windows的easy_X库,我们是基于Linux的SDL库。
[实现]
简要的讲一下本程序中机器算法的实现思路。
使用的是递归策略,代码十分精简,却完成了很多操作。在阅读此段代码的过程中,我始终怀着尊重、敬畏、如获珍宝的心态。
机器思考一步:遍历整个棋盘,是否有可落子位置,若有,找出可吃掉对方棋子数目最多的落子位置,并采用该策略落子。
机器思考两步:遍历整个棋盘,是否有可落子位置,若有,计算该位置下可吃掉对面棋子数目,记为x,并计算出若机器在此位置落子,对方可吃掉机器方棋子的最大数目,记为y,计算x-y。找出棋盘中最大的x-y,并采用这种策略。
机器思考多步也是类似的策略。
貌似理论上可以思考很多步,电脑将立于不败之地?实际上步数越多,机器的延迟越高。而且,机器也不是不可战胜的。亲测:机器在思考6步时,被打败过一次。
[代码]
因为使用了多个.c文件,代码部分暂且不贴到博客上。直接打包,放在百度网盘供各位网友讨论。
注:
1.本程序基于Linux环境。
2.使用了SDL库,无该库代码无法正常编译。
3.Linux下的可执行程序也被打包,该程序可在本人电脑上正常运行,暂不清楚能否在其他电脑上正常运行。
[总结]
即使慕名已久,但此次的黑白棋人机大战程序,是本人接触编程以来第一次接触到AI方面的代码。即使这个人机还远远算不上是AI,只是对人的选择进行相应而有策略的响应,但至少让我初窥门路。目前,我们与机器对战时,败局远大于胜局。在此,再次感谢这位不知名大佬。
另外,在完成该程序后,我又思考:是否预判多步,就一定能击败,预判一步的机器,换句话说,也就是机器大战机器,胜率又会如何。等待有时间,定要统计一下双方的胜率。是否能从中发掘出更有意义的东西?拭目以待。
回顾我之前的五子棋程序。当时计划写五子棋的人机大战,是否能从此程序中得到一些启发?这些都是我应该继续思考的。
[链接]
百度网盘的链接分享:
链接:https://pan.baidu.com/s/1jxmBkgluVYfCMzT1qHIsbg
提取码:yyat
复制这段内容后打开百度网盘手机App,操作更方便哦
压缩包内包含了程序所用到的图片、音乐、代码、Linux的可执行程序。
棋子、棋盘图片与五子棋程序所用图片一致。
请自行安装SDL库及扩展库。
[最后】
渴望能诸多同道进行讨论,更渴望各方大佬的指点。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。