| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190 |
- // [[
- // 斗地主游戏逻辑
- // 2016.6
- // ]]
- // 扑克类型
- var CT_ERROR = 0; // 错误类型
- var CT_SINGLE = 1; // 单牌类型
- var CT_DOUBLE = 2; // 对牌类型
- var CT_THREE = 3; // 三条类型
- var CT_SINGLE_LINE = 4; // 单连类型
- var CT_DOUBLE_LINE = 5; // 对连类型
- var CT_THREE_LINE = 6; // 三连类型
- var CT_THREE_TAKE_ONE = 7; // 三带一单
- var CT_THREE_TAKE_TWO = 8; // 三带一对
- var CT_FOUR_TAKE_ONE = 9; // 四带两单
- var CT_FOUR_TAKE_TWO = 10; // 四带两对
- var CT_BOMB_CARD = 11; // 炸弹类型
- var CT_MISSILE_CARD = 12; // 火箭类型
- let GameLogicController = {
- _CardData: [0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, // 方块
- 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, // 梅花
- 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, // 红桃
- 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, // 黑桃
- 0x4E, 0x4F], // 小王,大王
- // 创建空扑克数组
- emptyCardList: function (count) {
- var tmp = [];
- for (var i = 1; i < count; i++) {
- tmp[i] = 0;
- }
- return tmp
- },
- // 获取整数
- ceil: function (a, b) {
- return Math.ceil(a / b) - 1;
- },
- // 获取牌值(1-15)
- GetCardValue: function (nCardData) {
- return nCardData % 16;
- },
- // 获取花色(1-5)
- GetCardColor: function (nCardData) {
- return nCardData & 0XF0;
- },
- // 逻辑牌值(大小王、2、A、K、Q)
- GetCardLogicValue: function (nCardData) {
- var nCardValue = this.GetCardValue(nCardData);
- var nCardColor = this.GetCardColor(nCardData);
- if (nCardColor == 0x40) {
- return nCardValue + 2;
- }
- return (0 < nCardValue && nCardValue <= 2) ? (nCardValue + 13) : nCardValue;
- },
- // // 获取牌序 0x4F大王 0x4E小王 nil牌背
- // GetCardIndex: function(nCardData) {
- // if (nCardData == 0x4E) {
- // return 53;
- // } else if (nCardData == 0x4F) {
- // return 54;
- // } else if (nCardData == null) {
- // return 55;
- // }
- // var nCardValue = this.GetCardValue(nCardData);
- // var nCardColor = this.GetCardColor(nCardData);
- // nCardColor = nCardColor >> 4;
- // return nCardColor * 13 + nCardValue;
- // },
- //扑克排序
- SortCardList: function (cbCardData, cbCardCount, cbSortType) {
- var cbSortValue = [];
- for (var i = 0; i < cbCardCount; i++) {
- var value = this.GetCardLogicValue(cbCardData[i]);
- cbSortValue[i] = value;
- }
- if (cbSortType == 0) {//大小排序
- for (var i = 0; i < cbCardCount - 1; i++) {
- for (var j = 0; j < cbCardCount - 1; j++) {
- if ((cbSortValue[j] < cbSortValue[j + 1]) || (cbSortValue[j] == cbSortValue[j + 1] && cbCardData[j] < cbCardData[j + 1])) {
- var temp = cbSortValue[j];
- cbSortValue[j] = cbSortValue[j + 1];
- cbSortValue[j + 1] = temp;
- var temp2 = cbCardData[j];
- cbCardData[j] = cbCardData[j + 1];
- cbCardData[j + 1] = temp2;
- }
- }
- }
- }
- return cbCardData;
- },
- //分析有序扑克
- AnalysebCardData: function (cbCardData, cbCardCount) {
- //相同个数
- var cbBlockCount = [0, 0, 0, 0, 0];
- //相同的牌
- var cbCardDatas = [[], [], [], [], []];
- var i = 0;
- while (i < cbCardCount) {
- var cbSameCount = 1;
- var cbLogicValue = this.GetCardLogicValue(cbCardData[i]);
- var j = i + 1;
- while (j < cbCardCount) {
- var cbLogicValue2 = this.GetCardLogicValue(cbCardData[j]);
- if (cbLogicValue != cbLogicValue2) {
- break;
- }
- cbSameCount = cbSameCount + 1;
- j = j + 1;
- }
- if (cbSameCount > 4) {
- cc.log("这儿有错误");
- return;
- }
- cbBlockCount[cbSameCount] = cbBlockCount[cbSameCount] + 1;
- var index = cbBlockCount[cbSameCount] - 1;
- for (var k = 1; k <= cbSameCount; k++) {
- cbCardDatas[cbSameCount][index * cbSameCount + k] = cbCardData[i + k - 1];
- }
- i = i + cbSameCount;
- }
- //分析结构
- var tagAnalyseResult = [0, cbBlockCount, cbCardDatas];
- return tagAnalyseResult;
- },
- //获取类型
- GetCardType: function (cbCardData, cbCardCount) {
- cbCardData = this.SortCardList(cbCardData, cbCardCount, 0);
- //简单牌型
- if (cbCardCount == 0) { //空牌
- return CT_ERROR;
- } else if (cbCardCount == 1) { //单牌
- return CT_SINGLE;
- } else if (cbCardCount == 2) { //对牌火箭
- if (cbCardData[0] == 0x4F && cbCardData[1] == 0x4E) {
- return CT_MISSILE_CARD;
- }
- if (this.GetCardLogicValue(cbCardData[0]) == this.GetCardLogicValue(cbCardData[1])) {
- return CT_DOUBLE;
- }
- }
- var tagAnalyseResult = {};
- tagAnalyseResult = this.AnalysebCardData(cbCardData, cbCardCount);
- //四牌判断
- if (tagAnalyseResult[1][4] > 0) {
- if (tagAnalyseResult[1][4] == 1 && cbCardCount == 4) {
- return CT_BOMB_CARD;
- }
- if (tagAnalyseResult[1][4] == 1 && cbCardCount == 6) {
- return CT_FOUR_TAKE_ONE;
- }
- if ((tagAnalyseResult[1][4] == 1 && cbCardCount == 8) && tagAnalyseResult[1][2] == 2) {
- return CT_FOUR_TAKE_TWO;
- }
- return CT_ERROR;
- }
- //三牌判断
- if (tagAnalyseResult[1][3] > 0) {
- if (tagAnalyseResult[1][3] > 1) {
- var cbCard = tagAnalyseResult[2][3][1];
- var cbFirstLogicValue = this.GetCardLogicValue(cbCard);
- if (cbFirstLogicValue >= 15) {
- return CT_ERROR;
- }
- for (var i = 2; i <= tagAnalyseResult[1][3]; i++) {
- var cbCard = tagAnalyseResult[2][3][(i - 1) * 3 + 1];
- var cbNextLogicValue = this.GetCardLogicValue(cbCard);
- if (cbFirstLogicValue != cbNextLogicValue + i - 1) {
- return CT_ERROR;
- }
- }
- } else if (cbCardCount == 3) {
- return CT_THREE;
- }
- if (tagAnalyseResult[1][3] * 3 == cbCardCount) {
- return CT_THREE_LINE;
- }
- if (tagAnalyseResult[1][3] * 4 == cbCardCount) {
- return CT_THREE_TAKE_ONE;
- }
- if (tagAnalyseResult[1][3] * 5 == cbCardCount && tagAnalyseResult[1][2] == tagAnalyseResult[1][3]) {
- return CT_THREE_TAKE_TWO;
- }
- return CT_ERROR;
- }
- //两张判断
- if (tagAnalyseResult[1][2] >= 3) {
- var cbCard = tagAnalyseResult[2][2][1];
- var cbFirstLogicValue = this.GetCardLogicValue(cbCard);
- if (cbFirstLogicValue >= 15) {
- return CT_ERROR;
- }
- for (var i = 2; i <= tagAnalyseResult[1][2]; i++) {
- var cbCard = tagAnalyseResult[2][2][(i - 1) * 2 + 1];
- var cbNextLogicValue = this.GetCardLogicValue(cbCard);
- if (cbFirstLogicValue != cbNextLogicValue + i - 1) {
- return CT_ERROR;
- }
- }
- if (tagAnalyseResult[1][2] * 2 == cbCardCount) {
- return CT_DOUBLE_LINE;
- }
- return CT_ERROR;
- }
- //单张判断
- if (tagAnalyseResult[1][1] >= 5 && tagAnalyseResult[1][1] == cbCardCount) {
- var cbCard = tagAnalyseResult[2][1][1];
- var cbFirstLogicValue = this.GetCardLogicValue(cbCard);
- if (cbFirstLogicValue >= 15) {
- return CT_ERROR;
- }
- for (var i = 2; i <= tagAnalyseResult[1][1]; i++) {
- var cbCard = tagAnalyseResult[2][1][i];
- var cbNextLogicValue = this.GetCardLogicValue(cbCard);
- if (cbFirstLogicValue != cbNextLogicValue + i - 1) {
- return CT_ERROR;
- }
- }
- return CT_SINGLE_LINE;
- }
- return CT_ERROR;
- },
- //对比扑克
- CompareCard: function (cbFirstCard, cbNextCard) {
- var cbFirstCount = cbFirstCard.length;
- var cbNextCount = cbNextCard.length;
- var cbNextType = this.GetCardType(cbNextCard, cbNextCount);
- var cbFirstType = this.GetCardType(cbFirstCard, cbFirstCount);
- if (cbNextType == CT_ERROR) {
- return false;
- }
- if (cbFirstCount == 0 && cbNextType != CT_ERROR) {
- return true;
- }
- if (cbNextType == CT_MISSILE_CARD) {
- return true;
- }
- if (cbFirstType != CT_BOMB_CARD && cbNextType == CT_BOMB_CARD) {
- return true;
- }
- if (cbFirstType == CT_BOMB_CARD && cbNextType != CT_BOMB_CARD) {
- return false;
- }
- if (cbFirstType != cbNextType || cbFirstCount != cbNextCount) {
- return false;
- }
- //开始对比
- if ((cbNextType == CT_SINGLE) || (cbNextType == CT_DOUBLE) || (cbNextType == CT_THREE) || (cbNextType == CT_SINGLE_LINE) || (cbNextType == CT_DOUBLE_LINE) || (cbNextType == CT_THREE_LINE) || (cbNextType == CT_BOMB_CARD)) {
- var cbNextLogicValue = this.GetCardLogicValue(cbNextCard[0]);
- var cbFirstLogicValue = this.GetCardLogicValue(cbFirstCard[0]);
- return cbNextLogicValue > cbFirstLogicValue;
- } else if ((cbNextType == CT_THREE_TAKE_ONE) || (cbNextType == CT_THREE_TAKE_TWO)) {
- var nextResult = this.AnalysebCardData(cbNextCard, cbNextCount);
- var firstResult = this.AnalysebCardData(cbFirstCard, cbFirstCount);
- var cbNextLogicValue = this.GetCardLogicValue(nextResult[2][3][1]);
- var cbFirstLogicValue = this.GetCardLogicValue(firstResult[2][3][1]);
- return cbNextLogicValue > cbFirstLogicValue;
- } else if ((cbNextType == CT_FOUR_TAKE_ONE) || (cbNextType == CT_FOUR_TAKE_TWO)) {
- var nextResult = this.AnalysebCardData(cbNextCard, cbNextCount);
- var firstResult = this.AnalysebCardData(cbFirstCard, cbFirstCount);
- var cbNextLogicValue = this.GetCardLogicValue(nextResult[2][4][1]);
- var cbFirstLogicValue = this.GetCardLogicValue(firstResult[2][4][1]);
- return cbNextLogicValue > cbFirstLogicValue;
- }
- return false;
- },
- //出牌搜索
- SearchOutCard: function (cbHandCardData, cbTurnCardData) {
- var cbHandCardCount = cbHandCardData.length;
- var cbTurnCardCount = cbTurnCardData.length ? cbTurnCardData.length : 0;
- //结果数目
- var cbResultCount = 1;
- //扑克数目
- var cbResultCardCount = [];
- //结果扑克
- var cbResultCard = [];
- //搜索结果
- var tagSearchCardResult = [null, cbResultCount - 1, cbResultCardCount, cbResultCard];
- //排序扑克
- var cbCardData = this.SortCardList(cbHandCardData, cbHandCardCount, 0);
- var cbCardCount = cbHandCardCount;
- //出牌分析
- var cbTurnOutType = this.GetCardType(cbTurnCardData, cbTurnCardCount);
- if (cbTurnOutType == CT_ERROR) {//错误类型
- //cc.log("上家为空");
- //是否一手出完
- if (this.GetCardType(cbCardData, cbCardCount) != CT_ERROR) {
- cbResultCardCount[cbResultCount] = cbCardCount;
- cbResultCard[cbResultCount] = [];
- cbResultCard[cbResultCount] = [null].concat(cbCardData);
- cbResultCount = cbResultCount + 1;
- tagSearchCardResult[2] = cbResultCardCount;
- tagSearchCardResult[3] = cbResultCard;
- }
- //如果最小牌不是单牌,则提取
- var cbSameCount = 1;
- if (cbCardCount > 1 && (this.GetCardLogicValue(cbCardData[cbCardCount]) == this.GetCardLogicValue(cbCardData[cbCardCount - 1]))) {
- cbSameCount = 2;
- cbResultCard[cbResultCount] = [];
- cbResultCard[cbResultCount][1] = cbCardData[cbCardCount];
- var cbCardValue = this.GetCardLogicValue(cbCardData[cbCardCount]);
- var i = cbCardCount - 1;
- while (i >= 1) {
- if (this.GetCardLogicValue(cbCardData[i]) == cbCardValue) {
- cbResultCard[cbResultCount][cbSameCount] = cbCardData[i];
- cbSameCount = cbSameCount + 1;
- }
- i = i - 1;
- }
- cbResultCardCount[cbResultCount] = cbSameCount - 1;
- cbResultCount = cbResultCount + 1;
- tagSearchCardResult[2] = cbResultCardCount;
- tagSearchCardResult[3] = cbResultCard;
- }
- // //单牌
- var cbTmpCount = 1;
- if (cbSameCount != 2) {
- //cc.log("单牌Pan");
- var tagSearchCardResult1 = this.SearchSameCard(cbCardData, cbCardCount, 0, 1);
- cbTmpCount = tagSearchCardResult1[1];
- if (cbTmpCount > 0) {
- cbResultCardCount[cbResultCount] = tagSearchCardResult1[2][1];
- cbResultCard[cbResultCount] = [];
- cbResultCard[cbResultCount] = tagSearchCardResult1[3][1];
- cbResultCount = cbResultCount + 1;
- tagSearchCardResult[2] = cbResultCardCount;
- tagSearchCardResult[3] = cbResultCard;
- }
- }
- //对牌
- if (cbSameCount != 3) {
- var tagSearchCardResult1 = this.SearchSameCard(cbCardData, cbCardCount, 0, 2);
- cbTmpCount = tagSearchCardResult1[1];
- if (cbTmpCount > 0) {
- cbResultCardCount[cbResultCount] = tagSearchCardResult1[2][1];
- cbResultCard[cbResultCount] = [];
- cbResultCard[cbResultCount] = tagSearchCardResult1[3][1];
- cbResultCount = cbResultCount + 1;
- tagSearchCardResult[2] = cbResultCardCount;
- tagSearchCardResult[3] = cbResultCard;
- }
- }
- //三条
- if (cbSameCount != 4) {
- var tagSearchCardResult1 = this.SearchSameCard(cbCardData, cbCardCount, 0, 3);
- cbTmpCount = tagSearchCardResult1[1];
- if (cbTmpCount > 0) {
- cbResultCardCount[cbResultCount] = tagSearchCardResult1[2][1];
- cbResultCard[cbResultCount] = [];
- cbResultCard[cbResultCount] = tagSearchCardResult1[3][1];
- cbResultCount = cbResultCount + 1;
- tagSearchCardResult[2] = cbResultCardCount;
- tagSearchCardResult[3] = cbResultCard;
- }
- }
- //三带一单
- var tagSearchCardResult2 = this.SearchTakeCardType(cbCardData, cbCardCount, 0, 3, 1);
- cbTmpCount = tagSearchCardResult2[1];
- if (cbTmpCount > 0) {
- cbResultCardCount[cbResultCount] = tagSearchCardResult2[2][1];
- cbResultCard[cbResultCount] = [];
- cbResultCard[cbResultCount] = tagSearchCardResult2[3][1];
- cbResultCount = cbResultCount + 1;
- tagSearchCardResult[2] = cbResultCardCount;
- tagSearchCardResult[3] = cbResultCard;
- }
- //三带一对
- var tagSearchCardResult3 = this.SearchTakeCardType(cbCardData, cbCardCount, 0, 3, 2);
- cbTmpCount = tagSearchCardResult3[1];
- if (cbTmpCount > 0) {
- cbResultCardCount[cbResultCount] = tagSearchCardResult3[2][1];
- cbResultCard[cbResultCount] = [];
- cbResultCard[cbResultCount] = tagSearchCardResult3[3][1];
- cbResultCount = cbResultCount + 1;
- tagSearchCardResult[2] = cbResultCardCount;
- tagSearchCardResult[3] = cbResultCard;
- }
- //单连
- var tagSearchCardResult4 = this.SearchLineCardType(cbCardData, cbCardCount, 0, 1, 0);
- cbTmpCount = tagSearchCardResult4[1];
- if (cbTmpCount > 0) {
- cbResultCardCount[cbResultCount] = tagSearchCardResult4[2][1];
- cbResultCard[cbResultCount] = [];
- cbResultCard[cbResultCount] = tagSearchCardResult4[3][1];
- cbResultCount = cbResultCount + 1;
- tagSearchCardResult[2] = cbResultCardCount;
- tagSearchCardResult[3] = cbResultCard;
- }
- //连对
- var tagSearchCardResult5 = this.SearchLineCardType(cbCardData, cbCardCount, 0, 2, 0);
- cbTmpCount = tagSearchCardResult5[1];
- if (cbTmpCount > 0) {
- cbResultCardCount[cbResultCount] = tagSearchCardResult5[2][1];
- cbResultCard[cbResultCount] = [];
- cbResultCard[cbResultCount] = tagSearchCardResult5[3][1];
- cbResultCount = cbResultCount + 1;
- tagSearchCardResult[2] = cbResultCardCount;
- tagSearchCardResult[3] = cbResultCard;
- }
- //三连
- var tagSearchCardResult6 = this.SearchLineCardType(cbCardData, cbCardCount, 0, 3, 0);
- cbTmpCount = tagSearchCardResult6[1];
- if (cbTmpCount > 0) {
- cbResultCardCount[cbResultCount] = tagSearchCardResult6[2][1];
- cbResultCard[cbResultCount] = [];
- cbResultCard[cbResultCount] = tagSearchCardResult6[3][1];
- cbResultCount = cbResultCount + 1;
- tagSearchCardResult[2] = cbResultCardCount;
- tagSearchCardResult[3] = cbResultCard;
- }
- //飞机
- var tagSearchCardResult7 = this.SearchThreeTwoLine(cbCardData, cbCardCount);
- cbTmpCount = tagSearchCardResult7[1];
- if (cbTmpCount > 0) {
- cbResultCardCount[cbResultCount] = tagSearchCardResult7[2][1];
- cbResultCard[cbResultCount] = [];
- cbResultCard[cbResultCount] = tagSearchCardResult7[3][1];
- cbResultCount = cbResultCount + 1;
- tagSearchCardResult[2] = cbResultCardCount;
- tagSearchCardResult[3] = cbResultCard;
- }
- //炸弹
- if (cbSameCount != 5) {
- var tagSearchCardResult1 = this.SearchSameCard(cbCardData, cbCardCount, 0, 4);
- cbTmpCount = tagSearchCardResult1[1];
- if (cbTmpCount > 0) {
- cbResultCardCount[cbResultCount] = tagSearchCardResult1[2][1];
- cbResultCard[cbResultCount] = [];
- cbResultCard[cbResultCount] = tagSearchCardResult1[3][1];
- cbResultCount = cbResultCount + 1;
- tagSearchCardResult[2] = cbResultCardCount;
- tagSearchCardResult[3] = cbResultCard;
- }
- }
- //火箭
- if ((cbCardCount == 2) && (cbCardData[0] == 0x4F && cbCardData[1] == 0x4E)) {
- cbResultCardCount[cbResultCount] = 2;
- cbResultCard[cbResultCount] = [];
- cbResultCard[cbResultCount] = [0, cbCardData[0], cbCardData[1]];
- cbResultCount = cbResultCount + 1;
- tagSearchCardResult[2] = cbResultCardCount;
- tagSearchCardResult[3] = cbResultCard;
- }
- tagSearchCardResult[1] = cbResultCount - 1;
- return tagSearchCardResult;
- } else if (cbTurnOutType == CT_SINGLE || cbTurnOutType == CT_DOUBLE || cbTurnOutType == CT_THREE) {
- //单牌、对牌、三条
- var cbReferCard = cbTurnCardData[0];
- var cbSameCount = 1;
- if (cbTurnOutType == CT_DOUBLE) {
- cbSameCount = 2;
- } else if (cbTurnOutType == CT_THREE) {
- cbSameCount = 3;
- }
- var tagSearchCardResult21 = this.SearchSameCard(cbCardData, cbCardCount, cbReferCard, cbSameCount);
- cbResultCount = tagSearchCardResult21[1];
- cbResultCount = cbResultCount + 1;
- cbResultCardCount = tagSearchCardResult21[2];
- tagSearchCardResult[2] = cbResultCardCount;
- cbResultCard = tagSearchCardResult21[3];
- tagSearchCardResult[3] = cbResultCard;
- tagSearchCardResult[1] = cbResultCount - 1;
- } else if (cbTurnOutType == CT_SINGLE_LINE || cbTurnOutType == CT_DOUBLE_LINE || cbTurnOutType == CT_THREE_LINE) {
- //单连、对连、三连
- var cbBlockCount = 1;
- if (cbTurnOutType == CT_DOUBLE_LINE) {
- cbBlockCount = 2;
- } else if (cbTurnOutType == CT_THREE_LINE) {
- cbBlockCount = 3;
- }
- var cbLineCount = cbTurnCardCount / cbBlockCount;
- var tagSearchCardResult31 = this.SearchLineCardType(cbCardData, cbCardCount, cbTurnCardData[0], cbBlockCount, cbLineCount);
- cbResultCount = tagSearchCardResult31[1];
- cbResultCount = cbResultCount + 1;
- cbResultCardCount = tagSearchCardResult31[2];
- tagSearchCardResult[2] = cbResultCardCount;
- cbResultCard = tagSearchCardResult31[3];
- tagSearchCardResult[3] = cbResultCard;
- tagSearchCardResult[1] = cbResultCount - 1;
- } else if (cbTurnOutType == CT_THREE_TAKE_ONE || cbTurnOutType == CT_THREE_TAKE_TWO) {
- //三带一单、三带一对
- if (cbCardCount >= cbTurnCardCount) {
- if (cbTurnCardCount == 4 || cbTurnCardCount == 5) {
- var cbTakeCardCount = (cbTurnOutType == CT_THREE_TAKE_ONE) && 1 || 2;
- var tagSearchCardResult41 = this.SearchTakeCardType(cbCardData, cbCardCount, cbTurnCardData[2], 3, cbTakeCardCount);
- cbResultCount = tagSearchCardResult41[1];
- cbResultCount = cbResultCount + 1;
- cbResultCardCount = tagSearchCardResult41[2];
- tagSearchCardResult[2] = cbResultCardCount;
- cbResultCard = tagSearchCardResult41[3];
- tagSearchCardResult[3] = cbResultCard;
- tagSearchCardResult[1] = cbResultCount - 1;
- } else {
- var cbBlockCount = 3;
- var cbLineCount = cbTurnCardCount / (cbTurnOutType == CT_THREE_TAKE_ONE && 4 || 5);
- var cbTakeCardCount = cbTurnOutType == CT_THREE_TAKE_ONE && 1 || 2;
- //搜索连牌
- var cbTmpTurnCard = cbTurnCardData;
- cbTmpTurnCard = this.SortOutCardList(cbTmpTurnCard, cbTurnCardCount);
- var tmpSearchResult = this.SearchLineCardType(cbCardData, cbCardCount, cbTmpTurnCard[1], cbBlockCount, cbLineCount);
- var cbResultCount2 = tmpSearchResult[1];
- //提取带牌
- for (var i = 1; i <= cbResultCount2; i++) {
- var cbResultIndex = cbResultCount2 - i + 1;
- var cbTmpCardData = [];
- for (var j = 1; j <= cbCardData.length; j++) {
- cbTmpCardData[j] = cbCardData[j];
- }
- var cbTmpCardCount = cbCardCount;
- //删除连牌
- var removeResult = this.RemoveCard(tmpSearchResult[3][cbResultIndex], tmpSearchResult[2][cbResultIndex], cbTmpCardData, cbTmpCardCount);
- cbTmpCardData = removeResult[2];
- cbTmpCardCount = cbTmpCardCount - tmpSearchResult[2][cbResultIndex];
- //分析牌
- var TmpResult = this.AnalysebCardData(cbTmpCardData, cbTmpCardCount);
- //提取牌
- var cbDistillCard = [];
- var cbDistillCount = 0;
- var j = cbTakeCardCount;
- while (j <= 4) {
- if (TmpResult[1][j] > 0) {
- if (j == cbTakeCardCount && TmpResult[1][j] >= cbLineCount) {
- var cbTmpBlockCount = TmpResult[1][j];
- for (var k = 1; k <= j * cbLineCount; k++) {
- cbDistillCard[k] = TmpResult[2][j][(cbTmpBlockCount - cbLineCount) * j + k];
- }
- cbDistillCount = j * cbLineCount;
- break;
- } else {
- var k = 1;
- while (k <= TmpResult[1][j]) {
- var cbTmpBlockCount = TmpResult[1][j];
- for (var l = 1; l <= cbTakeCardCount; l++) {
- cbDistillCard[cbDistillCount + l] = TmpResult[2][j][(cbTmpBlockCount - k) * j + l];
- }
- cbDistillCount = cbDistillCount + cbTakeCardCount;
- //提取完成
- if (cbDistillCount == cbTakeCardCount * cbLineCount) {
- break;
- }
- k = k + 1;
- }
- }
- }
- //提取完成
- if (cbDistillCount == cbTakeCardCount * cbLineCount) {
- break;
- }
- j = j + 1;
- }
- //提取完成
- if (cbDistillCount == cbTakeCardCount * cbLineCount) {//复制带牌
- var cbCount = tmpSearchResult[2][cbResultIndex];
- for (var n = 1; n <= cbDistillCount; n++) {
- tmpSearchResult[3][cbResultIndex][cbCount + n] = cbDistillCard[n];
- }
- tmpSearchResult[2][cbResultIndex] = tmpSearchResult[2][cbResultIndex] + cbDistillCount;
- } else {//否则删除连牌
- tmpSearchResult[2][cbResultIndex] = 0;
- }
- }
- //整理组合
- tmpSearchResult[1] = cbResultCount2;
- for (var i = 1; i <= tmpSearchResult[1]; i++) {
- if (tmpSearchResult[2][i] != 0) {
- tagSearchCardResult[2][cbResultCount] = tmpSearchResult[2][i];
- tagSearchCardResult[3][cbResultCount] = tmpSearchResult[3][i];
- cbResultCount = cbResultCount + 1;
- }
- }
- tagSearchCardResult[1] = cbResultCount - 1;
- }
- }
- } else if (cbTurnOutType == CT_FOUR_TAKE_ONE || cbTurnOutType == CT_FOUR_TAKE_TWO) {
- //四带两单、四带两双
- var cbTakeCardCount = (cbTurnOutType == CT_FOUR_TAKE_ONE) && 1 || 2;
- var cbTmpTurnCard = this.SortOutCardList(cbTurnCardData, cbTurnCardCount);
- var tagSearchCardResult51 = this.SearchTakeCardType(cbCardData, cbCardCount, cbTmpTurnCard[1], 4, cbTakeCardCount);
- cbResultCount = tagSearchCardResult51[1];
- cbResultCount = cbResultCount + 1;
- cbResultCardCount = tagSearchCardResult51[2];
- tagSearchCardResult[2] = cbResultCardCount;
- cbResultCard = tagSearchCardResult51[3];
- tagSearchCardResult[3] = cbResultCard;
- tagSearchCardResult[1] = cbResultCount - 1;
- }
- //搜索炸弹
- if (cbCardCount >= 4 && cbTurnOutType != CT_MISSILE_CARD) {
- var cbReferCard = 0;
- if (cbTurnOutType == CT_BOMB_CARD) {
- cbReferCard = cbTurnCardData[0];
- }
- //搜索炸弹
- var tagSearchCardResult61 = this.SearchSameCard(cbCardData, cbCardCount, cbReferCard, 4);
- var cbTmpResultCount = tagSearchCardResult61[1];
- for (var i = 1; i <= cbTmpResultCount; i++) {
- cbResultCardCount[cbResultCount] = tagSearchCardResult61[2][i];
- tagSearchCardResult[2] = cbResultCardCount;
- cbResultCard[cbResultCount] = tagSearchCardResult61[3][i];
- tagSearchCardResult[3] = cbResultCard;
- cbResultCount = cbResultCount + 1;
- }
- tagSearchCardResult[1] = cbResultCount - 1;
- }
- //搜索火箭
- if ((cbTurnOutType != CT_MISSILE_CARD) && (cbCardCount >= 2) && (cbCardData[0] == 0x4F && cbCardData[1] == 0x4E)) {
- cbResultCardCount[cbResultCount] = 2;
- cbResultCard[cbResultCount] = [0, cbCardData[0], cbCardData[1]];
- cbResultCount = cbResultCount + 1;
- tagSearchCardResult[2] = cbResultCardCount;
- tagSearchCardResult[3] = cbResultCard;
- tagSearchCardResult[1] = cbResultCount - 1;
- }
- return tagSearchCardResult;
- },
- //同牌搜索
- SearchSameCard: function (cbHandCardData, cbHandCardCount, cbReferCard, cbSameCardCount) {
- //结果数目
- var cbResultCount = 1;
- //扑克数目
- var cbResultCardCount = [];
- //结果扑克
- var cbResultCard = [];
- //搜索结果
- var tagSearchCardResult = [null, cbResultCount - 1, cbResultCardCount, cbResultCard];
- //排序扑克
- var cbCardData = this.SortCardList(cbHandCardData, cbHandCardCount, 0);
- var cbCardCount = cbHandCardCount;
- //分析结构
- var tagAnalyseResult = this.AnalysebCardData(cbCardData, cbCardCount);
- var cbReferLogicValue = (cbReferCard == 0 && 0 || this.GetCardLogicValue(cbReferCard));
- var cbBlockIndex = cbSameCardCount;
- while (cbBlockIndex <= 4) {
- for (var i = 1; i <= tagAnalyseResult[1][cbBlockIndex]; i++) {
- var cbIndex = (tagAnalyseResult[1][cbBlockIndex] - i) * cbBlockIndex + 1;
- var cbNowLogicValue = this.GetCardLogicValue(tagAnalyseResult[2][cbBlockIndex][cbIndex]);
- if (cbNowLogicValue > cbReferLogicValue) {
- cbResultCardCount[cbResultCount] = cbSameCardCount;
- tagSearchCardResult[2] = cbResultCardCount;
- cbResultCard[cbResultCount] = [];
- cbResultCard[cbResultCount][1] = tagAnalyseResult[2][cbBlockIndex][cbIndex];
- for (var j = 2; j <= cbBlockIndex; j++) {
- cbResultCard[cbResultCount][j] = tagAnalyseResult[2][cbBlockIndex][cbIndex + j - 1];
- } //此处修改
- tagSearchCardResult[3] = cbResultCard;
- cbResultCount = cbResultCount + 1;
- }
- }
- cbBlockIndex = cbBlockIndex + 1;
- }
- tagSearchCardResult[1] = cbResultCount - 1;
- return tagSearchCardResult;
- },
- //带牌类型搜索(三带一,四带一等)
- SearchTakeCardType: function (cbHandCardData, cbHandCardCount, cbReferCard, cbSameCount, cbTakeCardCount) {
- //结果数目
- var cbResultCount = 1;
- //扑克数目
- var cbResultCardCount = [];
- //结果扑克
- var cbResultCard = [];
- //搜索结果
- var tagSearchCardResult = [null, cbResultCount - 1, cbResultCardCount, cbResultCard];
- if (cbSameCount != 3 && cbSameCount != 4) {
- return tagSearchCardResult;
- }
- if (cbTakeCardCount != 1 && cbTakeCardCount != 2) {
- return tagSearchCardResult;
- }
- if ((cbSameCount == 4) && (cbHandCardCount < cbSameCount + cbTakeCardCount * 2 || cbHandCardCount < cbSameCount + cbTakeCardCount)) {
- return tagSearchCardResult;
- }
- //排序扑克
- var cbCardData = this.SortCardList(cbHandCardData, cbHandCardCount, 0);
- var cbCardCount = cbHandCardCount;
- var sameCardResult = [];
- sameCardResult = this.SearchSameCard(cbCardData, cbCardCount, cbReferCard, cbSameCount);
- var cbSameCardResultCount = sameCardResult[1];
- if (cbSameCardResultCount > 0) {
- //分析结构
- var tagAnalyseResult = this.AnalysebCardData(cbCardData, cbCardCount);
- //需要牌数
- var cbNeedCount = cbSameCount + cbTakeCardCount;
- if (cbSameCount == 4) {
- cbNeedCount = cbNeedCount + cbTakeCardCount;
- }
- //提取带牌
- for (var i = 1; i <= cbSameCardResultCount; i++) {
- var bMere = false;
- var j = cbTakeCardCount;
- while (j <= 4) {
- var k = 1;
- while (k <= tagAnalyseResult[1][j]) {
- //从小到大
- var cbIndex = (tagAnalyseResult[1][j] - k) * j + 1;
- if (this.GetCardLogicValue(sameCardResult[3][i][1]) != this.GetCardLogicValue(tagAnalyseResult[2][j][cbIndex])) {
- //复制带牌
- var cbCount = sameCardResult[2][i];
- for (var l = 1; l <= cbTakeCardCount; l++) {
- sameCardResult[3][i][cbCount + l] = tagAnalyseResult[2][j][cbIndex + l - 1];
- }
- sameCardResult[2][i] = sameCardResult[2][i] + cbTakeCardCount;
- if (sameCardResult[2][i] >= cbNeedCount) {
- //复制结果
- cbResultCardCount[cbResultCount] = sameCardResult[2][i];
- tagSearchCardResult[2] = cbResultCardCount;
- cbResultCard[cbResultCount] = [];
- cbResultCard[cbResultCount] = sameCardResult[3][i];
- tagSearchCardResult[3] = cbResultCard;
- cbResultCount = cbResultCount + 1;
- tagSearchCardResult[1] = cbResultCount - 1;
- bMere = true;
- //下一组合
- break;
- }
- }
- k = k + 1;
- }
- if (bMere == true) {
- break;
- }
- j = j + 1;
- }
- }
- }
- tagSearchCardResult[1] = cbResultCount - 1;
- return tagSearchCardResult;
- },
- //连牌搜索
- SearchLineCardType: function (cbHandCardData, cbHandCardCount, cbReferCard, cbBlockCount, cbLineCount) {
- //结果数目
- var cbResultCount = 1;
- //扑克数目
- var cbResultCardCount = [];
- //结果扑克
- var cbResultCard = [];
- //搜索结果
- var tagSearchCardResult = [null, cbResultCount - 1, cbResultCardCount, cbResultCard];
- //排序扑克
- var cbCardData = this.SortCardList(cbHandCardData, cbHandCardCount, 0);
- var cbCardCount = cbHandCardCount;
- //连牌最少数
- var cbLessLineCount = 0;
- if (cbLineCount == 0) {
- if (cbBlockCount == 1) {
- cbLessLineCount = 5;
- } else if (cbBlockCount == 2) {
- cbLessLineCount = 3;
- } else {
- cbLessLineCount = 2;
- }
- } else {
- cbLessLineCount = cbLineCount;
- }
- //cc.log("连牌最少数 " .. cbLessLineCount)
- var cbReferIndex = 3;
- if (cbReferCard != 0) {
- if ((this.GetCardLogicValue(cbReferCard) - cbLessLineCount) >= 2) {
- cbReferIndex = this.GetCardLogicValue(cbReferCard) - cbLessLineCount + 1 + 1;
- }
- }
- //超过A
- if (cbReferIndex + cbLessLineCount > 15) {
- return tagSearchCardResult;
- }
- //长度判断
- if (cbHandCardCount < cbLessLineCount * cbBlockCount) {
- return tagSearchCardResult;
- }
- //cc.log("搜索顺子开始点 " .. cbReferIndex);
- var Distributing = this.AnalysebDistributing(cbCardData, cbCardCount);
- //搜索顺子
- var cbTmpLinkCount = 0;
- var cbValueIndex = cbReferIndex;
- var flag = false;
- while (cbValueIndex <= 13) {
- if (cbResultCard[cbResultCount] == null) {
- cbResultCard[cbResultCount] = [];
- }
- if (Distributing[2][cbValueIndex][6] < cbBlockCount) {
- if (cbTmpLinkCount < cbLessLineCount) {
- cbTmpLinkCount = 0;
- flag = false;
- } else {
- cbValueIndex = cbValueIndex - 1;
- flag = true;
- }
- } else {
- cbTmpLinkCount = cbTmpLinkCount + 1;
- if (cbLineCount == 0) {
- flag = false;
- } else {
- flag = true;
- }
- }
- if (flag == true) {
- flag = false;
- if (cbTmpLinkCount >= cbLessLineCount) {
- //复制扑克
- var cbCount = 0;
- var cbIndex = (cbValueIndex - cbTmpLinkCount + 1);
- while (cbIndex <= cbValueIndex) {
- var cbTmpCount = 0;
- var cbColorIndex = 1;
- while (cbColorIndex <= 4) {//在四色中取一个
- var cbColorCount = 1;
- while (cbColorCount <= Distributing[2][cbIndex][5 - cbColorIndex]) {
- cbCount = cbCount + 1;
- cbResultCard[cbResultCount][cbCount] = this.MakeCardData(cbIndex, 5 - cbColorIndex - 1);
- tagSearchCardResult[3][cbResultCount] = cbResultCard[cbResultCount];
- cbTmpCount = cbTmpCount + 1;
- if (cbTmpCount == cbBlockCount) {
- break;
- }
- cbColorCount = cbColorCount + 1;
- }
- if (cbTmpCount == cbBlockCount) {
- break;
- }
- cbColorIndex = cbColorIndex + 1;
- }
- cbIndex = cbIndex + 1;
- }
- tagSearchCardResult[2][cbResultCount] = cbCount;
- cbResultCount = cbResultCount + 1;
- if (cbLineCount != 0) {
- cbTmpLinkCount = cbTmpLinkCount - 1;
- } else {
- cbTmpLinkCount = 0;
- }
- }
- }
- cbValueIndex = cbValueIndex + 1;
- }
- //特殊顺子(寻找A)
- if (cbTmpLinkCount >= cbLessLineCount - 1 && cbValueIndex == 14) {
- //cc.log("特殊顺子(寻找A)");
- if ((Distributing[2][1][6] >= cbBlockCount) || (cbTmpLinkCount >= cbLessLineCount)) {
- if (cbResultCard[cbResultCount] == null) {
- cbResultCard[cbResultCount] = {};
- }
- //复制扑克
- var cbCount = 0;
- var cbIndex = (cbValueIndex - cbTmpLinkCount);
- while (cbIndex <= 13) {
- var cbTmpCount = 0;
- var cbColorIndex = 1;
- while (cbColorIndex <= 4) {//在四色中取一个
- var cbColorCount = 1;
- while (cbColorCount <= Distributing[2][cbIndex][5 - cbColorIndex]) {
- cbCount = cbCount + 1;
- cbResultCard[cbResultCount][cbCount] = this.MakeCardData(cbIndex, 5 - cbColorIndex - 1);
- tagSearchCardResult[3][cbResultCount] = cbResultCard[cbResultCount];
- cbTmpCount = cbTmpCount + 1;
- if (cbTmpCount == cbBlockCount) {
- break;
- }
- cbColorCount = cbColorCount + 1;
- }
- if (cbTmpCount == cbBlockCount) {
- break;
- }
- cbColorIndex = cbColorIndex + 1;
- }
- cbIndex = cbIndex + 1;
- }
- //复制A
- if (Distributing[2][1][6] >= cbBlockCount) {
- var cbTmpCount = 0;
- var cbColorIndex = 1;
- while (cbColorIndex <= 4) {//在四色中取一个
- var cbColorCount = 1;
- while (cbColorCount <= Distributing[2][1][5 - cbColorIndex]) {
- cbCount = cbCount + 1;
- cbResultCard[cbResultCount][cbCount] = this.MakeCardData(1, 5 - cbColorIndex - 1);
- tagSearchCardResult[3][cbResultCount] = cbResultCard[cbResultCount];
- cbTmpCount = cbTmpCount + 1;
- if (cbTmpCount == cbBlockCount) {
- break;
- }
- cbColorCount = cbColorCount + 1;
- }
- if (cbTmpCount == cbBlockCount) {
- break;
- }
- cbColorIndex = cbColorIndex + 1;
- }
- }
- tagSearchCardResult[2][cbResultCount] = cbCount;
- cbResultCount = cbResultCount + 1;
- }
- }
- tagSearchCardResult[1] = cbResultCount - 1;
- return tagSearchCardResult;
- },
- //飞机搜索
- SearchThreeTwoLine: function (cbHandCardData, cbHandCardCount) {
- //cc.log("飞机搜索");
- //结果数目
- var cbSearchCount = 0;
- //扑克数目
- var cbResultCardCount = [];
- //结果扑克
- var cbResultCard = [];
- //搜索结果
- var tagSearchCardResult = [null, cbSearchCount, cbResultCardCount, cbResultCard];
- var tmpSingleWing = [null, cbSearchCount, cbResultCardCount, cbResultCard];
- var tmpDoubleWing = [null, cbSearchCount, cbResultCardCount, cbResultCard];
- var cbTmpResultCount = 0;
- //搜索连牌
- var tmpSearchResult = this.SearchLineCardType(cbHandCardData, cbHandCardCount, 0, 3, 0);
- cbTmpResultCount = tmpSearchResult[1];
- if (cbTmpResultCount > 0) {
- //提取带牌
- var i = 1;
- while (i <= cbTmpResultCount) {
- var flag = true;
- var cbTmpCardData = [];
- var cbTmpCardCount = cbHandCardCount;
- //不够牌
- if (cbHandCardCount - tmpSearchResult[2][i] < tmpSearchResult[2][i] / 3) {
- var cbNeedDelCount = 3;
- while ((cbHandCardCount + cbNeedDelCount - tmpSearchResult[2][i]) < (tmpSearchResult[2][i] - cbNeedDelCount) / 3) {
- cbNeedDelCount = cbNeedDelCount + 3;
- }
- //不够连牌
- if ((tmpSearchResult[2][i] - cbNeedDelCount) / 3 < 2) {
- flag = false;
- } else {
- flag = true;
- }
- if (flag == true) {
- //拆分连牌
- var removeResult = this.RemoveCard(tmpSearchResult[3][i], cbNeedDelCount, tmpSearchResult[3][i], tmpSearchResult[2][i]);
- tmpSearchResult[3][i] = removeResult[2];
- tmpSearchResult[2][i] = tmpSearchResult[2][i] - cbNeedDelCount;
- }
- }
- if (flag == true) {
- flag = false;
- //删除连牌
- for (var temp = 1; temp <= cbHandCardData.length; temp++) {
- cbTmpCardData[temp] = cbHandCardData[temp - 1];
- }
- var removeResult1 = this.RemoveCard(tmpSearchResult[3][i], tmpSearchResult[2][i], cbTmpCardData, cbTmpCardCount);
- cbTmpCardData = removeResult1[2];
- cbTmpCardCount = cbTmpCardCount - tmpSearchResult[2][i];
- //组合飞机
- var cbNeedCount = tmpSearchResult[2][i] / 3;
- var cbResultCount = tmpSingleWing[1] + 1;
- tmpSingleWing[3][cbResultCount] = tmpSearchResult[3][i];
- for (var j = 1; j <= cbNeedCount; j++) {
- tmpSingleWing[3][cbResultCount][tmpSearchResult[2][i] + j] = cbTmpCardData[cbTmpCardCount - cbNeedCount + j];
- }
- tmpSingleWing[2][i] = tmpSearchResult[2][i] + cbNeedCount;
- tmpSingleWing[1] = tmpSingleWing[1] + 1;
- var flag2 = true;
- //不够带翅膀
- if (cbTmpCardCount < tmpSearchResult[2][i] / 3 * 2) {
- var cbNeedDelCount = 3;
- while ((cbTmpCardCount + cbNeedDelCount - tmpSearchResult[2][i]) < (tmpSearchResult[2][i] - cbNeedDelCount) / 3 * 2) {
- cbNeedDelCount = cbNeedDelCount + 3;
- }
- //不够连牌
- if ((tmpSearchResult[2][i] - cbNeedDelCount) / 3 < 2) {
- flag2 = false;
- } else {
- flag2 = true;
- }
- if (flag2 == true) {
- //拆分连牌
- var removeResult = this.RemoveCard(tmpSearchResult[3][i], cbNeedDelCount, tmpSearchResult[3][i], tmpSearchResult[2][i]);
- tmpSearchResult[3][i] = removeResult[2];
- tmpSearchResult[2][i] = tmpSearchResult[2][i] - cbNeedDelCount;
- //重新删除连牌
- for (var temp = 1; temp <= cbHandCardData.length; temp++) {
- cbTmpCardData[temp] = cbHandCardData[temp];
- }
- var removeResult2 = this.RemoveCard(tmpSearchResult[3][i], tmpSearchResult[2][i], cbTmpCardData, cbTmpCardCount);
- cbTmpCardData = removeResult2[2];
- cbTmpCardCount = cbTmpCardCount - tmpSearchResult[2][i];
- }
- }
- if (flag2 == true) {
- flag2 = false;
- //分析牌
- var TmpResult = [];
- TmpResult = this.AnalysebCardData(cbTmpCardData, cbTmpCardCount);
- //提取翅膀
- var cbDistillCard = [];
- var cbDistillCount = 0;
- var cbLineCount = tmpSearchResult[2][i] / 3;
- var j = 2;
- while (j <= 4) {
- if (TmpResult[1][j] > 0) {
- if ((j + 1 == 3) && TmpResult[1][j] >= cbLineCount) {
- var cbTmpBlockCount = TmpResult[1][j];
- for (var k = 1; k <= j * cbLineCount; k++) {
- cbDistillCard[k] = TmpResult[2][j][(cbTmpBlockCount - cbLineCount) * j + k];
- }
- cbDistillCount = j * cbLineCount;
- } else {
- var k = 1;
- while (k <= TmpResult[1][j]) {
- var cbTmpBlockCount = TmpResult[1][j];
- for (var l = 1; l <= 2; l++) {
- cbDistillCard[cbDistillCount + l] = TmpResult[2][j][(cbTmpBlockCount - k) * j + l];
- }
- cbDistillCount = cbDistillCount + 2;
- //提取完成
- if (cbDistillCount == 2 * cbLineCount) {
- break;
- }
- k = k + 1;
- }
- }
- }
- //提取完成
- if (cbDistillCount == 2 * cbLineCount) {
- break;
- }
- j = j + 1;
- }
- //提取完成
- if (cbDistillCount == 2 * cbLineCount) {
- //cc.log("复制两对");
- //复制翅膀
- tmpDoubleWing[1] = tmpDoubleWing[1] + 1;
- cbResultCount = tmpDoubleWing[1];
- tmpDoubleWing[3][cbResultCount] = tmpSearchResult[3][i];
- for (var n = 1; n <= cbDistillCount; n++) {
- tmpDoubleWing[3][cbResultCount][tmpSearchResult[2][i] + n] = cbDistillCard[n];
- }
- tmpDoubleWing[2][cbResultCount] = tmpSearchResult[2][i] + cbDistillCount;
- }
- }
- }
- i = i + 1;
- }
- //复制结果
- for (var m = 1; m <= tmpDoubleWing[1]; m++) {
- tagSearchCardResult[1] = tagSearchCardResult[1] + 1;
- var cbResultCount = tagSearchCardResult[1];
- tagSearchCardResult[3][cbResultCount] = tmpDoubleWing[3][m];
- tagSearchCardResult[2][cbResultCount] = tmpDoubleWing[2][m];
- }
- for (var m = 1; m <= tmpSingleWing[1]; m++) {
- tagSearchCardResult[1] = tagSearchCardResult[1] + 1;
- var cbResultCount = tagSearchCardResult[1];
- tagSearchCardResult[3][cbResultCount] = tmpSingleWing[3][m];
- tagSearchCardResult[2][cbResultCount] = tmpSingleWing[2][m];
- }
- }
- return tagSearchCardResult;
- },
- //分析分布
- AnalysebDistributing: function (cbCardData, cbCardCount) {
- var cbCardCount1 = 0;
- var cbDistributing = [];
- for (var i = 1; i <= 15; i++) {
- var distributing = [];
- for (var j = 1; j <= 6; j++) {
- distributing[j] = 0;
- }
- cbDistributing[i] = distributing;
- }
- var Distributing = [cbCardCount1, cbDistributing];
- for (var i = 1; i <= cbCardCount; i++) {
- if (cbCardData[i - 1] != 0) {
- var cbCardColor = this.GetCardColor(cbCardData[i - 1]);
- var cbCardValue = this.GetCardValue(cbCardData[i - 1]);
- //分布信息
- cbCardCount1 = cbCardCount1 + 1;
- cbDistributing[cbCardValue][5 + 1] = cbDistributing[cbCardValue][6] + 1;
- var color = (cbCardColor >> 4) + 1;
- cbDistributing[cbCardValue][color] = cbDistributing[cbCardValue][color] + 1;
- }
- }
- Distributing[1] = cbCardCount1;
- Distributing[2] = cbDistributing;
- return Distributing;
- },
- //构造扑克
- MakeCardData: function (cbValueIndex, cbColorIndex) {
- //print("构造扑克 " ..bit:_or(bit:_lshift(cbColorIndex,4),cbValueIndex)..",".. GetCardLogicValue(bit:_or(bit:_lshift(cbColorIndex,4),cbValueIndex)))
- return (cbColorIndex << 4) | cbValueIndex;
- },
- //-删除扑克
- RemoveCard: function (cbRemoveCard, cbRemoveCount, cbCardData, cbCardCount) {
- var cbDeleteCount = 0;
- var cbTempCardData = [];
- for (var i = 1; i <= cbCardData.length; i++) {
- cbTempCardData[i] = cbCardData[i - 1];
- }
- var result = [null, false, cbCardData];
- //置零扑克
- var i = 1;
- while (i <= cbRemoveCount) {
- var j = 1;
- while (j < cbCardCount) {
- if (cbRemoveCard[i] == cbTempCardData[j]) {
- cbDeleteCount = cbDeleteCount + 1;
- cbTempCardData[j] = 0;
- break;
- }
- j = j + 1;
- }
- i = i + 1;
- }
- if (cbDeleteCount != cbRemoveCount) {
- return result;
- }
- //清理扑克
- var cbCardPos = 1;
- var datas = [];
- for (var i = 1; i <= cbCardCount; i++) {
- if (cbTempCardData[i] != 0) {
- datas[cbCardPos] = cbTempCardData[i];
- cbCardPos = cbCardPos + 1;
- }
- }
- result = [null, true, datas];
- return result;
- },
- //排列扑克
- SortOutCardList: function (cbCardData, cbCardCount) {
- var resultCardData = [];
- var resultCardCount = 0;
- //获取牌型
- var cbCardType = this.GetCardType(cbCardData, cbCardCount);
- if (cbCardType == CT_THREE_TAKE_ONE || cbCardType == CT_THREE_TAKE_TWO) {
- //分析牌
- var AnalyseResult = [];
- AnalyseResult = this.AnalysebCardData(cbCardData, cbCardCount);
- resultCardCount = AnalyseResult[1][3] * 3;
- resultCardData = AnalyseResult[2][3];
- for (var i = 4; i <= 1; i--) {
- if (i != 3) {
- if (AnalyseResult[1][i] > 0) {
- for (var j = 1; j <= AnalyseResult[1][i] * i; j++) {
- resultCardData[resultCardCount + j] = AnalyseResult[2][i][j];
- }
- resultCardCount = resultCardCount + AnalyseResult[1][i] * i;
- }
- }
- }
- } else if (cbCardType == CT_FOUR_TAKE_ONE || cbCardType == CT_FOUR_TAKE_TWO) {
- //分析牌
- var AnalyseResult = {};
- AnalyseResult = this.AnalysebCardData(cbCardData, cbCardCount);
- resultCardCount = AnalyseResult[1][4] * 4;
- resultCardData = AnalyseResult[2][4];
- for (var i = 4; i <= 1; i--) {
- if (i != 3) {
- if (AnalyseResult[1][i] > 0) {
- for (var j = 1; j <= AnalyseResult[1][i] * i; j++) {
- resultCardData[resultCardCount + j] = AnalyseResult[2][i][j];
- }
- resultCardCount = resultCardCount + AnalyseResult[1][i] * i;
- }
- }
- }
- }
- return resultCardData;
- },
- };
- export default GameLogicController;
|