今天小編給大家?guī)?lái)的是來(lái)自mocketech的基于樹(shù)莓派和XIAO RP2040的圍棋棋盤(pán)娛樂(lè)系統(tǒng),每塊圍棋石都會(huì)根據(jù)其狀態(tài)顯示面部表情,從而便于評(píng)估整體比賽情況。即使是不熟悉圍棋規(guī)則的人也可以通過(guò)這些表情輕松理解游戲。
靈感
我的靈感來(lái)自網(wǎng)絡(luò)游戲SquishyGo,在SquishyGo中,您可以使用鼠標(biāo)在網(wǎng)絡(luò)瀏覽器上放置圍棋棋子。我想如果我們能觸摸到圍棋子會(huì)更有趣,而且它們有面部表情,所以我做了這個(gè)小項(xiàng)目。
EmoGo圍棋
圍棋是一種基于領(lǐng)土的游戲。在職業(yè)圍棋中,獲勝者取決于他們自己的棋子包圍的區(qū)域的大小,那里沒(méi)有棋子。然而,EmoGo遵循“純圍棋”的規(guī)則,獲勝者取決于每個(gè)玩家在棋盤(pán)上的棋子數(shù)量。玩家只能放置棋子;一旦放置,它們就無(wú)法移動(dòng)。兩位玩家最終在棋盤(pán)上的棋子數(shù)量相同。然而,如下圖所示,有一個(gè)特定的條件:如果圍棋棋子完全被對(duì)手的棋子或棋盤(pán)邊緣包圍,則必須將其移除。在EmoGo中,獲勝的關(guān)鍵是移除對(duì)手的棋子,同時(shí)確保自己的棋子留在棋盤(pán)上。
當(dāng)圍棋被對(duì)手的圍棋包圍時(shí),它們會(huì)顯示一張哭泣的臉。哭泣的圍棋被稱(chēng)為“死棋”,必須從棋盤(pán)上移走。在傳統(tǒng)圍棋中,玩家經(jīng)常忘記移除死棋,但在這個(gè)游戲盤(pán)系統(tǒng)中,如果你嘗試在移除所有哭泣的圍棋之前放置新的圍棋,任何新放置的棋子也會(huì)顯示哭泣的臉,游戲無(wú)法進(jìn)行。這確保了所有 “死子 ”都被清除,沒(méi)有任何錯(cuò)誤。
在對(duì)手下一步移動(dòng)時(shí)將成為死棋的圍棋會(huì)顯示出“麻煩臉”。如果您的圍棋顯示此表情,則表示您遇到了麻煩。您必須決定是保存這些棋子還是放棄它們。在這個(gè)游戲板系統(tǒng)中,Go 棋子的表情表示游戲狀態(tài)對(duì)您有利還是不利。隨著您對(duì)游戲越來(lái)越熟悉,您可以采取一些行動(dòng)來(lái)防止您的圍棋棋子出現(xiàn)這種麻煩的表情。換句話說(shuō),圍棋上的表情有助于玩家理解圍棋的規(guī)則,并使他們能夠發(fā)展基本的戰(zhàn)術(shù)思維。
該系統(tǒng)的系統(tǒng)架構(gòu)如下
每個(gè)模塊由以下部分組成:
游戲控制器 x1:該設(shè)備管理整個(gè)游戲。它通過(guò) CAN 與 Go 棋盤(pán)模塊通信,以檢測(cè)棋子的位置并指示應(yīng)在棋子上顯示哪些面部表情。
Rasbperry Pi 4 2GB
Raspberry Pi 7 英寸官方觸摸顯示器
WAVESHARE 2 CAN 擴(kuò)展 HAT,適用于 Raspberry Pi
棋盤(pán)模塊 x 25 ( 用于 5x5 棋盤(pán) ) 圍棋盤(pán)上的每個(gè)網(wǎng)格都是一個(gè)模塊。當(dāng)放置或點(diǎn)擊圍棋時(shí),它會(huì)通知游戲控制器,并按照游戲控制器的指示在圍棋上顯示面部表情。
Seeed XIAO RP2040
MCP2515 CAN 控制器
MCP2652 CAN 驅(qū)動(dòng)
Go Stone x25 ( 用于 5x5 棋盤(pán) ) 每個(gè)棋子在放置或點(diǎn)擊時(shí)都會(huì)通知其棋盤(pán)模塊,并根據(jù)從棋盤(pán)模塊收到的指令改變其面部表情。
項(xiàng)目亮點(diǎn)
1. 模塊式連接
該系統(tǒng)最初是使用 5×5 板創(chuàng)建的,但也可以很容易地適應(yīng)其他尺寸,例如 7×7、9×9 或 6×8。所有圍棋板模塊都設(shè)計(jì)為連接到單個(gè) CAN 總線,并且可以在總線電氣特性允許的范圍內(nèi)添加。每個(gè)圍棋板模塊的尺寸為 50mm × 50mm,它們的總線和電源線使用排針和插針以鏈形式連接,從而可以將多個(gè)模塊鏈接在一起。
2. 同步閃爍
我想實(shí)現(xiàn)的一個(gè)關(guān)鍵功能是同步閃爍:當(dāng)點(diǎn)擊圍棋時(shí),所有連接的棋子(包括點(diǎn)擊的棋子)都會(huì)同時(shí)閃爍。由于每個(gè)棋子都需要改變其外觀或閃爍,因此它必須與游戲管理設(shè)備通信。挑戰(zhàn)在于有效地實(shí)現(xiàn)這種同步。
雖然無(wú)線通信允許廣播,但由于展覽場(chǎng)地可能會(huì)受到干擾,因此我避免了廣播。我考慮了幾種有線通信協(xié)議:SPI、I2C、RS485 和 CAN。由于廣播通信限制,SPI 和 I2C 被取消。盡管 RS485 支持與板模塊的單獨(dú)和廣播通信,但它需要實(shí)現(xiàn)自定義協(xié)議。這種額外的處理可能會(huì)使 RP2040 負(fù)擔(dān)過(guò)重,從而導(dǎo)致同步問(wèn)題。
最終,我選擇了 CAN 協(xié)議,因?yàn)樗目刂破髟诒镜貙?shí)現(xiàn)了個(gè)人和廣播通信。此選項(xiàng)可減少 RP2040 的處理負(fù)載并最大限度地減少同步問(wèn)題。雖然為每個(gè)板卡模塊配備 MCP2515 CAN 控制器會(huì)增加當(dāng)前成本,但我們預(yù)計(jì)未來(lái)通過(guò)用 XIAO RA4M1 替換 XIAO RP2040 來(lái)降低成本,這將消除對(duì)單獨(dú) CAN 控制器的需求。
每個(gè)板卡模塊根據(jù)其位置分配一個(gè)唯一的 XY ID。使用此 ID,通過(guò)以下 CAN ID 處理通信:
0x4XY:從游戲手柄發(fā)送,指示圍棋改變面部表情或準(zhǔn)備眨眼
0x6XY:放置、移除或點(diǎn)擊圍棋時(shí),從棋盤(pán)模塊發(fā)送到游戲控制器
0x1FF:廣播到所有準(zhǔn)備閃爍的棋子,觸發(fā)它們同時(shí)閃爍
例如,要僅使編號(hào)為 0x12 且 0x14 閃爍的棋子,該過(guò)程如下:
游戲控制器向編號(hào)為 0x12 和 0x14 的棋子發(fā)送消息0x02FF,使這些棋盤(pán)模塊進(jìn)入閃爍就緒狀態(tài)。
然后,游戲控制器0x1FF03FF (on) 和 0x1FF0300 (off) 廣播消息。只有處于 blink-ready 狀態(tài)的板子模塊 (0x12 和 0x14) 響應(yīng)這些命令,而所有其他模塊都會(huì)忽略它們。這將啟用僅選定的 Go 棋子的同步閃爍。
這種通信機(jī)制可確保無(wú)縫閃爍,從而防止播放器出現(xiàn)任何明顯的同步延遲。
-
控制器
+關(guān)注
關(guān)注
114文章
16964瀏覽量
182895 -
游戲
+關(guān)注
關(guān)注
2文章
767瀏覽量
26691 -
樹(shù)莓派
+關(guān)注
關(guān)注
121文章
1942瀏覽量
106981
原文標(biāo)題:創(chuàng)客項(xiàng)目秀|基于XIAO RP2040和樹(shù)莓派的圍棋棋盤(pán)游戲系統(tǒng)
文章出處:【微信號(hào):ChaiHuoMakerSpace,微信公眾號(hào):柴火創(chuàng)客空間】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
使用樹(shù)莓派Pico的RP2040微控制器內(nèi)置溫度傳感器
在樹(shù)莓派Pico RP2040上怎樣使用MicroPython呢?

矽遞科技XIAO RP2040開(kāi)發(fā)板的Arduino開(kāi)發(fā)環(huán)境配置教程

使用RP2040設(shè)計(jì)一個(gè)迷你板
ubuntu上交叉編譯rp2040
樹(shù)莓派Pico迷你開(kāi)發(fā)板及所使用的RP2040 MCU芯片有哪些特性
在IAR EWARM v7.10下,開(kāi)發(fā)樹(shù)莓派RPi Pico/RP2040c
RP2040
BBkey80:由XIAO RP2040驅(qū)動(dòng)的GL516兼容鍵盤(pán)

RP2040模塊MCU開(kāi)源分享

AI WB2和XIAO RP2040組合開(kāi)源

樹(shù)莓派推出由RP2040驅(qū)動(dòng)的一體式USB調(diào)試套件 價(jià)格12美元
9.9元包郵!合宙RP2040開(kāi)發(fā)板,兼容樹(shù)莓派PICO
9.9元自制樹(shù)莓派邏輯分析儀?!合宙RP2040開(kāi)發(fā)板輕松DIY

合宙RP2040開(kāi)發(fā)板,兼容樹(shù)莓派PICO

評(píng)論