提交 404680cf 编写于 作者: 微笑面对bug's avatar 微笑面对bug

完善规则

上级 a2598830
.poker[data-v-b556cf7e]{height:100%;width:100px;border:1px solid;border-radius:8px;float:left;margin-left:-50px;background-color:azure}.poker[data-v-b556cf7e]:hover{background-color:#faebd7}.selected[data-v-b556cf7e]{margin-top:-20px}
\ No newline at end of file
.poker[data-v-3cd822ae],.pokerDesk[data-v-3cd822ae]{height:100%;width:100px;border:1px solid;border-radius:16px;float:left;margin-left:-50px;background-color:azure;font-size:30px}.poker[data-v-3cd822ae]:hover{background-color:#faebd7}.selected[data-v-3cd822ae]{margin-top:-20px}
\ No newline at end of file
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Vue App</title><link href=css/app.1475b526.css rel=preload as=style><link href=js/app.2113c29b.js rel=preload as=script><link href=js/chunk-vendors.caf18475.js rel=preload as=script><link href=css/app.1475b526.css rel=stylesheet></head><body><div id=app></div><script src=js/chunk-vendors.caf18475.js></script><script src=js/app.2113c29b.js></script></body></html>
\ No newline at end of file
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Vue App</title><link href=css/app.dcc00d5a.css rel=preload as=style><link href=js/app.4f03e253.js rel=preload as=script><link href=js/chunk-vendors.caf18475.js rel=preload as=script><link href=css/app.dcc00d5a.css rel=stylesheet></head><body><div id=app></div><script src=js/chunk-vendors.caf18475.js></script><script src=js/app.4f03e253.js></script></body></html>
\ No newline at end of file
(function(e){function t(t){for(var n,o,l=t[0],a=t[1],h=t[2],u=0,c=[];u<l.length;u++)o=l[u],Object.prototype.hasOwnProperty.call(i,o)&&i[o]&&c.push(i[o][0]),i[o]=0;for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n]);p&&p(t);while(c.length)c.shift()();return s.push.apply(s,h||[]),r()}function r(){for(var e,t=0;t<s.length;t++){for(var r=s[t],n=!0,l=1;l<r.length;l++){var a=r[l];0!==i[a]&&(n=!1)}n&&(s.splice(t--,1),e=o(o.s=r[0]))}return e}var n={},i={app:0},s=[];function o(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,o),r.l=!0,r.exports}o.m=e,o.c=n,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},o.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)o.d(r,n,function(t){return e[t]}.bind(null,n));return r},o.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="";var l=window["webpackJsonp"]=window["webpackJsonp"]||[],a=l.push.bind(l);l.push=t,l=l.slice();for(var h=0;h<l.length;h++)t(l[h]);var p=a;s.push([0,"chunk-vendors"]),r()})({0:function(e,t,r){e.exports=r("56d7")},"2bb1":function(e,t,r){"use strict";var n=r("7393"),i=r.n(n);i.a},"56d7":function(e,t,r){"use strict";r.r(t);r("e260"),r("e6cf"),r("cca6"),r("a79d");var n=r("2b0e"),i=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{attrs:{id:"app"}},[r("Game")],1)},s=[],o=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",[r("div",{staticStyle:{width:"300px",height:"300px",float:"left",position:"fixed",left:"0px",top:"0px","background-color":"aliceblue","text-align":"center"}},[r("span",[e._v(" "+e._s(e.player2Str[0])+" "),r("br"),e._v(" "+e._s(e.player2Str[1])+" "),r("br"),r("br"),e._v(" "+e._s(e.player2Str[2])+" ")])]),r("div",{staticStyle:{width:"300px",height:"300px",float:"left",position:"fixed",left:"600px",top:"0px","background-color":"aliceblue","text-align":"center"}},[r("span",[e._v(" "+e._s(e.player1Str[0])+" "),r("br"),e._v(" "+e._s(e.player1Str[1])+" "),r("br"),r("br"),e._v(" "+e._s(e.player1Str[2])+" ")])]),r("div",{staticStyle:{width:"300px",height:"300px",float:"left",position:"fixed",left:"300px",top:"300px","background-color":"aliceblue","text-align":"center"}},[r("span",[e._v(" "+e._s(e.player0Str[0])+" "),r("br"),e._v(" "+e._s(e.player0Str[1])+" "),r("br"),r("br"),e._v(" "+e._s(e.player0Str[2])+" ")]),r("div",[r("input",{directives:[{name:"model",rawName:"v-model",value:e.playerStr,expression:"playerStr"}],attrs:{type:"text"},domProps:{value:e.playerStr},on:{input:function(t){t.target.composing||(e.playerStr=t.target.value)}}}),r("button",{on:{click:e.sendPoker}},[e._v("send")]),r("button",{on:{click:e.pass}},[e._v("pass")])])]),r("div",{staticStyle:{width:"300px",height:"300px",float:"left",position:"fixed",left:"300px",top:"0px","background-color":"aliceblue","text-align":"center"}},[r("div",{staticStyle:{width:"300px","word-wrap":"break-word"}},[e._v(" "+e._s(e.deskStr[0])+" "),r("br"),e._v(" "+e._s(e.deskStr[1])+" ")])]),r("div",{staticStyle:{position:"fixed",left:"300px",top:"600px"}},[r("button",{on:{click:e.reStart}},[e._v("reStart")])])])},l=[],a=(r("b0c0"),r("a434"),r("d4ec")),h=r("bee2"),p=(r("99af"),r("0481"),r("d81d"),r("fb6a"),r("4069"),r("d3b7"),r("25f0"),function(){function e(t){Object(a["a"])(this,e),t.text?(this.text=t.text,this.number=e.textToNumber(t.text)):(this.number=t.number,this.text=e.numberToText(t.number)),this.type=t.type,this.selected=t.selected}return Object(h["a"])(e,[{key:"toString",value:function(){return this.text}}],[{key:"textToNumber",value:function(e){switch(e){case"3":return 3;case"4":return 4;case"5":return 5;case"6":return 6;case"7":return 7;case"8":return 8;case"9":return 9;case"10":case"0":case"T":case"t":return 10;case"11":case"j":case"J":return 11;case"12":case"q":case"Q":return 12;case"13":case"k":case"K":return 13;case"1":case"a":case"A":return 14;case"2":return 15;case"s":case"S":return 16;case"x":case"X":return 17}}},{key:"numberToText",value:function(e){switch(e){case 3:return"3";case 4:return"4";case 5:return"5";case 6:return"6";case 7:return"7";case 8:return"8";case 9:return"9";case 10:return"10";case 11:return"J";case 12:return"Q";case 13:return"K";case 14:return"A";case 15:return"2";case 16:return"S";case 17:return"X"}}},{key:"sortFunction",value:function(e,t){return e.number-t.number}},{key:"getObjByPokerList",value:function(t){if("pass"===t[0])return{type:"pass",poker:t};t.sort(e.sortFunction);for(var r=t[0],n=[r],i=[],s=1;s<t.length;s++)t[s].number!==r.number?(i.push(n),n=[t[s]]):n.push(t[s]),r=t[s];i.push(n);for(var o=[],l=[],a=[],h=[],p=0;p<i.length;p++)3===i[p].length?a.push(i[p]):2===i[p].length?l.push(i[p]):1===i[p].length?o.push(i[p]):4===i[p].length&&h.push(i[p]);if(1===t.length)return{type:"one",poker:t,one:t};if(2===t.length){if(1===l.length)return{type:"two",poker:t,two:t};if(16===t[0].number&&17===t[1].number)return{type:"sx",poker:t,sx:t}}else if(4===t.length){if(1===a.length)return{type:"threeWithOne",poker:t,three:a[0],one:o[0]};if(1===h.length)return{type:"four",poker:t,four:t}}else if(5===t.length){if(1===a.length&&1===l.length)return{type:"threeWithTwo",poker:t,three:a[0],two:l[0]}}else if(8===t.length){if(2===a.length&&a[0][0].number+1===a[1][0].number)return 1===l.length&&(o.push(l[0].splice(0,1)),o.push(l[0].splice(0,1))),{type:"threeWithOneList",poker:t,list:[{three:a[0],one:o[0]},{three:a[1],one:o[1]}]}}else if(10===t.length&&2===a.length&&a[0][0].number+1===a[1][0].number&&2===l.length)return{type:"threeWithTwoList",poker:t,list:[{three:a[0],two:l[0]},{three:a[1],two:l[1]}]};return t.length>=5&&o.length===t.length&&t[0].number+t.length-1===t[t.length-1].number?{type:"oneList",poker:t,list:o.map((function(e){return{one:e}}))}:t.length>=6&&t.length%2===0&&l.length===t.length/2&&t[0].number+t.length/2-1===t[t.length-1].number&&{type:"twoList",poker:t,list:l.map((function(e){return{two:e}}))}}},{key:"pokerListToString",value:function(e){for(var t="",r=0;r<e.length;r++){var n=e[r].toString();t+=n}return t}}]),e}()),u=p,c=function(){function e(t){Object(a["a"])(this,e),t=t||{},this.pokerList=[],this.name=t.name||"noName"+Math.random(),this.type=t.type||"nongmin",this.last=null,this.next=null,this.isRobot=t.isRobot,this.game=t.game,this.lastSendObj=null}return Object(h["a"])(e,[{key:"addPoker",value:function(e){this.pokerList.push(e)}},{key:"sortPoker",value:function(){this.pokerList.sort(this.sortFunction)}},{key:"sortFunction",value:function(e,t){return e.number-t.number}},{key:"getLastObj",value:function(){var e=this.last.lastSendObj;return!!(e&&"pass"!==e.type||(e=this.next.lastSendObj,e&&"pass"!==e.type))&&e}},{key:"playByAI",value:function(){var e=this;setTimeout((function(){var t=e.getLastObj();t?e.playByObj(t):e.playByAllType()}),1e3)}},{key:"sendPoker",value:function(e){this.game.clearDesk(),this.lastSendObj=e,this.game.deskPokerObj=e,this.game.next()}},{key:"playByAllType",value:function(){for(var e=["threeWithTwoList","threeWithOneList","twoList","threeWithTwo","oneList","threeWithOne","two","one","four","sx","pass"],t=0;t<e.length;t++){var r=this.getSmallestObjByType(e[t]);if(r){var n=this.deleteFromPokerListAndSendByObj(r);return void(n||alert("error!"))}}}},{key:"deleteFromPokerListAndSendByObj",value:function(e){var t=[];if("pass"===e.type)return this.sendPoker(e),!0;for(var r=e.poker,n=0;n<r.length;n++){var i=this.getAndDeleteOnePokerByNumber(r[n].number);if(!i)return this.listBackToPokerList(t),!1;t.push(i)}return this.sendPoker(e),!0}},{key:"getSmallestObjByType",value:function(e){for(var t=this.pokerList,r=t[0],n=[r],i=[],s=1;s<t.length;s++)t[s].number!==r.number?(i.push(n),n=[t[s]]):n.push(t[s]),r=t[s];i.push(n);for(var o=[],l=[],a=[],h=[],p=0;p<i.length;p++)3===i[p].length?a.push(i[p]):2===i[p].length?l.push(i[p]):1===i[p].length?o.push(i[p]):4===i[p].length&&h.push(i[p]);var u=null;if("one"===e){if(o.length>0)u={type:e,poker:o[0],one:o[0]};else if(l.length>0){var c=l[0].slice(0,1);u={type:e,poker:c,one:c}}else if(a.length>0){var f=a[0].slice(0,1);u={type:e,poker:f,one:f}}}else if("two"===e){if(l.length>0)u={type:e,poker:l[0],two:l[0]};else if(a.length>0){var g=a[0].slice(0,2);u={type:e,poker:g,one:g}}}else if("threeWithOne"===e){if(a.length>0){var y;if(o.length>0)y=o[0];else if(l.length>0)y=l[0].slice(0,1);else if(a.length>0)for(var k=0;k<a.length;k++)0!==k&&(y=a[k].slice(0,1));y&&(u={type:e,poker:a[0].concat(y),three:a[0],one:y})}}else if("four"===e)h.length>0&&(u={type:e,poker:h[0],four:h[0]});else if("threeWithTwo"===e){if(a.length>0){var b;if(l.length>0)b=l[0];else if(a.length>0)for(var v=0;v<a.length;v++)0!==v&&(b=a[v].slice(0,2));b&&(u={type:e,poker:a[0].concat(b),three:a[0],two:b})}}else if("threeWithOneList"===e){if(a.length>1)for(var d=0;d<a.length-1;d++)if(a[d][0].number+1===a[d+1][0].number+1){var m=void 0,L=void 0;if(o.length>0){if(m=o[0],o.length>1)L=o[1];else if(l.length>0)L=l[0].slice(0,1);else if(a.length>0)for(var S=0;S<a.length;S++)S!==d&&(L=a[S].slice(0,1))}else if(l.length>0)m=l[0].slice(0,1),L=l[0].slice(1,2);else if(a.length>0)for(var x=0;x<a.length;x++)x!==d&&(m=a[x].slice(0,1),L=a[x].slice(1,2));m&&L&&(u={type:e,poker:a[d].concat(m).concat(a[d+1]).concat(L),list:[{three:a[d],one:m},{three:a[d+1],one:L}]});break}}else if("threeWithTwoList"===e){if(a.length>1)for(var w=0;w<a.length-1;w++)if(a[w][0].number+1===a[w+1][0].number+1){var P=void 0,O=void 0;if(l.length>0)if(P=l[0],l.length>1)O=l[1];else for(var _=0;_<a.length;_++)_!==w&&(O=a[_].slice(0,2));P&&O&&(u={type:e,poker:a[w].concat(P).concat(a[w+1]).concat(O),list:[{three:a[w],two:P},{three:a[w+1],two:O}]});break}}else if("oneList"===e){if(o.length>=5)for(var j=0;j<o.length-5+1;j++)if(o[j][0].number+5-1===o[j+5-1][0].number){var T=o.slice(j,j+5);u={type:e,poker:T.flat(1),list:T.map((function(e){return{one:e}}))};break}}else if("twoList"===e){if(l.length>=3)for(var B=0;B<l.length-3+1;B++)if(l[B][0].number+3-1===l[B+3-1][0].number){var W=l.slice(B,B+3);u={type:e,poker:W.flat(1),list:W.map((function(e){return{two:e}}))};break}}else if("sx"===e){if(o.length>=2)for(var A=0;A<o.length-1;A++)if(16===o[A][0].number){var M=l.slice(A,A+2),N=M.flat(1);u={type:e,poker:N,sx:N};break}}else"pass"===e&&(u={type:e,poker:["pass"]});return u}},{key:"getObjByObj",value:function(e){for(var t=this.pokerList,r=t[0],n=[r],i=[],s=1;s<t.length;s++)t[s].number!==r.number?(i.push(n),n=[t[s]]):n.push(t[s]),r=t[s];i.push(n);for(var o=[],l=[],a=[],h=[],p=0;p<i.length;p++)3===i[p].length?a.push(i[p]):2===i[p].length?l.push(i[p]):1===i[p].length?o.push(i[p]):4===i[p].length&&h.push(i[p]);var u=e.type,c=null;if("one"===u){if(o.length>0){for(var f=0;f<o.length;f++)if(o[f][0].number>e.one[0].number){c={type:u,poker:o[f],one:o[f]};break}}else if(l.length>0){for(var g=0;g<l.length;g++)if(l[g][0].number>e.one[0].number){var y=l[g].slice(0,1);c={type:u,poker:y,one:y};break}}else if(a.length>0)for(var k=0;k<a.length;k++)if(a[k][0].number>e.one[0].number){var b=a[k].slice(0,1);c={type:u,poker:b,one:b};break}}else if("two"===u){if(l.length>0){for(var v=0;v<l.length;v++)if(l[v][0].number>e.two[0].number){c={type:u,poker:l[v],two:l[v]};break}}else if(a.length>0)for(var d=0;d<a.length;d++)if(a[d][0].number>e.two[0].number){var m=a[d].slice(0,2);c={type:u,poker:m,one:m};break}}else if("threeWithOne"===u){if(a.length>0)for(var L=0;L<a.length;L++)if(a[L][0].number>e.three[0].number){var S=void 0;if(o.length>0)S=o[0];else if(l.length>0)S=l[0].slice(0,1);else if(a.length>0)for(var x=0;x<a.length;x++)x!==L&&(S=a[x].slice(0,1));S&&(c={type:u,poker:a[L].concat(S),three:a[L],one:S});break}}else if("threeWithTwo"===u){if(a.length>0)for(var w=0;w<a.length;w++)if(a[w][0].number>e.three[0].number){var P=void 0;if(l.length>0)P=l[0];else if(a.length>0)for(var O=0;O<a.length;O++)O!==w&&(P=a[O].slice(0,2));P&&(c={type:u,poker:a[w].concat(P),three:a[w],two:P});break}}else if("threeWithOneList"===u){if(a.length>1)for(var _=0;_<a.length-1;_++)if(a[_][0].number>e.list[0].three[0].number&&a[_][0].number+1===a[_+1][0].number+1){var j=void 0,T=void 0;if(o.length>0){if(j=o[0],o.length>1)T=o[1];else if(l.length>0)T=l[0].slice(0,1);else if(a.length>0)for(var B=0;B<a.length;B++)B!==_&&(T=a[B].slice(0,1))}else if(l.length>0)j=l[0].slice(0,1),T=l[0].slice(1,2);else if(a.length>0)for(var W=0;W<a.length;W++)W!==_&&(j=a[W].slice(0,1),T=a[W].slice(1,2));j&&T&&(c={type:u,poker:a[_].concat(j).concat(a[_+1]).concat(T),list:[{three:a[_],one:j},{three:a[_+1],one:T}]});break}}else if("threeWithTwoList"===u){if(a.length>1)for(var A=0;A<a.length-1;A++)if(a[A][0].number>e.list[0].three[0].number&&a[A][0].number+1===a[A+1][0].number+1){var M=void 0,N=void 0;if(l.length>0)if(M=l[0],l.length>1)N=l[1];else for(var R=0;R<a.length;R++)R!==A&&(N=a[R].slice(0,2));M&&N&&(c={type:u,poker:a[A].concat(M).concat(a[A+1]).concat(N),list:[{three:a[A],two:M},{three:a[A+1],two:N}]});break}}else if("oneList"===u){if(o.length>=e.list.length)for(var I=0;I<o.length-e.list.length+1;I++)if(o[I][0].number>e.list[0].one[0].number&&o[I][0].number+e.list.length-1===o[I+e.list.length-1][0].number){var D=o.slice(I,I+e.list.length);c={type:u,poker:D.flat(1),list:D.map((function(e){return{one:e}}))};break}}else if("twoList"===u){if(l.length>=e.list.length)for(var F=0;F<l.length-e.list.length+1;F++)if(l[F][0].number>e.list[0].two[0].number&&l[F][0].number+e.list.length-1===l[F+e.list.length-1][0].number){var z=l.slice(F,F+e.list.length);c={type:u,poker:z.flat(1),list:z.map((function(e){return{two:e}}))};break}}else if("four"===u&&h.length>0)for(var G=0;G<h.length;G++)if(h[G][0].number>e.four[0].number){c={type:u,poker:h[G],four:h[G]};break}if(c||"four"===u||h.length>0&&(c={type:u,poker:h[0],four:h[0]}),!c&&"sx"!==u&&o.length>1&&16===o[o.length-2]){var J=o[o.length-2].concat(o[o.length-1]);c={type:u,poker:J,sx:J}}return c||(c={type:"pass",poker:["pass"]}),c}},{key:"playByObj",value:function(e){var t=this.getObjByObj(e),r=this.deleteFromPokerListAndSendByObj(t);r||alert("error!")}},{key:"getListByList",value:function(e){var t=[];if("pass"===e[0])return["pass"];for(var r=0;r<e.length;r++){var n=e[r],i=this.getAndDeleteOnePokerByNumber(n.number);if(!i)return this.listBackToPokerList(t),!1;t.push(i)}return t}},{key:"getListByString",value:function(e){var t=[];if("pass"===e)return["pass"];for(var r=0;r<e.length;r++){var n=e[r],i=u.textToNumber(n),s=this.getAndDeleteOnePokerByNumber(i);if(!s)return this.listBackToPokerList(t),!1;t.push(s)}return t}},{key:"listBackToPokerList",value:function(e){while(e.length>0){var t=e.splice(0,1)[0];this.pokerList.push(t)}this.sortPoker()}},{key:"handleList",value:function(e){if(e){var t=u.getObjByPokerList(e);if(t){if("pass"===t.type)return this.sendPoker(t),!0;var r=this.getLastObj();if(r){if(r.type===t.type){var n=this.compareTwoObj(t,r);return n?(this.sendPoker(t),!0):(this.listBackToPokerList(e),alert("have to bigger than "+u.pokerListToString(r.poker)),!1)}return this.listBackToPokerList(e),alert("type is not "+r.type+"!"),!1}return this.sendPoker(t),!0}return this.listBackToPokerList(e),alert("type error!"),!1}return alert("poker error!"),!1}},{key:"playByPokerList",value:function(e){if(this.game.currentPlayer!==this)return alert("请等待 "+this.game.currentPlayer.name+" 出牌"),!1;var t=this.getListByList(e);return this.handleList(t)}},{key:"playByString",value:function(e){if(this.game.currentPlayer!==this)return alert("请等待 "+this.game.currentPlayer.name+" 出牌"),!1;var t=this.getListByString(e);return this.handleList(t)}},{key:"compareTwoObj",value:function(e,t){return"one"===e.type?e.one[0].number>t.one[0].number:"two"===e.type?e.two[0].number>t.two[0].number:"threeWithOne"===e.type||"threeWithTwo"===e.type?e.three[0].number>t.three[0].number:"threeWithOneList"===e.type||"threeWithTwoList"===e.type?e.list[0].three[0].number>t.list[0].three[0].number:"oneList"===e.type?e.list[0].one[0].number>t.list[0].one[0].number:"twoList"===e.type?e.list[0].two[0].number>t.list[0].two[0].number:"four"===e.type?e.four[0].number>t.four[0].number:void 0}},{key:"getAndDeleteOnePokerByNumber",value:function(e){for(var t=0;t<this.pokerList.length;t++)if(this.pokerList[t].number===e)return this.pokerList.splice(t,1)[0];return!1}},{key:"pokerListToString",value:function(){var e=u.pokerListToString(this.pokerList);return e}},{key:"lastSendObjToString",value:function(){if(!this.lastSendObj)return"";var e=u.pokerListToString(this.lastSendObj.poker);return e}}]),e}(),f=c,g=function(){function e(){Object(a["a"])(this,e),this.playerList=[],this.pokerList=[],this.deskPokerObj=null,this.oldPokerList=[],this.currentPlayer=[],this.dizhu=null,this.init()}return Object(h["a"])(e,[{key:"init",value:function(){this.initPokerList(),this.initPlayerList(),this.sendPoker(),this.start()}},{key:"start",value:function(){this.currentPlayer=this.dizhu,this.currentPlayer.isRobot&&this.currentPlayer.playByAI()}},{key:"next",value:function(){var e=this.checkGameOver();e?this.gameOver():(this.currentPlayer=this.currentPlayer.next,this.currentPlayer.isRobot&&this.currentPlayer.playByAI())}},{key:"gameOver",value:function(){alert("gameOver! "+this.currentPlayer.name+" ["+this.currentPlayer.type+"] win!")}},{key:"checkGameOver",value:function(){if(0===this.currentPlayer.pokerList.length)return!0}},{key:"clearDesk",value:function(){this.deskPokerObj&&(this.oldPokerList.push(this.deskPokerObj),this.deskPokerObj=null)}},{key:"sendPoker",value:function(){var e=this.playerList[0];do{var t=this.getRandomIntInclusive(0,this.pokerList.length-1),r=this.pokerList.splice(t,1)[0];e.addPoker(r),e=e.next}while(this.pokerList.length>3);do{var n=this.pokerList.splice(0,1)[0];this.dizhu.addPoker(n)}while(this.pokerList.length>0);for(var i=0;i<this.playerList.length;i++)this.playerList[i].sortPoker()}},{key:"initPlayerList",value:function(){this.playerList=[];var e=new f({name:"player",isRobot:!1,game:this}),t=new f({name:"robot1",isRobot:!0,game:this}),r=new f({name:"robot2",isRobot:!0,game:this});this.playerList=[e,t,r],this.playerList[0].next=this.playerList[1],this.playerList[1].next=this.playerList[2],this.playerList[2].next=this.playerList[0],this.playerList[0].last=this.playerList[2],this.playerList[1].last=this.playerList[0],this.playerList[2].last=this.playerList[1];var n=this.getRandomIntInclusive(0,2);this.playerList[n].type="dizhu",this.dizhu=this.playerList[n]}},{key:"initPokerList",value:function(){this.pokerList=[];for(var e=3;e<=15;e++)for(var t=0;t<4;t++){var r=new u({number:e,type:t});this.pokerList.push(r)}for(var n=16;n<=17;n++){var i=new u({number:n});this.pokerList.push(i)}}},{key:"pokerListToString",value:function(){var e="";e+=u.pokerListToString(this.pokerList),e+="\n";for(var t=0;t<this.oldPokerList.length;t++)e+=u.pokerListToString(this.oldPokerList[t].poker),t<this.oldPokerList.length-1&&(e+=",");return e+="\n",e+=this.deskPokerObj?u.pokerListToString(this.deskPokerObj.poker):"",e}},{key:"getRandomIntInclusive",value:function(e,t){return Math.floor(Math.random()*(t-e+1))+e}}]),e}(),y=g,k={name:"HelloWorld",data:function(){return{data:"fuck1",game:new y,playerStr:""}},computed:{player2Str:function(){var e=this.game,t=2;return[e.playerList[t].name+" : "+e.playerList[t].type+" : "+e.playerList[t].pokerList.length,e.playerList[t].pokerListToString(),"last : "+e.playerList[t].lastSendObjToString()]},player1Str:function(){var e=this.game,t=1;return[e.playerList[t].name+" : "+e.playerList[t].type+" : "+e.playerList[t].pokerList.length,e.playerList[t].pokerListToString(),"last : "+e.playerList[t].lastSendObjToString()]},player0Str:function(){var e=this.game,t=0;return[e.playerList[t].name+" : "+e.playerList[t].type+" : "+e.playerList[t].pokerList.length,e.playerList[t].pokerListToString(),"last : "+e.playerList[t].lastSendObjToString()]},deskStr:function(){var e=this.game;return["desk",e.pokerListToString()]}},mounted:function(){this.data=this.game.playerList[1].name},methods:{reDraw:function(){},sendPoker:function(){var e=this.game,t=e.playerList[0].playByString(this.playerStr);t&&(this.playerStr="")},pass:function(){this.game.playerList[0].playByString("pass")},reStart:function(){this.game=new y,this.playerStr=""}}},b=k,v=r("2877"),d=Object(v["a"])(b,o,l,!1,null,"62298b0c",null),m=d.exports,L=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{staticStyle:{"user-select":"none"}},[r("div",{staticStyle:{width:"300px",height:"300px",float:"left",position:"fixed",left:"0px",top:"0px","background-color":"aliceblue","text-align":"center"}},[r("span",[e._v(" "+e._s(e.player2Str[0])+" "),r("br"),e._v(" "+e._s(e.player2Str[1])+" "),r("br"),r("br"),e._v(" "+e._s(e.player2Str[2])+" ")])]),r("div",{staticStyle:{width:"300px",height:"300px",float:"left",position:"fixed",left:"600px",top:"0px","background-color":"aliceblue","text-align":"center"}},[r("span",[e._v(" "+e._s(e.player1Str[0])+" "),r("br"),e._v(" "+e._s(e.player1Str[1])+" "),r("br"),r("br"),e._v(" "+e._s(e.player1Str[2])+" ")])]),r("div",{staticStyle:{width:"300px",height:"300px",float:"left",position:"fixed",left:"300px",top:"300px","background-color":"aliceblue","text-align":"center"}},[r("span",[e._v(" "+e._s(e.player0Str[0])+" "),r("br"),e._v(" "+e._s(e.player0Str[1])+" "),r("br"),r("br"),e._v(" "+e._s(e.player0Str[2])+" ")]),r("div",[r("input",{directives:[{name:"model",rawName:"v-model",value:e.playerStr,expression:"playerStr"}],attrs:{type:"text"},domProps:{value:e.playerStr},on:{input:function(t){t.target.composing||(e.playerStr=t.target.value)}}}),r("button",{on:{click:e.sendPoker}},[e._v("send")]),r("button",{on:{click:e.pass}},[e._v("pass")])])]),r("div",{staticStyle:{width:"300px",height:"300px",float:"left",position:"fixed",left:"300px",top:"0px","background-color":"aliceblue","text-align":"center"}},[r("div",{staticStyle:{width:"300px","word-wrap":"break-word"}},[e._v(" "+e._s(e.deskStr[0])+" "),r("br"),e._v(" "+e._s(e.deskStr[1])+" ")])]),r("div",{staticStyle:{position:"fixed",left:"300px",top:"600px"}},[r("button",{on:{click:e.reStart}},[e._v("reStart")])]),r("div",{staticStyle:{position:"fixed",bottom:"0",width:"100%",height:"200px"},style:{marginLeft:e.playerMarginLeft+"px"}},e._l(e.game.playerList[0].pokerList,(function(t){return r("div",{staticClass:"poker",class:{selected:t.selected},on:{mouseenter:function(r){return e.enter(r,t)},mousedown:function(r){return e.pickPoker(t)}}},[e._v(" "+e._s(t.text)+" ")])})),0),r("div",{staticStyle:{position:"fixed",bottom:"200px",width:"100%",height:"100px","text-align":"left"}},[r("div",{staticStyle:{width:"200px",height:"30px"},style:{marginLeft:e.buttonMarginLeft+"px"}},[r("button",{staticStyle:{height:"30px","border-radius":"4px",float:"left"},on:{click:e.sendPoker2}},[e._v("出牌")]),r("button",{staticStyle:{height:"30px","border-radius":"4px","margin-left":"20px",float:"right"},on:{click:e.pass}},[e._v("不出")])])]),r("div",{staticStyle:{position:"fixed",bottom:"400px",width:"100%",height:"200px"},style:{marginLeft:e.deskPokerMarginLeft+"px"}},e._l(e.deskPoker,(function(t){return r("div",{staticStyle:{height:"100%",width:"100px",border:"solid 1px","border-radius":"8px",float:"left","margin-left":"-50px","background-color":"azure"}},[e._v(" "+e._s(t.text)+" ")])})),0)])},S=[],x={name:"HelloWorld",data:function(){return{data:"fuck1",game:new y,playerStr:"",pokerList:[]}},computed:{playerMarginLeft:function(){return(window.innerWidth-50*this.game.playerList[0].pokerList.length)/2},deskPokerMarginLeft:function(){return(window.innerWidth-50*this.deskPoker.length)/2},buttonMarginLeft:function(){return(window.innerWidth-200)/2},deskPoker:function(){return this.game.deskPokerObj&&this.game.deskPokerObj.poker&&this.game.deskPokerObj.poker[0]&&this.game.deskPokerObj.poker[0].text?this.game.deskPokerObj.poker:[]},player2Str:function(){var e=this.game,t=2;return[e.playerList[t].name+" : "+e.playerList[t].type+" : "+e.playerList[t].pokerList.length,e.playerList[t].pokerListToString(),"last : "+e.playerList[t].lastSendObjToString()]},player1Str:function(){var e=this.game,t=1;return[e.playerList[t].name+" : "+e.playerList[t].type+" : "+e.playerList[t].pokerList.length,e.playerList[t].pokerListToString(),"last : "+e.playerList[t].lastSendObjToString()]},player0Str:function(){var e=this.game,t=0;return[e.playerList[t].name+" : "+e.playerList[t].type+" : "+e.playerList[t].pokerList.length,e.playerList[t].pokerListToString(),"last : "+e.playerList[t].lastSendObjToString()]},deskStr:function(){var e=this.game;return["desk",e.pokerListToString()]}},mounted:function(){this.data=this.game.playerList[1].name},methods:{enter:function(e,t){1===e.buttons&&this.pickPoker(t)},pickPoker:function(e){if(e.selected){e.selected=!1;for(var t=0;t<this.pokerList.length;t++)this.pokerList[t]===e&&this.pokerList.splice(t,1)}else e.selected=!0,this.pokerList.push(e)},sendPoker2:function(){var e=this.game,t=e.playerList[0].playByPokerList(this.pokerList);t&&(this.pokerList=[])},sendPoker:function(){var e=this.game,t=e.playerList[0].playByString(this.playerStr);t&&(this.playerStr="")},pass:function(){this.game.playerList[0].playByString("pass")},reStart:function(){this.game=new y,this.playerStr=""}}},w=x,P=(r("2bb1"),Object(v["a"])(w,L,S,!1,null,"b556cf7e",null)),O=P.exports,_={name:"App",components:{HelloWorld:m,Game:O}},j=_,T=Object(v["a"])(j,i,s,!1,null,null,null),B=T.exports;n["a"].config.productionTip=!1,new n["a"]({render:function(e){return e(B)}}).$mount("#app")},7393:function(e,t,r){}});
//# sourceMappingURL=app.2113c29b.js.map
\ No newline at end of file
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/Game.vue?fe34","webpack:///./src/App.vue?4625","webpack:///./src/components/HelloWorld.vue?f3a1","webpack:///./src/doudizhu/Poker.js","webpack:///./src/doudizhu/Player.js","webpack:///./src/doudizhu/Game.js","webpack:///src/components/HelloWorld.vue","webpack:///./src/components/HelloWorld.vue?ddb2","webpack:///./src/components/HelloWorld.vue","webpack:///./src/components/Game.vue?b06f","webpack:///src/components/Game.vue","webpack:///./src/components/Game.vue?bf2b","webpack:///./src/components/Game.vue","webpack:///src/App.vue","webpack:///./src/App.vue?a7d1","webpack:///./src/App.vue","webpack:///./src/main.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","_vm","this","_h","$createElement","_c","_self","attrs","staticRenderFns","staticStyle","_v","_s","player2Str","player1Str","player0Str","directives","rawName","expression","domProps","on","$event","target","composing","playerStr","sendPoker","pass","deskStr","reStart","Poker","param","text","number","textToNumber","numberToText","type","selected","a","b","pokerList","poker","sort","sortFunction","lastPoker","curList","lists","Count1List","Count2List","Count3List","Count4List","one","two","sx","three","four","list","map","item","str","toString","Player","Math","random","last","next","isRobot","game","lastSendObj","lastObj","that","setTimeout","getLastObj","playByObj","playByAllType","obj","clearDesk","deskPokerObj","types","getSmallestObjByType","success","deleteFromPokerListAndSendByObj","alert","tempList","getAndDeleteOnePokerByNumber","listBackToPokerList","concat","one1","one2","two1","two2","flat","getObjByObj","po","sortPoker","getObjByPokerList","comp","compareTwoObj","pokerListToString","currentPlayer","getListByList","handleList","getListByString","obj1","obj2","Game","playerList","oldPokerList","dizhu","init","initPokerList","initPlayerList","start","playByAI","over","checkGameOver","gameOver","player","index","getRandomIntInclusive","addPoker","player0","player1","player2","dizhuIndex","min","max","floor","computed","mounted","methods","reDraw","playByString","component","style","marginLeft","playerMarginLeft","_l","staticClass","class","enter","pickPoker","buttonMarginLeft","sendPoker2","deskPokerMarginLeft","components","HelloWorld","Vue","config","productionTip","render","h","App","$mount"],"mappings":"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","file":"js/app.2113c29b.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Game.vue?vue&type=style&index=0&id=b556cf7e&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Game.vue?vue&type=style&index=0&id=b556cf7e&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('Game')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticStyle:{\"width\":\"300px\",\"height\":\"300px\",\"float\":\"left\",\"position\":\"fixed\",\"left\":\"0px\",\"top\":\"0px\",\"background-color\":\"aliceblue\",\"text-align\":\"center\"}},[_c('span',[_vm._v(\" \"+_vm._s(_vm.player2Str[0])+\" \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.player2Str[1])+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.player2Str[2])+\" \")])]),_c('div',{staticStyle:{\"width\":\"300px\",\"height\":\"300px\",\"float\":\"left\",\"position\":\"fixed\",\"left\":\"600px\",\"top\":\"0px\",\"background-color\":\"aliceblue\",\"text-align\":\"center\"}},[_c('span',[_vm._v(\" \"+_vm._s(_vm.player1Str[0])+\" \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.player1Str[1])+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.player1Str[2])+\" \")])]),_c('div',{staticStyle:{\"width\":\"300px\",\"height\":\"300px\",\"float\":\"left\",\"position\":\"fixed\",\"left\":\"300px\",\"top\":\"300px\",\"background-color\":\"aliceblue\",\"text-align\":\"center\"}},[_c('span',[_vm._v(\" \"+_vm._s(_vm.player0Str[0])+\" \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.player0Str[1])+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.player0Str[2])+\" \")]),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.playerStr),expression:\"playerStr\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.playerStr)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.playerStr=$event.target.value}}}),_c('button',{on:{\"click\":_vm.sendPoker}},[_vm._v(\"send\")]),_c('button',{on:{\"click\":_vm.pass}},[_vm._v(\"pass\")])])]),_c('div',{staticStyle:{\"width\":\"300px\",\"height\":\"300px\",\"float\":\"left\",\"position\":\"fixed\",\"left\":\"300px\",\"top\":\"0px\",\"background-color\":\"aliceblue\",\"text-align\":\"center\"}},[_c('div',{staticStyle:{\"width\":\"300px\",\"word-wrap\":\"break-word\"}},[_vm._v(\" \"+_vm._s(_vm.deskStr[0])+\" \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.deskStr[1])+\" \")])]),_c('div',{staticStyle:{\"position\":\"fixed\",\"left\":\"300px\",\"top\":\"600px\"}},[_c('button',{on:{\"click\":_vm.reStart}},[_vm._v(\"reStart\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","class Poker{\r\n constructor(param) {\r\n if(param.text){\r\n this.text = param.text;\r\n this.number = Poker.textToNumber(param.text);\r\n }else{\r\n this.number = param.number;\r\n this.text = Poker.numberToText(param.number);\r\n }\r\n this.type = param.type;\r\n this.selected = param.selected;\r\n }\r\n\r\n static textToNumber(text){\r\n switch (text) {\r\n case '3': return 3;\r\n case '4': return 4;\r\n case '5': return 5;\r\n case '6': return 6;\r\n case '7': return 7;\r\n case '8': return 8;\r\n case '9': return 9;\r\n case '10':\r\n case '0':\r\n case 'T':\r\n case 't': return 10;\r\n case '11':\r\n case 'j':\r\n case 'J': return 11;\r\n case '12':\r\n case 'q':\r\n case 'Q': return 12;\r\n case '13':\r\n case 'k':\r\n case 'K': return 13;\r\n case '1':\r\n case 'a':\r\n case 'A': return 14;\r\n case '2': return 15;\r\n case 's':\r\n case 'S': return 16;\r\n case 'x':\r\n case 'X': return 17;\r\n }\r\n }\r\n\r\n static numberToText(number){\r\n switch (number) {\r\n case 3: return '3';\r\n case 4: return '4';\r\n case 5: return '5';\r\n case 6: return '6';\r\n case 7: return '7';\r\n case 8: return '8';\r\n case 9: return '9';\r\n case 10: return '10';\r\n case 11: return 'J';\r\n case 12: return 'Q';\r\n case 13: return 'K';\r\n case 14: return 'A';\r\n case 15: return '2';\r\n case 16: return 'S';\r\n case 17: return 'X';\r\n }\r\n }\r\n\r\n static sortFunction(a, b){\r\n return a.number - b.number;\r\n }\r\n\r\n static getObjByPokerList(pokerList){\r\n if(pokerList[0] === 'pass'){\r\n return {\r\n type:'pass',\r\n poker: pokerList,\r\n };\r\n }\r\n pokerList.sort(Poker.sortFunction);\r\n\r\n let lastPoker = pokerList[0];\r\n let curList = [lastPoker];\r\n let lists = [];\r\n for(let i=1; i<pokerList.length; i++){\r\n if(pokerList[i].number !== lastPoker.number){\r\n lists.push(curList);\r\n curList = [pokerList[i]];\r\n }else{\r\n curList.push(pokerList[i]);\r\n }\r\n lastPoker = pokerList[i];\r\n }\r\n lists.push(curList);\r\n\r\n let Count1List = [];\r\n let Count2List = [];\r\n let Count3List = [];\r\n let Count4List = [];\r\n for(let i=0; i<lists.length; i++){\r\n if(lists[i].length === 3){\r\n Count3List.push(lists[i]);\r\n }else if(lists[i].length === 2){\r\n Count2List.push(lists[i]);\r\n }else if(lists[i].length === 1){\r\n Count1List.push(lists[i]);\r\n }else if(lists[i].length === 4){\r\n Count4List.push(lists[i]);\r\n }\r\n }\r\n\r\n if(pokerList.length === 1){\r\n\r\n return {\r\n type:'one',\r\n poker: pokerList,\r\n one: pokerList,\r\n };\r\n\r\n }else if(pokerList.length === 2){\r\n\r\n if(Count2List.length === 1){\r\n return {\r\n type:'two',\r\n poker: pokerList,\r\n two: pokerList,\r\n };\r\n }else if(pokerList[0].number === 16 && pokerList[1].number === 17){\r\n return {\r\n type:'sx',\r\n poker: pokerList,\r\n sx: pokerList,\r\n };\r\n }\r\n\r\n }else if(pokerList.length === 4){\r\n\r\n if(Count3List.length === 1){\r\n return {\r\n type:'threeWithOne',\r\n poker: pokerList,\r\n three: Count3List[0],\r\n one: Count1List[0],\r\n };\r\n }else if(Count4List.length === 1){\r\n return {\r\n type:'four',\r\n poker: pokerList,\r\n four: pokerList,\r\n };\r\n }\r\n\r\n }else if(pokerList.length === 5){\r\n\r\n if(Count3List.length === 1 && Count2List.length === 1){\r\n return {\r\n type:'threeWithTwo',\r\n poker: pokerList,\r\n three: Count3List[0],\r\n two: Count2List[0],\r\n };\r\n }\r\n\r\n }else if(pokerList.length === 8){\r\n\r\n if(Count3List.length === 2 && Count3List[0][0].number+1===Count3List[1][0].number){\r\n if(Count2List.length === 1){\r\n Count1List.push(Count2List[0].splice(0,1));\r\n Count1List.push(Count2List[0].splice(0,1));\r\n }\r\n return {\r\n type:'threeWithOneList',\r\n poker: pokerList,\r\n list: [\r\n {\r\n three: Count3List[0],\r\n one: Count1List[0],\r\n },\r\n {\r\n three: Count3List[1],\r\n one: Count1List[1],\r\n }\r\n ],\r\n };\r\n }\r\n\r\n }else if(pokerList.length === 10){\r\n\r\n if(Count3List.length === 2 && Count3List[0][0].number+1===Count3List[1][0].number && Count2List.length === 2){\r\n return {\r\n type:'threeWithTwoList',\r\n poker: pokerList,\r\n list: [\r\n {\r\n three: Count3List[0],\r\n two: Count2List[0],\r\n },\r\n {\r\n three: Count3List[1],\r\n two: Count2List[1],\r\n }\r\n ],\r\n };\r\n }\r\n\r\n }\r\n\r\n //判断oneList\r\n if(pokerList.length >= 5 && Count1List.length === pokerList.length && pokerList[0].number+pokerList.length-1===pokerList[pokerList.length-1].number){\r\n return {\r\n type:'oneList',\r\n poker: pokerList,\r\n list: Count1List.map(function (item) {\r\n return {\r\n one: item,\r\n }\r\n }),\r\n }\r\n }\r\n\r\n //判断twoList\r\n if(pokerList.length >= 6 && pokerList.length%2 === 0 && Count2List.length === pokerList.length/2 && pokerList[0].number+pokerList.length/2-1===pokerList[pokerList.length-1].number){\r\n return {\r\n type:'twoList',\r\n poker: pokerList,\r\n list: Count2List.map(function (item) {\r\n return {\r\n two: item,\r\n }\r\n }),\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n static pokerListToString(pokerList){\r\n let result = '';\r\n for(let i=0; i<pokerList.length; i++){\r\n let str = pokerList[i].toString();\r\n result += str;\r\n }\r\n return result;\r\n }\r\n\r\n toString(){\r\n return this.text;\r\n }\r\n\r\n}\r\n\r\nexport default Poker;","import Poker from \"./Poker\";\r\n\r\nclass Player{\r\n constructor(param) {\r\n param = param || {};\r\n this.pokerList = [];\r\n this.name = param.name || 'noName'+Math.random();\r\n this.type = param.type || 'nongmin';\r\n this.last = null;\r\n this.next = null;\r\n this.isRobot = param.isRobot;\r\n this.game = param.game;\r\n \r\n this.lastSendObj = null;\r\n }\r\n\r\n addPoker(poker){\r\n this.pokerList.push(poker);\r\n }\r\n\r\n sortPoker(){\r\n this.pokerList.sort(this.sortFunction);\r\n }\r\n\r\n sortFunction(a, b){\r\n return a.number - b.number;\r\n }\r\n\r\n getLastObj(){\r\n let lastObj = this.last.lastSendObj;\r\n if(!lastObj || lastObj.type === 'pass'){\r\n lastObj = this.next.lastSendObj;\r\n if(!lastObj || lastObj.type === 'pass'){\r\n return false;\r\n }\r\n }\r\n return lastObj;\r\n }\r\n\r\n playByAI(){\r\n\r\n let that = this;\r\n setTimeout(function () {\r\n let lastObj = that.getLastObj();\r\n if(lastObj){\r\n that.playByObj(lastObj);\r\n }else{\r\n that.playByAllType();\r\n }\r\n },1000);\r\n\r\n }\r\n\r\n sendPoker(obj){\r\n this.game.clearDesk();\r\n this.lastSendObj = obj;\r\n this.game.deskPokerObj = obj;\r\n this.game.next();\r\n }\r\n\r\n playByAllType(){\r\n let types2 = ['one','two','threeWithOne','threeWithTwo','threeWithOneList','threeWithTwoList','oneList','twoList','four','sx','pass'];\r\n let types = ['threeWithTwoList','threeWithOneList','twoList','threeWithTwo','oneList','threeWithOne','two','one','four','sx','pass'];\r\n for(let i=0; i<types.length; i++){\r\n let obj = this.getSmallestObjByType(types[i]);\r\n if(obj){\r\n let success = this.deleteFromPokerListAndSendByObj(obj);\r\n if(!success){\r\n alert('error!');\r\n }\r\n return;\r\n }\r\n }\r\n\r\n }\r\n\r\n deleteFromPokerListAndSendByObj(obj){\r\n let tempList = [];\r\n if(obj.type === 'pass'){\r\n this.sendPoker(obj);\r\n return true;\r\n }\r\n let pokerList = obj.poker;\r\n for(let i=0; i<pokerList.length; i++){\r\n\r\n let poker = this.getAndDeleteOnePokerByNumber(pokerList[i].number);\r\n if(poker){\r\n tempList.push(poker);\r\n }else{\r\n this.listBackToPokerList(tempList);\r\n return false;\r\n }\r\n }\r\n this.sendPoker(obj);\r\n return true;\r\n }\r\n\r\n getSmallestObjByType(type){\r\n let pokerList = this.pokerList;\r\n\r\n let lastPoker = pokerList[0];\r\n let curList = [lastPoker];\r\n let lists = [];\r\n for(let i=1; i<pokerList.length; i++){\r\n if(pokerList[i].number !== lastPoker.number){\r\n lists.push(curList);\r\n curList = [pokerList[i]];\r\n }else{\r\n curList.push(pokerList[i]);\r\n }\r\n lastPoker = pokerList[i];\r\n }\r\n lists.push(curList);\r\n\r\n let Count1List = [];\r\n let Count2List = [];\r\n let Count3List = [];\r\n let Count4List = [];\r\n for(let i=0; i<lists.length; i++){\r\n if(lists[i].length === 3){\r\n Count3List.push(lists[i]);\r\n }else if(lists[i].length === 2){\r\n Count2List.push(lists[i]);\r\n }else if(lists[i].length === 1){\r\n Count1List.push(lists[i]);\r\n }else if(lists[i].length === 4){\r\n Count4List.push(lists[i]);\r\n }\r\n }\r\n\r\n let obj = null;\r\n if(type === 'one'){\r\n if(Count1List.length>0){\r\n obj = {\r\n type: type,\r\n poker: Count1List[0],\r\n one: Count1List[0],\r\n };\r\n }else if(Count2List.length>0){\r\n let poker = Count2List[0].slice(0,1);\r\n obj = {\r\n type: type,\r\n poker: poker,\r\n one: poker,\r\n };\r\n }else if(Count3List.length>0){\r\n let poker = Count3List[0].slice(0,1);\r\n obj = {\r\n type: type,\r\n poker: poker,\r\n one: poker,\r\n };\r\n }\r\n }else if(type === 'two'){\r\n if(Count2List.length>0){\r\n obj = {\r\n type: type,\r\n poker: Count2List[0],\r\n two: Count2List[0],\r\n };\r\n }else if(Count3List.length>0){\r\n let poker = Count3List[0].slice(0,2);\r\n obj = {\r\n type: type,\r\n poker: poker,\r\n one: poker,\r\n };\r\n }\r\n }else if(type === 'threeWithOne'){\r\n if(Count3List.length>0){\r\n let one;\r\n if(Count1List.length>0){\r\n one = Count1List[0];\r\n }else if(Count2List.length>0){\r\n one = Count2List[0].slice(0,1);\r\n }else if(Count3List.length>0){\r\n for(let j=0; j<Count3List.length; j++){\r\n if(j===0){\r\n continue;\r\n }\r\n one = Count3List[j].slice(0,1);\r\n }\r\n }\r\n\r\n if(one){\r\n obj = {\r\n type: type,\r\n poker: Count3List[0].concat(one),\r\n three: Count3List[0],\r\n one: one,\r\n };\r\n }\r\n }\r\n }else if(type === 'four'){\r\n if(Count4List.length>0){\r\n obj = {\r\n type: type,\r\n poker: Count4List[0],\r\n four: Count4List[0],\r\n };\r\n }\r\n }else if(type === 'threeWithTwo'){\r\n if(Count3List.length>0){\r\n let two;\r\n if(Count2List.length>0){\r\n two = Count2List[0];\r\n }else if(Count3List.length>0){\r\n for(let j=0; j<Count3List.length; j++){\r\n if(j===0){\r\n continue;\r\n }\r\n two = Count3List[j].slice(0,2);\r\n }\r\n }\r\n\r\n if(two){\r\n obj = {\r\n type: type,\r\n poker: Count3List[0].concat(two),\r\n three: Count3List[0],\r\n two: two,\r\n };\r\n }\r\n }\r\n }else if(type === 'threeWithOneList'){\r\n if(Count3List.length>1){\r\n for(let i=0; i<Count3List.length-1; i++){\r\n if(Count3List[i][0].number+1===Count3List[i+1][0].number+1){\r\n\r\n let one1,one2;\r\n if(Count1List.length>0){\r\n one1 = Count1List[0];\r\n if(Count1List.length>1){\r\n one2 = Count1List[1];\r\n }else{\r\n if(Count2List.length>0){\r\n one2 = Count2List[0].slice(0,1);\r\n }else if(Count3List.length>0){\r\n for(let j=0; j<Count3List.length; j++){\r\n if(j===i){\r\n continue;\r\n }\r\n one2 = Count3List[j].slice(0,1);\r\n }\r\n }\r\n }\r\n }else if(Count2List.length>0){\r\n one1 = Count2List[0].slice(0,1);\r\n one2 = Count2List[0].slice(1,2);\r\n }else if(Count3List.length>0){\r\n for(let j=0; j<Count3List.length; j++){\r\n if(j===i){\r\n continue;\r\n }\r\n one1 = Count3List[j].slice(0,1);\r\n one2 = Count3List[j].slice(1,2);\r\n }\r\n }\r\n\r\n if(one1&&one2){\r\n obj = {\r\n type: type,\r\n poker: Count3List[i].concat(one1).concat(Count3List[i+1]).concat(one2),\r\n list: [\r\n {\r\n three: Count3List[i],\r\n one: one1,\r\n },\r\n {\r\n three: Count3List[i+1],\r\n one: one2,\r\n }\r\n ],\r\n };\r\n }\r\n break;\r\n\r\n }\r\n }\r\n }\r\n }else if(type === 'threeWithTwoList'){\r\n if(Count3List.length>1){\r\n for(let i=0; i<Count3List.length-1; i++){\r\n if(Count3List[i][0].number+1===Count3List[i+1][0].number+1){\r\n\r\n let two1,two2;\r\n if(Count2List.length>0){\r\n two1 = Count2List[0];\r\n if(Count2List.length>1){\r\n two2 = Count2List[1];\r\n }else{\r\n for(let j=0; j<Count3List.length; j++){\r\n if(j===i){\r\n continue;\r\n }\r\n two2 = Count3List[j].slice(0,2);\r\n }\r\n }\r\n }\r\n\r\n if(two1&&two2){\r\n obj = {\r\n type: type,\r\n poker: Count3List[i].concat(two1).concat(Count3List[i+1]).concat(two2),\r\n list: [\r\n {\r\n three: Count3List[i],\r\n two: two1,\r\n },\r\n {\r\n three: Count3List[i+1],\r\n two: two2,\r\n }\r\n ],\r\n };\r\n }\r\n break;\r\n\r\n }\r\n }\r\n }\r\n }else if(type === 'oneList'){\r\n if(Count1List.length>=5 ){\r\n for(let i=0; i<Count1List.length-5+1; i++){\r\n if(Count1List[i][0].number+5-1===Count1List[i+5-1][0].number){\r\n let list = Count1List.slice(i,i+5);\r\n obj = {\r\n type: type,\r\n poker: list.flat(1),\r\n list: list.map(function (item) {\r\n return {\r\n one: item,\r\n }\r\n }),\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n }else if(type === 'twoList'){\r\n if(Count2List.length>=3 ){\r\n for(let i=0; i<Count2List.length-3+1; i++){\r\n if(Count2List[i][0].number+3-1===Count2List[i+3-1][0].number){\r\n let list = Count2List.slice(i,i+3);\r\n obj = {\r\n type: type,\r\n poker: list.flat(1),\r\n list: list.map(function (item) {\r\n return {\r\n two: item,\r\n }\r\n }),\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n }else if(type === 'sx'){\r\n if(Count1List.length>=2){\r\n for(let i=0; i<Count1List.length-1; i++){\r\n if(Count1List[i][0].number===16){\r\n let list = Count2List.slice(i,i+2);\r\n let poker = list.flat(1);\r\n obj = {\r\n type: type,\r\n poker: poker,\r\n sx: poker,\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n }else if(type === 'pass'){\r\n obj = {\r\n type: type,\r\n poker: ['pass'],\r\n };\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n getObjByObj(lastObj){\r\n let pokerList = this.pokerList;\r\n\r\n let lastPoker = pokerList[0];\r\n let curList = [lastPoker];\r\n let lists = [];\r\n for(let i=1; i<pokerList.length; i++){\r\n if(pokerList[i].number !== lastPoker.number){\r\n lists.push(curList);\r\n curList = [pokerList[i]];\r\n }else{\r\n curList.push(pokerList[i]);\r\n }\r\n lastPoker = pokerList[i];\r\n }\r\n lists.push(curList);\r\n\r\n let Count1List = [];\r\n let Count2List = [];\r\n let Count3List = [];\r\n let Count4List = [];\r\n for(let i=0; i<lists.length; i++){\r\n if(lists[i].length === 3){\r\n Count3List.push(lists[i]);\r\n }else if(lists[i].length === 2){\r\n Count2List.push(lists[i]);\r\n }else if(lists[i].length === 1){\r\n Count1List.push(lists[i]);\r\n }else if(lists[i].length === 4){\r\n Count4List.push(lists[i]);\r\n }\r\n }\r\n\r\n let type = lastObj.type;\r\n let obj = null;\r\n if(type === 'one'){\r\n if(Count1List.length>0){\r\n for(let i=0; i<Count1List.length; i++){\r\n if(Count1List[i][0].number>lastObj.one[0].number){\r\n obj = {\r\n type: type,\r\n poker: Count1List[i],\r\n one: Count1List[i],\r\n };\r\n break;\r\n }\r\n }\r\n }else if(Count2List.length>0){\r\n for(let i=0; i<Count2List.length; i++){\r\n if(Count2List[i][0].number>lastObj.one[0].number){\r\n let poker = Count2List[i].slice(0,1);\r\n obj = {\r\n type: type,\r\n poker: poker,\r\n one: poker,\r\n };\r\n break;\r\n }\r\n }\r\n }else if(Count3List.length>0){\r\n for(let i=0; i<Count3List.length; i++){\r\n if(Count3List[i][0].number>lastObj.one[0].number){\r\n let poker = Count3List[i].slice(0,1);\r\n obj = {\r\n type: type,\r\n poker: poker,\r\n one: poker,\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n }else if(type === 'two'){\r\n if(Count2List.length>0){\r\n for(let i=0; i<Count2List.length; i++){\r\n if(Count2List[i][0].number>lastObj.two[0].number){\r\n obj = {\r\n type: type,\r\n poker: Count2List[i],\r\n two: Count2List[i],\r\n };\r\n break;\r\n }\r\n }\r\n }else if(Count3List.length>0){\r\n for(let i=0; i<Count3List.length; i++){\r\n if(Count3List[i][0].number>lastObj.two[0].number){\r\n let poker = Count3List[i].slice(0,2);\r\n obj = {\r\n type: type,\r\n poker: poker,\r\n one: poker,\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n }else if(type === 'threeWithOne'){\r\n if(Count3List.length>0){\r\n for(let i=0; i<Count3List.length; i++){\r\n if(Count3List[i][0].number>lastObj.three[0].number){\r\n\r\n let one;\r\n if(Count1List.length>0){\r\n one = Count1List[0];\r\n }else if(Count2List.length>0){\r\n one = Count2List[0].slice(0,1);\r\n }else if(Count3List.length>0){\r\n for(let j=0; j<Count3List.length; j++){\r\n if(j===i){\r\n continue;\r\n }\r\n one = Count3List[j].slice(0,1);\r\n }\r\n }\r\n\r\n if(one){\r\n obj = {\r\n type: type,\r\n poker: Count3List[i].concat(one),\r\n three: Count3List[i],\r\n one: one,\r\n };\r\n }\r\n break;\r\n\r\n }\r\n }\r\n }\r\n }else if(type === 'threeWithTwo'){\r\n if(Count3List.length>0){\r\n for(let i=0; i<Count3List.length; i++){\r\n if(Count3List[i][0].number>lastObj.three[0].number){\r\n\r\n let two;\r\n if(Count2List.length>0){\r\n two = Count2List[0];\r\n }else if(Count3List.length>0){\r\n for(let j=0; j<Count3List.length; j++){\r\n if(j===i){\r\n continue;\r\n }\r\n two = Count3List[j].slice(0,2);\r\n }\r\n }\r\n\r\n if(two){\r\n obj = {\r\n type: type,\r\n poker: Count3List[i].concat(two),\r\n three: Count3List[i],\r\n two: two,\r\n };\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }else if(type === 'threeWithOneList'){\r\n if(Count3List.length>1){\r\n for(let i=0; i<Count3List.length-1; i++){\r\n if(Count3List[i][0].number>lastObj.list[0].three[0].number && Count3List[i][0].number+1===Count3List[i+1][0].number+1){\r\n\r\n let one1,one2;\r\n if(Count1List.length>0){\r\n one1 = Count1List[0];\r\n if(Count1List.length>1){\r\n one2 = Count1List[1];\r\n }else{\r\n if(Count2List.length>0){\r\n one2 = Count2List[0].slice(0,1);\r\n }else if(Count3List.length>0){\r\n for(let j=0; j<Count3List.length; j++){\r\n if(j===i){\r\n continue;\r\n }\r\n one2 = Count3List[j].slice(0,1);\r\n }\r\n }\r\n }\r\n }else if(Count2List.length>0){\r\n one1 = Count2List[0].slice(0,1);\r\n one2 = Count2List[0].slice(1,2);\r\n }else if(Count3List.length>0){\r\n for(let j=0; j<Count3List.length; j++){\r\n if(j===i){\r\n continue;\r\n }\r\n one1 = Count3List[j].slice(0,1);\r\n one2 = Count3List[j].slice(1,2);\r\n }\r\n }\r\n\r\n if(one1&&one2){\r\n obj = {\r\n type: type,\r\n poker: Count3List[i].concat(one1).concat(Count3List[i+1]).concat(one2),\r\n list: [\r\n {\r\n three: Count3List[i],\r\n one: one1,\r\n },\r\n {\r\n three: Count3List[i+1],\r\n one: one2,\r\n }\r\n ],\r\n };\r\n }\r\n break;\r\n\r\n }\r\n }\r\n }\r\n }else if(type === 'threeWithTwoList'){\r\n if(Count3List.length>1){\r\n for(let i=0; i<Count3List.length-1; i++){\r\n if(Count3List[i][0].number>lastObj.list[0].three[0].number && Count3List[i][0].number+1===Count3List[i+1][0].number+1){\r\n\r\n let two1,two2;\r\n if(Count2List.length>0){\r\n two1 = Count2List[0];\r\n if(Count2List.length>1){\r\n two2 = Count2List[1];\r\n }else{\r\n for(let j=0; j<Count3List.length; j++){\r\n if(j===i){\r\n continue;\r\n }\r\n two2 = Count3List[j].slice(0,2);\r\n }\r\n }\r\n }\r\n\r\n if(two1&&two2){\r\n obj = {\r\n type: type,\r\n poker: Count3List[i].concat(two1).concat(Count3List[i+1]).concat(two2),\r\n list: [\r\n {\r\n three: Count3List[i],\r\n two: two1,\r\n },\r\n {\r\n three: Count3List[i+1],\r\n two: two2,\r\n }\r\n ],\r\n };\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }else if(type === 'oneList'){\r\n if(Count1List.length>=lastObj.list.length ){\r\n for(let i=0; i<Count1List.length-lastObj.list.length+1; i++){\r\n if(Count1List[i][0].number>lastObj.list[0].one[0].number && Count1List[i][0].number+lastObj.list.length-1===Count1List[i+lastObj.list.length-1][0].number){\r\n let list = Count1List.slice(i,i+lastObj.list.length);\r\n obj = {\r\n type: type,\r\n poker: list.flat(1),\r\n list: list.map(function (item) {\r\n return {\r\n one: item,\r\n }\r\n }),\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n }else if(type === 'twoList'){\r\n if(Count2List.length>=lastObj.list.length ){\r\n for(let i=0; i<Count2List.length-lastObj.list.length+1; i++){\r\n if(Count2List[i][0].number>lastObj.list[0].two[0].number && Count2List[i][0].number+lastObj.list.length-1===Count2List[i+lastObj.list.length-1][0].number){\r\n let list = Count2List.slice(i,i+lastObj.list.length);\r\n obj = {\r\n type: type,\r\n poker: list.flat(1),\r\n list: list.map(function (item) {\r\n return {\r\n two: item,\r\n }\r\n }),\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n }else if(type === 'four'){\r\n if(Count4List.length>0){\r\n for(let i=0; i<Count4List.length; i++){\r\n if(Count4List[i][0].number>lastObj.four[0].number){\r\n obj = {\r\n type: type,\r\n poker: Count4List[i],\r\n four: Count4List[i],\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if(!obj && type!=='four'){\r\n\r\n if(Count4List.length>0){\r\n obj = {\r\n type: type,\r\n poker: Count4List[0],\r\n four: Count4List[0],\r\n };\r\n }\r\n\r\n }\r\n\r\n if(!obj && type!=='sx'){\r\n\r\n if(Count1List.length>1){\r\n if(Count1List[Count1List.length-2] === 16){\r\n let poker = Count1List[Count1List.length-2].concat(Count1List[Count1List.length-1]);\r\n obj = {\r\n type: type,\r\n poker: poker,\r\n sx: poker,\r\n };\r\n }\r\n }\r\n\r\n }\r\n\r\n if(!obj){\r\n obj = {\r\n type: 'pass',\r\n poker: ['pass'],\r\n };\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n playByObj(lastObj){\r\n\r\n let obj = this.getObjByObj(lastObj);\r\n let success = this.deleteFromPokerListAndSendByObj(obj);\r\n if(!success){\r\n alert('error!');\r\n }\r\n\r\n }\r\n\r\n getListByList(list){\r\n let tempList = [];\r\n if(list[0] === 'pass'){\r\n return ['pass'];\r\n }\r\n for(let i=0; i<list.length; i++){\r\n let po = list[i];\r\n let poker = this.getAndDeleteOnePokerByNumber(po.number);\r\n if(poker){\r\n tempList.push(poker);\r\n }else{\r\n this.listBackToPokerList(tempList);\r\n return false;\r\n }\r\n }\r\n return tempList;\r\n }\r\n\r\n getListByString(str){\r\n let tempList = [];\r\n if(str === 'pass'){\r\n return ['pass'];\r\n }\r\n for(let i=0; i<str.length; i++){\r\n let text = str[i];\r\n let number = Poker.textToNumber(text);\r\n let poker = this.getAndDeleteOnePokerByNumber(number);\r\n if(poker){\r\n tempList.push(poker);\r\n }else{\r\n this.listBackToPokerList(tempList);\r\n return false;\r\n }\r\n }\r\n return tempList;\r\n }\r\n\r\n listBackToPokerList(list){\r\n while (list.length>0){\r\n let poker = list.splice(0,1)[0];\r\n this.pokerList.push(poker);\r\n }\r\n this.sortPoker();\r\n }\r\n\r\n handleList(list){\r\n if(list){\r\n let obj = Poker.getObjByPokerList(list);\r\n if(obj){\r\n if(obj.type === 'pass'){\r\n this.sendPoker(obj);\r\n return true;\r\n }\r\n let lastObj = this.getLastObj();\r\n if(lastObj){\r\n if(lastObj.type === obj.type){\r\n let comp = this.compareTwoObj(obj, lastObj);\r\n if(comp){\r\n this.sendPoker(obj);\r\n return true;\r\n }else{\r\n this.listBackToPokerList(list);\r\n alert('have to bigger than '+Poker.pokerListToString(lastObj.poker));\r\n return false;\r\n }\r\n\r\n }else{\r\n this.listBackToPokerList(list);\r\n alert('type is not '+lastObj.type+'!');\r\n return false;\r\n }\r\n }else{\r\n this.sendPoker(obj);\r\n return true;\r\n }\r\n\r\n }else{\r\n this.listBackToPokerList(list);\r\n alert('type error!');\r\n return false;\r\n }\r\n\r\n }else{\r\n alert('poker error!');\r\n return false;\r\n }\r\n }\r\n\r\n playByPokerList(pokerList){\r\n if(this.game.currentPlayer!==this){\r\n alert('请等待 '+this.game.currentPlayer.name+' 出牌');\r\n return false;\r\n }\r\n\r\n let list = this.getListByList(pokerList);\r\n return this.handleList(list);\r\n }\r\n\r\n playByString(str){\r\n if(this.game.currentPlayer!==this){\r\n alert('请等待 '+this.game.currentPlayer.name+' 出牌');\r\n return false;\r\n }\r\n\r\n let list = this.getListByString(str);\r\n return this.handleList(list);\r\n }\r\n\r\n compareTwoObj(obj1, obj2) {\r\n if (obj1.type === 'one') {\r\n return obj1.one[0].number > obj2.one[0].number;\r\n } else if (obj1.type === 'two') {\r\n return obj1.two[0].number > obj2.two[0].number;\r\n } else if (obj1.type === 'threeWithOne') {\r\n return obj1.three[0].number > obj2.three[0].number;\r\n } else if (obj1.type === 'threeWithTwo') {\r\n return obj1.three[0].number > obj2.three[0].number;\r\n } else if (obj1.type === 'threeWithOneList') {\r\n return obj1.list[0].three[0].number > obj2.list[0].three[0].number;\r\n } else if (obj1.type === 'threeWithTwoList') {\r\n return obj1.list[0].three[0].number > obj2.list[0].three[0].number;\r\n } else if (obj1.type === 'oneList') {\r\n return obj1.list[0].one[0].number > obj2.list[0].one[0].number;\r\n } else if (obj1.type === 'twoList') {\r\n return obj1.list[0].two[0].number > obj2.list[0].two[0].number;\r\n } else if (obj1.type === 'four') {\r\n return obj1.four[0].number > obj2.four[0].number;\r\n }\r\n }\r\n\r\n\r\n getAndDeleteOnePokerByNumber(number){\r\n for(let i=0; i<this.pokerList.length; i++){\r\n if(this.pokerList[i].number === number){\r\n return this.pokerList.splice(i,1)[0];\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n pokerListToString(){\r\n let result = Poker.pokerListToString(this.pokerList);\r\n return result;\r\n }\r\n\r\n lastSendObjToString(){\r\n if(!this.lastSendObj){\r\n return '';\r\n }\r\n let result = Poker.pokerListToString(this.lastSendObj.poker);\r\n return result;\r\n }\r\n\r\n}\r\n\r\nexport default Player;","import Player from \"./Player\";\r\nimport Poker from \"./Poker\";\r\n\r\nclass Game{\r\n constructor() {\r\n this.playerList = [];\r\n this.pokerList = [];\r\n this.deskPokerObj = null;\r\n this.oldPokerList = [];\r\n this.currentPlayer = [];\r\n this.dizhu = null;\r\n\r\n this.init();\r\n }\r\n\r\n init(){\r\n this.initPokerList();\r\n this.initPlayerList();\r\n this.sendPoker();\r\n\r\n this.start();\r\n }\r\n\r\n start(){\r\n this.currentPlayer = this.dizhu;\r\n if(this.currentPlayer.isRobot){\r\n this.currentPlayer.playByAI();\r\n }\r\n }\r\n\r\n next(){\r\n let over = this.checkGameOver();\r\n if(over){\r\n this.gameOver();\r\n return;\r\n }\r\n this.currentPlayer = this.currentPlayer.next;\r\n if(this.currentPlayer.isRobot){\r\n this.currentPlayer.playByAI();\r\n }\r\n }\r\n\r\n gameOver(){\r\n alert('gameOver! '+this.currentPlayer.name+' ['+this.currentPlayer.type+'] win!');\r\n }\r\n\r\n checkGameOver(){\r\n if(this.currentPlayer.pokerList.length === 0) {\r\n return true;\r\n }\r\n }\r\n\r\n clearDesk(){\r\n if(this.deskPokerObj){\r\n this.oldPokerList.push(this.deskPokerObj);\r\n this.deskPokerObj = null;\r\n }\r\n }\r\n\r\n sendPoker(){\r\n let player = this.playerList[0];\r\n do{\r\n let index = this.getRandomIntInclusive(0,this.pokerList.length-1);\r\n let poker = this.pokerList.splice(index,1)[0];\r\n player.addPoker(poker);\r\n player = player.next;\r\n }while(this.pokerList.length>3);\r\n\r\n do{\r\n let poker = this.pokerList.splice(0,1)[0];\r\n this.dizhu.addPoker(poker);\r\n }while(this.pokerList.length>0);\r\n\r\n for(let i=0; i<this.playerList.length; i++){\r\n this.playerList[i].sortPoker();\r\n }\r\n }\r\n\r\n initPlayerList(){\r\n this.playerList = [];\r\n let player0 = new Player({\r\n name: 'player',\r\n isRobot: false,\r\n game: this,\r\n });\r\n let player1 = new Player({\r\n name: 'robot1',\r\n isRobot: true,\r\n game: this,\r\n });\r\n let player2 = new Player({\r\n name: 'robot2',\r\n isRobot: true,\r\n game: this,\r\n });\r\n this.playerList = [player0,player1,player2];\r\n\r\n this.playerList[0].next = this.playerList[1];\r\n this.playerList[1].next = this.playerList[2];\r\n this.playerList[2].next = this.playerList[0];\r\n this.playerList[0].last = this.playerList[2];\r\n this.playerList[1].last = this.playerList[0];\r\n this.playerList[2].last = this.playerList[1];\r\n\r\n let dizhuIndex = this.getRandomIntInclusive(0,2);\r\n this.playerList[dizhuIndex].type = 'dizhu';\r\n this.dizhu = this.playerList[dizhuIndex];\r\n }\r\n\r\n initPokerList(){\r\n this.pokerList = [];\r\n for(let number=3; number<=15; number++){\r\n for(let type=0; type<4; type++){\r\n let poker = new Poker({\r\n number: number,\r\n type: type,\r\n });\r\n this.pokerList.push(poker);\r\n }\r\n }\r\n for(let number=16; number<=17; number++){\r\n let poker = new Poker({\r\n number: number,\r\n });\r\n this.pokerList.push(poker);\r\n }\r\n\r\n }\r\n\r\n pokerListToString(){\r\n let result = '';\r\n result += Poker.pokerListToString(this.pokerList);\r\n result += '\\n';\r\n for(let i=0; i<this.oldPokerList.length; i++){\r\n result += Poker.pokerListToString(this.oldPokerList[i].poker);\r\n if(i<this.oldPokerList.length-1){\r\n result += ',';\r\n }\r\n }\r\n result += '\\n';\r\n result += this.deskPokerObj?Poker.pokerListToString(this.deskPokerObj.poker):'';\r\n return result;\r\n }\r\n\r\n getRandomIntInclusive(min, max) {\r\n return Math.floor(Math.random() * (max - min + 1)) + min;\r\n }\r\n}\r\n\r\nexport default Game;","<template>\n <div>\n <div style=\"width: 300px;height:300px;float: left; position: fixed ; left: 0px; top: 0px; background-color: aliceblue; text-align: center\">\n <span>\n {{player2Str[0]}}\n </br>\n {{player2Str[1]}}\n </br></br>\n {{player2Str[2]}}\n </span>\n </div>\n\n <div style=\"width: 300px;height:300px;float: left; position: fixed ; left: 600px; top: 0px; background-color: aliceblue; text-align: center\">\n <span>\n {{player1Str[0]}}\n </br>\n {{player1Str[1]}}\n </br></br>\n {{player1Str[2]}}\n </span>\n </div>\n\n <div style=\"width: 300px;height:300px;float: left; position: fixed ; left: 300px; top: 300px; background-color: aliceblue; text-align: center\">\n <span>\n {{player0Str[0]}}\n </br>\n {{player0Str[1]}}\n </br></br>\n {{player0Str[2]}}\n </span>\n <div>\n <input v-model=\"playerStr\" type=\"text\"/>\n <button @click=\"sendPoker\">send</button>\n <button @click=\"pass\">pass</button>\n </div>\n </div>\n\n <div style=\"width: 300px;height:300px;float: left; position: fixed ; left: 300px; top: 0px; background-color: aliceblue; text-align: center\">\n <div style=\"width: 300px;word-wrap: break-word;\">\n {{deskStr[0]}}\n </br>\n {{deskStr[1]}}\n </div>\n </div>\n\n <div style=\"position: fixed;left: 300px;top: 600px;\">\n <button @click=\"reStart\">reStart</button>\n </div>\n </div>\n</template>\n\n\n<script>\n import Game from \"../doudizhu/Game\";\nexport default {\n name: 'HelloWorld',\n data(){\n return {\n data:'fuck1',\n game: new Game(),\n playerStr: '',\n }\n },\n computed: {\n\n player2Str: function () {\n let game = this.game;\n let i = 2;\n return [\n game.playerList[i].name+' : '+game.playerList[i].type+' : '+game.playerList[i].pokerList.length,\n game.playerList[i].pokerListToString(),\n 'last : '+game.playerList[i].lastSendObjToString()\n ];\n },\n player1Str: function () {\n let game = this.game;\n let i = 1;\n return [\n game.playerList[i].name+' : '+game.playerList[i].type+' : '+game.playerList[i].pokerList.length,\n game.playerList[i].pokerListToString(),\n 'last : '+game.playerList[i].lastSendObjToString()\n ];\n },\n player0Str: function () {\n let game = this.game;\n let i = 0;\n return [\n game.playerList[i].name+' : '+game.playerList[i].type+' : '+game.playerList[i].pokerList.length,\n game.playerList[i].pokerListToString(),\n 'last : '+game.playerList[i].lastSendObjToString()\n ];\n },\n deskStr: function () {\n let game = this.game;\n return [\n 'desk',\n game.pokerListToString()\n ];\n },\n },\n mounted() {\n this.data = this.game.playerList[1].name;\n },\n methods:{\n reDraw() {\n\n },\n\n sendPoker() {\n let game = this.game;\n let success = game.playerList[0].playByString(this.playerStr);\n if(success){\n this.playerStr='';\n }\n },\n\n pass() {\n this.game.playerList[0].playByString('pass');\n },\n\n reStart() {\n this.game = new Game();\n this.playerStr='';\n },\n\n },\n}\n</script>\n\n<style scoped>\n\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HelloWorld.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HelloWorld.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HelloWorld.vue?vue&type=template&id=62298b0c&scoped=true&\"\nimport script from \"./HelloWorld.vue?vue&type=script&lang=js&\"\nexport * from \"./HelloWorld.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"62298b0c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticStyle:{\"user-select\":\"none\"}},[_c('div',{staticStyle:{\"width\":\"300px\",\"height\":\"300px\",\"float\":\"left\",\"position\":\"fixed\",\"left\":\"0px\",\"top\":\"0px\",\"background-color\":\"aliceblue\",\"text-align\":\"center\"}},[_c('span',[_vm._v(\" \"+_vm._s(_vm.player2Str[0])+\" \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.player2Str[1])+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.player2Str[2])+\" \")])]),_c('div',{staticStyle:{\"width\":\"300px\",\"height\":\"300px\",\"float\":\"left\",\"position\":\"fixed\",\"left\":\"600px\",\"top\":\"0px\",\"background-color\":\"aliceblue\",\"text-align\":\"center\"}},[_c('span',[_vm._v(\" \"+_vm._s(_vm.player1Str[0])+\" \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.player1Str[1])+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.player1Str[2])+\" \")])]),_c('div',{staticStyle:{\"width\":\"300px\",\"height\":\"300px\",\"float\":\"left\",\"position\":\"fixed\",\"left\":\"300px\",\"top\":\"300px\",\"background-color\":\"aliceblue\",\"text-align\":\"center\"}},[_c('span',[_vm._v(\" \"+_vm._s(_vm.player0Str[0])+\" \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.player0Str[1])+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.player0Str[2])+\" \")]),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.playerStr),expression:\"playerStr\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.playerStr)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.playerStr=$event.target.value}}}),_c('button',{on:{\"click\":_vm.sendPoker}},[_vm._v(\"send\")]),_c('button',{on:{\"click\":_vm.pass}},[_vm._v(\"pass\")])])]),_c('div',{staticStyle:{\"width\":\"300px\",\"height\":\"300px\",\"float\":\"left\",\"position\":\"fixed\",\"left\":\"300px\",\"top\":\"0px\",\"background-color\":\"aliceblue\",\"text-align\":\"center\"}},[_c('div',{staticStyle:{\"width\":\"300px\",\"word-wrap\":\"break-word\"}},[_vm._v(\" \"+_vm._s(_vm.deskStr[0])+\" \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.deskStr[1])+\" \")])]),_c('div',{staticStyle:{\"position\":\"fixed\",\"left\":\"300px\",\"top\":\"600px\"}},[_c('button',{on:{\"click\":_vm.reStart}},[_vm._v(\"reStart\")])]),_c('div',{staticStyle:{\"position\":\"fixed\",\"bottom\":\"0\",\"width\":\"100%\",\"height\":\"200px\"},style:({ marginLeft: _vm.playerMarginLeft + 'px' })},_vm._l((_vm.game.playerList[0].pokerList),function(item){return _c('div',{staticClass:\"poker\",class:{ selected: item.selected },on:{\"mouseenter\":function($event){return _vm.enter($event,item)},\"mousedown\":function($event){return _vm.pickPoker(item)}}},[_vm._v(\" \"+_vm._s(item.text)+\" \")])}),0),_c('div',{staticStyle:{\"position\":\"fixed\",\"bottom\":\"200px\",\"width\":\"100%\",\"height\":\"100px\",\"text-align\":\"left\"}},[_c('div',{staticStyle:{\"width\":\"200px\",\"height\":\"30px\"},style:({ marginLeft: _vm.buttonMarginLeft + 'px' })},[_c('button',{staticStyle:{\"height\":\"30px\",\"border-radius\":\"4px\",\"float\":\"left\"},on:{\"click\":_vm.sendPoker2}},[_vm._v(\"出牌\")]),_c('button',{staticStyle:{\"height\":\"30px\",\"border-radius\":\"4px\",\"margin-left\":\"20px\",\"float\":\"right\"},on:{\"click\":_vm.pass}},[_vm._v(\"不出\")])])]),_c('div',{staticStyle:{\"position\":\"fixed\",\"bottom\":\"400px\",\"width\":\"100%\",\"height\":\"200px\"},style:({ marginLeft: _vm.deskPokerMarginLeft + 'px' })},_vm._l((_vm.deskPoker),function(item){return _c('div',{staticStyle:{\"height\":\"100%\",\"width\":\"100px\",\"border\":\"solid 1px\",\"border-radius\":\"8px\",\"float\":\"left\",\"margin-left\":\"-50px\",\"background-color\":\"azure\"}},[_vm._v(\" \"+_vm._s(item.text)+\" \")])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div style=\"user-select: none\">\n <div style=\"width: 300px;height:300px;float: left; position: fixed ; left: 0px; top: 0px; background-color: aliceblue; text-align: center\">\n <span>\n {{player2Str[0]}}\n </br>\n {{player2Str[1]}}\n </br></br>\n {{player2Str[2]}}\n </span>\n </div>\n\n <div style=\"width: 300px;height:300px;float: left; position: fixed ; left: 600px; top: 0px; background-color: aliceblue; text-align: center\">\n <span>\n {{player1Str[0]}}\n </br>\n {{player1Str[1]}}\n </br></br>\n {{player1Str[2]}}\n </span>\n </div>\n\n <div style=\"width: 300px;height:300px;float: left; position: fixed ; left: 300px; top: 300px; background-color: aliceblue; text-align: center\">\n <span>\n {{player0Str[0]}}\n </br>\n {{player0Str[1]}}\n </br></br>\n {{player0Str[2]}}\n </span>\n <div>\n <input v-model=\"playerStr\" type=\"text\"/>\n <button @click=\"sendPoker\">send</button>\n <button @click=\"pass\">pass</button>\n </div>\n </div>\n\n <div style=\"width: 300px;height:300px;float: left; position: fixed ; left: 300px; top: 0px; background-color: aliceblue; text-align: center\">\n <div style=\"width: 300px;word-wrap: break-word;\">\n {{deskStr[0]}}\n </br>\n {{deskStr[1]}}\n </div>\n </div>\n\n <div style=\"position: fixed;left: 300px;top: 600px;\">\n <button @click=\"reStart\">reStart</button>\n </div>\n\n <div :style=\"{ marginLeft: playerMarginLeft + 'px' }\" style=\"position: fixed;bottom:0;width: 100%;height: 200px;\">\n <div @mouseenter=\"enter($event,item)\" @mousedown=\"pickPoker(item)\" v-for=\"item in game.playerList[0].pokerList\" :class=\"{ selected: item.selected }\" class=\"poker\" style=\"\">\n {{item.text}}\n </div>\n </div>\n\n <div style=\"position: fixed;bottom:200px;width: 100%;height: 100px;text-align:left;\">\n <div :style=\"{ marginLeft: buttonMarginLeft + 'px' }\" style=\"width: 200px;height: 30px;\">\n <button @click=\"sendPoker2\" style=\"height: 30px;border-radius: 4px;float:left\">出牌</button>\n <button @click=\"pass\" style=\"height: 30px;border-radius: 4px;margin-left: 20px;float:right\">不出</button>\n </div>\n </div>\n\n <div :style=\"{ marginLeft: deskPokerMarginLeft + 'px' }\" style=\"position: fixed;bottom:400px;width: 100%;height: 200px\">\n <div v-for=\"item in deskPoker\" style=\"height:100%;width:100px;border: solid 1px;border-radius: 8px;float: left;margin-left:-50px;background-color: azure\">\n {{item.text}}\n </div>\n </div>\n </div>\n</template>\n\n\n<script>\n import Game from \"../doudizhu/Game\";\nexport default {\n name: 'HelloWorld',\n data(){\n return {\n data:'fuck1',\n game: new Game(),\n playerStr: '',\n pokerList: [],\n }\n },\n computed: {\n\n playerMarginLeft: function(){\n return (window.innerWidth - (this.game.playerList[0].pokerList.length*50))/2;\n },\n deskPokerMarginLeft: function(){\n return (window.innerWidth - (this.deskPoker.length*50))/2;\n },\n buttonMarginLeft: function(){\n return (window.innerWidth - 200)/2;\n },\n\n deskPoker: function(){\n if(this.game.deskPokerObj && this.game.deskPokerObj.poker){\n if(this.game.deskPokerObj.poker[0] && this.game.deskPokerObj.poker[0].text){\n return this.game.deskPokerObj.poker;\n }\n }\n return [];\n },\n player2Str: function () {\n let game = this.game;\n let i = 2;\n return [\n game.playerList[i].name+' : '+game.playerList[i].type+' : '+game.playerList[i].pokerList.length,\n game.playerList[i].pokerListToString(),\n 'last : '+game.playerList[i].lastSendObjToString()\n ];\n },\n player1Str: function () {\n let game = this.game;\n let i = 1;\n return [\n game.playerList[i].name+' : '+game.playerList[i].type+' : '+game.playerList[i].pokerList.length,\n game.playerList[i].pokerListToString(),\n 'last : '+game.playerList[i].lastSendObjToString()\n ];\n },\n player0Str: function () {\n let game = this.game;\n let i = 0;\n return [\n game.playerList[i].name+' : '+game.playerList[i].type+' : '+game.playerList[i].pokerList.length,\n game.playerList[i].pokerListToString(),\n 'last : '+game.playerList[i].lastSendObjToString()\n ];\n },\n deskStr: function () {\n let game = this.game;\n return [\n 'desk',\n game.pokerListToString()\n ];\n },\n },\n mounted() {\n this.data = this.game.playerList[1].name;\n },\n methods:{\n enter: function(e, poker){\n if(e.buttons === 1){\n this.pickPoker(poker);\n }\n },\n\n pickPoker(poker){\n if(!poker.selected){\n poker.selected = true;\n this.pokerList.push(poker);\n }else{\n poker.selected = false;\n for(let i=0; i<this.pokerList.length; i++){\n if(this.pokerList[i] === poker){\n this.pokerList.splice(i,1);\n }\n }\n }\n },\n\n sendPoker2() {\n let game = this.game;\n let success = game.playerList[0].playByPokerList(this.pokerList);\n if(success){\n this.pokerList=[];\n }\n },\n\n sendPoker() {\n let game = this.game;\n let success = game.playerList[0].playByString(this.playerStr);\n if(success){\n this.playerStr='';\n }\n },\n\n pass() {\n this.game.playerList[0].playByString('pass');\n },\n\n reStart() {\n this.game = new Game();\n this.playerStr='';\n },\n\n },\n}\n</script>\n\n<style scoped>\n .poker{\n height:100%;width:100px;border: solid 1px;border-radius: 8px;float: left;margin-left:-50px;background-color: azure;\n }\n .poker:hover{\n background-color: antiquewhite;\n }\n\n .selected{\n margin-top: -20px;\n }\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Game.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Game.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Game.vue?vue&type=template&id=b556cf7e&scoped=true&\"\nimport script from \"./Game.vue?vue&type=script&lang=js&\"\nexport * from \"./Game.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Game.vue?vue&type=style&index=0&id=b556cf7e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b556cf7e\",\n null\n \n)\n\nexport default component.exports","<template>\n <div id=\"app\">\n <Game></Game>\n </div>\n</template>\n\n<script>\nimport HelloWorld from './components/HelloWorld.vue';\nimport Game from './components/Game.vue';\n\nexport default {\n name: 'App',\n components: {\n HelloWorld,\n Game,\n }\n}\n</script>\n\n<style>\n\n</style>\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=51e9b17b&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport App from './App.vue'\n\nVue.config.productionTip = false;\n\nnew Vue({\n render: h => h(App),\n}).$mount('#app');\n"],"sourceRoot":""}
\ No newline at end of file
(function(e){function t(t){for(var n,l,o=t[0],a=t[1],h=t[2],p=0,g=[];p<o.length;p++)l=o[p],Object.prototype.hasOwnProperty.call(i,l)&&i[l]&&g.push(i[l][0]),i[l]=0;for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n]);u&&u(t);while(g.length)g.shift()();return s.push.apply(s,h||[]),r()}function r(){for(var e,t=0;t<s.length;t++){for(var r=s[t],n=!0,o=1;o<r.length;o++){var a=r[o];0!==i[a]&&(n=!1)}n&&(s.splice(t--,1),e=l(l.s=r[0]))}return e}var n={},i={app:0},s=[];function l(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,l),r.l=!0,r.exports}l.m=e,l.c=n,l.d=function(e,t,r){l.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},l.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,t){if(1&t&&(e=l(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(l.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)l.d(r,n,function(t){return e[t]}.bind(null,n));return r},l.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return l.d(t,"a",t),t},l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},l.p="";var o=window["webpackJsonp"]=window["webpackJsonp"]||[],a=o.push.bind(o);o.push=t,o=o.slice();for(var h=0;h<o.length;h++)t(o[h]);var u=a;s.push([0,"chunk-vendors"]),r()})({0:function(e,t,r){e.exports=r("56d7")},"56d7":function(e,t,r){"use strict";r.r(t);r("e260"),r("e6cf"),r("cca6"),r("a79d");var n=r("2b0e"),i=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{attrs:{id:"app"}},[r("Game")],1)},s=[],l=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",[r("div",{staticStyle:{width:"300px",height:"300px",float:"left",position:"fixed",left:"0px",top:"0px","background-color":"aliceblue","text-align":"center"}},[r("span",[e._v(" "+e._s(e.player2Str[0])+" "),r("br"),e._v(" "+e._s(e.player2Str[1])+" "),r("br"),r("br"),e._v(" "+e._s(e.player2Str[2])+" ")])]),r("div",{staticStyle:{width:"300px",height:"300px",float:"left",position:"fixed",left:"600px",top:"0px","background-color":"aliceblue","text-align":"center"}},[r("span",[e._v(" "+e._s(e.player1Str[0])+" "),r("br"),e._v(" "+e._s(e.player1Str[1])+" "),r("br"),r("br"),e._v(" "+e._s(e.player1Str[2])+" ")])]),r("div",{staticStyle:{width:"300px",height:"300px",float:"left",position:"fixed",left:"300px",top:"300px","background-color":"aliceblue","text-align":"center"}},[r("span",[e._v(" "+e._s(e.player0Str[0])+" "),r("br"),e._v(" "+e._s(e.player0Str[1])+" "),r("br"),r("br"),e._v(" "+e._s(e.player0Str[2])+" ")]),r("div",[r("input",{directives:[{name:"model",rawName:"v-model",value:e.playerStr,expression:"playerStr"}],attrs:{type:"text"},domProps:{value:e.playerStr},on:{input:function(t){t.target.composing||(e.playerStr=t.target.value)}}}),r("button",{on:{click:e.sendPoker}},[e._v("send")]),r("button",{on:{click:e.pass}},[e._v("pass")])])]),r("div",{staticStyle:{width:"300px",height:"300px",float:"left",position:"fixed",left:"300px",top:"0px","background-color":"aliceblue","text-align":"center"}},[r("div",{staticStyle:{width:"300px","word-wrap":"break-word"}},[e._v(" "+e._s(e.deskStr[0])+" "),r("br"),e._v(" "+e._s(e.deskStr[1])+" ")])]),r("div",{staticStyle:{position:"fixed",left:"300px",top:"600px"}},[r("button",{on:{click:e.reStart}},[e._v("reStart")])])])},o=[],a=(r("b0c0"),r("a434"),r("d4ec")),h=r("bee2"),u=(r("99af"),r("0481"),r("d81d"),r("fb6a"),r("4069"),r("d3b7"),r("25f0"),function(){function e(t){Object(a["a"])(this,e),t.text?(this.text=t.text,this.number=e.textToNumber(t.text)):(this.number=t.number,this.text=e.numberToText(t.number)),this.type=t.type,this.selected=t.selected}return Object(h["a"])(e,[{key:"toString",value:function(){return this.text}}],[{key:"textToNumber",value:function(e){switch(e){case"3":return 3;case"4":return 4;case"5":return 5;case"6":return 6;case"7":return 7;case"8":return 8;case"9":return 9;case"10":case"0":case"T":case"t":return 10;case"11":case"j":case"J":return 11;case"12":case"q":case"Q":return 12;case"13":case"k":case"K":return 13;case"1":case"a":case"A":return 14;case"2":return 15;case"s":case"S":return 16;case"x":case"X":return 17}}},{key:"numberToText",value:function(e){switch(e){case 3:return"3";case 4:return"4";case 5:return"5";case 6:return"6";case 7:return"7";case 8:return"8";case 9:return"9";case 10:return"10";case 11:return"J";case 12:return"Q";case 13:return"K";case 14:return"A";case 15:return"2";case 16:return"S";case 17:return"X"}}},{key:"sortFunction",value:function(e,t){return e.number-t.number}},{key:"getObjByPokerList",value:function(t){if("pass"===t[0])return{type:"pass",poker:t};t.sort(e.sortFunction);for(var r=t[0],n=[r],i=[],s=1;s<t.length;s++)t[s].number!==r.number?(i.push(n),n=[t[s]]):n.push(t[s]),r=t[s];i.push(n);for(var l=[],o=[],a=[],h=[],u=0;u<i.length;u++)3===i[u].length?a.push(i[u]):2===i[u].length?o.push(i[u]):1===i[u].length?l.push(i[u]):4===i[u].length&&h.push(i[u]);if(1===t.length)return{type:"one",poker:t,one:t};if(2===t.length){if(1===o.length)return{type:"two",poker:t,two:t};if(16===t[0].number&&17===t[1].number)return{type:"sx",poker:t,sx:t}}else if(3===t.length){if(1===a.length)return{type:"three",poker:t,three:t}}else if(4===t.length){if(1===a.length)return{type:"threeWithOne",poker:t,three:a[0],one:l[0]};if(1===h.length)return{type:"four",poker:t,four:t}}else if(5===t.length){if(1===a.length&&1===o.length)return{type:"threeWithTwo",poker:t,three:a[0],two:o[0]};if(1===h.length&&1===l.length)return{type:"fourWithOne",poker:t,four:h[0],one:l[0]}}else if(6===t.length&&1===h.length&&1===o.length)return{type:"fourWithTwo",poker:t,four:h[0],two:o[0]};if(a.length>=2&&a[a.length-1][0].number<=14&&a[0][0].number+a.length-1===a[a.length-1][0].number){if(t.length-3*a.length===a.length)return{type:"threeWithOneList",poker:t,list:a.map((function(e){return{three:e}}))};if(o.length===a.length)return{type:"threeWithTwoList",poker:t,list:a.map((function(e){return{three:e}}))}}return t.length>=5&&t[t.length-1].number<=14&&l.length===t.length&&t[0].number+t.length-1===t[t.length-1].number?{type:"oneList",poker:t,list:l.map((function(e){return{one:e}}))}:t.length>=6&&t[t.length-1].number<=14&&t.length%2===0&&o.length===t.length/2&&t[0].number+t.length/2-1===t[t.length-1].number?{type:"twoList",poker:t,list:o.map((function(e){return{two:e}}))}:t.length>=6&&t[t.length-1].number<=14&&t.length%3===0&&a.length===t.length/3&&t[0].number+t.length/3-1===t[t.length-1].number&&{type:"threeList",poker:t,list:a.map((function(e){return{three:e}}))}}},{key:"pokerListToString",value:function(e){for(var t="",r=0;r<e.length;r++){var n=e[r].toString();t+=n}return t}}]),e}()),p=u,g=function(){function e(t){Object(a["a"])(this,e),t=t||{},this.pokerList=[],this.name=t.name||"noName"+Math.random(),this.type=t.type||"nongmin",this.last=null,this.next=null,this.isRobot=t.isRobot,this.game=t.game,this.lastSendObj=null}return Object(h["a"])(e,[{key:"addPoker",value:function(e){this.pokerList.push(e)}},{key:"sortPoker",value:function(){this.pokerList.sort(this.sortFunction)}},{key:"sortFunction",value:function(e,t){return e.number-t.number}},{key:"getLastObj",value:function(){var e=this.last.lastSendObj;return!!(e&&"pass"!==e.type||(e=this.next.lastSendObj,e&&"pass"!==e.type))&&e}},{key:"playByAI",value:function(){var e=this;setTimeout((function(){var t=e.getLastObj();t?e.playByObj(t):e.playByAllType()}),1e3)}},{key:"sendPoker",value:function(e){this.game.clearDesk(),this.lastSendObj=e,this.game.deskPokerObj=e,this.game.next()}},{key:"playByAllType",value:function(){for(var e=["threeWithTwoList","threeWithOneList","threeList","twoList","fourWithTwo","fourWithOne","threeWithTwo","oneList","threeWithOne","three","two","one","four","sx","pass"],t=0;t<e.length;t++){var r=this.getSmallestObjByType(e[t]);if(r){var n=this.deleteFromPokerListAndSendByObj(r);return void(n||alert("error!"))}}}},{key:"deleteFromPokerListAndSendByObj",value:function(e){var t=[];if("pass"===e.type)return this.sendPoker(e),!0;for(var r=e.poker,n=0;n<r.length;n++){var i=this.getAndDeleteOnePokerByNumber(r[n].number);if(!i)return this.listBackToPokerList(t),!1;t.push(i)}return this.sendPoker(e),!0}},{key:"getSmallestObjByType",value:function(e){for(var t=this.pokerList,r=t[0],n=[r],i=[],s=1;s<t.length;s++)t[s].number!==r.number?(i.push(n),n=[t[s]]):n.push(t[s]),r=t[s];i.push(n);for(var l=[],o=[],a=[],h=[],u=0;u<i.length;u++)3===i[u].length?a.push(i[u]):2===i[u].length?o.push(i[u]):1===i[u].length?l.push(i[u]):4===i[u].length&&h.push(i[u]);var p=null;if("one"===e){if(l.length>0)p={type:e,poker:l[0],one:l[0]};else if(o.length>0){var g=o[0].slice(0,1);p={type:e,poker:g,one:g}}else if(a.length>0){var f=a[0].slice(0,1);p={type:e,poker:f,one:f}}}else if("two"===e){if(o.length>0)p={type:e,poker:o[0],two:o[0]};else if(a.length>0){var c=a[0].slice(0,2);p={type:e,poker:c,one:c}}}else if("three"===e)a.length>0&&(p={type:e,poker:a[0],three:a[0]});else if("threeWithOne"===e){if(a.length>0){var y;if(l.length>0)y=l[0];else if(o.length>0)y=o[0].slice(0,1);else if(a.length>0)for(var k=0;k<a.length;k++)0!==k&&(y=a[k].slice(0,1));y&&(p={type:e,poker:a[0].concat(y),three:a[0],one:y})}}else if("four"===e)h.length>0&&(p={type:e,poker:h[0],four:h[0]});else if("threeWithTwo"===e){if(a.length>0){var m;if(o.length>0)m=o[0];else if(a.length>0)for(var v=0;v<a.length;v++)0!==v&&(m=a[v].slice(0,2));m&&(p={type:e,poker:a[0].concat(m),three:a[0],two:m})}}else if("fourWithOne"===e){var b;if(h.length>0)l.length>0?b=l[0]:o.length>0?b=o[0].slice(0,1):a.length>0&&(b=a[0].slice(0,1)),b&&(p={type:e,poker:h[0].concat(b),four:h[0],one:b})}else if("fourWithTwo"===e){var d;if(h.length>0)o.length>0?d=o[0]:a.length>0&&(d=a[0].slice(0,2)),d&&(p={type:e,poker:h[0].concat(d),four:h[0],two:d})}else if("threeWithOneList"===e){if(a.length>=2)for(var L=0;L<a.length-2+1;L++)if(a[L][0].number+2-1===a[L+2-1][0].number&&a[L+2-1][0].number<=14){for(var x=[],S=0;S<l.length&&x.length<2;S++)x.push(l[S]);for(var w=0;w<o.length&&x.length<2;w++)x.push(o[w].slice(0,1)),x.length<2&&x.push(o[w].slice(1,2));for(var P=0;P<a.length&&x.length<2;P++)x.push(a[P].slice(0,1)),x.length<2&&x.push(a[P].slice(1,2)),x.length<2&&x.push(a[P].slice(2,3));if(2===x.length){for(var O=[],_=[],T=0;T<2;T++){O.concat(a[L+T]),O.concat(x[L]);var j={three:a[L+T],one:x[L]};_.push(j)}p={type:e,poker:O,list:_}}break}}else if("threeWithTwoList"===e){if(a.length>=2)for(var B=0;B<a.length-2+1;B++)if(a[B][0].number+2-1===a[B+2-1][0].number&&a[B+2-1][0].number<=14){for(var W=[],M=0;M<o.length&&W.length<2;M++)W.push(o);for(var A=0;A<a.length&&W.length<2;A++)W.push(a[A].slice(0,2));if(2===W.length){for(var N=[],R=[],I=0;I<2;I++){N.concat(a[B+I]),N.concat(W[B]);var z={three:a[B+I],two:W[B]};R.push(z)}p={type:e,poker:N,list:R}}break}}else if("oneList"===e){if(l.length>=5)for(var D=0;D<l.length-5+1;D++)if(l[D][0].number+5-1===l[D+5-1][0].number&&l[D+5-1][0].number<=14){var F=l.slice(D,D+5);p={type:e,poker:F.flat(1),list:F.map((function(e){return{one:e}}))};break}}else if("twoList"===e){if(o.length>=3)for(var G=0;G<o.length-3+1;G++)if(o[G][0].number+3-1===o[G+3-1][0].number&&o[G+3-1][0].number<=14){var J=o.slice(G,G+3);p={type:e,poker:J.flat(1),list:J.map((function(e){return{two:e}}))};break}}else if("threeList"===e){if(a.length>=2)for(var $=0;$<a.length-2+1;$++)if(a[$][0].number+2-1===a[$+2-1][0].number&&a[$+2-1][0].number<=14){var E=a.slice($,$+2);p={type:e,poker:E.flat(1),list:E.map((function(e){return{three:e}}))};break}}else if("sx"===e){if(l.length>=2)for(var H=0;H<l.length-1;H++)if(16===l[H][0].number){var C=o.slice(H,H+2),K=C.flat(1);p={type:e,poker:K,sx:K};break}}else"pass"===e&&(p={type:e,poker:["pass"]});return p}},{key:"getObjByObj",value:function(e){for(var t=this.pokerList,r=t[0],n=[r],i=[],s=1;s<t.length;s++)t[s].number!==r.number?(i.push(n),n=[t[s]]):n.push(t[s]),r=t[s];i.push(n);for(var l=[],o=[],a=[],h=[],u=0;u<i.length;u++)3===i[u].length?a.push(i[u]):2===i[u].length?o.push(i[u]):1===i[u].length?l.push(i[u]):4===i[u].length&&h.push(i[u]);var p=e.type,g=null;if("one"===p){if(l.length>0){for(var f=0;f<l.length;f++)if(l[f][0].number>e.one[0].number){g={type:p,poker:l[f],one:l[f]};break}}else if(o.length>0){for(var c=0;c<o.length;c++)if(o[c][0].number>e.one[0].number){var y=o[c].slice(0,1);g={type:p,poker:y,one:y};break}}else if(a.length>0)for(var k=0;k<a.length;k++)if(a[k][0].number>e.one[0].number){var m=a[k].slice(0,1);g={type:p,poker:m,one:m};break}}else if("two"===p){if(o.length>0){for(var v=0;v<o.length;v++)if(o[v][0].number>e.two[0].number){g={type:p,poker:o[v],two:o[v]};break}}else if(a.length>0)for(var b=0;b<a.length;b++)if(a[b][0].number>e.two[0].number){var d=a[b].slice(0,2);g={type:p,poker:d,one:d};break}}else if("three"===p){if(a.length>0)for(var L=0;L<a.length;L++)if(a[L][0].number>e.three[0].number){g={type:p,poker:a[L],three:a[L]};break}}else if("threeWithOne"===p){if(a.length>0)for(var x=0;x<a.length;x++)if(a[x][0].number>e.three[0].number){var S=void 0;if(l.length>0)S=l[0];else if(o.length>0)S=o[0].slice(0,1);else if(a.length>0)for(var w=0;w<a.length;w++)w!==x&&(S=a[w].slice(0,1));S&&(g={type:p,poker:a[x].concat(S),three:a[x],one:S});break}}else if("threeWithTwo"===p){if(a.length>0)for(var P=0;P<a.length;P++)if(a[P][0].number>e.three[0].number){var O=void 0;if(o.length>0)O=o[0];else if(a.length>0)for(var _=0;_<a.length;_++)_!==P&&(O=a[_].slice(0,2));O&&(g={type:p,poker:a[P].concat(O),three:a[P],two:O});break}}else if("fourWithOne"===p){if(h.length>0)for(var T=0;T<h.length;T++)if(h[T][0].number>e.four[0].number){var j=void 0;l.length>0?j=l[0]:o.length>0?j=o[0].slice(0,1):a.length>0&&(j=a[0].slice(0,1)),j&&(g={type:p,poker:h[T].concat(j),four:h[T],one:j});break}}else if("fourWithTwo"===p){if(h.length>0)for(var B=0;B<h.length;B++)if(h[B][0].number>e.four[0].number){var W=void 0;o.length>0?W=o[0]:a.length>0&&(W=a[0].slice(0,2)),W&&(g={type:p,poker:h[B].concat(W),four:h[B],two:W});break}}else if("threeWithOneList"===p){if(a.length>=e.list.length)for(var M=0;M<a.length-e.list.length+1;M++)if(a[M][0].number>e.list[0].three[0].number&&a[M][0].number+e.list.length-1===a[M+e.list.length-1][0].number&&a[M+e.list.length-1][0].number<=14){for(var A=[],N=0;N<l.length&&A.length<e.list.length;N++)A.push(l[N]);for(var R=0;R<o.length&&A.length<e.list.length;R++)A.push(o[R].slice(0,1)),A.length<e.list.length&&A.push(o[R].slice(1,2));for(var I=0;I<a.length&&A.length<e.list.length;I++)A.push(a[I].slice(0,1)),A.length<e.list.length&&A.push(a[I].slice(1,2)),A.length<e.list.length&&A.push(a[I].slice(2,3));if(A.length===e.list.length){for(var z=[],D=[],F=0;F<e.list.length;F++){z.concat(a[M+F]),z.concat(A[M]);var G={three:a[M+F],one:A[M]};D.push(G)}g={type:p,poker:z,list:D}}break}}else if("threeWithTwoList"===p){if(a.length>=e.list.length)for(var J=0;J<a.length-e.list.length+1;J++)if(a[J][0].number>e.list[0].three[0].number&&a[J][0].number+e.list.length-1===a[J+e.list.length-1][0].number&&a[J+e.list.length-1][0].number<=14){for(var $=[],E=0;E<o.length&&$.length<e.list.length;E++)$.push(o);for(var H=0;H<a.length&&$.length<e.list.length;H++)$.push(a[H].slice(0,2));if($.length===e.list.length){for(var C=[],K=[],Q=0;Q<e.list.length;Q++){C.concat(a[J+Q]),C.concat($[J]);var X={three:a[J+Q],two:$[J]};K.push(X)}g={type:p,poker:C,list:K}}break}}else if("oneList"===p){if(l.length>=e.list.length)for(var q=0;q<l.length-e.list.length+1;q++)if(l[q][0].number>e.list[0].one[0].number&&l[q][0].number+e.list.length-1===l[q+e.list.length-1][0].number&&l[q+e.list.length-1][0].number<=14){var U=l.slice(q,q+e.list.length);g={type:p,poker:U.flat(1),list:U.map((function(e){return{one:e}}))};break}}else if("twoList"===p){if(o.length>=e.list.length)for(var V=0;V<o.length-e.list.length+1;V++)if(o[V][0].number>e.list[0].two[0].number&&o[V][0].number+e.list.length-1===o[V+e.list.length-1][0].number&&o[V+e.list.length-1][0].number<=14){var Y=o.slice(V,V+e.list.length);g={type:p,poker:Y.flat(1),list:Y.map((function(e){return{two:e}}))};break}}else if("threeList"===p){if(a.length>=e.list.length)for(var Z=0;Z<a.length-e.list.length+1;Z++)if(a[Z][0].number>e.list[0].two[0].number&&a[Z][0].number+e.list.length-1===a[Z+e.list.length-1][0].number&&a[Z+e.list.length-1][0].number<=14){var ee=a.slice(Z,Z+e.list.length);g={type:p,poker:ee.flat(1),list:ee.map((function(e){return{three:e}}))};break}}else if("four"===p&&h.length>0)for(var te=0;te<h.length;te++)if(h[te][0].number>e.four[0].number){g={type:p,poker:h[te],four:h[te]};break}if(g||"four"===p||h.length>0&&(g={type:p,poker:h[0],four:h[0]}),!g&&"sx"!==p&&l.length>1&&16===l[l.length-2]){var re=l[l.length-2].concat(l[l.length-1]);g={type:p,poker:re,sx:re}}return g||(g={type:"pass",poker:["pass"]}),g}},{key:"playByObj",value:function(e){var t=this.getObjByObj(e),r=this.deleteFromPokerListAndSendByObj(t);r||alert("error!")}},{key:"getListByList",value:function(e){var t=[];if("pass"===e[0])return["pass"];for(var r=0;r<e.length;r++){var n=e[r],i=this.getAndDeleteOnePokerByNumber(n.number);if(!i)return this.listBackToPokerList(t),!1;t.push(i)}return t}},{key:"getListByString",value:function(e){var t=[];if("pass"===e)return["pass"];for(var r=0;r<e.length;r++){var n=e[r],i=p.textToNumber(n),s=this.getAndDeleteOnePokerByNumber(i);if(!s)return this.listBackToPokerList(t),!1;t.push(s)}return t}},{key:"listBackToPokerList",value:function(e){while(e.length>0){var t=e.splice(0,1)[0];this.pokerList.push(t)}this.sortPoker()}},{key:"handleList",value:function(e){if(e){var t=p.getObjByPokerList(e);if(t){if("pass"===t.type)return this.sendPoker(t),!0;var r=this.getLastObj();if(r){if(r.type===t.type){var n=this.compareTwoObj(t,r);return n?(this.sendPoker(t),!0):(this.listBackToPokerList(e),alert("have to bigger than "+p.pokerListToString(r.poker)),!1)}return"sx"===t.type||"four"===t.type&&"sx"!==r.type?(this.sendPoker(t),!0):(this.listBackToPokerList(e),alert("type is not "+r.type+"!"),!1)}return this.sendPoker(t),!0}return this.listBackToPokerList(e),alert("type error!"),!1}return alert("poker error!"),!1}},{key:"playByPokerList",value:function(e){if(this.game.currentPlayer!==this)return alert("请等待 "+this.game.currentPlayer.name+" 出牌"),!1;var t=this.getListByList(e);return this.handleList(t)}},{key:"playByString",value:function(e){if(this.game.currentPlayer!==this)return alert("请等待 "+this.game.currentPlayer.name+" 出牌"),!1;var t=this.getListByString(e);return this.handleList(t)}},{key:"compareTwoObj",value:function(e,t){return(!e.list||!t.list||e.list.length===t.list.length)&&("one"===e.type?e.one[0].number>t.one[0].number:"two"===e.type?e.two[0].number>t.two[0].number:"three"===e.type||"threeWithOne"===e.type||"threeWithTwo"===e.type?e.three[0].number>t.three[0].number:"fourWithOne"===e.type||"fourWithTwo"===e.type?e.four[0].number>t.four[0].number:"threeWithOneList"===e.type||"threeWithTwoList"===e.type?e.list[0].three[0].number>t.list[0].three[0].number:"oneList"===e.type?e.list[0].one[0].number>t.list[0].one[0].number:"twoList"===e.type?e.list[0].two[0].number>t.list[0].two[0].number:"threeList"===e.type?e.list[0].three[0].number>t.list[0].three[0].number:"four"===e.type?e.four[0].number>t.four[0].number:void 0)}},{key:"getAndDeleteOnePokerByNumber",value:function(e){for(var t=0;t<this.pokerList.length;t++)if(this.pokerList[t].number===e)return this.pokerList.splice(t,1)[0];return!1}},{key:"pokerListToString",value:function(){var e=p.pokerListToString(this.pokerList);return e}},{key:"lastSendObjToString",value:function(){if(!this.lastSendObj)return"";var e=p.pokerListToString(this.lastSendObj.poker);return e}}]),e}(),f=g,c=function(){function e(){Object(a["a"])(this,e),this.playerList=[],this.pokerList=[],this.deskPokerObj=null,this.oldPokerList=[],this.currentPlayer=[],this.dizhu=null,this.MaxSecond=999999,this.second=this.MaxSecond,this.isOver=!0,this.init()}return Object(h["a"])(e,[{key:"init",value:function(){this.initPokerList(),this.initPlayerList(),this.sendPoker(),this.start()}},{key:"resetTime",value:function(){this.second=this.MaxSecond}},{key:"timeLoop",value:function(){if(!this.isOver){this.second--,0===this.second&&this.timeout();var e=this;setTimeout((function(){e.timeLoop()}),1e3)}}},{key:"timeout",value:function(){this.currentPlayer.playByString("pass")}},{key:"start",value:function(){this.isOver=!1,this.timeLoop(),this.currentPlayer=this.dizhu,this.currentPlayer.isRobot&&this.currentPlayer.playByAI()}},{key:"next",value:function(){var e=this.checkGameOver();e?this.gameOver():(this.resetTime(),this.currentPlayer=this.currentPlayer.next,this.currentPlayer.isRobot&&this.currentPlayer.playByAI())}},{key:"gameOver",value:function(){alert("gameOver! "+this.currentPlayer.name+" ["+this.currentPlayer.type+"] win!"),this.isOver=!0}},{key:"checkGameOver",value:function(){if(0===this.currentPlayer.pokerList.length)return!0}},{key:"clearDesk",value:function(){this.deskPokerObj&&(this.oldPokerList.push(this.deskPokerObj),this.deskPokerObj=null)}},{key:"sendPoker",value:function(){var e=this.playerList[0];do{var t=this.getRandomIntInclusive(0,this.pokerList.length-1),r=this.pokerList.splice(t,1)[0];e.addPoker(r),e=e.next}while(this.pokerList.length>3);do{var n=this.pokerList.splice(0,1)[0];this.dizhu.addPoker(n)}while(this.pokerList.length>0);for(var i=0;i<this.playerList.length;i++)this.playerList[i].sortPoker()}},{key:"initPlayerList",value:function(){this.playerList=[];var e=new f({name:"player",isRobot:!1,game:this}),t=new f({name:"robot1",isRobot:!0,game:this}),r=new f({name:"robot2",isRobot:!0,game:this});this.playerList=[e,t,r],this.playerList[0].next=this.playerList[1],this.playerList[1].next=this.playerList[2],this.playerList[2].next=this.playerList[0],this.playerList[0].last=this.playerList[2],this.playerList[1].last=this.playerList[0],this.playerList[2].last=this.playerList[1];var n=this.getRandomIntInclusive(0,2);this.playerList[n].type="dizhu",this.dizhu=this.playerList[n]}},{key:"initPokerList",value:function(){this.pokerList=[];for(var e=3;e<=15;e++)for(var t=0;t<4;t++){var r=new p({number:e,type:t});this.pokerList.push(r)}for(var n=16;n<=17;n++){var i=new p({number:n});this.pokerList.push(i)}}},{key:"pokerListToString",value:function(){var e="";e+=p.pokerListToString(this.pokerList),e+="\n";for(var t=0;t<this.oldPokerList.length;t++)e+=p.pokerListToString(this.oldPokerList[t].poker),t<this.oldPokerList.length-1&&(e+=",");return e+="\n",e+=this.deskPokerObj?p.pokerListToString(this.deskPokerObj.poker):"",e}},{key:"getRandomIntInclusive",value:function(e,t){return Math.floor(Math.random()*(t-e+1))+e}}]),e}(),y=c,k={name:"HelloWorld",data:function(){return{data:"fuck1",game:new y,playerStr:""}},computed:{player2Str:function(){var e=this.game,t=2;return[e.playerList[t].name+" : "+e.playerList[t].type+" : "+e.playerList[t].pokerList.length,e.playerList[t].pokerListToString(),"last : "+e.playerList[t].lastSendObjToString()]},player1Str:function(){var e=this.game,t=1;return[e.playerList[t].name+" : "+e.playerList[t].type+" : "+e.playerList[t].pokerList.length,e.playerList[t].pokerListToString(),"last : "+e.playerList[t].lastSendObjToString()]},player0Str:function(){var e=this.game,t=0;return[e.playerList[t].name+" : "+e.playerList[t].type+" : "+e.playerList[t].pokerList.length,e.playerList[t].pokerListToString(),"last : "+e.playerList[t].lastSendObjToString()]},deskStr:function(){var e=this.game;return["desk",e.pokerListToString()]}},mounted:function(){this.data=this.game.playerList[1].name},methods:{reDraw:function(){},sendPoker:function(){var e=this.game,t=e.playerList[0].playByString(this.playerStr);t&&(this.playerStr="")},pass:function(){this.game.playerList[0].playByString("pass")},reStart:function(){this.game=new y,this.playerStr=""}}},m=k,v=r("2877"),b=Object(v["a"])(m,l,o,!1,null,"62298b0c",null),d=b.exports,L=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{staticStyle:{"user-select":"none"}},[r("div",{staticStyle:{width:"300px",height:"300px",float:"left",position:"fixed",left:"0",top:"0px","background-color":"aliceblue","text-align":"center"}},[r("span",[e._v(" 手牌:"+e._s(e.player2Str[1])+" "),r("br"),e._v(" 上次出牌:"+e._s(e.player2Str[2])+" ")])]),r("div",{staticStyle:{width:"300px",height:"300px",float:"left",position:"fixed",right:"0",top:"0px","background-color":"aliceblue","text-align":"center"}},[r("span",[e._v(" 手牌:"+e._s(e.player1Str[1])+" "),r("br"),e._v(" 上次出牌:"+e._s(e.player1Str[2])+" ")])]),r("div",{staticStyle:{width:"300px",height:"300px",float:"left",position:"fixed",left:"600px",top:"0px","background-color":"aliceblue","text-align":"center"}},[r("div",{staticStyle:{width:"300px","word-wrap":"break-word"}},[e._v(" 已出的牌: "),r("br"),e._v(" "+e._s(e.deskStr[1])+" ")])]),r("div",{staticStyle:{position:"fixed",left:"600px",top:"300px"}},[r("button",{on:{click:e.reStart}},[e._v("开始新一局")])]),r("div",{staticStyle:{position:"fixed",bottom:"0",width:"100%",height:"200px","line-height":"200px"},style:{marginLeft:e.playerMarginLeft-150+"px"}},[e._v(" 你是 "+e._s("nongmin"===e.game.playerList[0].type?"农民":"地主")+" ")]),r("div",{staticStyle:{position:"fixed",bottom:"0",width:"100%",height:"200px"},style:{marginLeft:e.playerMarginLeft+"px"}},e._l(e.game.playerList[0].pokerList,(function(t){return r("div",{staticClass:"poker",class:{selected:t.selected},on:{mouseenter:function(r){return e.enter(r,t)},mousedown:function(r){return e.pickPoker(t)}}},[e._v(" "+e._s(t.text)+" ")])})),0),r("div",{staticStyle:{position:"fixed",bottom:"200px",width:"100%",height:"100px","text-align":"left"}},[r("div",{staticStyle:{width:"200px",height:"30px"},style:{marginLeft:e.buttonMarginLeft+"px"}},[r("button",{staticStyle:{height:"30px","border-radius":"4px",float:"left"},on:{click:e.sendPoker2}},[e._v("出牌")]),r("button",{staticStyle:{height:"30px","border-radius":"4px","margin-left":"20px",float:"right"},on:{click:e.pass}},[e._v("不出")]),r("div",{directives:[{name:"show",rawName:"v-show",value:e.game.currentPlayer===e.game.playerList[0],expression:"game.currentPlayer===game.playerList[0]"}],staticStyle:{color:"red",width:"150px",border:"solid","border-radius":"4px",float:"left"}},[e._v(" 请在"+e._s(e.game.second)+"秒内出牌 ")])])]),r("div",{staticStyle:{position:"fixed",bottom:"400px",width:"100%",height:"200px"},style:{marginLeft:e.deskPokerMarginLeft+"px"}},[e._l(e.deskPoker,(function(t){return r("div",{directives:[{name:"show",rawName:"v-show",value:e.deskPoker.length>0,expression:"deskPoker.length>0"}],staticClass:"pokerDesk"},[e._v(" "+e._s(t.text)+" ")])})),r("div",{directives:[{name:"show",rawName:"v-show",value:0===e.deskPoker.length,expression:"deskPoker.length===0"}],staticStyle:{height:"100%",width:"100px",float:"left","margin-left":"-50px","font-size":"50px"}},[e._v(" pass ")])],2),r("div",{staticStyle:{position:"fixed",top:"40px",left:"20px",height:"200px",width:"100px",border:"solid 1px","border-radius":"8px","background-color":"azure","text-align":"center"}},[r("p",[e._v(" "+e._s("nongmin"===e.game.playerList[2].type?"农民":"地主")+" ")]),r("p",[e._v(" "+e._s(e.game.playerList[2].name)+" ")]),r("p",[e._v(" 剩余 "+e._s(e.game.playerList[2].pokerList.length)+"")]),r("div",{directives:[{name:"show",rawName:"v-show",value:e.game.currentPlayer===e.game.playerList[2],expression:"game.currentPlayer===game.playerList[2]"}],staticStyle:{color:"red",width:"150px",border:"solid","border-radius":"4px",position:"absolute",bottom:"-50px",left:"0"}},[e._v(" 请在"+e._s(e.game.second)+"秒内出牌 ")])]),r("div",{staticStyle:{position:"fixed",top:"40px",right:"20px",height:"200px",width:"100px",border:"solid 1px","border-radius":"8px","background-color":"azure","text-align":"center"}},[r("p",[e._v(" "+e._s("nongmin"===e.game.playerList[1].type?"农民":"地主")+" ")]),r("p",[e._v(" "+e._s(e.game.playerList[1].name)+" ")]),r("p",[e._v(" 剩余 "+e._s(e.game.playerList[1].pokerList.length)+"")]),r("div",{directives:[{name:"show",rawName:"v-show",value:e.game.currentPlayer===e.game.playerList[1],expression:"game.currentPlayer===game.playerList[1]"}],staticStyle:{color:"red",width:"150px",border:"solid","border-radius":"4px",position:"absolute",bottom:"-50px",right:"0"}},[e._v(" 请在"+e._s(e.game.second)+"秒内出牌 ")])])])},x=[],S={name:"HelloWorld",data:function(){return{data:"fuck1",game:new y,playerStr:"",pokerList:[]}},computed:{playerMarginLeft:function(){return(window.innerWidth-50*this.game.playerList[0].pokerList.length)/2},deskPokerMarginLeft:function(){return(window.innerWidth-50*this.deskPoker.length)/2},buttonMarginLeft:function(){return(window.innerWidth-200)/2},deskPoker:function(){return this.game.deskPokerObj&&this.game.deskPokerObj.poker&&this.game.deskPokerObj.poker[0]&&this.game.deskPokerObj.poker[0].text?this.game.deskPokerObj.poker:[]},player2Str:function(){var e=this.game,t=2;return[e.playerList[t].name+" : "+e.playerList[t].type+" : "+e.playerList[t].pokerList.length,e.playerList[t].pokerListToString(),e.playerList[t].lastSendObjToString()]},player1Str:function(){var e=this.game,t=1;return[e.playerList[t].name+" : "+e.playerList[t].type+" : "+e.playerList[t].pokerList.length,e.playerList[t].pokerListToString(),e.playerList[t].lastSendObjToString()]},player0Str:function(){var e=this.game,t=0;return[e.playerList[t].name+" : "+e.playerList[t].type+" : "+e.playerList[t].pokerList.length,e.playerList[t].pokerListToString(),e.playerList[t].lastSendObjToString()]},deskStr:function(){var e=this.game;return["desk",e.pokerListToString()]}},mounted:function(){this.data=this.game.playerList[1].name},methods:{enter:function(e,t){1===e.buttons&&this.pickPoker(t)},pickPoker:function(e){if(e.selected){e.selected=!1;for(var t=0;t<this.pokerList.length;t++)this.pokerList[t]===e&&this.pokerList.splice(t,1)}else e.selected=!0,this.pokerList.push(e)},sendPoker2:function(){var e=this.game,t=e.playerList[0].playByPokerList(this.pokerList);t&&(this.pokerList=[])},sendPoker:function(){var e=this.game,t=e.playerList[0].playByString(this.playerStr);t&&(this.playerStr="")},pass:function(){this.game.playerList[0].playByString("pass")},reStart:function(){this.game=new y,this.playerStr=""}}},w=S,P=(r("d783"),Object(v["a"])(w,L,x,!1,null,"3cd822ae",null)),O=P.exports,_={name:"App",components:{HelloWorld:d,Game:O}},T=_,j=Object(v["a"])(T,i,s,!1,null,null,null),B=j.exports;n["a"].config.productionTip=!1,new n["a"]({render:function(e){return e(B)}}).$mount("#app")},8266:function(e,t,r){},d783:function(e,t,r){"use strict";var n=r("8266"),i=r.n(n);i.a}});
//# sourceMappingURL=app.4f03e253.js.map
\ No newline at end of file
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?4625","webpack:///./src/components/HelloWorld.vue?f3a1","webpack:///./src/doudizhu/Poker.js","webpack:///./src/doudizhu/Player.js","webpack:///./src/doudizhu/Game.js","webpack:///src/components/HelloWorld.vue","webpack:///./src/components/HelloWorld.vue?ddb2","webpack:///./src/components/HelloWorld.vue","webpack:///./src/components/Game.vue?50df","webpack:///src/components/Game.vue","webpack:///./src/components/Game.vue?bf2b","webpack:///./src/components/Game.vue","webpack:///src/App.vue","webpack:///./src/App.vue?a7d1","webpack:///./src/App.vue","webpack:///./src/main.js","webpack:///./src/components/Game.vue?907b"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","_vm","this","_h","$createElement","_c","_self","attrs","staticRenderFns","staticStyle","_v","_s","player2Str","player1Str","player0Str","directives","rawName","expression","domProps","on","$event","target","composing","playerStr","sendPoker","pass","deskStr","reStart","Poker","param","text","number","textToNumber","numberToText","type","selected","a","b","pokerList","poker","sort","sortFunction","lastPoker","curList","lists","Count1List","Count2List","Count3List","Count4List","one","two","sx","three","four","list","map","item","str","toString","Player","Math","random","last","next","isRobot","game","lastSendObj","lastObj","that","setTimeout","getLastObj","playByObj","playByAllType","obj","clearDesk","deskPokerObj","types","getSmallestObjByType","success","deleteFromPokerListAndSendByObj","alert","tempList","getAndDeleteOnePokerByNumber","listBackToPokerList","concat","oneList","threeOne","twoList","flat","getObjByObj","po","sortPoker","getObjByPokerList","comp","compareTwoObj","pokerListToString","currentPlayer","getListByList","handleList","getListByString","obj1","obj2","Game","playerList","oldPokerList","dizhu","MaxSecond","second","isOver","init","initPokerList","initPlayerList","start","timeout","timeLoop","playByString","playByAI","over","checkGameOver","gameOver","resetTime","player","index","getRandomIntInclusive","addPoker","player0","player1","player2","dizhuIndex","min","max","floor","computed","mounted","methods","reDraw","component","style","marginLeft","playerMarginLeft","_l","staticClass","class","enter","pickPoker","buttonMarginLeft","sendPoker2","deskPokerMarginLeft","deskPoker","components","HelloWorld","Vue","config","productionTip","render","h","App","$mount"],"mappings":"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","file":"js/app.4f03e253.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('Game')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticStyle:{\"width\":\"300px\",\"height\":\"300px\",\"float\":\"left\",\"position\":\"fixed\",\"left\":\"0px\",\"top\":\"0px\",\"background-color\":\"aliceblue\",\"text-align\":\"center\"}},[_c('span',[_vm._v(\" \"+_vm._s(_vm.player2Str[0])+\" \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.player2Str[1])+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.player2Str[2])+\" \")])]),_c('div',{staticStyle:{\"width\":\"300px\",\"height\":\"300px\",\"float\":\"left\",\"position\":\"fixed\",\"left\":\"600px\",\"top\":\"0px\",\"background-color\":\"aliceblue\",\"text-align\":\"center\"}},[_c('span',[_vm._v(\" \"+_vm._s(_vm.player1Str[0])+\" \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.player1Str[1])+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.player1Str[2])+\" \")])]),_c('div',{staticStyle:{\"width\":\"300px\",\"height\":\"300px\",\"float\":\"left\",\"position\":\"fixed\",\"left\":\"300px\",\"top\":\"300px\",\"background-color\":\"aliceblue\",\"text-align\":\"center\"}},[_c('span',[_vm._v(\" \"+_vm._s(_vm.player0Str[0])+\" \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.player0Str[1])+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.player0Str[2])+\" \")]),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.playerStr),expression:\"playerStr\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.playerStr)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.playerStr=$event.target.value}}}),_c('button',{on:{\"click\":_vm.sendPoker}},[_vm._v(\"send\")]),_c('button',{on:{\"click\":_vm.pass}},[_vm._v(\"pass\")])])]),_c('div',{staticStyle:{\"width\":\"300px\",\"height\":\"300px\",\"float\":\"left\",\"position\":\"fixed\",\"left\":\"300px\",\"top\":\"0px\",\"background-color\":\"aliceblue\",\"text-align\":\"center\"}},[_c('div',{staticStyle:{\"width\":\"300px\",\"word-wrap\":\"break-word\"}},[_vm._v(\" \"+_vm._s(_vm.deskStr[0])+\" \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.deskStr[1])+\" \")])]),_c('div',{staticStyle:{\"position\":\"fixed\",\"left\":\"300px\",\"top\":\"600px\"}},[_c('button',{on:{\"click\":_vm.reStart}},[_vm._v(\"reStart\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","class Poker{\r\n constructor(param) {\r\n if(param.text){\r\n this.text = param.text;\r\n this.number = Poker.textToNumber(param.text);\r\n }else{\r\n this.number = param.number;\r\n this.text = Poker.numberToText(param.number);\r\n }\r\n this.type = param.type;\r\n this.selected = param.selected;\r\n }\r\n\r\n static textToNumber(text){\r\n switch (text) {\r\n case '3': return 3;\r\n case '4': return 4;\r\n case '5': return 5;\r\n case '6': return 6;\r\n case '7': return 7;\r\n case '8': return 8;\r\n case '9': return 9;\r\n case '10':\r\n case '0':\r\n case 'T':\r\n case 't': return 10;\r\n case '11':\r\n case 'j':\r\n case 'J': return 11;\r\n case '12':\r\n case 'q':\r\n case 'Q': return 12;\r\n case '13':\r\n case 'k':\r\n case 'K': return 13;\r\n case '1':\r\n case 'a':\r\n case 'A': return 14;\r\n case '2': return 15;\r\n case 's':\r\n case 'S': return 16;\r\n case 'x':\r\n case 'X': return 17;\r\n }\r\n }\r\n\r\n static numberToText(number){\r\n switch (number) {\r\n case 3: return '3';\r\n case 4: return '4';\r\n case 5: return '5';\r\n case 6: return '6';\r\n case 7: return '7';\r\n case 8: return '8';\r\n case 9: return '9';\r\n case 10: return '10';\r\n case 11: return 'J';\r\n case 12: return 'Q';\r\n case 13: return 'K';\r\n case 14: return 'A';\r\n case 15: return '2';\r\n case 16: return 'S';\r\n case 17: return 'X';\r\n }\r\n }\r\n\r\n static sortFunction(a, b){\r\n return a.number - b.number;\r\n }\r\n\r\n static getObjByPokerList(pokerList){\r\n if(pokerList[0] === 'pass'){\r\n return {\r\n type:'pass',\r\n poker: pokerList,\r\n };\r\n }\r\n pokerList.sort(Poker.sortFunction);\r\n\r\n let lastPoker = pokerList[0];\r\n let curList = [lastPoker];\r\n let lists = [];\r\n for(let i=1; i<pokerList.length; i++){\r\n if(pokerList[i].number !== lastPoker.number){\r\n lists.push(curList);\r\n curList = [pokerList[i]];\r\n }else{\r\n curList.push(pokerList[i]);\r\n }\r\n lastPoker = pokerList[i];\r\n }\r\n lists.push(curList);\r\n\r\n let Count1List = [];\r\n let Count2List = [];\r\n let Count3List = [];\r\n let Count4List = [];\r\n for(let i=0; i<lists.length; i++){\r\n if(lists[i].length === 3){\r\n Count3List.push(lists[i]);\r\n }else if(lists[i].length === 2){\r\n Count2List.push(lists[i]);\r\n }else if(lists[i].length === 1){\r\n Count1List.push(lists[i]);\r\n }else if(lists[i].length === 4){\r\n Count4List.push(lists[i]);\r\n }\r\n }\r\n\r\n if(pokerList.length === 1){\r\n\r\n return {\r\n type:'one',\r\n poker: pokerList,\r\n one: pokerList,\r\n };\r\n\r\n }else if(pokerList.length === 2){\r\n\r\n if(Count2List.length === 1){\r\n return {\r\n type:'two',\r\n poker: pokerList,\r\n two: pokerList,\r\n };\r\n }else if(pokerList[0].number === 16 && pokerList[1].number === 17){\r\n return {\r\n type:'sx',\r\n poker: pokerList,\r\n sx: pokerList,\r\n };\r\n }\r\n\r\n }else if(pokerList.length === 3){\r\n\r\n if(Count3List.length === 1){\r\n return {\r\n type:'three',\r\n poker: pokerList,\r\n three: pokerList,\r\n };\r\n }\r\n\r\n }else if(pokerList.length === 4){\r\n\r\n if(Count3List.length === 1){\r\n return {\r\n type:'threeWithOne',\r\n poker: pokerList,\r\n three: Count3List[0],\r\n one: Count1List[0],\r\n };\r\n }else if(Count4List.length === 1){\r\n return {\r\n type:'four',\r\n poker: pokerList,\r\n four: pokerList,\r\n };\r\n }\r\n\r\n }else if(pokerList.length === 5){\r\n\r\n if(Count3List.length === 1 && Count2List.length === 1){\r\n return {\r\n type:'threeWithTwo',\r\n poker: pokerList,\r\n three: Count3List[0],\r\n two: Count2List[0],\r\n };\r\n }else if(Count4List.length === 1 && Count1List.length === 1){\r\n return {\r\n type:'fourWithOne',\r\n poker: pokerList,\r\n four: Count4List[0],\r\n one: Count1List[0],\r\n };\r\n }\r\n\r\n }else if(pokerList.length === 6){\r\n\r\n if(Count4List.length === 1 && Count2List.length === 1){\r\n return {\r\n type:'fourWithTwo',\r\n poker: pokerList,\r\n four: Count4List[0],\r\n two: Count2List[0],\r\n };\r\n }\r\n\r\n }\r\n\r\n if(Count3List.length>=2 && Count3List[Count3List.length-1][0].number<=14 && Count3List[0][0].number+Count3List.length-1===Count3List[Count3List.length-1][0].number){\r\n //threeWithOneList\r\n if(pokerList.length-3*Count3List.length===Count3List.length){\r\n return {\r\n type:'threeWithOneList',\r\n poker: pokerList,\r\n list: Count3List.map(function (item) {\r\n return {\r\n three: item,\r\n };\r\n }),\r\n };\r\n }else{\r\n //threeWithTwoList\r\n if(Count2List.length===Count3List.length){\r\n return {\r\n type:'threeWithTwoList',\r\n poker: pokerList,\r\n list: Count3List.map(function (item) {\r\n return {\r\n three: item,\r\n };\r\n }),\r\n };\r\n }\r\n }\r\n }\r\n\r\n //判断oneList\r\n if(pokerList.length >= 5 && pokerList[pokerList.length-1].number<=14 && Count1List.length === pokerList.length && pokerList[0].number+pokerList.length-1===pokerList[pokerList.length-1].number){\r\n return {\r\n type:'oneList',\r\n poker: pokerList,\r\n list: Count1List.map(function (item) {\r\n return {\r\n one: item,\r\n }\r\n }),\r\n }\r\n }\r\n\r\n //判断twoList\r\n if(pokerList.length >= 6 && pokerList[pokerList.length-1].number<=14 && pokerList.length%2 === 0 && Count2List.length === pokerList.length/2 && pokerList[0].number+pokerList.length/2-1===pokerList[pokerList.length-1].number){\r\n return {\r\n type:'twoList',\r\n poker: pokerList,\r\n list: Count2List.map(function (item) {\r\n return {\r\n two: item,\r\n }\r\n }),\r\n }\r\n }\r\n\r\n //判断threeList\r\n if(pokerList.length >= 6 && pokerList[pokerList.length-1].number<=14 && pokerList.length%3 === 0 && Count3List.length === pokerList.length/3 && pokerList[0].number+pokerList.length/3-1===pokerList[pokerList.length-1].number){\r\n return {\r\n type:'threeList',\r\n poker: pokerList,\r\n list: Count3List.map(function (item) {\r\n return {\r\n three: item,\r\n }\r\n }),\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n static pokerListToString(pokerList){\r\n let result = '';\r\n for(let i=0; i<pokerList.length; i++){\r\n let str = pokerList[i].toString();\r\n result += str;\r\n }\r\n return result;\r\n }\r\n\r\n toString(){\r\n return this.text;\r\n }\r\n\r\n}\r\n\r\nexport default Poker;","import Poker from \"./Poker\";\r\n\r\nclass Player{\r\n constructor(param) {\r\n param = param || {};\r\n this.pokerList = [];\r\n this.name = param.name || 'noName'+Math.random();\r\n this.type = param.type || 'nongmin';\r\n this.last = null;\r\n this.next = null;\r\n this.isRobot = param.isRobot;\r\n this.game = param.game;\r\n \r\n this.lastSendObj = null;\r\n }\r\n\r\n addPoker(poker){\r\n this.pokerList.push(poker);\r\n }\r\n\r\n sortPoker(){\r\n this.pokerList.sort(this.sortFunction);\r\n }\r\n\r\n sortFunction(a, b){\r\n return a.number - b.number;\r\n }\r\n\r\n getLastObj(){\r\n let lastObj = this.last.lastSendObj;\r\n if(!lastObj || lastObj.type === 'pass'){\r\n lastObj = this.next.lastSendObj;\r\n if(!lastObj || lastObj.type === 'pass'){\r\n return false;\r\n }\r\n }\r\n return lastObj;\r\n }\r\n\r\n playByAI(){\r\n\r\n let that = this;\r\n setTimeout(function () {\r\n let lastObj = that.getLastObj();\r\n if(lastObj){\r\n that.playByObj(lastObj);\r\n }else{\r\n that.playByAllType();\r\n }\r\n },1000);\r\n\r\n }\r\n\r\n sendPoker(obj){\r\n this.game.clearDesk();\r\n this.lastSendObj = obj;\r\n this.game.deskPokerObj = obj;\r\n this.game.next();\r\n }\r\n\r\n playByAllType(){\r\n let types2 = ['one','two','three','threeWithOne','threeWithTwo','fourWithOne','fourWithTwo','threeWithOneList','threeWithTwoList','oneList','twoList','threeList','four','sx','pass'];\r\n let types = ['threeWithTwoList','threeWithOneList','threeList','twoList','fourWithTwo','fourWithOne','threeWithTwo','oneList','threeWithOne','three','two','one','four','sx','pass'];\r\n for(let i=0; i<types.length; i++){\r\n let obj = this.getSmallestObjByType(types[i]);\r\n if(obj){\r\n let success = this.deleteFromPokerListAndSendByObj(obj);\r\n if(!success){\r\n alert('error!');\r\n }\r\n return;\r\n }\r\n }\r\n\r\n }\r\n\r\n deleteFromPokerListAndSendByObj(obj){\r\n let tempList = [];\r\n if(obj.type === 'pass'){\r\n this.sendPoker(obj);\r\n return true;\r\n }\r\n let pokerList = obj.poker;\r\n for(let i=0; i<pokerList.length; i++){\r\n\r\n let poker = this.getAndDeleteOnePokerByNumber(pokerList[i].number);\r\n if(poker){\r\n tempList.push(poker);\r\n }else{\r\n this.listBackToPokerList(tempList);\r\n return false;\r\n }\r\n }\r\n this.sendPoker(obj);\r\n return true;\r\n }\r\n\r\n getSmallestObjByType(type){\r\n let pokerList = this.pokerList;\r\n\r\n let lastPoker = pokerList[0];\r\n let curList = [lastPoker];\r\n let lists = [];\r\n for(let i=1; i<pokerList.length; i++){\r\n if(pokerList[i].number !== lastPoker.number){\r\n lists.push(curList);\r\n curList = [pokerList[i]];\r\n }else{\r\n curList.push(pokerList[i]);\r\n }\r\n lastPoker = pokerList[i];\r\n }\r\n lists.push(curList);\r\n\r\n let Count1List = [];\r\n let Count2List = [];\r\n let Count3List = [];\r\n let Count4List = [];\r\n for(let i=0; i<lists.length; i++){\r\n if(lists[i].length === 3){\r\n Count3List.push(lists[i]);\r\n }else if(lists[i].length === 2){\r\n Count2List.push(lists[i]);\r\n }else if(lists[i].length === 1){\r\n Count1List.push(lists[i]);\r\n }else if(lists[i].length === 4){\r\n Count4List.push(lists[i]);\r\n }\r\n }\r\n\r\n let obj = null;\r\n if(type === 'one'){\r\n if(Count1List.length>0){\r\n obj = {\r\n type: type,\r\n poker: Count1List[0],\r\n one: Count1List[0],\r\n };\r\n }else if(Count2List.length>0){\r\n let poker = Count2List[0].slice(0,1);\r\n obj = {\r\n type: type,\r\n poker: poker,\r\n one: poker,\r\n };\r\n }else if(Count3List.length>0){\r\n let poker = Count3List[0].slice(0,1);\r\n obj = {\r\n type: type,\r\n poker: poker,\r\n one: poker,\r\n };\r\n }\r\n }else if(type === 'two'){\r\n if(Count2List.length>0){\r\n obj = {\r\n type: type,\r\n poker: Count2List[0],\r\n two: Count2List[0],\r\n };\r\n }else if(Count3List.length>0){\r\n let poker = Count3List[0].slice(0,2);\r\n obj = {\r\n type: type,\r\n poker: poker,\r\n one: poker,\r\n };\r\n }\r\n }else if(type === 'three'){\r\n if(Count3List.length>0){\r\n obj = {\r\n type: type,\r\n poker: Count3List[0],\r\n three: Count3List[0],\r\n };\r\n }\r\n }else if(type === 'threeWithOne'){\r\n if(Count3List.length>0){\r\n let one;\r\n if(Count1List.length>0){\r\n one = Count1List[0];\r\n }else if(Count2List.length>0){\r\n one = Count2List[0].slice(0,1);\r\n }else if(Count3List.length>0){\r\n for(let j=0; j<Count3List.length; j++){\r\n if(j===0){\r\n continue;\r\n }\r\n one = Count3List[j].slice(0,1);\r\n }\r\n }\r\n\r\n if(one){\r\n obj = {\r\n type: type,\r\n poker: Count3List[0].concat(one),\r\n three: Count3List[0],\r\n one: one,\r\n };\r\n }\r\n }\r\n }else if(type === 'four'){\r\n if(Count4List.length>0){\r\n obj = {\r\n type: type,\r\n poker: Count4List[0],\r\n four: Count4List[0],\r\n };\r\n }\r\n }else if(type === 'threeWithTwo'){\r\n if(Count3List.length>0){\r\n let two;\r\n if(Count2List.length>0){\r\n two = Count2List[0];\r\n }else if(Count3List.length>0){\r\n for(let j=0; j<Count3List.length; j++){\r\n if(j===0){\r\n continue;\r\n }\r\n two = Count3List[j].slice(0,2);\r\n }\r\n }\r\n\r\n if(two){\r\n obj = {\r\n type: type,\r\n poker: Count3List[0].concat(two),\r\n three: Count3List[0],\r\n two: two,\r\n };\r\n }\r\n }\r\n }else if(type === 'fourWithOne'){\r\n if(Count4List.length>0){\r\n let one;\r\n if(Count1List.length>0){\r\n one = Count1List[0];\r\n }else if(Count2List.length>0){\r\n one = Count2List[0].slice(0,1);\r\n }else if(Count3List.length>0){\r\n one = Count3List[0].slice(0,1);\r\n }\r\n\r\n if(one){\r\n obj = {\r\n type: type,\r\n poker: Count4List[0].concat(one),\r\n four: Count4List[0],\r\n one: one,\r\n };\r\n }\r\n }\r\n }else if(type === 'fourWithTwo'){\r\n if(Count4List.length>0){\r\n let two;\r\n if(Count2List.length>0){\r\n two = Count2List[0];\r\n }else if(Count3List.length>0){\r\n two = Count3List[0].slice(0,2);\r\n }\r\n\r\n if(two){\r\n obj = {\r\n type: type,\r\n poker: Count4List[0].concat(two),\r\n four: Count4List[0],\r\n two: two,\r\n };\r\n }\r\n }\r\n }else if(type === 'threeWithOneList'){\r\n if(Count3List.length>=2){\r\n for(let i=0; i<Count3List.length-2+1; i++){\r\n if(Count3List[i][0].number+2-1===Count3List[i+2-1][0].number && Count3List[i+2-1][0].number<=14){\r\n\r\n let oneList = [];\r\n\r\n for(let j=0; j<Count1List.length&&oneList.length<2; j++){\r\n oneList.push(Count1List[j]);\r\n }\r\n\r\n for(let j=0; j<Count2List.length&&oneList.length<2; j++){\r\n oneList.push(Count2List[j].slice(0,1));\r\n if(oneList.length<2){\r\n oneList.push(Count2List[j].slice(1,2));\r\n }\r\n }\r\n\r\n for(let j=0; j<Count3List.length&&oneList.length<2; j++){\r\n oneList.push(Count3List[j].slice(0,1));\r\n if(oneList.length<2){\r\n oneList.push(Count3List[j].slice(1,2));\r\n }\r\n if(oneList.length<2){\r\n oneList.push(Count3List[j].slice(2,3));\r\n }\r\n }\r\n\r\n if(oneList.length === 2){\r\n\r\n let poker = [];\r\n let list = [];\r\n for(let j=0; j<2; j++){\r\n poker.concat(Count3List[i+j]);\r\n poker.concat(oneList[i]);\r\n let threeOne = {\r\n three: Count3List[i+j],\r\n one: oneList[i],\r\n };\r\n list.push(threeOne);\r\n }\r\n\r\n obj = {\r\n type: type,\r\n poker: poker,\r\n list: list,\r\n };\r\n }\r\n break;\r\n\r\n }\r\n }\r\n }\r\n }else if(type === 'threeWithTwoList'){\r\n if(Count3List.length>=2){\r\n for(let i=0; i<Count3List.length-2+1; i++){\r\n if(Count3List[i][0].number+2-1===Count3List[i+2-1][0].number && Count3List[i+2-1][0].number<=14){\r\n\r\n let twoList = [];\r\n\r\n for(let j=0; j<Count2List.length&&twoList.length<2; j++){\r\n twoList.push(Count2List);\r\n }\r\n\r\n for(let j=0; j<Count3List.length&&twoList.length<2; j++){\r\n twoList.push(Count3List[j].slice(0,2));\r\n }\r\n\r\n if(twoList.length === 2){\r\n\r\n let poker = [];\r\n let list = [];\r\n for(let j=0; j<2; j++){\r\n poker.concat(Count3List[i+j]);\r\n poker.concat(twoList[i]);\r\n let threeOne = {\r\n three: Count3List[i+j],\r\n two: twoList[i],\r\n };\r\n list.push(threeOne);\r\n }\r\n\r\n obj = {\r\n type: type,\r\n poker: poker,\r\n list: list,\r\n };\r\n }\r\n break;\r\n\r\n }\r\n }\r\n }\r\n }else if(type === 'oneList'){\r\n if(Count1List.length>=5){\r\n for(let i=0; i<Count1List.length-5+1; i++){\r\n if(Count1List[i][0].number+5-1===Count1List[i+5-1][0].number && Count1List[i+5-1][0].number<=14){\r\n let list = Count1List.slice(i,i+5);\r\n obj = {\r\n type: type,\r\n poker: list.flat(1),\r\n list: list.map(function (item) {\r\n return {\r\n one: item,\r\n }\r\n }),\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n }else if(type === 'twoList'){\r\n if(Count2List.length>=3 ){\r\n for(let i=0; i<Count2List.length-3+1; i++){\r\n if(Count2List[i][0].number+3-1===Count2List[i+3-1][0].number && Count2List[i+3-1][0].number<=14){\r\n let list = Count2List.slice(i,i+3);\r\n obj = {\r\n type: type,\r\n poker: list.flat(1),\r\n list: list.map(function (item) {\r\n return {\r\n two: item,\r\n }\r\n }),\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n }else if(type === 'threeList'){\r\n if(Count3List.length>=2 ){\r\n for(let i=0; i<Count3List.length-2+1; i++){\r\n if(Count3List[i][0].number+2-1===Count3List[i+2-1][0].number && Count3List[i+2-1][0].number<=14){\r\n let list = Count3List.slice(i,i+2);\r\n obj = {\r\n type: type,\r\n poker: list.flat(1),\r\n list: list.map(function (item) {\r\n return {\r\n three: item,\r\n }\r\n }),\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n }else if(type === 'sx'){\r\n if(Count1List.length>=2){\r\n for(let i=0; i<Count1List.length-1; i++){\r\n if(Count1List[i][0].number===16){\r\n let list = Count2List.slice(i,i+2);\r\n let poker = list.flat(1);\r\n obj = {\r\n type: type,\r\n poker: poker,\r\n sx: poker,\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n }else if(type === 'pass'){\r\n obj = {\r\n type: type,\r\n poker: ['pass'],\r\n };\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n getObjByObj(lastObj){\r\n let pokerList = this.pokerList;\r\n\r\n let lastPoker = pokerList[0];\r\n let curList = [lastPoker];\r\n let lists = [];\r\n for(let i=1; i<pokerList.length; i++){\r\n if(pokerList[i].number !== lastPoker.number){\r\n lists.push(curList);\r\n curList = [pokerList[i]];\r\n }else{\r\n curList.push(pokerList[i]);\r\n }\r\n lastPoker = pokerList[i];\r\n }\r\n lists.push(curList);\r\n\r\n let Count1List = [];\r\n let Count2List = [];\r\n let Count3List = [];\r\n let Count4List = [];\r\n for(let i=0; i<lists.length; i++){\r\n if(lists[i].length === 3){\r\n Count3List.push(lists[i]);\r\n }else if(lists[i].length === 2){\r\n Count2List.push(lists[i]);\r\n }else if(lists[i].length === 1){\r\n Count1List.push(lists[i]);\r\n }else if(lists[i].length === 4){\r\n Count4List.push(lists[i]);\r\n }\r\n }\r\n\r\n let type = lastObj.type;\r\n let obj = null;\r\n if(type === 'one'){\r\n if(Count1List.length>0){\r\n for(let i=0; i<Count1List.length; i++){\r\n if(Count1List[i][0].number>lastObj.one[0].number){\r\n obj = {\r\n type: type,\r\n poker: Count1List[i],\r\n one: Count1List[i],\r\n };\r\n break;\r\n }\r\n }\r\n }else if(Count2List.length>0){\r\n for(let i=0; i<Count2List.length; i++){\r\n if(Count2List[i][0].number>lastObj.one[0].number){\r\n let poker = Count2List[i].slice(0,1);\r\n obj = {\r\n type: type,\r\n poker: poker,\r\n one: poker,\r\n };\r\n break;\r\n }\r\n }\r\n }else if(Count3List.length>0){\r\n for(let i=0; i<Count3List.length; i++){\r\n if(Count3List[i][0].number>lastObj.one[0].number){\r\n let poker = Count3List[i].slice(0,1);\r\n obj = {\r\n type: type,\r\n poker: poker,\r\n one: poker,\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n }else if(type === 'two'){\r\n if(Count2List.length>0){\r\n for(let i=0; i<Count2List.length; i++){\r\n if(Count2List[i][0].number>lastObj.two[0].number){\r\n obj = {\r\n type: type,\r\n poker: Count2List[i],\r\n two: Count2List[i],\r\n };\r\n break;\r\n }\r\n }\r\n }else if(Count3List.length>0){\r\n for(let i=0; i<Count3List.length; i++){\r\n if(Count3List[i][0].number>lastObj.two[0].number){\r\n let poker = Count3List[i].slice(0,2);\r\n obj = {\r\n type: type,\r\n poker: poker,\r\n one: poker,\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n }else if(type === 'three'){\r\n if(Count3List.length>0){\r\n for(let i=0; i<Count3List.length; i++){\r\n if(Count3List[i][0].number>lastObj.three[0].number){\r\n obj = {\r\n type: type,\r\n poker: Count3List[i],\r\n three: Count3List[i],\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n }else if(type === 'threeWithOne'){\r\n if(Count3List.length>0){\r\n for(let i=0; i<Count3List.length; i++){\r\n if(Count3List[i][0].number>lastObj.three[0].number){\r\n\r\n let one;\r\n if(Count1List.length>0){\r\n one = Count1List[0];\r\n }else if(Count2List.length>0){\r\n one = Count2List[0].slice(0,1);\r\n }else if(Count3List.length>0){\r\n for(let j=0; j<Count3List.length; j++){\r\n if(j===i){\r\n continue;\r\n }\r\n one = Count3List[j].slice(0,1);\r\n }\r\n }\r\n\r\n if(one){\r\n obj = {\r\n type: type,\r\n poker: Count3List[i].concat(one),\r\n three: Count3List[i],\r\n one: one,\r\n };\r\n }\r\n break;\r\n\r\n }\r\n }\r\n }\r\n }else if(type === 'threeWithTwo'){\r\n if(Count3List.length>0){\r\n for(let i=0; i<Count3List.length; i++){\r\n if(Count3List[i][0].number>lastObj.three[0].number){\r\n\r\n let two;\r\n if(Count2List.length>0){\r\n two = Count2List[0];\r\n }else if(Count3List.length>0){\r\n for(let j=0; j<Count3List.length; j++){\r\n if(j===i){\r\n continue;\r\n }\r\n two = Count3List[j].slice(0,2);\r\n }\r\n }\r\n\r\n if(two){\r\n obj = {\r\n type: type,\r\n poker: Count3List[i].concat(two),\r\n three: Count3List[i],\r\n two: two,\r\n };\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }else if(type === 'fourWithOne'){\r\n if(Count4List.length>0){\r\n for(let i=0; i<Count4List.length; i++){\r\n if(Count4List[i][0].number>lastObj.four[0].number){\r\n\r\n let one;\r\n if(Count1List.length>0){\r\n one = Count1List[0];\r\n }else if(Count2List.length>0){\r\n one = Count2List[0].slice(0,1);\r\n }else if(Count3List.length>0){\r\n one = Count3List[0].slice(0,1);\r\n }\r\n\r\n if(one){\r\n obj = {\r\n type: type,\r\n poker: Count4List[i].concat(one),\r\n four: Count4List[i],\r\n one: one,\r\n };\r\n }\r\n break;\r\n\r\n }\r\n }\r\n }\r\n }else if(type === 'fourWithTwo'){\r\n if(Count4List.length>0){\r\n for(let i=0; i<Count4List.length; i++){\r\n if(Count4List[i][0].number>lastObj.four[0].number){\r\n\r\n let two;\r\n if(Count2List.length>0){\r\n two = Count2List[0];\r\n }else if(Count3List.length>0){\r\n two = Count3List[0].slice(0,2);\r\n }\r\n\r\n if(two){\r\n obj = {\r\n type: type,\r\n poker: Count4List[i].concat(two),\r\n four: Count4List[i],\r\n two: two,\r\n };\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }else if(type === 'threeWithOneList'){\r\n if(Count3List.length>=lastObj.list.length){\r\n for(let i=0; i<Count3List.length-lastObj.list.length+1; i++){\r\n if(Count3List[i][0].number>lastObj.list[0].three[0].number && Count3List[i][0].number+lastObj.list.length-1===Count3List[i+lastObj.list.length-1][0].number && Count3List[i+lastObj.list.length-1][0].number<=14){\r\n\r\n let oneList = [];\r\n\r\n for(let j=0; j<Count1List.length&&oneList.length<lastObj.list.length; j++){\r\n oneList.push(Count1List[j]);\r\n }\r\n\r\n for(let j=0; j<Count2List.length&&oneList.length<lastObj.list.length; j++){\r\n oneList.push(Count2List[j].slice(0,1));\r\n if(oneList.length<lastObj.list.length){\r\n oneList.push(Count2List[j].slice(1,2));\r\n }\r\n }\r\n\r\n for(let j=0; j<Count3List.length&&oneList.length<lastObj.list.length; j++){\r\n oneList.push(Count3List[j].slice(0,1));\r\n if(oneList.length<lastObj.list.length){\r\n oneList.push(Count3List[j].slice(1,2));\r\n }\r\n if(oneList.length<lastObj.list.length){\r\n oneList.push(Count3List[j].slice(2,3));\r\n }\r\n }\r\n\r\n if(oneList.length === lastObj.list.length){\r\n\r\n let poker = [];\r\n let list = [];\r\n for(let j=0; j<lastObj.list.length; j++){\r\n poker.concat(Count3List[i+j]);\r\n poker.concat(oneList[i]);\r\n let threeOne = {\r\n three: Count3List[i+j],\r\n one: oneList[i],\r\n };\r\n list.push(threeOne);\r\n }\r\n\r\n obj = {\r\n type: type,\r\n poker: poker,\r\n list: list,\r\n };\r\n }\r\n break;\r\n\r\n }\r\n }\r\n }\r\n }else if(type === 'threeWithTwoList'){\r\n if(Count3List.length>=lastObj.list.length){\r\n for(let i=0; i<Count3List.length-lastObj.list.length+1; i++){\r\n if(Count3List[i][0].number>lastObj.list[0].three[0].number && Count3List[i][0].number+lastObj.list.length-1===Count3List[i+lastObj.list.length-1][0].number && Count3List[i+lastObj.list.length-1][0].number<=14){\r\n\r\n let twoList = [];\r\n\r\n for(let j=0; j<Count2List.length&&twoList.length<lastObj.list.length; j++){\r\n twoList.push(Count2List);\r\n }\r\n\r\n for(let j=0; j<Count3List.length&&twoList.length<lastObj.list.length; j++){\r\n twoList.push(Count3List[j].slice(0,2));\r\n }\r\n\r\n if(twoList.length === lastObj.list.length){\r\n\r\n let poker = [];\r\n let list = [];\r\n for(let j=0; j<lastObj.list.length; j++){\r\n poker.concat(Count3List[i+j]);\r\n poker.concat(twoList[i]);\r\n let threeOne = {\r\n three: Count3List[i+j],\r\n two: twoList[i],\r\n };\r\n list.push(threeOne);\r\n }\r\n\r\n obj = {\r\n type: type,\r\n poker: poker,\r\n list: list,\r\n };\r\n }\r\n break;\r\n\r\n }\r\n }\r\n }\r\n }else if(type === 'oneList'){\r\n if(Count1List.length>=lastObj.list.length ){\r\n for(let i=0; i<Count1List.length-lastObj.list.length+1; i++){\r\n if(Count1List[i][0].number>lastObj.list[0].one[0].number && Count1List[i][0].number+lastObj.list.length-1===Count1List[i+lastObj.list.length-1][0].number && Count1List[i+lastObj.list.length-1][0].number<=14){\r\n let list = Count1List.slice(i,i+lastObj.list.length);\r\n obj = {\r\n type: type,\r\n poker: list.flat(1),\r\n list: list.map(function (item) {\r\n return {\r\n one: item,\r\n }\r\n }),\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n }else if(type === 'twoList'){\r\n if(Count2List.length>=lastObj.list.length ){\r\n for(let i=0; i<Count2List.length-lastObj.list.length+1; i++){\r\n if(Count2List[i][0].number>lastObj.list[0].two[0].number && Count2List[i][0].number+lastObj.list.length-1===Count2List[i+lastObj.list.length-1][0].number && Count2List[i+lastObj.list.length-1][0].number<=14){\r\n let list = Count2List.slice(i,i+lastObj.list.length);\r\n obj = {\r\n type: type,\r\n poker: list.flat(1),\r\n list: list.map(function (item) {\r\n return {\r\n two: item,\r\n }\r\n }),\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n }else if(type === 'threeList'){\r\n if(Count3List.length>=lastObj.list.length ){\r\n for(let i=0; i<Count3List.length-lastObj.list.length+1; i++){\r\n if(Count3List[i][0].number>lastObj.list[0].two[0].number && Count3List[i][0].number+lastObj.list.length-1===Count3List[i+lastObj.list.length-1][0].number && Count3List[i+lastObj.list.length-1][0].number<=14){\r\n let list = Count3List.slice(i,i+lastObj.list.length);\r\n obj = {\r\n type: type,\r\n poker: list.flat(1),\r\n list: list.map(function (item) {\r\n return {\r\n three: item,\r\n }\r\n }),\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n }else if(type === 'four'){\r\n if(Count4List.length>0){\r\n for(let i=0; i<Count4List.length; i++){\r\n if(Count4List[i][0].number>lastObj.four[0].number){\r\n obj = {\r\n type: type,\r\n poker: Count4List[i],\r\n four: Count4List[i],\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if(!obj && type!=='four'){\r\n\r\n if(Count4List.length>0){\r\n obj = {\r\n type: type,\r\n poker: Count4List[0],\r\n four: Count4List[0],\r\n };\r\n }\r\n\r\n }\r\n\r\n if(!obj && type!=='sx'){\r\n\r\n if(Count1List.length>1){\r\n if(Count1List[Count1List.length-2] === 16){\r\n let poker = Count1List[Count1List.length-2].concat(Count1List[Count1List.length-1]);\r\n obj = {\r\n type: type,\r\n poker: poker,\r\n sx: poker,\r\n };\r\n }\r\n }\r\n\r\n }\r\n\r\n if(!obj){\r\n obj = {\r\n type: 'pass',\r\n poker: ['pass'],\r\n };\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n playByObj(lastObj){\r\n\r\n let obj = this.getObjByObj(lastObj);\r\n let success = this.deleteFromPokerListAndSendByObj(obj);\r\n if(!success){\r\n alert('error!');\r\n }\r\n\r\n }\r\n\r\n getListByList(list){\r\n let tempList = [];\r\n if(list[0] === 'pass'){\r\n return ['pass'];\r\n }\r\n for(let i=0; i<list.length; i++){\r\n let po = list[i];\r\n let poker = this.getAndDeleteOnePokerByNumber(po.number);\r\n if(poker){\r\n tempList.push(poker);\r\n }else{\r\n this.listBackToPokerList(tempList);\r\n return false;\r\n }\r\n }\r\n return tempList;\r\n }\r\n\r\n getListByString(str){\r\n let tempList = [];\r\n if(str === 'pass'){\r\n return ['pass'];\r\n }\r\n for(let i=0; i<str.length; i++){\r\n let text = str[i];\r\n let number = Poker.textToNumber(text);\r\n let poker = this.getAndDeleteOnePokerByNumber(number);\r\n if(poker){\r\n tempList.push(poker);\r\n }else{\r\n this.listBackToPokerList(tempList);\r\n return false;\r\n }\r\n }\r\n return tempList;\r\n }\r\n\r\n listBackToPokerList(list){\r\n while (list.length>0){\r\n let poker = list.splice(0,1)[0];\r\n this.pokerList.push(poker);\r\n }\r\n this.sortPoker();\r\n }\r\n\r\n handleList(list){\r\n if(list){\r\n let obj = Poker.getObjByPokerList(list);\r\n if(obj){\r\n if(obj.type === 'pass'){\r\n this.sendPoker(obj);\r\n return true;\r\n }\r\n let lastObj = this.getLastObj();\r\n if(lastObj){\r\n if(lastObj.type === obj.type){\r\n let comp = this.compareTwoObj(obj, lastObj);\r\n if(comp){\r\n this.sendPoker(obj);\r\n return true;\r\n }else{\r\n this.listBackToPokerList(list);\r\n alert('have to bigger than '+Poker.pokerListToString(lastObj.poker));\r\n return false;\r\n }\r\n\r\n }else{\r\n\r\n if(obj.type === 'sx'){\r\n this.sendPoker(obj);\r\n return true;\r\n }else if(obj.type === 'four' && lastObj.type!=='sx'){\r\n this.sendPoker(obj);\r\n return true;\r\n }\r\n\r\n this.listBackToPokerList(list);\r\n alert('type is not '+lastObj.type+'!');\r\n return false;\r\n }\r\n }else{\r\n this.sendPoker(obj);\r\n return true;\r\n }\r\n\r\n }else{\r\n this.listBackToPokerList(list);\r\n alert('type error!');\r\n return false;\r\n }\r\n\r\n }else{\r\n alert('poker error!');\r\n return false;\r\n }\r\n }\r\n\r\n playByPokerList(pokerList){\r\n if(this.game.currentPlayer!==this){\r\n alert('请等待 '+this.game.currentPlayer.name+' 出牌');\r\n return false;\r\n }\r\n\r\n let list = this.getListByList(pokerList);\r\n return this.handleList(list);\r\n }\r\n\r\n playByString(str){\r\n if(this.game.currentPlayer!==this){\r\n alert('请等待 '+this.game.currentPlayer.name+' 出牌');\r\n return false;\r\n }\r\n\r\n let list = this.getListByString(str);\r\n return this.handleList(list);\r\n }\r\n\r\n compareTwoObj(obj1, obj2) {\r\n if(obj1.list && obj2.list){\r\n if(obj1.list.length!==obj2.list.length){\r\n return false;\r\n }\r\n }\r\n\r\n if (obj1.type === 'one') {\r\n return obj1.one[0].number > obj2.one[0].number;\r\n } else if (obj1.type === 'two') {\r\n return obj1.two[0].number > obj2.two[0].number;\r\n } else if (obj1.type === 'three') {\r\n return obj1.three[0].number > obj2.three[0].number;\r\n } else if (obj1.type === 'threeWithOne') {\r\n return obj1.three[0].number > obj2.three[0].number;\r\n } else if (obj1.type === 'threeWithTwo') {\r\n return obj1.three[0].number > obj2.three[0].number;\r\n } else if (obj1.type === 'fourWithOne') {\r\n return obj1.four[0].number > obj2.four[0].number;\r\n } else if (obj1.type === 'fourWithTwo') {\r\n return obj1.four[0].number > obj2.four[0].number;\r\n } else if (obj1.type === 'threeWithOneList') {\r\n return obj1.list[0].three[0].number > obj2.list[0].three[0].number;\r\n } else if (obj1.type === 'threeWithTwoList') {\r\n return obj1.list[0].three[0].number > obj2.list[0].three[0].number;\r\n } else if (obj1.type === 'oneList') {\r\n return obj1.list[0].one[0].number > obj2.list[0].one[0].number;\r\n } else if (obj1.type === 'twoList') {\r\n return obj1.list[0].two[0].number > obj2.list[0].two[0].number;\r\n } else if (obj1.type === 'threeList') {\r\n return obj1.list[0].three[0].number > obj2.list[0].three[0].number;\r\n } else if (obj1.type === 'four') {\r\n return obj1.four[0].number > obj2.four[0].number;\r\n }\r\n }\r\n\r\n\r\n getAndDeleteOnePokerByNumber(number){\r\n for(let i=0; i<this.pokerList.length; i++){\r\n if(this.pokerList[i].number === number){\r\n return this.pokerList.splice(i,1)[0];\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n pokerListToString(){\r\n let result = Poker.pokerListToString(this.pokerList);\r\n return result;\r\n }\r\n\r\n lastSendObjToString(){\r\n if(!this.lastSendObj){\r\n return '';\r\n }\r\n let result = Poker.pokerListToString(this.lastSendObj.poker);\r\n return result;\r\n }\r\n\r\n}\r\n\r\nexport default Player;","import Player from \"./Player\";\r\nimport Poker from \"./Poker\";\r\n\r\nclass Game{\r\n constructor() {\r\n this.playerList = [];\r\n this.pokerList = [];\r\n this.deskPokerObj = null;\r\n this.oldPokerList = [];\r\n this.currentPlayer = [];\r\n this.dizhu = null;\r\n this.MaxSecond = 999999;\r\n this.second = this.MaxSecond;\r\n this.isOver = true;\r\n\r\n this.init();\r\n }\r\n\r\n init(){\r\n this.initPokerList();\r\n this.initPlayerList();\r\n this.sendPoker();\r\n\r\n this.start();\r\n }\r\n\r\n resetTime(){\r\n this.second = this.MaxSecond;\r\n }\r\n\r\n timeLoop(){\r\n if(this.isOver){\r\n return;\r\n }\r\n this.second--;\r\n\r\n if(this.second === 0){\r\n this.timeout();\r\n }\r\n\r\n let that = this;\r\n setTimeout(function () {\r\n that.timeLoop();\r\n },1000);\r\n }\r\n\r\n timeout(){\r\n this.currentPlayer.playByString('pass');\r\n }\r\n\r\n start(){\r\n this.isOver = false;\r\n this.timeLoop();\r\n this.currentPlayer = this.dizhu;\r\n if(this.currentPlayer.isRobot){\r\n this.currentPlayer.playByAI();\r\n }\r\n }\r\n\r\n next(){\r\n let over = this.checkGameOver();\r\n if(over){\r\n this.gameOver();\r\n return;\r\n }\r\n this.resetTime();\r\n this.currentPlayer = this.currentPlayer.next;\r\n if(this.currentPlayer.isRobot){\r\n this.currentPlayer.playByAI();\r\n }\r\n }\r\n\r\n gameOver(){\r\n alert('gameOver! '+this.currentPlayer.name+' ['+this.currentPlayer.type+'] win!');\r\n this.isOver = true;\r\n }\r\n\r\n checkGameOver(){\r\n if(this.currentPlayer.pokerList.length === 0) {\r\n return true;\r\n }\r\n }\r\n\r\n clearDesk(){\r\n if(this.deskPokerObj){\r\n this.oldPokerList.push(this.deskPokerObj);\r\n this.deskPokerObj = null;\r\n }\r\n }\r\n\r\n sendPoker(){\r\n let player = this.playerList[0];\r\n do{\r\n let index = this.getRandomIntInclusive(0,this.pokerList.length-1);\r\n let poker = this.pokerList.splice(index,1)[0];\r\n player.addPoker(poker);\r\n player = player.next;\r\n }while(this.pokerList.length>3);\r\n\r\n do{\r\n let poker = this.pokerList.splice(0,1)[0];\r\n this.dizhu.addPoker(poker);\r\n }while(this.pokerList.length>0);\r\n\r\n for(let i=0; i<this.playerList.length; i++){\r\n this.playerList[i].sortPoker();\r\n }\r\n }\r\n\r\n initPlayerList(){\r\n this.playerList = [];\r\n let player0 = new Player({\r\n name: 'player',\r\n isRobot: false,\r\n game: this,\r\n });\r\n let player1 = new Player({\r\n name: 'robot1',\r\n isRobot: true,\r\n game: this,\r\n });\r\n let player2 = new Player({\r\n name: 'robot2',\r\n isRobot: true,\r\n game: this,\r\n });\r\n this.playerList = [player0,player1,player2];\r\n\r\n this.playerList[0].next = this.playerList[1];\r\n this.playerList[1].next = this.playerList[2];\r\n this.playerList[2].next = this.playerList[0];\r\n this.playerList[0].last = this.playerList[2];\r\n this.playerList[1].last = this.playerList[0];\r\n this.playerList[2].last = this.playerList[1];\r\n\r\n let dizhuIndex = this.getRandomIntInclusive(0,2);\r\n this.playerList[dizhuIndex].type = 'dizhu';\r\n this.dizhu = this.playerList[dizhuIndex];\r\n }\r\n\r\n initPokerList(){\r\n this.pokerList = [];\r\n for(let number=3; number<=15; number++){\r\n for(let type=0; type<4; type++){\r\n let poker = new Poker({\r\n number: number,\r\n type: type,\r\n });\r\n this.pokerList.push(poker);\r\n }\r\n }\r\n for(let number=16; number<=17; number++){\r\n let poker = new Poker({\r\n number: number,\r\n });\r\n this.pokerList.push(poker);\r\n }\r\n\r\n }\r\n\r\n pokerListToString(){\r\n let result = '';\r\n result += Poker.pokerListToString(this.pokerList);\r\n result += '\\n';\r\n for(let i=0; i<this.oldPokerList.length; i++){\r\n result += Poker.pokerListToString(this.oldPokerList[i].poker);\r\n if(i<this.oldPokerList.length-1){\r\n result += ',';\r\n }\r\n }\r\n result += '\\n';\r\n result += this.deskPokerObj?Poker.pokerListToString(this.deskPokerObj.poker):'';\r\n return result;\r\n }\r\n\r\n getRandomIntInclusive(min, max) {\r\n return Math.floor(Math.random() * (max - min + 1)) + min;\r\n }\r\n}\r\n\r\nexport default Game;","<template>\n <div>\n <div style=\"width: 300px;height:300px;float: left; position: fixed ; left: 0px; top: 0px; background-color: aliceblue; text-align: center\">\n <span>\n {{player2Str[0]}}\n </br>\n {{player2Str[1]}}\n </br></br>\n {{player2Str[2]}}\n </span>\n </div>\n\n <div style=\"width: 300px;height:300px;float: left; position: fixed ; left: 600px; top: 0px; background-color: aliceblue; text-align: center\">\n <span>\n {{player1Str[0]}}\n </br>\n {{player1Str[1]}}\n </br></br>\n {{player1Str[2]}}\n </span>\n </div>\n\n <div style=\"width: 300px;height:300px;float: left; position: fixed ; left: 300px; top: 300px; background-color: aliceblue; text-align: center\">\n <span>\n {{player0Str[0]}}\n </br>\n {{player0Str[1]}}\n </br></br>\n {{player0Str[2]}}\n </span>\n <div>\n <input v-model=\"playerStr\" type=\"text\"/>\n <button @click=\"sendPoker\">send</button>\n <button @click=\"pass\">pass</button>\n </div>\n </div>\n\n <div style=\"width: 300px;height:300px;float: left; position: fixed ; left: 300px; top: 0px; background-color: aliceblue; text-align: center\">\n <div style=\"width: 300px;word-wrap: break-word;\">\n {{deskStr[0]}}\n </br>\n {{deskStr[1]}}\n </div>\n </div>\n\n <div style=\"position: fixed;left: 300px;top: 600px;\">\n <button @click=\"reStart\">reStart</button>\n </div>\n </div>\n</template>\n\n\n<script>\n import Game from \"../doudizhu/Game\";\nexport default {\n name: 'HelloWorld',\n data(){\n return {\n data:'fuck1',\n game: new Game(),\n playerStr: '',\n }\n },\n computed: {\n\n player2Str: function () {\n let game = this.game;\n let i = 2;\n return [\n game.playerList[i].name+' : '+game.playerList[i].type+' : '+game.playerList[i].pokerList.length,\n game.playerList[i].pokerListToString(),\n 'last : '+game.playerList[i].lastSendObjToString()\n ];\n },\n player1Str: function () {\n let game = this.game;\n let i = 1;\n return [\n game.playerList[i].name+' : '+game.playerList[i].type+' : '+game.playerList[i].pokerList.length,\n game.playerList[i].pokerListToString(),\n 'last : '+game.playerList[i].lastSendObjToString()\n ];\n },\n player0Str: function () {\n let game = this.game;\n let i = 0;\n return [\n game.playerList[i].name+' : '+game.playerList[i].type+' : '+game.playerList[i].pokerList.length,\n game.playerList[i].pokerListToString(),\n 'last : '+game.playerList[i].lastSendObjToString()\n ];\n },\n deskStr: function () {\n let game = this.game;\n return [\n 'desk',\n game.pokerListToString()\n ];\n },\n },\n mounted() {\n this.data = this.game.playerList[1].name;\n },\n methods:{\n reDraw() {\n\n },\n\n sendPoker() {\n let game = this.game;\n let success = game.playerList[0].playByString(this.playerStr);\n if(success){\n this.playerStr='';\n }\n },\n\n pass() {\n this.game.playerList[0].playByString('pass');\n },\n\n reStart() {\n this.game = new Game();\n this.playerStr='';\n },\n\n },\n}\n</script>\n\n<style scoped>\n\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HelloWorld.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HelloWorld.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HelloWorld.vue?vue&type=template&id=62298b0c&scoped=true&\"\nimport script from \"./HelloWorld.vue?vue&type=script&lang=js&\"\nexport * from \"./HelloWorld.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"62298b0c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticStyle:{\"user-select\":\"none\"}},[_c('div',{staticStyle:{\"width\":\"300px\",\"height\":\"300px\",\"float\":\"left\",\"position\":\"fixed\",\"left\":\"0\",\"top\":\"0px\",\"background-color\":\"aliceblue\",\"text-align\":\"center\"}},[_c('span',[_vm._v(\" 手牌:\"+_vm._s(_vm.player2Str[1])+\" \"),_c('br'),_vm._v(\" 上次出牌:\"+_vm._s(_vm.player2Str[2])+\" \")])]),_c('div',{staticStyle:{\"width\":\"300px\",\"height\":\"300px\",\"float\":\"left\",\"position\":\"fixed\",\"right\":\"0\",\"top\":\"0px\",\"background-color\":\"aliceblue\",\"text-align\":\"center\"}},[_c('span',[_vm._v(\" 手牌:\"+_vm._s(_vm.player1Str[1])+\" \"),_c('br'),_vm._v(\" 上次出牌:\"+_vm._s(_vm.player1Str[2])+\" \")])]),_c('div',{staticStyle:{\"width\":\"300px\",\"height\":\"300px\",\"float\":\"left\",\"position\":\"fixed\",\"left\":\"600px\",\"top\":\"0px\",\"background-color\":\"aliceblue\",\"text-align\":\"center\"}},[_c('div',{staticStyle:{\"width\":\"300px\",\"word-wrap\":\"break-word\"}},[_vm._v(\" 已出的牌: \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.deskStr[1])+\" \")])]),_c('div',{staticStyle:{\"position\":\"fixed\",\"left\":\"600px\",\"top\":\"300px\"}},[_c('button',{on:{\"click\":_vm.reStart}},[_vm._v(\"开始新一局\")])]),_c('div',{staticStyle:{\"position\":\"fixed\",\"bottom\":\"0\",\"width\":\"100%\",\"height\":\"200px\",\"line-height\":\"200px\"},style:({ marginLeft: _vm.playerMarginLeft-150 + 'px' })},[_vm._v(\" 你是 \"+_vm._s(_vm.game.playerList[0].type==='nongmin'?'农民':'地主')+\" \")]),_c('div',{staticStyle:{\"position\":\"fixed\",\"bottom\":\"0\",\"width\":\"100%\",\"height\":\"200px\"},style:({ marginLeft: _vm.playerMarginLeft + 'px' })},_vm._l((_vm.game.playerList[0].pokerList),function(item){return _c('div',{staticClass:\"poker\",class:{ selected: item.selected },on:{\"mouseenter\":function($event){return _vm.enter($event,item)},\"mousedown\":function($event){return _vm.pickPoker(item)}}},[_vm._v(\" \"+_vm._s(item.text)+\" \")])}),0),_c('div',{staticStyle:{\"position\":\"fixed\",\"bottom\":\"200px\",\"width\":\"100%\",\"height\":\"100px\",\"text-align\":\"left\"}},[_c('div',{staticStyle:{\"width\":\"200px\",\"height\":\"30px\"},style:({ marginLeft: _vm.buttonMarginLeft + 'px' })},[_c('button',{staticStyle:{\"height\":\"30px\",\"border-radius\":\"4px\",\"float\":\"left\"},on:{\"click\":_vm.sendPoker2}},[_vm._v(\"出牌\")]),_c('button',{staticStyle:{\"height\":\"30px\",\"border-radius\":\"4px\",\"margin-left\":\"20px\",\"float\":\"right\"},on:{\"click\":_vm.pass}},[_vm._v(\"不出\")]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.game.currentPlayer===_vm.game.playerList[0]),expression:\"game.currentPlayer===game.playerList[0]\"}],staticStyle:{\"color\":\"red\",\"width\":\"150px\",\"border\":\"solid\",\"border-radius\":\"4px\",\"float\":\"left\"}},[_vm._v(\" 请在\"+_vm._s(_vm.game.second)+\"秒内出牌 \")])])]),_c('div',{staticStyle:{\"position\":\"fixed\",\"bottom\":\"400px\",\"width\":\"100%\",\"height\":\"200px\"},style:({ marginLeft: _vm.deskPokerMarginLeft + 'px' })},[_vm._l((_vm.deskPoker),function(item){return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.deskPoker.length>0),expression:\"deskPoker.length>0\"}],staticClass:\"pokerDesk\"},[_vm._v(\" \"+_vm._s(item.text)+\" \")])}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.deskPoker.length===0),expression:\"deskPoker.length===0\"}],staticStyle:{\"height\":\"100%\",\"width\":\"100px\",\"float\":\"left\",\"margin-left\":\"-50px\",\"font-size\":\"50px\"}},[_vm._v(\" pass \")])],2),_c('div',{staticStyle:{\"position\":\"fixed\",\"top\":\"40px\",\"left\":\"20px\",\"height\":\"200px\",\"width\":\"100px\",\"border\":\"solid 1px\",\"border-radius\":\"8px\",\"background-color\":\"azure\",\"text-align\":\"center\"}},[_c('p',[_vm._v(\" \"+_vm._s(_vm.game.playerList[2].type==='nongmin'?'农民':'地主')+\" \")]),_c('p',[_vm._v(\" \"+_vm._s(_vm.game.playerList[2].name)+\" \")]),_c('p',[_vm._v(\" 剩余 \"+_vm._s(_vm.game.playerList[2].pokerList.length)+\" 张 \")]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.game.currentPlayer===_vm.game.playerList[2]),expression:\"game.currentPlayer===game.playerList[2]\"}],staticStyle:{\"color\":\"red\",\"width\":\"150px\",\"border\":\"solid\",\"border-radius\":\"4px\",\"position\":\"absolute\",\"bottom\":\"-50px\",\"left\":\"0\"}},[_vm._v(\" 请在\"+_vm._s(_vm.game.second)+\"秒内出牌 \")])]),_c('div',{staticStyle:{\"position\":\"fixed\",\"top\":\"40px\",\"right\":\"20px\",\"height\":\"200px\",\"width\":\"100px\",\"border\":\"solid 1px\",\"border-radius\":\"8px\",\"background-color\":\"azure\",\"text-align\":\"center\"}},[_c('p',[_vm._v(\" \"+_vm._s(_vm.game.playerList[1].type==='nongmin'?'农民':'地主')+\" \")]),_c('p',[_vm._v(\" \"+_vm._s(_vm.game.playerList[1].name)+\" \")]),_c('p',[_vm._v(\" 剩余 \"+_vm._s(_vm.game.playerList[1].pokerList.length)+\" 张 \")]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.game.currentPlayer===_vm.game.playerList[1]),expression:\"game.currentPlayer===game.playerList[1]\"}],staticStyle:{\"color\":\"red\",\"width\":\"150px\",\"border\":\"solid\",\"border-radius\":\"4px\",\"position\":\"absolute\",\"bottom\":\"-50px\",\"right\":\"0\"}},[_vm._v(\" 请在\"+_vm._s(_vm.game.second)+\"秒内出牌 \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div style=\"user-select: none\">\n <div style=\"width: 300px;height:300px;float: left; position: fixed ; left: 0; top: 0px; background-color: aliceblue; text-align: center\">\n <span>\n 手牌:{{player2Str[1]}}\n <br/>\n 上次出牌:{{player2Str[2]}}\n </span>\n </div>\n\n <div style=\"width: 300px;height:300px;float: left; position: fixed ; right: 0; top: 0px; background-color: aliceblue; text-align: center\">\n <span>\n 手牌:{{player1Str[1]}}\n <br/>\n 上次出牌:{{player1Str[2]}}\n </span>\n </div>\n\n\n <div style=\"width: 300px;height:300px;float: left; position: fixed ; left: 600px; top: 0px; background-color: aliceblue; text-align: center\">\n <div style=\"width: 300px;word-wrap: break-word;\">\n 已出的牌:\n <br/>\n {{deskStr[1]}}\n </div>\n </div>\n\n <div style=\"position: fixed;left: 600px;top: 300px;\">\n <button @click=\"reStart\">开始新一局</button>\n </div>\n\n <div :style=\"{ marginLeft: playerMarginLeft-150 + 'px' }\" style=\"position: fixed;bottom:0;width: 100%;height: 200px;line-height: 200px;\">\n 你是 {{game.playerList[0].type==='nongmin'?'农民':'地主'}}\n </div>\n <div :style=\"{ marginLeft: playerMarginLeft + 'px' }\" style=\"position: fixed;bottom:0;width: 100%;height: 200px;\">\n <div @mouseenter=\"enter($event,item)\" @mousedown=\"pickPoker(item)\" v-for=\"item in game.playerList[0].pokerList\" :class=\"{ selected: item.selected }\" class=\"poker\" style=\"\">\n {{item.text}}\n </div>\n </div>\n\n <div style=\"position: fixed;bottom:200px;width: 100%;height: 100px;text-align:left;\">\n <div :style=\"{ marginLeft: buttonMarginLeft + 'px' }\" style=\"width: 200px;height: 30px;\">\n <button @click=\"sendPoker2\" style=\"height: 30px;border-radius: 4px;float:left\">出牌</button>\n <button @click=\"pass\" style=\"height: 30px;border-radius: 4px;margin-left: 20px;float:right\">不出</button>\n <div v-show=\"game.currentPlayer===game.playerList[0]\" style=\"color: red;width:150px;border: solid;border-radius: 4px;float: left\">\n 请在{{game.second}}秒内出牌\n </div>\n </div>\n </div>\n\n <div :style=\"{ marginLeft: deskPokerMarginLeft + 'px' }\" style=\"position: fixed;bottom:400px;width: 100%;height: 200px\">\n <div v-show=\"deskPoker.length>0\" v-for=\"item in deskPoker\" class=\"pokerDesk\">\n {{item.text}}\n </div>\n <div v-show=\"deskPoker.length===0\" style=\"height:100%;width:100px;float: left;margin-left:-50px;font-size: 50px;\">\n pass\n </div>\n </div>\n\n <div style=\"position: fixed;top:40px;left: 20px;height:200px;width:100px;border: solid 1px;border-radius: 8px;background-color: azure;text-align: center\">\n <p>\n {{game.playerList[2].type==='nongmin'?'农民':'地主'}}\n </p>\n <p>\n {{game.playerList[2].name}}\n </p>\n <p>\n 剩余 {{game.playerList[2].pokerList.length}} 张\n </p>\n\n <div v-show=\"game.currentPlayer===game.playerList[2]\" style=\"color: red;width:150px;border: solid;border-radius: 4px;position: absolute;bottom:-50px;left: 0\">\n 请在{{game.second}}秒内出牌\n </div>\n </div>\n\n\n <div style=\"position: fixed;top:40px;right: 20px;height:200px;width:100px;border: solid 1px;border-radius: 8px;background-color: azure;text-align: center\">\n <p>\n {{game.playerList[1].type==='nongmin'?'农民':'地主'}}\n </p>\n <p>\n {{game.playerList[1].name}}\n </p>\n <p>\n 剩余 {{game.playerList[1].pokerList.length}} 张\n </p>\n <div v-show=\"game.currentPlayer===game.playerList[1]\" style=\"color: red;width:150px;border: solid;border-radius: 4px;position: absolute;bottom:-50px;right: 0\">\n 请在{{game.second}}秒内出牌\n </div>\n </div>\n </div>\n</template>\n\n\n<script>\n import Game from \"../doudizhu/Game\";\nexport default {\n name: 'HelloWorld',\n data(){\n return {\n data:'fuck1',\n game: new Game(),\n playerStr: '',\n pokerList: [],\n }\n },\n computed: {\n\n playerMarginLeft: function(){\n return (window.innerWidth - (this.game.playerList[0].pokerList.length*50))/2;\n },\n deskPokerMarginLeft: function(){\n return (window.innerWidth - (this.deskPoker.length*50))/2;\n },\n buttonMarginLeft: function(){\n return (window.innerWidth - 200)/2;\n },\n\n deskPoker: function(){\n if(this.game.deskPokerObj && this.game.deskPokerObj.poker){\n if(this.game.deskPokerObj.poker[0] && this.game.deskPokerObj.poker[0].text){\n return this.game.deskPokerObj.poker;\n }\n }\n return [];\n },\n player2Str: function () {\n let game = this.game;\n let i = 2;\n return [\n game.playerList[i].name+' : '+game.playerList[i].type+' : '+game.playerList[i].pokerList.length,\n game.playerList[i].pokerListToString(),\n game.playerList[i].lastSendObjToString()\n ];\n },\n player1Str: function () {\n let game = this.game;\n let i = 1;\n return [\n game.playerList[i].name+' : '+game.playerList[i].type+' : '+game.playerList[i].pokerList.length,\n game.playerList[i].pokerListToString(),\n game.playerList[i].lastSendObjToString()\n ];\n },\n player0Str: function () {\n let game = this.game;\n let i = 0;\n return [\n game.playerList[i].name+' : '+game.playerList[i].type+' : '+game.playerList[i].pokerList.length,\n game.playerList[i].pokerListToString(),\n game.playerList[i].lastSendObjToString()\n ];\n },\n deskStr: function () {\n let game = this.game;\n return [\n 'desk',\n game.pokerListToString()\n ];\n },\n },\n mounted() {\n this.data = this.game.playerList[1].name;\n },\n methods:{\n enter: function(e, poker){\n if(e.buttons === 1){\n this.pickPoker(poker);\n }\n },\n\n pickPoker(poker){\n if(!poker.selected){\n poker.selected = true;\n this.pokerList.push(poker);\n }else{\n poker.selected = false;\n for(let i=0; i<this.pokerList.length; i++){\n if(this.pokerList[i] === poker){\n this.pokerList.splice(i,1);\n }\n }\n }\n },\n\n sendPoker2() {\n let game = this.game;\n let success = game.playerList[0].playByPokerList(this.pokerList);\n if(success){\n this.pokerList=[];\n }\n },\n\n sendPoker() {\n let game = this.game;\n let success = game.playerList[0].playByString(this.playerStr);\n if(success){\n this.playerStr='';\n }\n },\n\n pass() {\n this.game.playerList[0].playByString('pass');\n },\n\n reStart() {\n this.game = new Game();\n this.playerStr='';\n },\n\n },\n}\n</script>\n\n<style scoped>\n .pokerDesk{\n height:100%;width:100px;border: solid 1px;border-radius: 16px;float: left;margin-left:-50px;background-color: azure;\n font-size: 30px;\n }\n .poker{\n height:100%;width:100px;border: solid 1px;border-radius: 16px;float: left;margin-left:-50px;background-color: azure;\n font-size: 30px;\n }\n .poker:hover{\n background-color: antiquewhite;\n }\n\n .selected{\n margin-top: -20px;\n }\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Game.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Game.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Game.vue?vue&type=template&id=3cd822ae&scoped=true&\"\nimport script from \"./Game.vue?vue&type=script&lang=js&\"\nexport * from \"./Game.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Game.vue?vue&type=style&index=0&id=3cd822ae&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3cd822ae\",\n null\n \n)\n\nexport default component.exports","<template>\n <div id=\"app\">\n <Game></Game>\n </div>\n</template>\n\n<script>\nimport HelloWorld from './components/HelloWorld.vue';\nimport Game from './components/Game.vue';\n\nexport default {\n name: 'App',\n components: {\n HelloWorld,\n Game,\n }\n}\n</script>\n\n<style>\n\n</style>\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=51e9b17b&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport App from './App.vue'\n\nVue.config.productionTip = false;\n\nnew Vue({\n render: h => h(App),\n}).$mount('#app');\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Game.vue?vue&type=style&index=0&id=3cd822ae&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Game.vue?vue&type=style&index=0&id=3cd822ae&scoped=true&lang=css&\""],"sourceRoot":""}
\ No newline at end of file
......@@ -9,7 +9,9 @@ class Game{
this.oldPokerList = [];
this.currentPlayer = [];
this.dizhu = null;
this.second = 20;
this.MaxSecond = 999999;
this.second = this.MaxSecond;
this.isOver = true;
this.init();
}
......@@ -23,10 +25,13 @@ class Game{
}
resetTime(){
this.second = 20;
this.second = this.MaxSecond;
}
timeLoop(){
if(this.isOver){
return;
}
this.second--;
if(this.second === 0){
......@@ -44,6 +49,7 @@ class Game{
}
start(){
this.isOver = false;
this.timeLoop();
this.currentPlayer = this.dizhu;
if(this.currentPlayer.isRobot){
......@@ -66,6 +72,7 @@ class Game{
gameOver(){
alert('gameOver! '+this.currentPlayer.name+' ['+this.currentPlayer.type+'] win!');
this.isOver = true;
}
checkGameOver(){
......
......@@ -59,8 +59,8 @@ class Player{
}
playByAllType(){
let types2 = ['one','two','threeWithOne','threeWithTwo','threeWithOneList','threeWithTwoList','oneList','twoList','four','sx','pass'];
let types = ['threeWithTwoList','threeWithOneList','twoList','threeWithTwo','oneList','threeWithOne','two','one','four','sx','pass'];
let types2 = ['one','two','three','threeWithOne','threeWithTwo','fourWithOne','fourWithTwo','threeWithOneList','threeWithTwoList','oneList','twoList','threeList','four','sx','pass'];
let types = ['threeWithTwoList','threeWithOneList','threeList','twoList','fourWithTwo','fourWithOne','threeWithTwo','oneList','threeWithOne','three','two','one','four','sx','pass'];
for(let i=0; i<types.length; i++){
let obj = this.getSmallestObjByType(types[i]);
if(obj){
......@@ -166,6 +166,14 @@ class Player{
one: poker,
};
}
}else if(type === 'three'){
if(Count3List.length>0){
obj = {
type: type,
poker: Count3List[0],
three: Count3List[0],
};
}
}else if(type === 'threeWithOne'){
if(Count3List.length>0){
let one;
......@@ -222,55 +230,90 @@ class Player{
};
}
}
}else if(type === 'threeWithOneList'){
if(Count3List.length>1){
for(let i=0; i<Count3List.length-1; i++){
if(Count3List[i][0].number+1===Count3List[i+1][0].number+1){
let one1,one2;
}else if(type === 'fourWithOne'){
if(Count4List.length>0){
let one;
if(Count1List.length>0){
one1 = Count1List[0];
if(Count1List.length>1){
one2 = Count1List[1];
}else{
one = Count1List[0];
}else if(Count2List.length>0){
one = Count2List[0].slice(0,1);
}else if(Count3List.length>0){
one = Count3List[0].slice(0,1);
}
if(one){
obj = {
type: type,
poker: Count4List[0].concat(one),
four: Count4List[0],
one: one,
};
}
}
}else if(type === 'fourWithTwo'){
if(Count4List.length>0){
let two;
if(Count2List.length>0){
one2 = Count2List[0].slice(0,1);
two = Count2List[0];
}else if(Count3List.length>0){
for(let j=0; j<Count3List.length; j++){
if(j===i){
continue;
two = Count3List[0].slice(0,2);
}
one2 = Count3List[j].slice(0,1);
if(two){
obj = {
type: type,
poker: Count4List[0].concat(two),
four: Count4List[0],
two: two,
};
}
}
}else if(type === 'threeWithOneList'){
if(Count3List.length>=2){
for(let i=0; i<Count3List.length-2+1; i++){
if(Count3List[i][0].number+2-1===Count3List[i+2-1][0].number && Count3List[i+2-1][0].number<=14){
let oneList = [];
for(let j=0; j<Count1List.length&&oneList.length<2; j++){
oneList.push(Count1List[j]);
}
}else if(Count2List.length>0){
one1 = Count2List[0].slice(0,1);
one2 = Count2List[0].slice(1,2);
}else if(Count3List.length>0){
for(let j=0; j<Count3List.length; j++){
if(j===i){
continue;
for(let j=0; j<Count2List.length&&oneList.length<2; j++){
oneList.push(Count2List[j].slice(0,1));
if(oneList.length<2){
oneList.push(Count2List[j].slice(1,2));
}
one1 = Count3List[j].slice(0,1);
one2 = Count3List[j].slice(1,2);
}
for(let j=0; j<Count3List.length&&oneList.length<2; j++){
oneList.push(Count3List[j].slice(0,1));
if(oneList.length<2){
oneList.push(Count3List[j].slice(1,2));
}
if(oneList.length<2){
oneList.push(Count3List[j].slice(2,3));
}
}
if(oneList.length === 2){
let poker = [];
let list = [];
for(let j=0; j<2; j++){
poker.concat(Count3List[i+j]);
poker.concat(oneList[i]);
let threeOne = {
three: Count3List[i+j],
one: oneList[i],
};
list.push(threeOne);
}
if(one1&&one2){
obj = {
type: type,
poker: Count3List[i].concat(one1).concat(Count3List[i+1]).concat(one2),
list: [
{
three: Count3List[i],
one: one1,
},
{
three: Count3List[i+1],
one: one2,
}
],
poker: poker,
list: list,
};
}
break;
......@@ -279,39 +322,38 @@ class Player{
}
}
}else if(type === 'threeWithTwoList'){
if(Count3List.length>1){
for(let i=0; i<Count3List.length-1; i++){
if(Count3List[i][0].number+1===Count3List[i+1][0].number+1){
if(Count3List.length>=2){
for(let i=0; i<Count3List.length-2+1; i++){
if(Count3List[i][0].number+2-1===Count3List[i+2-1][0].number && Count3List[i+2-1][0].number<=14){
let two1,two2;
if(Count2List.length>0){
two1 = Count2List[0];
if(Count2List.length>1){
two2 = Count2List[1];
}else{
for(let j=0; j<Count3List.length; j++){
if(j===i){
continue;
}
two2 = Count3List[j].slice(0,2);
let twoList = [];
for(let j=0; j<Count2List.length&&twoList.length<2; j++){
twoList.push(Count2List);
}
for(let j=0; j<Count3List.length&&twoList.length<2; j++){
twoList.push(Count3List[j].slice(0,2));
}
if(twoList.length === 2){
let poker = [];
let list = [];
for(let j=0; j<2; j++){
poker.concat(Count3List[i+j]);
poker.concat(twoList[i]);
let threeOne = {
three: Count3List[i+j],
two: twoList[i],
};
list.push(threeOne);
}
if(two1&&two2){
obj = {
type: type,
poker: Count3List[i].concat(two1).concat(Count3List[i+1]).concat(two2),
list: [
{
three: Count3List[i],
two: two1,
},
{
three: Count3List[i+1],
two: two2,
}
],
poker: poker,
list: list,
};
}
break;
......@@ -320,9 +362,9 @@ class Player{
}
}
}else if(type === 'oneList'){
if(Count1List.length>=5 ){
if(Count1List.length>=5){
for(let i=0; i<Count1List.length-5+1; i++){
if(Count1List[i][0].number+5-1===Count1List[i+5-1][0].number){
if(Count1List[i][0].number+5-1===Count1List[i+5-1][0].number && Count1List[i+5-1][0].number<=14){
let list = Count1List.slice(i,i+5);
obj = {
type: type,
......@@ -340,7 +382,7 @@ class Player{
}else if(type === 'twoList'){
if(Count2List.length>=3 ){
for(let i=0; i<Count2List.length-3+1; i++){
if(Count2List[i][0].number+3-1===Count2List[i+3-1][0].number){
if(Count2List[i][0].number+3-1===Count2List[i+3-1][0].number && Count2List[i+3-1][0].number<=14){
let list = Count2List.slice(i,i+3);
obj = {
type: type,
......@@ -355,6 +397,24 @@ class Player{
}
}
}
}else if(type === 'threeList'){
if(Count3List.length>=2 ){
for(let i=0; i<Count3List.length-2+1; i++){
if(Count3List[i][0].number+2-1===Count3List[i+2-1][0].number && Count3List[i+2-1][0].number<=14){
let list = Count3List.slice(i,i+2);
obj = {
type: type,
poker: list.flat(1),
list: list.map(function (item) {
return {
three: item,
}
}),
};
break;
}
}
}
}else if(type === 'sx'){
if(Count1List.length>=2){
for(let i=0; i<Count1List.length-1; i++){
......@@ -477,6 +537,19 @@ class Player{
}
}
}
}else if(type === 'three'){
if(Count3List.length>0){
for(let i=0; i<Count3List.length; i++){
if(Count3List[i][0].number>lastObj.three[0].number){
obj = {
type: type,
poker: Count3List[i],
three: Count3List[i],
};
break;
}
}
}
}else if(type === 'threeWithOne'){
if(Count3List.length>0){
for(let i=0; i<Count3List.length; i++){
......@@ -538,55 +611,103 @@ class Player{
}
}
}
}else if(type === 'threeWithOneList'){
if(Count3List.length>1){
for(let i=0; i<Count3List.length-1; i++){
if(Count3List[i][0].number>lastObj.list[0].three[0].number && Count3List[i][0].number+1===Count3List[i+1][0].number+1){
}else if(type === 'fourWithOne'){
if(Count4List.length>0){
for(let i=0; i<Count4List.length; i++){
if(Count4List[i][0].number>lastObj.four[0].number){
let one1,one2;
let one;
if(Count1List.length>0){
one1 = Count1List[0];
if(Count1List.length>1){
one2 = Count1List[1];
}else{
if(Count2List.length>0){
one2 = Count2List[0].slice(0,1);
one = Count1List[0];
}else if(Count2List.length>0){
one = Count2List[0].slice(0,1);
}else if(Count3List.length>0){
for(let j=0; j<Count3List.length; j++){
if(j===i){
continue;
one = Count3List[0].slice(0,1);
}
one2 = Count3List[j].slice(0,1);
if(one){
obj = {
type: type,
poker: Count4List[i].concat(one),
four: Count4List[i],
one: one,
};
}
break;
}
}
}
}else if(Count2List.length>0){
one1 = Count2List[0].slice(0,1);
one2 = Count2List[0].slice(1,2);
}else if(type === 'fourWithTwo'){
if(Count4List.length>0){
for(let i=0; i<Count4List.length; i++){
if(Count4List[i][0].number>lastObj.four[0].number){
let two;
if(Count2List.length>0){
two = Count2List[0];
}else if(Count3List.length>0){
for(let j=0; j<Count3List.length; j++){
if(j===i){
continue;
two = Count3List[0].slice(0,2);
}
if(two){
obj = {
type: type,
poker: Count4List[i].concat(two),
four: Count4List[i],
two: two,
};
}
break;
}
}
}
}else if(type === 'threeWithOneList'){
if(Count3List.length>=lastObj.list.length){
for(let i=0; i<Count3List.length-lastObj.list.length+1; i++){
if(Count3List[i][0].number>lastObj.list[0].three[0].number && Count3List[i][0].number+lastObj.list.length-1===Count3List[i+lastObj.list.length-1][0].number && Count3List[i+lastObj.list.length-1][0].number<=14){
let oneList = [];
for(let j=0; j<Count1List.length&&oneList.length<lastObj.list.length; j++){
oneList.push(Count1List[j]);
}
for(let j=0; j<Count2List.length&&oneList.length<lastObj.list.length; j++){
oneList.push(Count2List[j].slice(0,1));
if(oneList.length<lastObj.list.length){
oneList.push(Count2List[j].slice(1,2));
}
}
for(let j=0; j<Count3List.length&&oneList.length<lastObj.list.length; j++){
oneList.push(Count3List[j].slice(0,1));
if(oneList.length<lastObj.list.length){
oneList.push(Count3List[j].slice(1,2));
}
one1 = Count3List[j].slice(0,1);
one2 = Count3List[j].slice(1,2);
if(oneList.length<lastObj.list.length){
oneList.push(Count3List[j].slice(2,3));
}
}
if(one1&&one2){
if(oneList.length === lastObj.list.length){
let poker = [];
let list = [];
for(let j=0; j<lastObj.list.length; j++){
poker.concat(Count3List[i+j]);
poker.concat(oneList[i]);
let threeOne = {
three: Count3List[i+j],
one: oneList[i],
};
list.push(threeOne);
}
obj = {
type: type,
poker: Count3List[i].concat(one1).concat(Count3List[i+1]).concat(one2),
list: [
{
three: Count3List[i],
one: one1,
},
{
three: Count3List[i+1],
one: one2,
}
],
poker: poker,
list: list,
};
}
break;
......@@ -595,49 +716,49 @@ class Player{
}
}
}else if(type === 'threeWithTwoList'){
if(Count3List.length>1){
for(let i=0; i<Count3List.length-1; i++){
if(Count3List[i][0].number>lastObj.list[0].three[0].number && Count3List[i][0].number+1===Count3List[i+1][0].number+1){
if(Count3List.length>=lastObj.list.length){
for(let i=0; i<Count3List.length-lastObj.list.length+1; i++){
if(Count3List[i][0].number>lastObj.list[0].three[0].number && Count3List[i][0].number+lastObj.list.length-1===Count3List[i+lastObj.list.length-1][0].number && Count3List[i+lastObj.list.length-1][0].number<=14){
let two1,two2;
if(Count2List.length>0){
two1 = Count2List[0];
if(Count2List.length>1){
two2 = Count2List[1];
}else{
for(let j=0; j<Count3List.length; j++){
if(j===i){
continue;
}
two2 = Count3List[j].slice(0,2);
let twoList = [];
for(let j=0; j<Count2List.length&&twoList.length<lastObj.list.length; j++){
twoList.push(Count2List);
}
for(let j=0; j<Count3List.length&&twoList.length<lastObj.list.length; j++){
twoList.push(Count3List[j].slice(0,2));
}
if(twoList.length === lastObj.list.length){
let poker = [];
let list = [];
for(let j=0; j<lastObj.list.length; j++){
poker.concat(Count3List[i+j]);
poker.concat(twoList[i]);
let threeOne = {
three: Count3List[i+j],
two: twoList[i],
};
list.push(threeOne);
}
if(two1&&two2){
obj = {
type: type,
poker: Count3List[i].concat(two1).concat(Count3List[i+1]).concat(two2),
list: [
{
three: Count3List[i],
two: two1,
},
{
three: Count3List[i+1],
two: two2,
}
],
poker: poker,
list: list,
};
}
break;
}
}
}
}else if(type === 'oneList'){
if(Count1List.length>=lastObj.list.length ){
for(let i=0; i<Count1List.length-lastObj.list.length+1; i++){
if(Count1List[i][0].number>lastObj.list[0].one[0].number && Count1List[i][0].number+lastObj.list.length-1===Count1List[i+lastObj.list.length-1][0].number){
if(Count1List[i][0].number>lastObj.list[0].one[0].number && Count1List[i][0].number+lastObj.list.length-1===Count1List[i+lastObj.list.length-1][0].number && Count1List[i+lastObj.list.length-1][0].number<=14){
let list = Count1List.slice(i,i+lastObj.list.length);
obj = {
type: type,
......@@ -655,7 +776,7 @@ class Player{
}else if(type === 'twoList'){
if(Count2List.length>=lastObj.list.length ){
for(let i=0; i<Count2List.length-lastObj.list.length+1; i++){
if(Count2List[i][0].number>lastObj.list[0].two[0].number && Count2List[i][0].number+lastObj.list.length-1===Count2List[i+lastObj.list.length-1][0].number){
if(Count2List[i][0].number>lastObj.list[0].two[0].number && Count2List[i][0].number+lastObj.list.length-1===Count2List[i+lastObj.list.length-1][0].number && Count2List[i+lastObj.list.length-1][0].number<=14){
let list = Count2List.slice(i,i+lastObj.list.length);
obj = {
type: type,
......@@ -670,6 +791,24 @@ class Player{
}
}
}
}else if(type === 'threeList'){
if(Count3List.length>=lastObj.list.length ){
for(let i=0; i<Count3List.length-lastObj.list.length+1; i++){
if(Count3List[i][0].number>lastObj.list[0].two[0].number && Count3List[i][0].number+lastObj.list.length-1===Count3List[i+lastObj.list.length-1][0].number && Count3List[i+lastObj.list.length-1][0].number<=14){
let list = Count3List.slice(i,i+lastObj.list.length);
obj = {
type: type,
poker: list.flat(1),
list: list.map(function (item) {
return {
three: item,
}
}),
};
break;
}
}
}
}else if(type === 'four'){
if(Count4List.length>0){
for(let i=0; i<Count4List.length; i++){
......@@ -850,14 +989,26 @@ class Player{
}
compareTwoObj(obj1, obj2) {
if(obj1.list && obj2.list){
if(obj1.list.length!==obj2.list.length){
return false;
}
}
if (obj1.type === 'one') {
return obj1.one[0].number > obj2.one[0].number;
} else if (obj1.type === 'two') {
return obj1.two[0].number > obj2.two[0].number;
} else if (obj1.type === 'three') {
return obj1.three[0].number > obj2.three[0].number;
} else if (obj1.type === 'threeWithOne') {
return obj1.three[0].number > obj2.three[0].number;
} else if (obj1.type === 'threeWithTwo') {
return obj1.three[0].number > obj2.three[0].number;
} else if (obj1.type === 'fourWithOne') {
return obj1.four[0].number > obj2.four[0].number;
} else if (obj1.type === 'fourWithTwo') {
return obj1.four[0].number > obj2.four[0].number;
} else if (obj1.type === 'threeWithOneList') {
return obj1.list[0].three[0].number > obj2.list[0].three[0].number;
} else if (obj1.type === 'threeWithTwoList') {
......@@ -866,6 +1017,8 @@ class Player{
return obj1.list[0].one[0].number > obj2.list[0].one[0].number;
} else if (obj1.type === 'twoList') {
return obj1.list[0].two[0].number > obj2.list[0].two[0].number;
} else if (obj1.type === 'threeList') {
return obj1.list[0].three[0].number > obj2.list[0].three[0].number;
} else if (obj1.type === 'four') {
return obj1.four[0].number > obj2.four[0].number;
}
......
......@@ -131,6 +131,16 @@ class Poker{
};
}
}else if(pokerList.length === 3){
if(Count3List.length === 1){
return {
type:'three',
poker: pokerList,
three: pokerList,
};
}
}else if(pokerList.length === 4){
if(Count3List.length === 1){
......@@ -157,54 +167,58 @@ class Poker{
three: Count3List[0],
two: Count2List[0],
};
}else if(Count4List.length === 1 && Count1List.length === 1){
return {
type:'fourWithOne',
poker: pokerList,
four: Count4List[0],
one: Count1List[0],
};
}
}else if(pokerList.length === 8){
}else if(pokerList.length === 6){
if(Count3List.length === 2 && Count3List[0][0].number+1===Count3List[1][0].number){
if(Count2List.length === 1){
Count1List.push(Count2List[0].splice(0,1));
Count1List.push(Count2List[0].splice(0,1));
}
if(Count4List.length === 1 && Count2List.length === 1){
return {
type:'threeWithOneList',
type:'fourWithTwo',
poker: pokerList,
list: [
{
three: Count3List[0],
one: Count1List[0],
},
{
three: Count3List[1],
one: Count1List[1],
}
],
four: Count4List[0],
two: Count2List[0],
};
}
}else if(pokerList.length === 10){
}
if(Count3List.length === 2 && Count3List[0][0].number+1===Count3List[1][0].number && Count2List.length === 2){
if(Count3List.length>=2 && Count3List[Count3List.length-1][0].number<=14 && Count3List[0][0].number+Count3List.length-1===Count3List[Count3List.length-1][0].number){
//threeWithOneList
if(pokerList.length-3*Count3List.length===Count3List.length){
return {
type:'threeWithOneList',
poker: pokerList,
list: Count3List.map(function (item) {
return {
three: item,
};
}),
};
}else{
//threeWithTwoList
if(Count2List.length===Count3List.length){
return {
type:'threeWithTwoList',
poker: pokerList,
list: [
{
three: Count3List[0],
two: Count2List[0],
},
{
three: Count3List[1],
two: Count2List[1],
}
],
list: Count3List.map(function (item) {
return {
three: item,
};
}),
};
}
}
}
//判断oneList
if(pokerList.length >= 5 && Count1List.length === pokerList.length && pokerList[0].number+pokerList.length-1===pokerList[pokerList.length-1].number){
if(pokerList.length >= 5 && pokerList[pokerList.length-1].number<=14 && Count1List.length === pokerList.length && pokerList[0].number+pokerList.length-1===pokerList[pokerList.length-1].number){
return {
type:'oneList',
poker: pokerList,
......@@ -217,7 +231,7 @@ class Poker{
}
//判断twoList
if(pokerList.length >= 6 && pokerList.length%2 === 0 && Count2List.length === pokerList.length/2 && pokerList[0].number+pokerList.length/2-1===pokerList[pokerList.length-1].number){
if(pokerList.length >= 6 && pokerList[pokerList.length-1].number<=14 && pokerList.length%2 === 0 && Count2List.length === pokerList.length/2 && pokerList[0].number+pokerList.length/2-1===pokerList[pokerList.length-1].number){
return {
type:'twoList',
poker: pokerList,
......@@ -229,6 +243,19 @@ class Poker{
}
}
//判断threeList
if(pokerList.length >= 6 && pokerList[pokerList.length-1].number<=14 && pokerList.length%3 === 0 && Count3List.length === pokerList.length/3 && pokerList[0].number+pokerList.length/3-1===pokerList[pokerList.length-1].number){
return {
type:'threeList',
poker: pokerList,
list: Count3List.map(function (item) {
return {
three: item,
}
}),
}
}
return false;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册