cocos creator 斗牛游戲

學(xué)了cocos creator也將近一月了,對于用creator來做一個游戲的客戶端還是有了點(diǎn)心得體會。最近嘗試寫了一下?lián)淇说钠渲幸环N玩法,斗牛。具體原型的話是參考AppStore游戲榜上排名靠前的游戲:“阿拉斗牛”。哈哈,不知這個算不算廣告。不多說了,直接上我自己琢磨出來的攻略。如果你也是才剛剛接觸的cocos creator,希望你先看看這兩篇我不久前寫的文章,“cocos creator 切換場景”,“cocos creator 碰撞游戲”,再來看這篇,因?yàn)槲以谶@里會省略一些過于簡單的操作。

首先從網(wǎng)上搞到撲克的相關(guān)資源,接著使用cocos creator創(chuàng)建一個登陸頁面,新建一個scene命名為login,拖一張背景圖,新增一個按鈕,命名為btnLogin:

登錄界面

然后設(shè)置這個btnLogin:

btnLogin

接著新建一個javaScript腳本文件,命名為login,填入代碼:

login

接著將這個腳本文件與登錄界面的Canvas(畫布)綁定:

login.Canvas

登陸界面做好了。接下來,新建一個scene命名為main,也是和上面的操作一樣拖一個背景圖和新建一個按鈕:

main

更改這個按鈕屬性,然后新建javaScript腳本文件,命名為main,添上:

main

然后與main的Canvas綁定,和登陸界面的操作過程完全一樣。

接下來就是在新建一個scene,命名為prepare,先仿照這阿拉斗牛這款游戲的游戲界面布置一下UI。首先還是托一張背景圖,然后新建一個按鈕命名為btnGobackMain,在新建一個按鈕命名為btnPrepare:

btnGobackMain和btnPrepare

然后新建兩個node,用來存放我方玩家和敵方玩家,分別命名為nodePlayerInfo,nodeOtherPlayerInfo。每個node下都放一張頭像圖,一張文字為準(zhǔn)備的圖,和一個命名為layoutCards的用來存放和顯示撲克牌的layout,其中給敵方頭像圖添加一個button的組件(添加組件-添加UI組件-button):

兩個node
目錄

再創(chuàng)建一組倍數(shù)按鈕,和有無牛按鈕,就完成UI的搭建了:

完成UI搭建

隱藏部分游戲一開始不希望看到的UI,完成如下:

隱藏部分UI

新建一個腳本文件,命名為prepare,將這個腳本文件添加到prepare場景的Canvas中去。然后介紹下斗牛的玩法:雙方玩家都確認(rèn)后,玩家先各自得到4張牌,看一下四張牌的分值,決定比拼的倍數(shù),然后各自得到第五張牌,計(jì)算分?jǐn)?shù),誰的牛大誰就贏。斗牛規(guī)則是:選三張牌的分值相加為10的倍數(shù),滿足這個前提的情況下計(jì)算剩下兩張牌的分值,相加除以10得到的余數(shù)就是牛,如余數(shù)為1就是牛1,2就是牛2,余數(shù)為0則是分?jǐn)?shù)最大的情況,為牛10(也稱牛牛),誰的余數(shù)大誰就贏。如果不滿足三張牌的那個前提,那就是沒牛,算0分,小于任何一個牛。兩個都沒牛或者一樣大則算平局

根據(jù)這個思路,我們先配置一下?lián)淇伺频臄?shù)據(jù),新建一個腳本文件,命名為CardInfo:

CardInfo

上述代碼中,cardPoint表示五張牌拿到手后比牛的分值,10以上的都算10分,cardType 和cardValue則是類型和邏輯值,是為了等會代碼獲取對應(yīng)的撲克牌的圖片而設(shè)置的。最后別忘了以下代碼,公開上面的配置代碼讓其他文件可以調(diào)用:

CardInfo

回到prepare腳本文件,在最開始導(dǎo)入剛剛的配置:var CardInfo = require("CardInfo")

接著:游戲一開始需要讓雙方都準(zhǔn)備,我方直接點(diǎn)準(zhǔn)備就可以了,理論上來講,另一方需要等服務(wù)端發(fā)準(zhǔn)備的消息才能準(zhǔn)備,但是我這個只是練手的客戶端小游戲,就設(shè)置為:我方點(diǎn)擊了準(zhǔn)備按鈕后,再點(diǎn)擊一次敵方的頭像后,敵方也顯示準(zhǔn)備就好了。

在onload函數(shù)中寫上:

this.node.getChildByName("btnPrepare").on('click',this.prepare, this);

cc.find("Canvas/nodeOtherPlayerInfo/spHeadBg").on('click',this.otherPrepare, this);

這兩行代碼是找到準(zhǔn)備按鈕和敵方頭像,并分別給它們加了個點(diǎn)擊事件,恩,接下來看下點(diǎn)擊事件:

prepare


otherPrepare

不多說,其中,cc.director.getScheduler().schedule(self.startGame, self, 1, 0, 0,);是一個定時(shí)器,指我方點(diǎn)了準(zhǔn)備,然后敵方點(diǎn)了準(zhǔn)備之后,過了1秒后執(zhí)行startGame函數(shù)。

但是,這么快就想startGame了?牌都沒有怎么start?所以,我們先創(chuàng)建牌:

斗牛中需要的撲克牌總牌組

然后再onload中寫下:

初始化手牌數(shù)組

順便再加上

this.myResultArr = [];

this.otherResultArr = [];

用來保存牛的判斷結(jié)果。

接著隨機(jī)分發(fā)牌:

隨機(jī)發(fā)牌

取個隨機(jī)數(shù)隨機(jī)發(fā)牌,共取10張,數(shù)組下標(biāo)為0,2,4,6,8的牌為我方手牌,為1,3,5,7,9的牌為敵方手牌,每取一張,在總牌組中的刪除該張牌。接著在onload中寫上this.createMyCardsAndOtherCards();調(diào)用這個函數(shù)。

好了,手牌數(shù)組中有值了,那么如何把它顯示在界面上呢?

創(chuàng)建手牌


通用函數(shù)

有注釋,應(yīng)該不難看懂,先把牌名轉(zhuǎn)化為對應(yīng)的圖片名,然后再通過creator的動態(tài)加載圖集資源的方法加載。因?yàn)閿撤绞峙撇辉试S被我方看到,所以顯示背面圖片。

接著就可以寫startGame函數(shù)了:

startGame

剛剛說了規(guī)則,先發(fā)四張牌,所以要減1,接著顯示倍數(shù)按鈕和有無牛按鈕:

顯示倍數(shù)按鈕和有無牛按鈕
倍數(shù)按鈕的點(diǎn)擊事件

點(diǎn)擊了任意一個倍數(shù)按鈕后,拿到第五張牌,并判斷輸贏的邏輯保存在圖中兩個數(shù)組中。接著來看一下上圖調(diào)用的兩個函數(shù)的內(nèi)容:

1
2

先將兩個手牌數(shù)組轉(zhuǎn)為兩個顯示分值的數(shù)組。然后隨機(jī)取兩個分值,選出在滿足剩下三個分值之和是10的倍數(shù)的條件下,這兩個分值相加除以10得到的余數(shù)最大的一組組合。返回一個結(jié)果數(shù)組:分值,選出的第一個分值在數(shù)組中的位置,選出的第二個分值在數(shù)組中的位置。無牛則返回【0,0,0】。最后在onload加上:

cc.find("Canvas/nodeGameBtns/btnHaveCow").on('click',this.isHaveCow, this)

cc.find("Canvas/nodeGameBtns/btnHaveNone").on('click',this.isHaveCow, this)

然后補(bǔ)上這個isHaveCow的函數(shù):

1
2

結(jié)果出來了,總需要知道敵方的手牌吧?所以:

創(chuàng)建敵方明面手牌

到此,斗牛游戲已經(jīng)完成了,接下來來玩一把唄:

1
2
3

好了,一款簡陋的斗牛游戲算是完成了。什么?你要代碼?因?yàn)橘Y源有專利,不能發(fā)布這篇文章所介紹的項(xiàng)目,很抱歉。如果你真的需要看一些游戲項(xiàng)目的話,請點(diǎn)擊這兒點(diǎn)擊那兒。這里有許多大神寫的一些游戲項(xiàng)目供參考。

對了,順便再說一下這個項(xiàng)目的一個比較有影響的bug,就是手牌的順序沒有按照對應(yīng)的數(shù)組的順序來,因?yàn)閏reator動態(tài)加載資源是個異步的過程,哪張圖先加載完就先放哪張,這個問題我會在下一篇帶來解決方案。

如有錯誤,歡迎指正。如有補(bǔ)充,歡迎告知。

2017-08-04

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,582評論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,540評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,028評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,801評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,223評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,442評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,976評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,800評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,996評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,233評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,702評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,991評論 2 374

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

  • 我想試試麻將類做個麻將類的游戲。不多說,想到就開干。首先從別的例子中拷貝一套麻將資源,麻將的話一般是四個人玩,所以...
    樊開囧閱讀 10,778評論 4 8
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,662評論 25 708
  • 這些年,逐漸興起一個新詞,叫做“小鮮肉”,慢慢的,“老臘肉”也跟著火起來了,不太小的那些人叫自己“小鮮肉”,不太老...
    葉泱曲庸閱讀 1,165評論 0 3
  • 文章導(dǎo)讀:本文主要介紹我是如何微信日漲四千粉的?包括:1.系統(tǒng)可為每一位關(guān)注公眾號的粉絲生成一個專屬二維碼2.每個...
    我是你的人呢嗎閱讀 350評論 0 1
  • 我是一名程序員,在一家創(chuàng)業(yè)公司從事iOS開發(fā)。回望過去,見證過3Q大戰(zhàn)、網(wǎng)絡(luò)反腐等一系列互聯(lián)網(wǎng)事件。說白了就是接觸...
    JohnnyB0Y閱讀 308評論 0 0