欢迎光临散文网 会员登陆 & 注册

致敬经典!用ESP8266 实现 Pong 联网对战

2020-07-18 09:10 作者:太极创客  | 我要投稿

      

Pong游戏机

        Pong是1972年雅达利推出的一款投币式街机游戏,它常被人们认为是电子游戏历史上的第一款街机游戏。该游戏机一经投入市场就引起了轰动,它为母公司雅达利带来了丰厚的收入和闪亮的荣誉。

Pong游戏宣传海报

        关于Pong和它的母公司雅达利,有很多传奇故事可以讲一讲。比如当年Pong游戏如此受欢迎,雅达利如此火热。乔布斯还曾经慕名来到雅达利公司任职。这可是乔姥爷的第一份工作,可以看到那时的他还很青涩。

青年乔布斯

        在雅达利上班期间,乔布斯萌生了创建苹果公司的念头。正是Pong游戏的开发者Allan Alcorn帮助乔布斯开立了苹果公司的第一个商业账户。

Pong游戏机和雅达利管理人员合影(右一那个大胡子就是这款游戏的开发者Allan Alcorn)

       由于这款游戏如此经典。如今很多国外玩家依然对它抱有深深的感情。比如2019年在美国知名众筹网站KickStarter上有一款嵌入Pong游戏的咖啡桌产品,获得了33.5万美元的众筹款项。

美国知名众筹网站Kickstarter中的Pong咖啡桌项目

        随便网上一搜,就能找到各种围绕这款游戏的周边。

Pong T恤衫
Pong 马克杯

        而且,直到今天还有很多人在各种平台上复刻这款将近50岁的经典游戏。这其中就有太极创客团队的 BlackBox114(https://space.bilibili.com/2546231/)。他不仅用ESP8266实现了Pong游戏,还实现了无线联网对战模式。

项目制作介绍

        本项目是完全免费开源的。项目源代码链接请见本文置顶评论信息。   

        基于ESP8266的网络多人乒乓游戏 / Multiplayer Pong Game based on ESP8266 Network是一个基于wifi,使用UDP协议进行数据传输的双人对战游戏。双方准备好后按下按键即可开始游戏。内置的游戏是一个简单的PONG(乒乓)游戏,有判断胜负的逻辑和计分的功能。硬件仅使用0.96寸,支持I2C协议的oled和ESP8266-NodeMCU开发板,以及按键开关组成。

运行说明

        联机对战需要两台设备,两块8266开发板之间需要通过wifi进行连接。其中开启AP模式的是master机,开启STA模式的是slave机。游戏过程中,两台机子之间通过UDP协议传输己方球拍的位置数据,同时接受对方球拍的位置数据,以此达到数据同步的联机游戏效果。若对8266的AP模式和STA模式有疑问,请参阅太极创客官网关于ESP8266-Arduino库资料。若不了解UDP协议在本游戏中的具体应用,可以参阅太极创客官网关于UDP协议资料。

材料清单

连线图

电路连接图

D1(8266) <------------> SCL(oled)  

D2(8266) <------------> SDA(oled)   

D5(8266) <------------> 按键UP引脚       

D6(8266) <------------> 按键DOWN引脚  

3V3(8266) <------------> VCC(oled) 

GND(8266) <-----------> GND(oled)  

备注:使用的两个按键另一端均为接地(GND) 

代码与使用仓库

代码仓库:https://github.com/taichi-maker/ESP8266_Multiplayer_Pong

请将src文件夹下的代码文件,分别烧录进两套硬件中

以下第三方库文件可在太极创客官网下载页面获得。

请确认已经添加以下第三方库文件:

  • Adafruit_GFX库

  • Adafruit_SSD1306库

        如果您对ESP8266-NodeMCU有任何问题,或者不知道如何导入第三方库,以及烧录代码到ESP8266,可访问太极创客官网搜索相关资料。

操作说明

Step01 代码正常烧录后,主机和从机接通电源,会显示初始界面

Step02 按照oled显示的说明,按下任意按键可以进入wifi连接状态。此时主机和从机开始尝试进行连接。

Step03 wifi连接完成后,oled会提示,当玩家准备好开始游戏后按下按键

Step04 当双方均按下按键时,游戏正式开始。两个按键代表上下移动球拍,一旦一方没有接住球,另一方就会增加一分,游戏将持续进行。

后续优化计划

        您如果进行了游戏,可以看到,双方传输数据其实是有一定延迟的。而且除了球拍的位置数据互相传输以外,其实没有其他数据交互。相当于一旦因为延迟出现误差,主机和从机会出现不同步的游戏局面。这一点可通过增加球位置校验等方法解决,也可以通过进一步优化代码来解决。您可以尝试修改或升级这个简单的游戏,解决这些小瑕疵。我们也会继续优化代码,以追求更优的效果。

        如果您有无法解决的问题,可以评论留言,或者加入太极创客交流群询问。我们的QQ群号为:687039778

        本项目只是展示了ESP8266的网络对战效果,用到的物联网只是并不复杂。目前太极创客已经开发了免费的《零基础入门学用物联网》系列教程,如果您想学习物联网方面的知识,可以访问太极创客官网,我们为您准备了详细的教学视频。


项目开发制作:BlackBox114(https://space.bilibili.com/2546231/

图文制作:本布衣BenBuYi  (https://space.bilibili.com/4970516

        假如您也喜欢太极创客,希望您将本文“分享”给更多的人,让更多朋友认识我们。您的每一份点赞投币,都是对我们最温暖的鼓励与支持。

谢谢~~~

        

致敬经典!用ESP8266 实现 Pong 联网对战的评论 (共 条)

分享到微博请遵守国家法律