在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → H5手机联网斗地主

实例介绍

【实例简介】一款能开房间邀请的斗地主游戏

Matchvs Poker  是一款比较流行的的斗地主游戏主要功能如下:

- 实现了最经典的斗地主玩法,叫地主抢地主等功能。
- 支持随机匹配模式,主动创建房间邀请微信好友模式两种。
- 接入Matchvs独立的排行榜系统。

分为客户端和服务端两个部分,client 是使用 Egret 实现的,server 是使用 matchvs gameServer nodejs版实现。项目目录结构如下:

┌-client Egret实现的客户端代码
├-gs-server Matchvs gameServer nodejs 实现的服务端代码
├-matchvs Matchvs客户端SDK
├-wxshare 封装的微信小游戏接口
└-README

【实例截图】

from clipboard


from clipboard

【核心代码】module gameLogic {

    export class PlayCardTypes {
        public static Types_Error:number = 0;           //类型出错
        public static Types_Signal:number = 1;          //单张
        public static Types_Double:number = 2;          //一对
        public static Types_Three:number = 3;           //三个不带
        public static Types_Three_Signal:number = 4;    //三代1
        public static Types_Three_Double:number = 5;    //三带一对
        public static Types_Four_Signal:number = 6;     //四张带2张单牌
        public static Types_Four_Double:number = 7;     //四张带2对
        public static Types_ThreeN:number = 8;          //飞机不带
        public static Types_ThreeN_Signal:number = 9;   //飞机带单牌
        public static Types_ThreeN_Double:number = 10;  //飞机带双牌
        public static Types_List:number = 11;           //顺子
        public static Types_DoubleN:number = 12;        //连对
        public static Types_Bomb:number = 13;           //炸弹

        private _cardsAll:Array<number> = [];
        private _singleArr:Array<number> = [];
        private _doubleArr:Array<number> = [];
        private _tripleArr:Array<number> = [];
        private _quadrupleArr:Array<number> = [];

        public constructor() {

        }

        public GetType(list:Array<number>):CardListData {
            if(list==null||list.length<1)
            {
                return new CardListData();
            }
            this._cardsAll = [];
            this._singleArr = [];
            this._doubleArr = [];
            this._tripleArr = [];
            this._quadrupleArr = [];

            var i:number = 0;
            var len:number = list.length;
            var cardlistdata:CardListData = new CardListData();
            for (i = 0; i < len; i ) {
                this._cardsAll.push(list[i] % 100);               
            }
            //随机排序一下
            this._cardsAll.sort(function sortNumber(a, b) {
                return a - b
            });
            this.divid();

            var alllen:number = this._cardsAll.length;
            var siglelen:number = this._singleArr.length;
            var doublelen:number = this._doubleArr.length;
            var triplelen:number = this._tripleArr.length;
            var quadruplen:number = this._quadrupleArr.length;

            cardlistdata.List = list;
            cardlistdata.AllArr = this._cardsAll;
            cardlistdata.SingleArr = this._singleArr;
            cardlistdata.DoubleArr = this._doubleArr;
            cardlistdata.TripleArr = this._tripleArr;
            cardlistdata.QuadrupleArr = this._quadrupleArr;
            cardlistdata.OneArr = this._singleArr.concat(this._doubleArr).concat(this._tripleArr).concat(this._quadrupleArr);
            ArrayTools.Sort(cardlistdata.OneArr);

            var isfly:boolean = true;         //飞机
            var islist:boolean = true;        //顺子
            var isdoublist:boolean = true;    //连对
            var last:number = -1;
            var num = 0;
            if (alllen == 1) {
                console.info("Types-GetType> 一张")
                cardlistdata.Type = PlayCardTypes.Types_Signal;
                return cardlistdata;
            }
            if (alllen == 2 && doublelen == 1) {
                console.info("Types-GetType> 一对")
                cardlistdata.Type = PlayCardTypes.Types_Double;
                return cardlistdata;
            }
            if (alllen == 3 && triplelen == 1) {
                console.info("Types-GetType> 三张")
                cardlistdata.Type = PlayCardTypes.Types_Three;
                return cardlistdata;
            }
            if (alllen == 4 && triplelen == 1) {
                console.info("Types-GetType> 三带一")
                cardlistdata.Type = PlayCardTypes.Types_Three_Signal;
                return cardlistdata;
            }
            if (alllen == 5 && triplelen == 1 && doublelen == 1) {
                console.info("Types-GetType> 三代一对")
                cardlistdata.Type = PlayCardTypes.Types_Three_Double;
                return cardlistdata;
            }
            if (alllen == 6 && quadruplen == 1 && siglelen == 2) {
                console.info("Types-GetType> 四带二")
                cardlistdata.Type = PlayCardTypes.Types_Four_Signal;             //4带二,大小王先不算,欢乐斗地主不能带牌
                return cardlistdata;
            }
            if (alllen == 6 && quadruplen == 1 && doublelen == 1) {
                console.info("Types-GetType> 四带二")
                cardlistdata.Type = PlayCardTypes.Types_Four_Signal;             //4带二,大小王先不算,欢乐斗地主不能带牌
                return cardlistdata;
            }
            if (alllen == 8 && quadruplen == 1 && doublelen == 2) {
                console.info("Types-GetType> 四带两对")
                cardlistdata.Type = PlayCardTypes.Types_Four_Double;             //4带二对,大小王先不算,欢乐斗地主不能带牌
                return cardlistdata;
            }
            if (triplelen > 1 && quadruplen == 0)         //飞机
            {
                isfly = true;
                last = -1;
                for (i = 0; i < triplelen; i ) {
                    num = this._tripleArr[i];
                    if (last == -1) {
                        last = num;
                    }
                    else if (num == (last 1)) {
                        last = num;
                    }
                    else {
                        isfly = false;
                    }
                }
                //是飞机状况
                if (isfly) {
                    //飞机不带牌
                    if (siglelen == 0 && doublelen == 0 && quadruplen == 0) {
                        console.info("Types-GetType> 飞机")
                        cardlistdata.Type = PlayCardTypes.Types_ThreeN;
                        return cardlistdata;
                    }
                    //飞机带双牌
                    if (triplelen == doublelen && siglelen == 0 && quadruplen == 0) {
                        console.info("Types-GetType> 飞机带对子")
                        cardlistdata.Type = PlayCardTypes.Types_ThreeN_Double;
                        return cardlistdata;
                    }
                    //飞机带单牌
                    if (triplelen == siglelen && doublelen == 0 && quadruplen == 0||
                        triplelen == (siglelen doublelen*2)  && quadruplen == 0
                    ) {
                        console.info("Types-GetType> 飞机带单牌")
                        cardlistdata.Type = PlayCardTypes.Types_ThreeN_Signal;
                        return cardlistdata;
                    }
                }

            }
            if (doublelen == 0 && triplelen == 0 && quadruplen == 0 && siglelen > 4) {
                islist = true;
                last = -1;
                for (i = 0; i < siglelen; i ) {
                    num = this._singleArr[i];
                    if (last == -1) {
                        last = num;
                    }
                    else if (num == (last 1)) {
                        last = num;
                    }
                    else {
                        islist = false;
                    }
                }
                if (islist) {
                    console.info("Types-GetType> 顺子")
                    cardlistdata.Type = PlayCardTypes.Types_List;
                    return cardlistdata;
                }
            }

            if (doublelen > 2 && triplelen == 0 && quadruplen == 0 && siglelen == 0) {
                isdoublist = true;
                last = -1;
                for (i = 0; i < doublelen; i ) {
                    num = this._doubleArr[i];
                    if (last == -1) {
                        last = num;
                    }
                    else if (num == (last 1)) {
                        last = num;
                    }
                    else {
                        isdoublist = false;
                    }
                }
                if (isdoublist) {
                    console.info("Types-GetType> 连对")
                    cardlistdata.Type = PlayCardTypes.Types_DoubleN;
                    return cardlistdata;
                }
            }

            if (alllen == 4 && quadruplen == 1) {
                console.info("Types-GetType> 炸弹")
                cardlistdata.Type = PlayCardTypes.Types_Bomb;             //普通炸弹
                return cardlistdata;
            }
            if (alllen == 2 && siglelen == 2) {
                if (this._singleArr[0] > 50 && this._singleArr[1] > 50) {
                    console.info("Types-GetType> 王炸")
                    cardlistdata.Type = PlayCardTypes.Types_Bomb;             //王炸
                    return cardlistdata;
                }
            }
            cardlistdata.Type = PlayCardTypes.Types_Error;
            return cardlistdata;
        }


        //把取余后的列表划分到各个数组中
        private divid():void {
            var i:number = 0;
            var len:number = this._cardsAll.length;
            for (i = 0; i < this._cardsAll.length; i ) {
                var id:number = this._cardsAll[i];
                var rePeat:number = this.NumberOf(id);
                switch (rePeat) {
                    case 1:
                        this._singleArr.push(id);
                        break;
                    case 2:
                        this._doubleArr.push(id);
                        i = 1;
                        break;
                    case 3:
                        this._tripleArr.push(id);
                        i = 2;
                        break;
                    case 4:
                        this._quadrupleArr.push(id);
                        i = 3;
                        break;
                    default:
                        break;
                }
            }
        }

        //计算数量
        private NumberOf(value:number):number {
            var tid:number = value;
            var totalRepeat:number = 0;
            var i:number = 0;
            var len:number = this._cardsAll.length;
            for (i = 0; i < len; i ) {
                var id:number = this._cardsAll[i];
                if (id % 100 == tid) {
                    totalRepeat = 1;
                }
            }
            return totalRepeat;
        }
    }
}

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警