有段日子沒分享代碼了,今天分享一個原本打算上架的項目,游戲做到中途本打算放棄開發(fā),放了一段時間,覺得有些可惜,還是把主體功能寫完成了,項目就不上架了,代碼分享給大家吧.項目中的UI布局樣式也是我自己設(shè)計的,圖片有部分自己做的,有部分網(wǎng)上找的.如果覺得有興趣上架的,可以自己完善下剩余的細節(jié),自己發(fā)版吧.
發(fā)一部分圖大家看下:(圖片)
游戲是消除類的游戲,核心玩法是玩家通過拇指在屏幕繪制圖形,當玩家繪制的圖案與怪物身上氣球的圖案相同時,氣球被銷毀,如果怪物身上氣球數(shù)為0時,怪物會被消滅.
用戶繪制圖形樣式(sameTouch)
項目開始前,首先要設(shè)計玩家可繪制的圖形.我這里設(shè)計以下圖案,圖片的制作采用Photoshop,關(guān)于項目中UI的制作就不講了,感興趣的可以自學(xué)下PS,相關(guān)的教程網(wǎng)上一大片.這里也可以設(shè)計一些復(fù)雜的手勢,隨著游戲難度的提升而出現(xiàn).需要注意的是,設(shè)計的手勢不要太過相近,否則后面不好做判斷.
怪物身上氣球樣式:
如何判斷玩家繪制的圖形是什么樣式?
方案一:首先我想到的是圖像識別功能.給定一個模型庫裝入設(shè)定好的可繪制圖形樣式.將玩家繪制的路徑變成黑色,背景為白色,玩家每次繪結(jié)束后,獲取玩家繪制的圖片,并將圖片尺寸縮放到與模型庫圖片大小相同,通過圖形的對比,判斷用戶繪制圖形與模型庫中哪種圖形最相近,并給出相似度,當相似度大于70%時,即認定玩家繪制的圖形.然而理想很豐滿,現(xiàn)實很骨感首先每次獲取玩家繪制路徑并且生成圖片,這種頻繁的操作,手機能明顯的感覺卡頓.并且為了做圖像的對比,我又引入了opencv框架.一來一去,效率實在太慢了,so放棄此方案.(opencv,一套強大圖像處理的框架,這里使用有點殺雞用牛刀了).
方案二:首先,將手機看做XY平面坐標,在屏幕上一一繪制開發(fā)者設(shè)定的標準圖像,并且記錄繪制路徑的二維坐標數(shù)組,一套坐標數(shù)組對應(yīng)一種圖形.將所有設(shè)定好的圖形坐標數(shù)組保存起來,當做模型庫與后面玩家繪制的坐標數(shù)組對比.當玩家繪制好路徑后,將玩家繪制的坐標點數(shù)組與當前庫內(nèi)的坐標數(shù)組一一對比,求出與之相近的圖形,并且返回一個相近度,根據(jù)圖形復(fù)雜程度與相近度的結(jié)合,判斷用戶繪制的圖形.具體代碼看工程中的sameTouch文件下的代碼.這個方案在速度與效率上是可行的,但也有弊端.由于這個方案是根據(jù)路徑中坐標點差值的計算而判斷的,實際上一個圖形會有多種繪制方案,比如數(shù)字8,有人是從由上至下開始繪制,有人是從中間到上再到下繪制,還有人是中間到下再到上繪制,不同玩家會有不同的書寫習(xí)慣,但是最終得到的圖形結(jié)果都應(yīng)該是8,這樣就需要模型庫中有同一個圖像的多套模型路徑數(shù)組.(目前項目中采用的就是這種方案).
方案三:這個方案是我后來研究機器學(xué)習(xí)時候發(fā)現(xiàn)的方案,并且可以確定,這個方案更適用這個項目.就是采用神經(jīng)網(wǎng)絡(luò)方案,通過坐標組來判斷,由于項目擱淺了,就沒有換成這個方案.感興趣的朋友可以研究下.附上神經(jīng)網(wǎng)絡(luò)的鏈接,就是采用里面的方案,我自己測試了下數(shù)字0-9,非常準確,推薦使用此方案.[神經(jīng)網(wǎng)絡(luò)](|
http://wiki.jikexueyuan.com/project/tensorflow-zh/
至此,游戲中最核心的功能得以實現(xiàn),剩下的就是添磚加瓦了.
首頁(HomeScene)
首頁布局沒啥可說的,就是一些按鈕+圖片構(gòu)成,采用cocos studio布局,通過加載csb文件.
下面三個小怪物自己會有默認動畫播放,當玩家點擊也會有交互動畫.
游戲分為兩種模式,一種是計時模式,一種是守護模式.
計時模式:游戲的時間為固定模式(在游戲開始前可以通過購買游戲道具增加時間).時間到了,游戲結(jié)束.
守護模式,玩家有固定生命值(在游戲開始前可以通過購買游戲道具增加生命值),每當一個怪物miss后,生命值減一,當生命值為0,游戲結(jié)束.這里加了個功能,隨著游戲進程越長,怪物下落的時間也會越快.
玩家可以通過游戲中獲取金幣或者直接購買金幣,金幣的作用是在游戲開始前,可以購買道具,增加游戲的娛樂性.
游戲場景(GameScene)
按著游戲的內(nèi)容,場景主要分為四大層:
GameControlLayer:用于游戲數(shù)據(jù)的展示,如獲取金幣數(shù)量,擊殺怪物數(shù)量,連殺特效.同時也兼顧暫停,結(jié)束等UI的展示.這里也同樣都可以在單獨拆分出來,看開發(fā)者自己的習(xí)慣吧.
MonsterLayer:用于控制游戲怪物的層級.游戲中怪物的出現(xiàn),下落,氣球的銷毀,怪物銷毀等.
UserDrawLayer:用于記錄玩家繪制圖形的層級,每次繪制完成后,將玩家繪制圖形的結(jié)果傳給MonsterLayer,判斷是否有可供消除的氣球.
GamePropLayer:道具層,道具分為2種可使用道具一種被動道具,可使用的為炸彈(消滅當前所有怪我).減速道具:較少怪物下落速度.
就寫這些吧,游戲比較簡單,開發(fā)起來也不算困難,感覺沒啥需要可寫的,耗時最多的都在UI的制作上啦.有興趣的朋友可以下載代碼自行研究下.
代碼地址:代碼地址