当前位置:   article > 正文

linux图形化界面鼠标点击,Linux C 黑白棋人机大战(鼠标控制、图形化界面)

linux终端 黑白棋

【_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库及扩展库。

[最后】

渴望能诸多同道进行讨论,更渴望各方大佬的指点。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/135266
推荐阅读
相关标签
  

闽ICP备14008679号