茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    JavaScript實(shí)現(xiàn)斗地主游戲的思路
    來(lái)源:易賢網(wǎng) 閱讀:999 次 日期:2016-08-04 16:18:21
    溫馨提示:易賢網(wǎng)小編為您整理了“JavaScript實(shí)現(xiàn)斗地主游戲的思路”,方便廣大網(wǎng)友查閱!

    這里說(shuō)說(shuō)斗地主主要包含的功能:洗牌,發(fā)牌,玩家出牌、電腦出牌,出牌規(guī)則的驗(yàn)證,輸贏啥的沒(méi)有判斷,只是實(shí)現(xiàn)了這幾個(gè)主要功能,下面依次說(shuō)說(shuō)幾個(gè)功能的實(shí)現(xiàn):

    1.洗牌:  

    var pukes=this.manage.pukes;//存放撲克牌的數(shù)組

    //洗牌

    for(var i=;i<pukes.length;i++){

    var tmp=pukes[i];

    var index=util.random(i,pukes.length);//隨機(jī)交換兩張牌

    pukes[i]=pukes[index];

    pukes[index]=tmp;

    }

    2.發(fā)牌(簡(jiǎn)版默認(rèn)是玩家自己為地主,電腦為農(nóng)民),由于前面洗牌時(shí)已經(jīng)將牌的順序打亂,所以發(fā)牌只是簡(jiǎn)單的循環(huán)把pukes中的元素添加到每個(gè)玩家實(shí)例中的pukes字段中。

    //發(fā)牌

    var start=;

    for(var i=;i<this.manage.pukes.length-;i++) {

    if(start==this.manage.players.length){

    start=;

    }

    this.manage.pukes[i].status=true;

    this.manage.players[start].pukesLen++;

    this.manage.players[start++].pukes.push(this.manage.pukes[i]);

    }

    for(var i=this.manage.pukes.length-;i<this.manage.pukes.length;i++){

    //地主多三張

    this.manage.pukes[i].status=true;

    this.manage.players[this.manage.curPlayerIndex].pukesLen++;

    this.manage.players[this.manage.curPlayerIndex].pukes.push(this.manage.pukes[i]);

    }

    3.玩家出牌,玩家出牌分為電腦和玩家自己兩個(gè)步驟,電腦出牌是非常傻瓜的出牌方式(有牌就出):

    //出牌

    if(this.options.playerIndex==this.manage.curPlayerIndex) {

    var spks = [],gz=false;

    if (this.manage.curMaxPlayerIndex == this.options.playerIndex) {

    this.manage.deskPukes = [];

    }

    if (this.isCompute) {

    //電腦自動(dòng)出牌

    var start = ;

    var len=this.manage.deskPukes.length||;

    while (start < this.pukes.length) {

    spks = [];

    for (var i = ,j=start; i <len&&j<this.pukes.length; i++) {

    //隨便選一張 可以出就行

    if(this.pukes[j].status) {

    spks.push(this.pukes[j++]);

    }

    }

    if(spks.length) {

    if (rules.valids(spks, this.manage.deskPukes)) {

    gz = true;

    break;

    }

    }

    start++;

    }

    }

    else {

    //玩家選擇出牌

    for (var i = ; i < this.pukes.length; i++) {

    if (this.pukes[i].selected && this.pukes[i].status) {

    spks.push(this.pukes[i]);

    }

    }

    if (rules.valids(spks, this.manage.deskPukes)) {

    gz=true;

    }

    else{

    alert("出牌不符合規(guī)則!");

    }

    }

    if(gz){

    this.manage.curMaxPlayerIndex=this.options.playerIndex;

    this.manage.deskPukes = [];

    for (var i = ; i < spks.length; i++) {

    this.pukesLen--;

    this.manage.deskPukes.push(spks[i]);

    spks[i].status = false;

    }

    }

    this.manage.renderPukes();

    this.manage.renderCurDiscard();

    if(this.isCompute||gz) {

    this.manage.nextPlayer();

    }

    }

    else{

    alert("沒(méi)輪到你出牌!");

    }

    4.出牌規(guī)則的驗(yàn)證,是很多函數(shù)組合起來(lái),然后循環(huán)調(diào)用,如果遇到返回ture的即為出牌符合規(guī)則:

    //以下為出牌規(guī)則

    var rules={

    _rules:[

    new danzRule(),

    new duiRule(),

    new sandRule(),

    new zandRule(),

    new shunzRule(),

    new liandRule()

    ],

    valids:function(_pukes,_curPukes){

    for(var i=;i<this._rules.length;i++){

    if(this._rules[i].valid(_pukes,_curPukes)){

    return true;

    }

    }

    return false;

    }

    };

    function danzRule(){

    //單張規(guī)則

    }

    danzRule.prototype.valid=function(_pukes,_curPukes){

    //校驗(yàn)

    var pukes=_pukes;//玩家的牌

    var curPukes=_curPukes;//左面的牌

    if(pukes&&pukes.length==){

    //比較牌面值

    if(!curPukes||!curPukes.length){

    return true;

    }

    if(curPukes[].dians==&&pukes[].dians<){

    //特殊處理

    return false;

    }

    if(pukes[].dians==&&curPukes[].dians<){

    //特殊處理

    return true;

    }

    return pukes[].dians>curPukes[].dians;

    }

    return false;

    }

    function duiRule(_pukes,_curPukes){

    //兩張規(guī)則

    }

    duiRule.prototype.valid=function(_pukes,_curPukes){

    //校驗(yàn)

    var pukes=_pukes;//玩家的牌

    var curPukes=_curPukes;//左面的牌

    if(pukes&&pukes.length==){

    //比較牌面值

    if(pukes[].dians>&&pukes[].dians>){

    return true;

    }

    if(pukes[].dians!=pukes[].dians){

    return false;

    }

    if(!curPukes||!curPukes.length){

    return true;

    }else {

    if(curPukes.length!=){

    return false;

    }

    if (curPukes[].dians > && curPukes[].dians > ) {

    return false;

    }

    if (curPukes[].dians != curPukes[].dians) {

    return false;

    }

    if (curPukes[].dians == ) {

    return false;

    }

    }

    if(pukes[].dians==){

    return true;

    }

    return pukes[].dians>curPukes[].dians;

    }

    return false;

    }

    function sandRule(){

    //三帶

    }

    sandRule.prototype.valid=function(_pukes,_curPukes){

    //校驗(yàn)

    var pukes=_pukes;//玩家的牌

    var curPukes=_curPukes;//左面的牌

    if(pukes&&(pukes.length>=)){

    //比較牌面值

    var books=getBooks(pukes);

    if(!valid(books))return false;

    if(!curPukes||!curPukes.length)return true;

    if(curPukes.length!=books.length)return false;

    var books=getBooks(curPukes);

    if(!valid(books))return false;

    return getSum(books)>getSum(books);

    }

    return false;

    function getSum(books){

    var sum=;

    for(var i=;i<books.length;i++) {

    if(books[i]==){

    if(i==)return ;

    sum+=i;

    }

    }

    return sum;

    }

    function valid(books){

    //驗(yàn)證三帶是否有效

    var counts= ,countsd= ,d=true,start=false,startIndex=-;

    for(var i=;i<books.length;i++) {

    if(start&&books[i]==&&startIndex!=(i-)){

    return false;

    }else{

    startIndex=i;

    }

    if(books[i]==){

    if(!start) {

    start = true;

    startIndex = i;

    }

    counts++;

    }

    if(books[i]==){

    d=false;

    }

    }

    for(var i=;i<books.length;i++) {

    if(d&&books[i]==){

    countsd++;

    }

    else if(!d&&books[i]==){

    countsd++;

    }

    }

    return counts>&&counts==countsd;

    }

    function getBooks(pukes){

    //返回三帶的每個(gè)點(diǎn)數(shù)的個(gè)數(shù)

    var books=[];

    for(var i=;i<pukes.length;i++){

    if(!books[pukes[i].dians]){

    books[pukes[i].dians]=;

    }else{

    books[pukes[i].dians]++;

    }

    }

    return books;

    }

    }

    function zandRule(){

    //炸彈

    }

    zandRule.prototype.valid=function(_pukes,_curPukes){

    var pukes=_pukes;//玩家的牌

    var curPukes=_curPukes;//左面的牌

    if(pukes&&pukes.length==) {

    if(!allEqual(pukes)){

    return false;

    }

    if(!curPukes||(curPukes.length>&&curPukes.length!=)||!allEqual(curPukes)){

    return true;

    }

    else{

    if(pukes[].dians==){

    return true;

    }

    if(curPukes[].dians==){

    return false;

    }

    return pukes[].dians>curPukes[].dians;

    }

    }

    return false;

    function allEqual(pukes){

    if(!pukes||!pukes.length)return false;

    var base=pukes[].dians;

    for(var i=;i<pukes.length;i++){

    if(base!=pukes[i].dians){

    return false;

    }

    }

    return true;

    }

    }

    function liandRule(){

    //連對(duì)

    }

    liandRule.prototype.valid=function(_pukes,_curPukes) {

    var pukes=_pukes;//玩家的牌

    var curPukes=_curPukes;//左面的牌

    if(pukes&&pukes.length>=) {

    if(!verificationCoherence(pukes)){

    return false;

    }

    if(!curPukes||curPukes.length<=){

    return true;

    }

    if(!verificationCoherence(curPukes)){

    return false;

    }

    if(pukes.length!=curPukes.length){

    return false;

    }

    return getSumDians(pukes)>getSumDians(curPukes);

    }

    return false;

    function getSumDians(pukes){

    var sum=;

    for(var i=;i<pukes.length;i++) {

    sum+=pukes[i].dians;

    }

    return sum;

    }

    function verificationCoherence(pukes){

    //驗(yàn)證連貫性

    if(!pukes||!pukes.length)return false;

    var books=[];

    for(var i=;i<pukes.length;i++){

    if(pukes[i].dians==||pukes[i].dians>){

    return false;

    }

    if(!books[pukes[i].dians]){

    books[pukes[i].dians]=;

    }else{

    books[pukes[i].dians]++;

    }

    if(books[pukes[i].dians]>){

    return false;

    }

    }

    var start=false;

    for(var i=;i<books.length;i++) {

    if(books[i]&&books[i]!=){

    return false;

    }

    if(books[i]==&&!start){

    start=true;

    }

    if(start&&books[i]!=){

    return false;

    }

    }

    return true;

    }

    }

    function shunzRule(){

    //順子

    }

    shunzRule.prototype.valid=function(_pukes,_curPukes){

    var pukes=_pukes;//玩家的牌

    var curPukes=_curPukes;//左面的牌

    if(pukes&&pukes.length>=) {

    if(!verificationCoherence(pukes)){

    return false;

    }

    if(!curPukes||curPukes.length<=){

    return true;

    }

    if(!verificationCoherence(curPukes)){

    return false;

    }

    if(pukes.length!=curPukes.length){

    return false;

    }

    return getSumDians(pukes)>getSumDians(curPukes);

    }

    return false;

    function getSumDians(pukes){

    var sum=;

    for(var i=;i<pukes.length;i++) {

    sum+=pukes[i].dians;

    }

    return sum;

    }

    function verificationCoherence(pukes){

    //驗(yàn)證連貫性

    if(!pukes||!pukes.length)return false;

    var books=[];

    for(var i=;i<pukes.length;i++){

    if(pukes[i].dians==||pukes[i].dians>){

    return false;

    }

    if(!books[pukes[i].dians]){

    books[pukes[i].dians]=;

    }else{

    return false;

    }

    }

    var start=false;

    for(var i=;i<books.length;i++) {

    if(books[i]==&&!start){

    start=true;

    }

    if(start&&!books[i]){

    return false;

    }

    }

    return true;

    }

    }

    以上4步,是我認(rèn)為的主要的4個(gè)函數(shù),其他的函數(shù),如初始化,事件注冊(cè)等,在源碼已有注釋,寫的不好勿噴。

    JavaScript實(shí)現(xiàn)斗地主游戲的思路就給大家介紹這么多,希望對(duì)大家有所幫助!

    更多信息請(qǐng)查看網(wǎng)絡(luò)編程
    易賢網(wǎng)手機(jī)網(wǎng)站地址:JavaScript實(shí)現(xiàn)斗地主游戲的思路
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2026上岸·考公考編培訓(xùn)報(bào)班

    • 報(bào)班類型
    • 姓名
    • 手機(jī)號(hào)
    • 驗(yàn)證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報(bào)警專用圖標(biāo)