cocos creator 斗牛游戲

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

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

登錄界面

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

btnLogin

接著新建一個(gè)javaScript腳本文件邦马,命名為login,填入代碼:

login

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

login.Canvas

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

main

更改這個(gè)按鈕屬性攘烛,然后新建javaScript腳本文件镀首,命名為main,添上:

main

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

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

btnGobackMain和btnPrepare

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

兩個(gè)node
目錄

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

完成UI搭建

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

隱藏部分UI

新建一個(gè)腳本文件沼琉,命名為prepare拟赊,將這個(gè)腳本文件添加到prepare場(chǎng)景的Canvas中去粹淋。然后介紹下斗牛的玩法:雙方玩家都確認(rèn)后,玩家先各自得到4張牌屋匕,看一下四張牌的分值借杰,決定比拼的倍數(shù),然后各自得到第五張牌纤虽,計(jì)算分?jǐn)?shù),誰的牛大誰就贏逼纸。斗牛規(guī)則是:選三張牌的分值相加為10的倍數(shù)济蝉,滿足這個(gè)前提的情況下計(jì)算剩下兩張牌的分值,相加除以10得到的余數(shù)就是牛贺嫂,如余數(shù)為1就是牛1雁乡,2就是牛2,余數(shù)為0則是分?jǐn)?shù)最大的情況踱稍,為牛10(也稱牛牛),誰的余數(shù)大誰就贏渔工。如果不滿足三張牌的那個(gè)前提桥温,那就是沒牛,算0分旺韭,小于任何一個(gè)牛。兩個(gè)都沒徘耍或者一樣大則算平局

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

CardInfo

上述代碼中,cardPoint表示五張牌拿到手后比牛的分值埃跷,10以上的都算10分邮利,cardType 和cardValue則是類型和邏輯值,是為了等會(huì)代碼獲取對(duì)應(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)備寄纵,但是我這個(gè)只是練手的客戶端小游戲脖苏,就設(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)備按鈕和敵方頭像畅哑,并分別給它們加了個(gè)點(diǎn)擊事件水由,恩,接下來看下點(diǎn)擊事件:

prepare


otherPrepare

不多說泥张,其中鞭盟,cc.director.getScheduler().schedule(self.startGame, self, 1, 0, 0,);是一個(gè)定時(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ā)牌

取個(gè)隨機(jī)數(shù)隨機(jī)發(fā)牌,共取10張嗤瞎,數(shù)組下標(biāo)為0听系,2,4掉瞳,6届惋,8的牌為我方手牌脑豹,為1衡查,3,5拌牲,7,9的牌為敵方手牌拍埠,每取一張土居,在總牌組中的刪除該張牌。接著在onload中寫上this.createMyCardsAndOtherCards();調(diào)用這個(gè)函數(shù)擦耀。

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

創(chuàng)建手牌


通用函數(shù)

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

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

startGame

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

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

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

1
2

先將兩個(gè)手牌數(shù)組轉(zhuǎn)為兩個(gè)顯示分值的數(shù)組亏推。然后隨機(jī)取兩個(gè)分值年堆,選出在滿足剩下三個(gè)分值之和是10的倍數(shù)的條件下,這兩個(gè)分值相加除以10得到的余數(shù)最大的一組組合芽狗。返回一個(gè)結(jié)果數(shù)組:分值痒蓬,選出的第一個(gè)分值在數(shù)組中的位置,選出的第二個(gè)分值在數(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ǔ)上這個(gè)isHaveCow的函數(shù):

1
2

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

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

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

1
2
3

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

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

如有錯(cuò)誤伸眶,歡迎指正。如有補(bǔ)充厘贼,歡迎告知。

2017-08-04

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末毁欣,一起剝皮案震驚了整個(gè)濱河市岳掐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌岩四,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件材鹦,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡桶唐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門尤泽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人熊咽,你說我怎么就攤上這事『崤梗” “怎么了卿拴?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長堕花。 經(jīng)常有香客問我,道長瞄崇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任杠袱,我火速辦了婚禮窝稿,結(jié)果婚禮上伴榔,老公的妹妹穿的比我還像新娘。我一直安慰自己踪少,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布援奢。 她就那樣靜靜地躺著忍捡,像睡著了一般切黔。 火紅的嫁衣襯著肌膚如雪具篇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天诗芜,我揣著相機(jī)與錄音,去河邊找鬼伏恐。 笑死栓霜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的叙淌。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼闻鉴,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了孟岛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤渠羞,失蹤者是張志新(化名)和其女友劉穎智哀,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屯吊,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡摹菠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了次氨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡虹蓄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出武花,到底是詐尸還是另有隱情,我是刑警寧澤体箕,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站累铅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏娃兽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一第练、第九天 我趴在偏房一處隱蔽的房頂上張望玛荞。 院中可真熱鬧,春花似錦勋眯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽讶坯。三九已至,卻和暖如春钧舌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國打工崭歧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓屋彪,卻偏偏與公主長得像绒尊,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子婴谱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

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

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