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

<- 返回创客项目制作目录页

本项目免费开源, 源码可通过太极创客GitHub获取
github.com/taichi-maker/ESP8266_Multiplayer_Pong
项目开发制作:小黑(BlackBox114)
项目图文/本文编辑:本布衣

 

Pong游戏机
Pong游戏机

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

Pong游戏机的海报
Pong游戏机的海报

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

青年乔布斯
青年乔布斯

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

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

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

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

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

Pong T恤衫
Pong T恤衫
Pong 马克杯
Pong 马克杯

现在,还有很多朋友在各种平台上复刻这款将近50岁的经典游戏,我们太极创客的小黑也是其中一员。但不同的是,小黑将Pong上升到了网络高度。他利用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协议资料

ESP8266双人联机Pong通讯示意图
ESP8266双人联机Pong通讯示意图

材料清单

ESP8266 Pong 联网游戏机材料清单
ESP8266 Pong 联网游戏机材料清单

连线图

ESP8266 Pong 连线图
ESP8266 Pong 连线图
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 代码正常烧录后,主机和从机接通电源,会显示初始界面

ESP8266-操作说明-1
ESP8266-操作说明-1

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

ESP8266-Pong-操作说明-2
ESP8266-Pong-操作说明-2

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

ESP8266-Pong-操作说明-3
ESP8266-Pong-操作说明-3

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

ESP8266-Pong-操作说明-4
ESP8266-Pong-操作说明-4
后续优化计划

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

如果您有无法解决的问题,可以评论留言,或者加入太极创客交流群询问。
本项目使用的ESP8266开发板其实并不复杂。目前太极创客团队已经开发了免费的《零基础入门学用物联网》系列教程,如果您想学习物联网方面的知识,可以点击以上链接进入该教程页面。

作者: 太极创客

太极创客-管理员