致敬經(jīng)典!用ESP8266 實(shí)現(xiàn) Pong 聯(lián)網(wǎng)對(duì)戰(zhàn)
?? ? ?

??????? Pong是1972年雅達(dá)利推出的一款投幣式街機(jī)游戲,它常被人們認(rèn)為是電子游戲歷史上的第一款街機(jī)游戲。該游戲機(jī)一經(jīng)投入市場(chǎng)就引起了轟動(dòng),它為母公司雅達(dá)利帶來(lái)了豐厚的收入和閃亮的榮譽(yù)。

??????? 關(guān)于Pong和它的母公司雅達(dá)利,有很多傳奇故事可以講一講。比如當(dāng)年P(guān)ong游戲如此受歡迎,雅達(dá)利如此火熱。喬布斯還曾經(jīng)慕名來(lái)到雅達(dá)利公司任職。這可是喬姥爺?shù)牡谝环莨ぷ鳎梢钥吹侥菚r(shí)的他還很青澀。

????????在雅達(dá)利上班期間,喬布斯萌生了創(chuàng)建蘋(píng)果公司的念頭。正是Pong游戲的開(kāi)發(fā)者Allan Alcorn幫助喬布斯開(kāi)立了蘋(píng)果公司的第一個(gè)商業(yè)賬戶。

?????? 由于這款游戲如此經(jīng)典。如今很多國(guó)外玩家依然對(duì)它抱有深深的感情。比如2019年在美國(guó)知名眾籌網(wǎng)站KickStarter上有一款嵌入Pong游戲的咖啡桌產(chǎn)品,獲得了33.5萬(wàn)美元的眾籌款項(xiàng)。

????????隨便網(wǎng)上一搜,就能找到各種圍繞這款游戲的周邊。


??????? 而且,直到今天還有很多人在各種平臺(tái)上復(fù)刻這款將近50歲的經(jīng)典游戲。這其中就有太極創(chuàng)客團(tuán)隊(duì)的 BlackBox114(https://space.bilibili.com/2546231/)。他不僅用ESP8266實(shí)現(xiàn)了Pong游戲,還實(shí)現(xiàn)了無(wú)線聯(lián)網(wǎng)對(duì)戰(zhàn)模式。


項(xiàng)目制作介紹
????????本項(xiàng)目是完全免費(fèi)開(kāi)源的。項(xiàng)目源代碼鏈接請(qǐng)見(jiàn)本文置頂評(píng)論信息。???
????????基于ESP8266的網(wǎng)絡(luò)多人乒乓游戲 / Multiplayer Pong Game based on ESP8266 Network是一個(gè)基于wifi,使用UDP協(xié)議進(jìn)行數(shù)據(jù)傳輸?shù)碾p人對(duì)戰(zhàn)游戲。雙方準(zhǔn)備好后按下按鍵即可開(kāi)始游戲。內(nèi)置的游戲是一個(gè)簡(jiǎn)單的PONG(乒乓)游戲,有判斷勝負(fù)的邏輯和計(jì)分的功能。硬件僅使用0.96寸,支持I2C協(xié)議的oled和ESP8266-NodeMCU開(kāi)發(fā)板,以及按鍵開(kāi)關(guān)組成。
運(yùn)行說(shuō)明
????????聯(lián)機(jī)對(duì)戰(zhàn)需要兩臺(tái)設(shè)備,兩塊8266開(kāi)發(fā)板之間需要通過(guò)wifi進(jìn)行連接。其中開(kāi)啟AP模式的是master機(jī),開(kāi)啟STA模式的是slave機(jī)。游戲過(guò)程中,兩臺(tái)機(jī)子之間通過(guò)UDP協(xié)議傳輸己方球拍的位置數(shù)據(jù),同時(shí)接受對(duì)方球拍的位置數(shù)據(jù),以此達(dá)到數(shù)據(jù)同步的聯(lián)機(jī)游戲效果。若對(duì)8266的AP模式和STA模式有疑問(wèn),請(qǐng)參閱太極創(chuàng)客官網(wǎng)關(guān)于ESP8266-Arduino庫(kù)資料。若不了解UDP協(xié)議在本游戲中的具體應(yīng)用,可以參閱太極創(chuàng)客官網(wǎng)關(guān)于UDP協(xié)議資料。

材料清單

連線圖

D1(8266) <------------> SCL(oled)??
D2(8266) <------------> SDA(oled)???
D5(8266) <------------> 按鍵UP引腳?? ? ??
D6(8266) <------------> 按鍵DOWN引腳??
3V3(8266) <------------> VCC(oled)?
GND(8266) <-----------> GND(oled)??
備注:使用的兩個(gè)按鍵另一端均為接地(GND)?

代碼與使用倉(cāng)庫(kù)
代碼倉(cāng)庫(kù):https://github.com/taichi-maker/ESP8266_Multiplayer_Pong
請(qǐng)將src文件夾下的代碼文件,分別燒錄進(jìn)兩套硬件中
以下第三方庫(kù)文件可在太極創(chuàng)客官網(wǎng)下載頁(yè)面獲得。
請(qǐng)確認(rèn)已經(jīng)添加以下第三方庫(kù)文件:
Adafruit_GFX庫(kù)
Adafruit_SSD1306庫(kù)
????????如果您對(duì)ESP8266-NodeMCU有任何問(wèn)題,或者不知道如何導(dǎo)入第三方庫(kù),以及燒錄代碼到ESP8266,可訪問(wèn)太極創(chuàng)客官網(wǎng)搜索相關(guān)資料。
操作說(shuō)明
Step01?代碼正常燒錄后,主機(jī)和從機(jī)接通電源,會(huì)顯示初始界面

Step02?按照oled顯示的說(shuō)明,按下任意按鍵可以進(jìn)入wifi連接狀態(tài)。此時(shí)主機(jī)和從機(jī)開(kāi)始嘗試進(jìn)行連接。

Step03?wifi連接完成后,oled會(huì)提示,當(dāng)玩家準(zhǔn)備好開(kāi)始游戲后按下按鍵

Step04?當(dāng)雙方均按下按鍵時(shí),游戲正式開(kāi)始。兩個(gè)按鍵代表上下移動(dòng)球拍,一旦一方?jīng)]有接住球,另一方就會(huì)增加一分,游戲?qū)⒊掷m(xù)進(jìn)行。

后續(xù)優(yōu)化計(jì)劃
????????您如果進(jìn)行了游戲,可以看到,雙方傳輸數(shù)據(jù)其實(shí)是有一定延遲的。而且除了球拍的位置數(shù)據(jù)互相傳輸以外,其實(shí)沒(méi)有其他數(shù)據(jù)交互。相當(dāng)于一旦因?yàn)檠舆t出現(xiàn)誤差,主機(jī)和從機(jī)會(huì)出現(xiàn)不同步的游戲局面。這一點(diǎn)可通過(guò)增加球位置校驗(yàn)等方法解決,也可以通過(guò)進(jìn)一步優(yōu)化代碼來(lái)解決。您可以嘗試修改或升級(jí)這個(gè)簡(jiǎn)單的游戲,解決這些小瑕疵。我們也會(huì)繼續(xù)優(yōu)化代碼,以追求更優(yōu)的效果。
????????如果您有無(wú)法解決的問(wèn)題,可以評(píng)論留言,或者加入太極創(chuàng)客交流群詢問(wèn)。我們的QQ群號(hào)為:687039778

????????本項(xiàng)目只是展示了ESP8266的網(wǎng)絡(luò)對(duì)戰(zhàn)效果,用到的物聯(lián)網(wǎng)只是并不復(fù)雜。目前太極創(chuàng)客已經(jīng)開(kāi)發(fā)了免費(fèi)的《零基礎(chǔ)入門(mén)學(xué)用物聯(lián)網(wǎng)》系列教程,如果您想學(xué)習(xí)物聯(lián)網(wǎng)方面的知識(shí),可以訪問(wèn)太極創(chuàng)客官網(wǎng),我們?yōu)槟鷾?zhǔn)備了詳細(xì)的教學(xué)視頻。


項(xiàng)目開(kāi)發(fā)制作:BlackBox114(https://space.bilibili.com/2546231/)
圖文制作:本布衣BenBuYi? (https://space.bilibili.com/4970516)
????????假如您也喜歡太極創(chuàng)客,希望您將本文“分享”給更多的人,讓更多朋友認(rèn)識(shí)我們。您的每一份點(diǎn)贊與投幣,都是對(duì)我們最溫暖的鼓勵(lì)與支持。
謝謝~~~

? ? ? ??