GameLogic_21201.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. var CGameLogic_21201 = cc.Class({
  2. ctor:function () {
  3. },
  4. //删除扑克
  5. RemoveCard2:function(cbCardIndex, cbRemoveCard){
  6. //删除扑克
  7. var cbRemoveIndex=this.SwitchToCardIndex(cbRemoveCard);
  8. if (cbCardIndex[cbRemoveIndex]>0){
  9. cbCardIndex[cbRemoveIndex]--;
  10. return true;
  11. }
  12. return false;
  13. },
  14. RemoveCard4:function(cbCardData, cbCardCount, cbRemoveCard, cbRemoveCount){
  15. //定义变量
  16. var cbDeleteCount=0;
  17. var cbTempCardData=new Array();
  18. if (cbCardCount>GameDef.MAX_COUNT) return false;
  19. for(var i=0;i<cbCardCount;++i) cbTempCardData[i]=cbCardData[i];
  20. //置零扑克
  21. for (var i=0;i<cbRemoveCount;i++){
  22. for (var j=0;j<cbCardCount;j++){
  23. if (cbRemoveCard[i]==cbTempCardData[j]){
  24. cbDeleteCount++;
  25. cbTempCardData[j]=0;
  26. break;
  27. }
  28. }
  29. }
  30. //成功判断
  31. if (cbDeleteCount!=cbRemoveCount) {
  32. if(window.LOG_NET_DATA)console.log('RemoveCard4 cbDeleteCount!=cbRemoveCount')
  33. return false;
  34. }
  35. //清理扑克
  36. var cbCardPos=0;
  37. for (var i=0;i<cbCardCount;i++){
  38. if (cbTempCardData[i]!=0)
  39. cbCardData[cbCardPos++]=cbTempCardData[i];
  40. }
  41. return true;
  42. },
  43. //有效判断
  44. IsValidCard:function(cbCardData){
  45. var cbValue=(cbCardData&GameDef.MASK_VALUE);
  46. var cbColor=(cbCardData&GameDef.MASK_COLOR)>>4;
  47. return (((cbValue>=1)&&(cbValue<=9)&&(cbColor<=2))||((cbValue>=1)&&(cbValue<=0x0f)&&(cbColor==3)));
  48. },
  49. //获取组合
  50. GetWeaveCard:function(wWeaveKind, cbCenterCard, cbCardBuffer){
  51. //组合扑克
  52. switch (wWeaveKind)
  53. {
  54. case GameDef.WIK_LEFT: //上牌操作
  55. {
  56. //设置变量
  57. cbCardBuffer[0]=cbCenterCard+1;
  58. cbCardBuffer[1]=cbCenterCard;
  59. cbCardBuffer[2]=cbCenterCard+2;
  60. return 3;
  61. }
  62. case GameDef.WIK_RIGHT: //上牌操作
  63. {
  64. //设置变量
  65. cbCardBuffer[0]=cbCenterCard-2;
  66. cbCardBuffer[1]=cbCenterCard;
  67. cbCardBuffer[2]=cbCenterCard-1;
  68. return 3;
  69. }
  70. case GameDef.WIK_CENTER: //上牌操作
  71. {
  72. //设置变量
  73. cbCardBuffer[0]=cbCenterCard-1;
  74. cbCardBuffer[1]=cbCenterCard;
  75. cbCardBuffer[2]=cbCenterCard+1;
  76. return 3;
  77. }
  78. case GameDef.WIK_PENG: //碰牌操作
  79. case GameDef.WIK_GANG_SP:
  80. {
  81. //设置变量
  82. cbCardBuffer[0]=cbCenterCard;
  83. cbCardBuffer[1]=cbCenterCard;
  84. cbCardBuffer[2]=cbCenterCard;
  85. return 3;
  86. }
  87. case GameDef.WIK_GANG: //杠牌操作
  88. {
  89. //设置变量
  90. cbCardBuffer[0]=cbCenterCard;
  91. cbCardBuffer[1]=cbCenterCard;
  92. cbCardBuffer[2]=cbCenterCard;
  93. cbCardBuffer[3]=cbCenterCard;
  94. return 4;
  95. }
  96. case GameDef.WIK_GANG_FENG:
  97. {
  98. cbCardBuffer[0]=0x31;
  99. cbCardBuffer[1]=0x32;
  100. cbCardBuffer[2]=0x33;
  101. cbCardBuffer[3]=0x34;
  102. return 4;
  103. }
  104. default:
  105. {
  106. //ASSERT(FALSE);
  107. }
  108. }
  109. return 0;
  110. },
  111. //填充扑克
  112. FillAllIndex:function(cbCardIndex, WeaveItem, cbWeaveCount){
  113. for(var i =0;i<cbWeaveCount;++i){
  114. for(var j=0;j<4;++j){
  115. if(WeaveItem[i].cbCardData[j]){
  116. cbCardIndex[this.SwitchToCardIndex(WeaveItem[i].cbCardData[j])]++;
  117. }
  118. }
  119. }
  120. },
  121. GetNextCardIndex:function(cbCardIndex){
  122. var cbCardColor = parseInt( cbCardIndex / 9 );
  123. var cbCardValue = cbCardIndex % 9;
  124. //东南西北 中发白
  125. if (cbCardColor == 3){
  126. if (cbCardValue == 3)//北
  127. cbCardValue = 0;//东
  128. else if (cbCardValue == 6)//白
  129. cbCardValue = 4;//中
  130. else
  131. cbCardValue++;
  132. }else{//1-9
  133. if (cbCardValue == 8)
  134. cbCardValue = 0;
  135. else
  136. cbCardValue++;
  137. }
  138. return cbCardColor * 9 + cbCardValue;
  139. },
  140. //扑克转换
  141. SwitchToCardData:function(cbCardIndex){
  142. if( cbCardIndex < 27 )
  143. return (parseInt(cbCardIndex/9)<<4)|(cbCardIndex%9+1);
  144. else return (0x30|(cbCardIndex-27+1));
  145. },
  146. //扑克转换
  147. SwitchToCardIndex:function(cbCardData){
  148. return ((cbCardData&GameDef.MASK_COLOR)>>4)*9+(cbCardData&GameDef.MASK_VALUE)-1;
  149. },
  150. //扑克转换
  151. SwitchToCardData2:function(cbCardIndex, cbCardData){
  152. //转换扑克
  153. var cbPosition=0;
  154. for (var i=0;i<GameDef.MAX_INDEX;i++){
  155. if (cbCardIndex[i]!=0){
  156. for (var j=0;j<cbCardIndex[i];j++){
  157. cbCardData[cbPosition++]=this.SwitchToCardData(i);
  158. }
  159. }
  160. }
  161. return cbPosition;
  162. },
  163. //扑克转换
  164. SwitchToCardIndex3:function(cbCardData, cbCardCount, cbCardIndex){
  165. for(var i=0;i<GameDef.MAX_INDEX;++i) cbCardIndex[i]=0;
  166. //转换扑克
  167. for (var i=0;i<cbCardCount;i++){
  168. cbCardIndex[this.SwitchToCardIndex(cbCardData[i])]++;
  169. }
  170. return cbCardCount;
  171. },
  172. //排序,根据牌值排序
  173. SortCardList:function( cbCardData, cbCardCount ){
  174. //数目过虑
  175. if (cbCardCount==0||cbCardCount>GameDef.MAX_COUNT) return false;
  176. //排序操作
  177. var bSorted=true;
  178. var cbSwitchData=0,cbLast=cbCardCount-1;
  179. do{
  180. bSorted=true;
  181. for (var i=0;i<cbLast;i++){
  182. if (cbCardData[i]>cbCardData[i+1]){
  183. //设置标志
  184. bSorted=false;
  185. //扑克数据
  186. cbSwitchData=cbCardData[i];
  187. cbCardData[i]=cbCardData[i+1];
  188. cbCardData[i+1]=cbSwitchData;
  189. }
  190. }
  191. cbLast--;
  192. } while(bSorted==false);
  193. return true;
  194. },
  195. /*
  196. // 胡法分析函数
  197. */
  198. });
  199. module.exports = CGameLogic_21201;