日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

扎金花 游戏开发细节与部分代码

發布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 扎金花 游戏开发细节与部分代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

扎金花 游戲開發細節與部分代碼,斗地主游戲中的牌型很多,算法也各有不同,但我總覺得網上一些通用的算法有點鋪天蓋地,所以,我決定自己來重新想一下算法,總的來說,無論你出什么處于,三帶二,炸,4帶一等,你總是有個主牌的,從牌只認張數,大小是無所謂的,所以,我將主牌清點出來應該就只有 對子,3條,炸彈,雙王,順子這五類,所以,在發牌或者拿到底牌后,我們直接將所有的主牌類型清理出來即可。

這是我希望開發的第一個紙牌類游戲,斗地主本身來說是一個有限用戶的回合制游戲,核心邏輯與棋類游戲并無多大的不同,但是因為并無多大的行棋算法,所以位置顯得不那么的重要。所以我決定還是用開發四國軍棋形成的flexchessapi來開發這個游戲,如果flexchessapi不能勝任這個工作,我會考慮形成一個通用的flexcardapi來開發這個游戲。這樣,我就能利用flexcardapi開發更多的游戲,比如詐金花等。扎金花

核心邏輯開發完成后效果如圖所示

?

好了,現在我們開始設計一些紙牌類的一般邏輯思考,放在一個靜態類如CardHelp.as中。。

1) 設計一幅牌 扎金花

我們對一幅牌的每一張牌應該給定一個值,每個值包括花色與本身的大小,這樣,我們就以一個3位數的值來代表一張牌,比如303代表紅花3,414代表黑桃A,這樣,我們就能夠設計出一幅牌的完整數組,不同的牌需要的完整數不同,比如扎金花是不要王,斗地主是要王的,現在,我們設計一幅牌。

/**
?? *斗地主帶王的一幅完整的牌?
?? * 在斗地主中,2是比A還大的牌,我們不能叫102,就叫115吧。
?? */??
? public static const CARDS_WITH_JOKER:Array=[115,103,104,105,106,107,108,109,110,111,112,113,114,215,203,204,205,206,207,208,209,210,211,212,213,214,315,303,304,305,306,307,308,309,310,311,312,313,314,415,403,404,405,406,407,408,409,410,411,412,413,414,518,519];
? /**
?? *扎金花不帶王的一幅完整的牌
?? */??
? public static const CARDS_NO_JOKER:Array=[102,103,104,105,106,107,108,109,110,111,112,113,114,202,203,204,205,206,207,208,209,210,211,212,213,214,302,303,304,305,306,307,308,309,310,311,312,313,314,402,403,404,405,406,407,408,409,410,411,412,413,414];

設計兩個幫助方法

/**
?? *獲得特定處于的花色
?? * @param card
?? * @return
?? *
?? */??
? public static function getHuaShe(value:int):int{
?? return Math.floor(value/100);
? }
? /**
?? * 獲得特定牌的原始值
?? * @param card
?? * @return
?? *
?? */??
? public static function getPureValue(value:int):int{
?? return value%100;
? }

2)牌有了,我們開始設計一個發牌的函數

2.1)發一張牌,發牌函數相對比較簡單,直接從一幅牌的數組中取一張即可,注意的是,取完后應該將該牌刪除,以免下次再發一樣的牌。

/**
?? * 獲得牌組中一張隨機的牌值
?? * @param cards
?? * @return
?? *
?? */??
? public static function getRadomCard(cards:ArrayCollection):int{
?? if (cards.length==0) return -1;
?? var key:int=Math.round(Math.random()*(cards.length-1));
?? return cards.removeItemAt(key) as int;
? }

2.2)發一手牌,對斗地主來說,一手牌就是17張,最后的三張就是底牌,在發牌的時候,我們考慮的是給牌排序,這樣,發完牌后就自動從大到小排列。

/**
?? * 獲得一個隨機的一手牌。
?? * @param cards 全部牌
?? * @param num 牌的數量
?? * @param sort 是否排序 扎金花
?? * @return
?? *
?? */??
? public static function getRadomCards(cards:ArrayCollection,num:int,sort:Boolean=true):ArrayCollection{
?? var temp:ArrayCollection=new ArrayCollection();
?? do{
??? var cardvalue:int=getRadomCard(cards);
??? trace("生成牌:"+getDisplayName(cardvalue));
??? if (!sort)
???? temp.addItem(cardvalue);
??? else
??? {
???? var added:Boolean=false;
???? for (var i:int=0;i<temp.length;i++)
???? {
????? var value:int=temp.getItemAt(i) as int;
????? if (cardvalue%100>value%100)
????? {
?????? temp.addItemAt(cardvalue,i);
?????? added=true;
?????? break;
????? }
???? }
???? if (!added)
???? {
????? temp.addItemAt(cardvalue,i);
???? }
??? }
??? num--;
?? }while(num>0);
?? trace("排序后:"+temp.toString());
?? return temp;
? }

3)進入斗地主的邏輯,我們現在設計一個通用類叫 DoudizhuHelp.as。

總結

以上是生活随笔為你收集整理的扎金花 游戏开发细节与部分代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。