1-從零開(kāi)發(fā)EOS區(qū)塊鏈小游戲系列 - 使用EOS Studio

目錄

前言

?記得EOS主網(wǎng)是去年6月底上線的潦闲,號(hào)稱區(qū)塊鏈3.0饮怯,因?yàn)楫?dāng)時(shí)ETH(以太坊)平均出塊時(shí)間10幾秒狂秦,而EOS是每秒2個(gè)矗钟,試想如果一個(gè)系統(tǒng)你去請(qǐng)求,然后他10幾秒才告訴你結(jié)果是什么感覺(jué)壹将。因此導(dǎo)致很多項(xiàng)目不適用灰署。當(dāng)然并不代表EOS比ETH強(qiáng),只是大家取舍不一樣轨奄。
?EOS發(fā)展是非常快的拒炎,記得很短時(shí)間注冊(cè)賬號(hào)就過(guò)百萬(wàn)了挪拟,第一批涌現(xiàn)的應(yīng)該是“菠菜”類的Dapp,那時(shí)候可以說(shuō)是每隔兩三天就會(huì)出現(xiàn)一款击你,因?yàn)殚_(kāi)發(fā)成本相當(dāng)?shù)陀褡椋?dāng)然體驗(yàn)也是非常差的。知道大概年底的時(shí)候丁侄,出現(xiàn)了一款放置型的去中心化游戲EOS Knight惯雳,是韓國(guó)公司開(kāi)發(fā)的一款游戲,智能合約代碼完全開(kāi)源鸿摇,日活一直占據(jù)EOS前幾名石景,游戲內(nèi)有自由交易市場(chǎng),購(gòu)買裝備或者素材拙吉,可以升級(jí)和合成裝備潮孽,BOSS戰(zhàn),定時(shí)挑戰(zhàn)任務(wù)等庐镐,當(dāng)年我也是他們的氪金玩家恩商,當(dāng)然氪的是EOS[微笑]。
?EOS游戲大致可分為[僅資產(chǎn)上鏈]和[邏輯和資產(chǎn)上鏈]兩類必逆,這里資產(chǎn)指游戲中的金幣怠堪、裝備等。邏輯指游戲的執(zhí)行邏輯名眉,如玩家砍BOSS一刀粟矿,扣血、暴擊损拢、傷害計(jì)算等這些就算是執(zhí)行邏輯陌粹。
?怎么定義一款游戲?qū)儆谀念悾渴紫任覀円私獾氖窃趨^(qū)塊鏈游戲中福压,每做一個(gè)決策掏秩,理論上都是需要玩家輸入密碼確認(rèn)的,當(dāng)然可以通過(guò)設(shè)置白名單解決荆姆,但仍然是一個(gè)非常重的操作蒙幻。所以一般博弈類的游戲,如五子棋胆筒,只能選擇僅資產(chǎn)上鏈邮破,否則玩家每下一步棋,都需要輸入密碼確認(rèn),這體驗(yàn)顯然無(wú)法接受抒和。一些放置型的游戲是可以考慮邏輯和資產(chǎn)都上鏈的矫渔,所以Knight就是屬于后者那類。戰(zhàn)斗玩法是:玩家只需要做一次開(kāi)始戰(zhàn)斗的決策摧莽,人物就會(huì)自動(dòng)一直打怪庙洼,知道人物陣亡,再做一次結(jié)束戰(zhàn)斗決策范嘱,就可以獲取經(jīng)驗(yàn)和裝備送膳。
?這兩類游戲去年自己都開(kāi)發(fā)過(guò),現(xiàn)在都還在主網(wǎng)跑丑蛤,但都是半年前的事了叠聋。 當(dāng)時(shí)EOSIO版本還是1.2+,連EOSIO.CDT(Contract Development Toolkit)都還沒(méi)有受裹。EOS智能合約使用的開(kāi)發(fā)語(yǔ)言是C++碌补,在1.3版本之后,語(yǔ)法發(fā)生了很大的變化棉饶,現(xiàn)在最新版本好像是1.8了厦章,而且生態(tài)也已經(jīng)慢慢形成。為什么又想繼續(xù)撿回照藻?一方面想熟悉1.3后的新語(yǔ)法袜啃,更重要的是最近發(fā)現(xiàn)有一款EOS開(kāi)發(fā)集成工具EOS Studio面世了,開(kāi)發(fā)到測(cè)試到部署一條龍服務(wù)幸缕。想想當(dāng)初只能靠CLION來(lái)寫合約代碼群发,然后來(lái)回切節(jié)點(diǎn)調(diào)式的艱苦日子即將過(guò)去,前路又充滿了陽(yáng)光发乔。

從零開(kāi)發(fā)一款區(qū)塊鏈小游戲

?本系列的目的是想深入了解EOS Stuio的使用熟妓,并熟悉EOSIO1.8新語(yǔ)法,看看與舊的區(qū)別栏尚,所以實(shí)際去開(kāi)發(fā)一個(gè)Dapp是最有效的學(xué)習(xí)方式起愈。
?下面我們來(lái)開(kāi)發(fā)一款邏輯和資產(chǎn)都上鏈的小游戲,設(shè)想的游戲大概是這樣的:

  1. 玩家需要注冊(cè)賬號(hào)译仗,同時(shí)獲得1000個(gè)SJ幣(水晶)抬虽,并得到一個(gè)人物用于戰(zhàn)斗,人物有攻擊力和血量2個(gè)屬性纵菌,攻擊力初始35-70斥赋,血量初始500。
  2. 玩家獲得人物后产艾,點(diǎn)擊戰(zhàn)斗(做一次決策),挑戰(zhàn)一個(gè)BOSS(攻擊力50-70,血量700)闷堡。
  3. 玩家先開(kāi)始攻擊隘膘,然后BOSS攻擊,一直重復(fù)杠览,直到任何一方血量<=0弯菊,戰(zhàn)斗結(jié)束。
  4. 玩家每一次攻擊踱阿,有25%的概率觸發(fā)暴擊管钳,暴擊增加100點(diǎn)傷害,僅在一回合有效软舌。
  5. 玩家勝利才漆,可以隨機(jī)獲得一個(gè)金、銀佛点、銅寶箱醇滥。玩家戰(zhàn)敗,減少100SJ幣超营。

環(huán)境配置

開(kāi)發(fā)環(huán)境:MacOS 10.13.6鸳玩、Python3.6
區(qū)塊鏈環(huán)境:kylin測(cè)試鏈
工具:EOS StudioDocker演闭、Scatter不跟、AtomPyCharm米碰、EOSIO v1.8

架構(gòu)圖

EOS Studio: EOS開(kāi)發(fā)集成工具
Docker: EOS studio必須依賴docker窝革,已達(dá)到切換環(huán)境需求
Scatter:是一個(gè)EOS賬號(hào)管理工具
Atom: 用來(lái)編寫前端代碼,也可以使用sublime代替
PyCharm: 使用Python開(kāi)發(fā)上圖中鏈接器程序
EOSIO:EOS客戶端程序见间,后面用來(lái)可以執(zhí)行cleos命令

以上工具需要用到的時(shí)候再下載也可以

熟悉EOS Studio

?先是下載并安裝好Docker和EOS Studio聊闯,啟動(dòng)玩Docker后,再啟動(dòng)EOS Studio米诉,此時(shí)界面應(yīng)該是這樣的:


已就緒界面

?因?yàn)槲蚁惹耙呀?jīng)把需要的都裝好了菱蔬,所以可以直接下一步。
?首先在你本地創(chuàng)建一個(gè)目錄史侣,我這里就叫kof(king of fighter)也就是拳皇拴泌。

mkdir kof

?進(jìn)入到開(kāi)發(fā)界面,中間展示的是配置信息惊橱,然后左邊是目錄結(jié)構(gòu)蚪腐,往上有幾個(gè)按鈕,分別是新建合約税朴、構(gòu)建回季、部署家制、測(cè)試和設(shè)置。然后右上角那三個(gè)模塊是環(huán)境和賬號(hào)相關(guān)的泡一〔梗可以看出其實(shí)功能還是比較少的,畢竟剛發(fā)布的工具鼻忠。
?在創(chuàng)建項(xiàng)目之前涵但,我們先為合約創(chuàng)建一個(gè)EOS賬戶,這里直接使用kylin(麒麟)測(cè)試鏈:右上角-Network-kylin帖蔓。然后再點(diǎn)擊Account-Create Account矮瘟,再?gòu)棿拜斎胍粋€(gè)合法的賬號(hào),所謂EOS合法賬號(hào)格式就是長(zhǎng)度12位:a-z 塑娇、1-5和.?澈侠,這里我們注冊(cè)一個(gè)賬號(hào):kingofighter。然后右上角選中該賬號(hào)后钝吮,可以看到展示出一個(gè)界面:



?這個(gè)就是與你賬號(hào)相關(guān)的信息:

  1. Account:可以看到你的總余額埋涧,也就是EOS,可用余額奇瘦,CPU和NET抵押的金額棘催、返回的金額。
  2. Resources:資源耳标。第一個(gè)是RAM是內(nèi)存醇坝,每一個(gè)賬號(hào)都需要內(nèi)存來(lái)保存數(shù)據(jù),而部署了智能合約的賬號(hào)次坡,RAM用于存放合約代碼和日后產(chǎn)生的數(shù)據(jù)呼猪。CPU用于發(fā)生交易時(shí)消耗,NET用于交易時(shí)打包數(shù)據(jù)消耗砸琅。這些資源都需要抵押EOS來(lái)獲得宋距,這就是為什么會(huì)有Staked、Refund的存在症脂。這里只是抵押你的EOS谚赎,可以贖回。注意:這里有點(diǎn)差別的是诱篷,RAM是購(gòu)買壶唤,所以都叫buy ram,你也可以將你多余的RAM賣出去棕所。二CPU和NET是抵押闸盔,也可以贖回。
  3. Permission Keys:權(quán)限琳省。兩個(gè)EOSxxx開(kāi)頭的都是這個(gè)賬號(hào)關(guān)聯(lián)的公鑰迎吵,關(guān)于EOS的賬戶與公鑰權(quán)限設(shè)計(jì)已經(jīng)有好多文章說(shuō)過(guò)了躲撰,有興趣可以自行搜索。owner是一些較敏感的操作需要用到钓觉,如修改公鑰茴肥,active是一些普通操作如發(fā)送交易、部署合約荡灾、抵押資源等。
    ?現(xiàn)在我們已經(jīng)有了EOS賬號(hào)瞬铸,我們把這個(gè)作為游戲的合約賬戶批幌,所以后面需要將寫好的代碼部署的上面,這就需要用到RAM了嗓节,而購(gòu)買RAM就需要一定的EOS荧缘,所以我們先去搞一些EOS。好在這里我們使用的是測(cè)試網(wǎng)絡(luò)拦宣,一切都可以免費(fèi)得到截粗。

    ?看到右上角的4個(gè)圖標(biāo)了嗎?第二個(gè)就是免費(fèi)獲取EOS的鸵隧,有個(gè)很生動(dòng)的名稱叫faucet绸罗,點(diǎn)擊一下就給你100EOS,每個(gè)賬號(hào)每天只能獲取1000個(gè)EOS豆瘫。接著繼續(xù)點(diǎn)擊第三個(gè)圖標(biāo)珊蟀,購(gòu)買RAM,點(diǎn)擊一下外驱,這是我們的資源就是這樣了:

    ?擁有200個(gè)EOS育灸,使用了大概6個(gè)去購(gòu)買RAM,現(xiàn)在RAM是209昵宇。36KB磅崭。CPU和NET我沒(méi)有找到可以抵押的按鈕,沒(méi)關(guān)系瓦哎,后面需要用到的時(shí)候砸喻,我們直接用CLEOS命令來(lái)抵押就可以了。
    ?有了資源杭煎,我們可以新建一個(gè)項(xiàng)目:點(diǎn)擊左上角"Create New Project..."恩够,在彈窗選擇位置為上創(chuàng)建的kof目錄,輸入項(xiàng)目名稱羡铲,這里項(xiàng)目名稱提示我們必須是EOS賬號(hào)蜂桶,所以這里輸入剛剛注冊(cè)好的:kingofighter
    目錄結(jié)構(gòu)

    ?工具自動(dòng)為我們生成了兩個(gè)C++文件,隨便瀏覽下也切,發(fā)現(xiàn)是寫helloworld的相關(guān)代碼扑媚,里面其實(shí)是一個(gè)完整的合約demo了腰湾。重點(diǎn)看下cpp的文件:
#include <kingofighter.hpp>
ACTION kingofighter::hi(name user) {
  require_auth(user); 
  print("Hello, ", name{user});
}

?合約中一個(gè)接口稱為action,這個(gè)action的名字是hi疆股,入?yún)⒂幸粋€(gè)name類型的user费坊,所以這里的意思是user必須傳入一個(gè)EOS賬號(hào)類型。v1.2版本是叫account_name類型旬痹。require_auth(user);是要求當(dāng)前調(diào)用者必須是user附井,如果不是就直接終止。請(qǐng)記住這一句代碼两残,在安全性方面這一句很重要永毅,特別是在一些涉及EOS交易的合約中,而且后面我們也會(huì)經(jīng)常使用
print("Hello, ", name{user});打印出“Hello人弓,賬號(hào)名稱”沼死。name{}是轉(zhuǎn)換成字符串的形式顯示,因?yàn)閚ame類型實(shí)際上存儲(chǔ)類型是uint64_t崔赌,無(wú)符號(hào)64位整形意蛀,所以需要進(jìn)行轉(zhuǎn)換。
?跟著下來(lái)健芭,我們嘗試下構(gòu)建和部署合約县钥,嘗試點(diǎn)擊左上角的??圖標(biāo)(Build)。


?嗯吟榴,很合理的報(bào)錯(cuò)了魁蒜。直接看錯(cuò)誤信息,很明顯是不知道他在說(shuō)什么的吩翻,于是我去了他們論壇搜兜看,沒(méi)搜到,然后自己發(fā)了一個(gè)帖子狭瞎,等了幾個(gè)小時(shí)细移,沒(méi)人回答。后來(lái)直接去電報(bào)找到軟件的作者尋找解決辦法:

?根據(jù)作者的回復(fù)熊锭,是要在 Add a resource path for inclusion -R 那一項(xiàng) 隨意填一些內(nèi)容就可以了弧轧,這應(yīng)該是軟件的一個(gè)BUG。我填寫的是合約的名稱碗殷,再點(diǎn)擊構(gòu)建:


?發(fā)現(xiàn)多處了兩個(gè)文件.abi精绎、.wasm。一個(gè)是描述文件锌妻,告訴外界這個(gè)合約有哪些action及參數(shù)代乃,另一個(gè)是合約的代碼文件。
?接著仿粹,我們嘗試部署(Deploy)搁吓,很順利的成功了原茅,這時(shí)候我們回到賬號(hào)信息界面,發(fā)現(xiàn)RAM已被使用了大概14KB:

?好堕仔,我試下最后一個(gè)功能測(cè)試(Test)擂橘,點(diǎn)擊后,要求安裝一些必要的工具摩骨,這里我選默認(rèn)項(xiàng)目通贞,點(diǎn)擊初始化:

?初始化完成后,界面展示了幾段JS代碼仿吞,我估計(jì)這里所謂測(cè)試就是幫你下載了一些eosjs相關(guān)的包滑频,然后通過(guò)調(diào)用eosjs提供的接口來(lái)實(shí)現(xiàn)單元測(cè)試,我們將第三段的can get account "eosio"修改一下:

  //期望部署的合約與我們指定的名稱相同
  it('can get account "kingofighter"', async () => {
    const eosioAccount = await eos.getAccount('kingofighter');
    expect(eosioAccount.account_name).to.equal('kingofighter');
  });

?然后保存文件唤冈,點(diǎn)擊Test按鈕:

  Global eos
    ? is an object
    ? can get chain info and chainId is 5fff1dae8dc8e2fc4d5b23b2c7665c97f9e9d8edf2b6485a86ba311c25639191 (1072ms)
    ? can get account "kingofighter" (1108ms)


  3 passing (2s)

?當(dāng)然還可以測(cè)試更多的信息,我嘗試去EOS Studio官網(wǎng)看看有沒(méi)有關(guān)于Test的文檔银伟,發(fā)現(xiàn)這個(gè)版塊還在建設(shè)中



?如果你對(duì)eosjs很熟悉可以繼續(xù)深入你虹,我還是等等官方到時(shí)候給出的列子吧,加上測(cè)試這里不影響后面的進(jìn)度彤避。

總結(jié)

?本章開(kāi)頭講了一些關(guān)于EOS游戲的發(fā)展傅物,重點(diǎn)嘗試了EOS Studio的各項(xiàng)重要功能,總得來(lái)說(shuō)EOS Studio為開(kāi)發(fā)Dapp提供了很大的便利性:以前需要安裝EOSIO客戶端琉预,合約的 很多操作都需要使用CLEOS來(lái)實(shí)現(xiàn)董饰,比較麻煩。當(dāng)然不足的地方也不少:只是實(shí)現(xiàn)了最基本的功能圆米、無(wú)法直接跳轉(zhuǎn)的源代碼卒暂、缺少快捷鍵、假死情況頻繁等娄帖。但畢竟是剛剛上線的產(chǎn)品也祠,可以理解。這里感謝開(kāi)發(fā)者的無(wú)私付出近速。
?好了诈嘿,下一章開(kāi)始智能合約的設(shè)計(jì)與編寫...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者削葱。
  • 序言:七十年代末奖亚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子析砸,更是在濱河造成了極大的恐慌昔字,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件干厚,死亡現(xiàn)場(chǎng)離奇詭異李滴,居然都是意外死亡螃宙,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門所坯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)谆扎,“玉大人,你說(shuō)我怎么就攤上這事芹助√煤” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵状土,是天一觀的道長(zhǎng)无蜂。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蒙谓,這世上最難降的妖魔是什么斥季? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮累驮,結(jié)果婚禮上酣倾,老公的妹妹穿的比我還像新娘。我一直安慰自己谤专,他們只是感情好躁锡,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著置侍,像睡著了一般映之。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜡坊,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天杠输,我揣著相機(jī)與錄音,去河邊找鬼算色。 笑死抬伺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的灾梦。 我是一名探鬼主播峡钓,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼若河!你這毒婦竟也來(lái)了能岩?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤萧福,失蹤者是張志新(化名)和其女友劉穎拉鹃,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡膏燕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年钥屈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坝辫。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡篷就,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出近忙,到底是詐尸還是另有隱情竭业,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布及舍,位于F島的核電站未辆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏锯玛。R本人自食惡果不足惜咐柜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望攘残。 院中可真熱鬧炕桨,春花似錦、人聲如沸肯腕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)实撒。三九已至,卻和暖如春涉瘾,著一層夾襖步出監(jiān)牢的瞬間知态,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工立叛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留负敏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓秘蛇,卻偏偏與公主長(zhǎng)得像其做,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赁还,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容