首页 > 代码库 > 斗地主相关算法实现
斗地主相关算法实现
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <script> 7 var PokerType = { 8 danzhang: 1, 9 duizi: 2, 10 sanzhang: 3, 11 sandaiyi: 4, 12 sandaiyidui: 5, 13 shunzi: 6, 14 liandui: 7, 15 feiji: 8, 16 sidaier: 9, 17 sidailiangdui: 10, 18 zhadan: 11, 19 wangzha: 12, 20 error: 13 21 }; 22 23 var Poker = { 24 sort: function (pokers) { 25 pokers.sort(function (prev, next) { 26 return next - prev 27 }) 28 }, 29 30 getPokeValue: function (poker) { 31 if (poker == 52) { 32 return 16 33 } 34 35 if (poker == 53) { 36 return 17 37 } 38 39 return Math.floor(poker / 4) + 3 40 }, 41 42 getPokeType: function (pokers) { 43 var len = pokers.length; 44 var i = 0; 45 var countPoker = 0; 46 var duizi = false; 47 var sanzhang = false; 48 var zhadan = false; 49 var tempArray = []; 50 51 if (len == 1) { 52 return PokerType.danzhang 53 } 54 55 if (len == 2) { 56 if (pokers[0] == 53 && pokers[1] == 52) { 57 return PokeType.wangzha 58 } 59 60 if (this.getPokeValue(pokers[0]) == this.getPokeValue(pokers[1])) { 61 return PokeType.duizi 62 } 63 } 64 65 if (len == 3 && this.getPokeValue(pokers[0]) == this.getPokeValue(pokers[1]) && this.getPokeValue(pokers[1]) == this.getPokeValue(pokers[2])) { 66 return PokeType.sanzhang; 67 } 68 69 if (len == 4) { 70 var countFirstPoker = this.getPokeCount(pokers, pokers[0]) 71 if (countFirstPoker == 4) { 72 return PokerType.zhadan 73 } 74 75 if (countFirstPoker == 3 || this.getPokeCount(pokers, pokers[1]) == 3) { 76 return PokeType.sandaiyi 77 } 78 } 79 80 if (len == 5) { 81 sanzhang = false; 82 duizi = false; 83 for (i = 0; i < len; i++) { 84 countPoker = this.getPokeCount(pokers, pokers[i]) 85 if (countPoker == 3) { 86 sanzhang = true 87 } 88 89 if (countPoker == 2) { 90 duizi = true 91 } 92 } 93 94 if (sanzhang && duizi) { 95 return PokerType.sandaiyidui 96 } 97 } 98 99 if (len >= 5 && this.shunzi(pokers)) { 100 return PokeType.shunzi; 101 } 102 103 if (len == 6) { 104 if (pokers[0] == 53 && pokers[1] == 52) { 105 return PokeType.error 106 } 107 108 zhadan = false; 109 for (i = 0; i < len; i++) { 110 if (this.getPokeCount(pokers, pokers[i]) == 4) { 111 zhadan = true 112 } 113 } 114 115 if (zhadan) { 116 return PokeType.sidaier 117 } 118 } 119 120 if (len >= 6 && len % 2 == 0) { 121 duizi = true; 122 for (i = 0; i < len; i++) { 123 if (this.getPokeCount(pokers, pokers[i]) != 2) { 124 duizi = false; 125 break 126 } 127 } 128 129 tempArray = []; 130 if (duizi) { 131 for (i = 0; i < len / 2; i++) { 132 tempArray[i] = pokers[i * 2] 133 } 134 135 if (this.shunzi(tempArray)) { 136 return PokerType.liandui 137 } 138 } 139 } 140 141 if (len >= 6 && len % 3 == 0) { // 飞机不带 142 sanzhang = true; 143 for (i = 0; i < len; i++) { 144 if (this.getPokeCount(pokers, pokers[i]) != 3) { 145 sanzhang = false; 146 break 147 } 148 } 149 150 tempArray = []; 151 if (sanzhang) { 152 for (i = 0; i < len / 3; i++) { 153 tempArray[i] = pokers[i * 3] 154 } 155 156 if (this.shunzi(tempArray)) { 157 return PokerType.feiji 158 } 159 } 160 } 161 162 if (len == 8) { 163 duizi = false; 164 zhadan = false; 165 for (i = 0; i < len; i++) { 166 countPoker = this.getPokeCount(pokers, pokers[i]); 167 if (countPoker == 2) { 168 duizi = true; 169 } else if (countPoker == 4) { 170 zhadan = true; 171 } else { 172 duizi = false; 173 break 174 } 175 } 176 177 if (duizi && zhadan) { 178 return PokerType.sidailiangdui 179 } 180 } 181 182 if (len >= 8 && len % 4 == 0) { 183 if (pokers[0] == 53 && pokers[1] == 52) { 184 return PokeType.error 185 } 186 187 tempArray = []; 188 for (i = 0; i < len; i++) { 189 countPoker = this.getPokeCount(pokers, pokers[i]); 190 if (countPoker == 3) { 191 tempArray.push(pokers[i]) 192 } 193 } 194 195 if (tempArray.length == len / 4 * 3 && this.getPokeType(tempArray) == PokerType.feiji) { 196 return PokerType.feiji 197 } 198 } 199 200 if (len >= 10 && len % 5 == 0) { 201 duizi = false; 202 203 tempArray = []; 204 for (i = 0; i < len; i++) { 205 countPoker = this.getPokeCount(pokers, pokers[i]); 206 if (countPoker == 2) { 207 duizi = true; 208 } else if (countPoker == 3) { 209 tempArray.push(pokers[i]) 210 } else { 211 duizi = false; 212 break 213 } 214 } 215 216 if (duizi && tempArray.length == len / 5 * 3 && this.getPokeType(tempArray) == PokerType.feiji) { 217 return PokerType.feiji 218 } 219 } 220 221 return PokerType.error 222 }, 223 224 shunzi: function (pokers) { 225 var pokeValue = http://www.mamicode.com/this.getPokeValue(pokers[0]); 226 if (pokeValue >= 15) { // 2,大、小王 227 return false 228 } 229 230 for (var i = 1; i < pokers.length; i++) { 231 var pokeValue2 = this.getPokeValue(pokers[i]); 232 if (pokeValue - pokeValue2 != 1) { 233 return false 234 } 235 236 pokeValue =http://www.mamicode.com/ pokeValue2 237 } 238 239 return true 240 }, 241 242 getPokeCount: function (pokers, poker) { 243 var count = 0; 244 for (var i = 0; i < pokers.length; i++) { 245 if (this.getPokeValue(pokers[i]) == this.getPokeValue(poker)) { 246 count++ 247 } 248 } 249 250 return count 251 }, 252 } 253 254 var pokers = []; 255 256 // 0 代表方块3 1 代表梅花3 2 代表红桃3 3 代表黑桃3 257 for (var i = 0; i < 54; i++) { 258 pokers[i] = i 259 } 260 261 pokers = [0, 4, 8, 12, 16]; // 3、4、5、6、7 262 pokers = [0, 1, 2, 4, 5, 6]; // 333、444 263 pokers = [0, 1, 2, 3, 4, 5, 8, 9]; // 3333、 44、55 264 pokers = [0, 1, 2, 3, 4, 5, 6, 7]; // 3333、 4444 265 pokers = [0, 1, 2, 4, 5, 6, 8, 9]; // 333、444、55 266 267 Poker.sort(pokers); 268 269 if (Poker.shunzi(pokers)) { 270 console.log("顺子:", pokers) 271 } 272 273 console.log("牌型:" , Poker.getPokeType(pokers)) 274 </script> 275 </head> 276 <body> 277 278 </body> 279 </html>
斗地主相关算法实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。