構建以太坊模擬遊戲– 第3 部分


回顧

在第一部分中,我概述了在以太坊區塊鏈上開發網球經理模擬遊戲的想法。我創建了ERC721 代幣和TrainableTennisPlayer 合約,使所有者能夠通過訓練或休息來增加他們的球員數據。

第二部分介紹了CompetingTennisPlayercontract,負責計算球員之間比賽的獲勝者。

從那時起,我為這些合約編寫了單元測試。它們絕不是完整的,但我想嘗試盡快構建一組可用的合約來測試基本的前沿。如果你想幫助測試和構建應用程序,請查看Github 存儲庫。

我還修改了TennisPlayerBase 合約以擴展ERC721Enumerable,而不是Openzeppelin 提供的標準ERC721 令牌。這使我們的遊戲能夠使用_tokensOfOwner(address) 檢索地址擁有的所有令牌。實現這意味著不需要用戶在每次登錄時記住他們的令牌ID。

正如我在上一篇文章中提到的,我期待著啟動並運行一個基本的界面來開始與遊戲進行交互。

拉在一起

圖1 顯示了上一期之後的合約圖。

圖1:合約結構

我希望遊戲Dapp 可以通過盡可能少的智能合約訪問,所以前端代碼不會太複雜。因此,SomethingHere 的原因。

我創建了一個合約來代替SomethingHere 稱為TennisPlayer。這顯示在以下代碼中。

注意第9 行的myPlayers() 如何使用從ERC721Enumerable 繼承的_tokensOfOwner() 函數。如前所述,這允許前端加載用戶擁有的所有播放器。

創建新玩家

在第一部分中,我使用自定義訪問修飾符onlyOwner(繼承自Openzeppelin 的Ownable 合約)在TennisPlayerBase 中創建了newPlayer() 函數。這意味著只有令牌的所有者才能創建新玩家,其他人不能。如果遊戲要控制新玩家的起始屬性設置,就必須這樣。否則,用戶可以創建一個新玩家並立即最大化統計數據。

為此,我們需要一個總體遊戲智能合約,該合約在部署時會創建TennisPlayer ERC721 代幣合約,從而成為所有者。

以下是執行此操作的智能合約Game.sol。

注意第11 行到第16 行的默認屬性值。每個新玩家都從這些開始。將來,可能會引入隨機性元素,因此每個新玩家的優勢和劣勢都略有不同。 (雖然隨機性是一個癥結)

智能合約還在第9 行存儲了一個名為publicTokenAddress 的地址,表示我們的ERC721 代幣的位置。當在第19 行創建代幣時,構造函數會檢索該地址。

newPlayer() 函數在第22 行公開,只從用戶那裡獲取新玩家的姓名、年齡和身高。這是進入遊戲Dapp 的入口點。

在此階段,用戶可以通過遊戲合約創建新玩家,並與TennisPlayer 中的功能進行交互以訓練休息和與其他玩家競爭。這似乎是開始構建前端的好地方。

前端

Truffle 套件提供了一堆Truffle 盒子,它們與你選擇的框架打包在一起。我正在使用React 框和Redux(我自己添加的)。

為了讓我們的DApp 能夠與遊戲進行交互,Redux 商店還需要保存有關它所連接的區塊鏈、智能合約以及用戶正在使用的帳戶的信息。

我使用這種模式來確保所有這些都被正確加載。最初,它可能看起來有點矯枉過正,但如果在加載階段出現問題,它有助於將其可視化。

圖4:加載區塊鏈圖5:加載區塊鏈

顯示播放器

為了顯示用戶擁有的所有球員,DApp 需要調用TennisPlayer 合約中的myPlayers() 函數,並將結果存儲在Redux 存儲中。從那裡,組件可以選擇數據,並將其顯示在頁面上。

我已經編寫了一個負責這個名為PlayerList 的組件,如下面的代碼所示。

PlayerList 呈現帶有標題、玩家列表和用於創建新玩家的表單的Bootstrap 卡片。沒有任何播放器,它看起來像圖7,一旦用戶創建了播放器,列表就會顯示ID,如圖8 所示。

圖7:沒有玩家的PlayerList圖8:列表中玩家0 的PlayerList

該列表是可選擇的。通過單擊列表中的項目,DApp 會檢索播放器的詳細信息並將其存儲在Redux 商店中。

顯示玩家詳細信息

另一個名為PlayerDetails 的組件負責從Redux 存儲中選擇玩家詳細信息並將其顯示在頁面上。

下面顯示了PlayerDetails 組件的代碼。

該組件呈現另一個Bootstrap 卡,當處於活動狀態時,如圖10 所示。

圖10:玩家詳細信息卡片

綜合起來,圖11 顯示了處於當前狀態的前端。非常基本,非常笨重,而且還遠未完成。它尚未實現智能合約中可用的所有功能,但這是一個良好的開端。

圖11:全前端

下一步

該項目正在積極開發中。在撰寫本文時,代碼的當前狀態如本文所述。

我希望能夠盡快通過界面進行訓練、休息和與玩家競爭。訓練和休息將是我的下一個功能,因為它們只需要一名球員,而比賽至少需要兩名球員,因此需要稍微多一些。

一旦支持所有可用的智能合約功能,我將考慮擴展匹配邏輯,或者讓前端看起來更有吸引力和更像遊戲。

還有很長的路要走,但讓整個堆棧協同工作是一大步

代碼存儲庫位於Github 上,因此它是公開的並對拉取請求開放。如果你有興趣提供幫助,請貢獻這是回購。

進一步閱讀

如果你想了解有關加密貨幣生態系統的更多信息,請註冊每週通訊。

資訊來源:由0x資訊編譯自COINCODECAP。版權歸作者Gaurav所有,未經許可,不得轉載

Total
0
Shares
Related Posts