人机大战井字游戏,你猜谁会赢?
想让谁赢,谁就能赢。为啥?因为程序是人编写的呀。想要知道为什么的,接着往下看,如何设计这个游戏(Arduino Tic-Tac-Toe )吧。
只要有一块Arduino开发板、一个可触摸的显示屏就可以制作了。不管是新手,还是老手;不管是有孩子的,手机mega链接怎么使用,还是有女朋友的,都可以玩起来了。
看到上面的视频,是不是在想用什么人工智能算法?并没有。Arduino 虽然简单易用,但为 Arduino 开发游戏并不容易,而且需要大量时间。
第1步:获取所需硬件
此项目所需的硬件如下:
Arduino Uno开发板
各种Mega石有不同的得法,一般游戏流程都会得到其中一两颗的。用法就是把特定石头带在特点怪身上,之后战斗中就可以选择Mega进化了,不过就算身上六只都可以Mega进化,战斗中只能选择一只Mega进化。mega石出自游戏口袋妖怪。《。
2.8 英寸触摸屏
由此可见,搭建这个游戏的成本极低,不会超过100元,如果手头上有现成的就更棒了,拿来就能用。
步骤如下:1. 登录Mega网盘,点击要下载的文件,复制文件的链接地址;2. 下载并安装第三方下载工具,如JDownloader;3. 将复制的链接地址粘贴到第三方下载工具中,点击开始下载;4. 等待下载完成,可以查看下载进度。
第2步:用于 Arduino 的 2.8" 触摸彩色显示屏
在某宝上,此类屏幕一大把,任君挑选,50元以内搞定。
视频中用的显示屏分辨率为320x240,并且以电路板的形式封装好,这这样屏幕和Arduino之间的连接变得非常容易。电路板另一个优点是提供了一个非常易于使用的 micro SD 插槽。
大家在选用显示屏的时候,需要确认下是否和自己的MCU匹配。比如这个项目中用的显示屏就不适用于 Arduino Due 或 Wemos D1 ESP8266 板。
【嵌入式物联网单片机学习资料】整理了全套精华学习资料,除了教程外,还有一些大厂面经+笔试面试题,开源共享给大家。
第3步:搭建并测试
将屏幕连接到 Arduino Uno 后,就可以加载代码并准备玩起来。
首先,按下“开始游戏”按钮,游戏开始。Arduino首先会下第一颗棋子,然后我们只需触摸屏幕即可下棋。成功将三个棋子放置在水平、垂直或对角线中的玩家赢得游戏。游戏结束时,会出现“游戏结束”提示。然后可以按下再次播放按钮,重新开始游戏。
在满足所有mega进化的条件之后,下屏底部会出现mega进化的图标且闪光,选择mega进化后,再选择上方的技能,便可mega进化和攻击。mega进化不占用回合数,如果选择mega进化的图标后而不选择技能,返回菜单,那么mega进化的选项将会。
所以,接下来的算法,是游戏的核心所在。
第4步:游戏算法
先来看一下视频里实现的算法。
Arduino先下第一手棋(玩过这个游戏的人就知道,先出手会更容易赢得比赛)。Arduino的第一步永远是一个角落,第二步也是剩余的随机角落,根本不关心玩家是怎么放棋子。
井字游戏非常简单,我们可以很容易地分析,所以这个算法很容易在 Arduino 中实现。如果我们设计博弈树状图,就可以发现一些获胜策略并在代码中轻松实现它们,或者我们可以让 CPU 实时计算博弈树并自行选择最佳移动位置。
第5步:项目代码
首先,需要三个库来编译代码。
修改后的Adafruit TFTLCD:
Adafruit GFX:https ://github.com/adafruit/Adafruit-GFX-Library
触摸屏:https ://github.com/adafruit/Touch-Screen-Library
一直说这是一个非常简单的游戏,但代码却是超过600行了。代码很复杂,这里不多解释了,感兴趣的可以下载学习。(在“达尔闻说”微信回复:井字游戏)
5、打开背包,有了Mega手环,精灵超进化还需要用到Mega石。6、只是点击使用登记即可,以上就是mega手环的使用方法。
这里,为大家展示 Arduino 移动算法的实现。
首先,我们玩两个随机角。
int firstMoves[]={0,2,6,8}; // will use these positions firstfor(counter=0;counter<4;counter++) //Count first moves played{if(board[firstMoves[counter]]!=0) // First move is played by someone{movesPlayed++;}}do{if(moves<=2){int randomMove =random(4); int c=firstMoves[randomMove];if (board[c]==0){delay(1000);board[c]=2;Serial.print(firstMoves[randomMove]);Serial.println();drawCpuMove(firstMoves[randomMove]);b=1;} }
接下来,在每一轮中,我们检查玩家是否可以在下一步中获胜。
如果是,在大多数情况下都会阻止。我们不会为了给人类玩家一个获胜的机会而阻止所有的动作。你能找出哪些动作没有被阻止吗?阻止移动后,我们玩剩余的角落,或随机移动。可以研究代码,轻松实现自己无与伦比的算法。
第6步:最后的想法和改进
即使使用 Arduino Uno,我们也可以为简单游戏构建无与伦比的算法。这个项目很有趣,也很容易复制,同时也很好地介绍了人工智能和游戏编程。感兴趣的小伙伴可以试试使用性能更高的控制器实现五子棋的游戏,相信这会是一个不小的挑战哟。
企业回苏州市华宇净化设备有限公司,为中国电子学会洁净技术分会团体会员单位,并经苏州市质量技术监督局批准为计量合格企业及制造尘埃粒子计数器生产许可单位。公司专业生产销售:生物安全柜、净化工作台、浮游细菌采样器、尘埃粒子计数器等,厂家直销。
文章转载自:达尔闻说