实例介绍
【实例简介】一款能开房间邀请的斗地主游戏
Matchvs Poker 是一款比较流行的的斗地主游戏主要功能如下:
- 实现了最经典的斗地主玩法,叫地主抢地主等功能。
- 支持随机匹配模式,主动创建房间邀请微信好友模式两种。
- 接入Matchvs独立的排行榜系统。
分为客户端和服务端两个部分,client 是使用 Egret 实现的,server 是使用 matchvs gameServer nodejs版实现。项目目录结构如下:
┌-client Egret实现的客户端代码
├-gs-server Matchvs gameServer nodejs 实现的服务端代码
├-matchvs Matchvs客户端SDK
├-wxshare 封装的微信小游戏接口
└-README
【实例截图】
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;
}
}
}
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论