⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 doudizhu.as

📁 flash版斗地主程序
💻 AS
📖 第 1 页 / 共 3 页
字号:
/*
开发人  :小宝 qq:42353066
开发时间:07.05.09
功能    :洗牌效果、出牌检测、判断发牌等
*/
var arrCards:Array = new Array();       //用户纸牌__二维数组   (index=3 为底牌)
var arrOutCards:Array = new Array(); //已出纸牌__二维数组
var  arrUpOutCards:Array = new Array(); //保存上一轮的结果
var  arrThisOutCards:Array = new Array(); //保存本一轮的结果
var mePlayer:Number = 0;                      //由进入分组队列的先后顺序决定(1 ,2 ,3)   后台服务决定
var mePlayerPaiXu:Boolean = true;     //排序(从大到小 或则 从牌多到牌少)
var mePlayerTuoGuan:Boolean= false;  //托管
var dizhuPlayer:Number = 0;                  //地主是哪一家
var curChuPlayer:Number = 0;               //当前出牌人
var curFirstPlayer:Number = 0;              //当前先出牌的人
var dizhuCardValue:Number = 0;           //发牌时先叫地主的牌值
var screenRange:Array = new Array(1010, 680);
var paiMidWidth:Array = new Array(22, 16, 80, 220, 140, 280);    //(index=0 自己牌之间的宽度或已出牌之间的宽度 ,  index=1 为对方牌 牌与牌之间的宽度  ,
													    //index=2 为自己牌距离边缘的宽度,index=3 为自己已出的牌距离边缘的宽度,
													    //index=4 为对方牌距离边缘的宽度,index=5 为对方已出的牌距离边缘的宽度)
var varBomb:Number = 0;
var varRocket:Number = 0;
var varState:Array = ["正在連接服務器...", "正在分組中...", "請等待其他玩家進入遊戲...", "成功進入遊戲,正在分組中...", "有人離綫,請等待重新分組!","你已在托管遊戲中,稍候進入.","遊戲未開場.","沒有足夠的金額,請先充值。","網絡已經斷開..","用户用戶已被暫停.."];

function CreateDeck(cardstr:String) {
	EndCards();
	//mczhunbei1._visible = false;
	//mczhunbei2._visible = false;
	//mczhunbei3._visible = false;
	
	var orgalCard = cardstr.split(",");	
	dizhuCardValue = orgalCard[orgalCard[orgalCard.length-1]];
	for (var i = 0; i<orgalCard.length-1; ) {
		for (var j = 0; j<3; j++) {
			var len = arrCards[j].push(new ClassCards(orgalCard[i++], 17, j+1));
		}
		if (arrCards[3].length<3) {
			arrCards[3].push(new ClassCards(orgalCard[i++], 3, 4));  //4 为底牌放
		}
	}
	
	//MovingCardsStart();
	setTimeout(CreateDeckState, 1000); 
}
function CreateDeckState() {
	MovingCardsStart();
}	

function ClassCards(cv:Number, cardCount:Number, witchPlayer:Number) {	
	this.point = (cv%10-1)*13+int(cv/10)%100;
	this.cardValue = cv;
	mcPaiPlatForm.attachMovie("Card", "Card"+String(cv)+String(witchPlayer), witchPlayer*30+1000+arrCards[witchPlayer-1].length);
	this.objCard = eval("mcPaiPlatForm.Card"+String(cv)+String(witchPlayer));
	this.objCard._visible = false;
	this.objCard.gotoAndStop(55);
	this.objCard.states = 1;   //1 为初始状态,2 为选中状态 , 3 准备要出的牌,4 已出的牌
	if (witchPlayer == mePlayer) {
		var posX = (screenRange[0]-(cardCount-1)*paiMidWidth[0])/2;
		this.objCard._x = arrCards[witchPlayer-1].length*paiMidWidth[0]+posX;
		this.objCard._y = screenRange[1]-paiMidWidth[2];
		this.objCard.onRelease = function() {
			if (this.states == 1) {
				this._y = this._y-20;
				this.states = 2;
			} else if (this.states == 2) {
				this._y = this._y+20;
				this.states = 1;
			}
		};
		this.objCard.enabled = false;
	} else if (witchPlayer == 4) {//底牌
		var posX = (screenRange[0]-(cardCount-1)*80)/2;
		this.objCard._x = arrCards[witchPlayer-1].length*80+posX;
		this.objCard._y = 70;
	} else if (witchPlayer-mePlayer == 1 || witchPlayer-mePlayer == -2) {//mePlayer的右边
		this.objCard._x = screenRange[0]-paiMidWidth[4];
		var posY = (screenRange[1]-(cardCount-1)*paiMidWidth[1])/2;
		this.objCard._y = arrCards[witchPlayer-1].length*paiMidWidth[1]+posY;
		this.objCard._rotation = -90;
	} else if (witchPlayer-mePlayer == -1 || witchPlayer-mePlayer == 2) {//mePlayer的左边
		this.objCard._x = paiMidWidth[4];
		var posY = (screenRange[1]-(cardCount-1)*paiMidWidth[1])/2;
		this.objCard._y = arrCards[witchPlayer-1].length*paiMidWidth[1]+posY;
		this.objCard._rotation = 90;
	}
}
function ClassCardsUp(cv:Number, cardCount:Number, witchPlayer:Number) {	
	this.point = (cv%10-1)*13+int(cv/10)%100;
	this.cardValue = cv;
	mcCardPlatFormUp.attachMovie("Card", "Card"+String(cv)+String(witchPlayer), witchPlayer*30+90000+arrUpOutCards[2+witchPlayer].length);
	this.objCard = eval("mcCardPlatFormUp.Card"+String(cv)+String(witchPlayer));	
	this.objCard.gotoAndStop(this.point );
	if (witchPlayer == mePlayer) {		
		var posX = (screenRange[0]-(cardCount-1)*paiMidWidth[0])/2;
		this.objCard._x = arrUpOutCards[2+witchPlayer].length*paiMidWidth[0]+posX;
		this.objCard._y = screenRange[1]-paiMidWidth[3]+paiMidWidth[1];
	} else if (witchPlayer-mePlayer == 1 || witchPlayer-mePlayer == -2) {//mePlayer的右边		
		var posY = (screenRange[1]-(cardCount-1)*paiMidWidth[1])/2;
		this.objCard._x = screenRange[0]-paiMidWidth[5]-paiMidWidth[1];
		this.objCard._y = arrUpOutCards[2+witchPlayer].length*paiMidWidth[1]+posY;
		this.objCard._rotation = -90;
	} else if (witchPlayer-mePlayer == -1 || witchPlayer-mePlayer == 2) {//mePlayer的左边
		var posY = (screenRange[1]-(cardCount-1)*paiMidWidth[1])/2;
		this.objCard._x = paiMidWidth[5]-paiMidWidth[1];
		this.objCard._y = arrUpOutCards[2+witchPlayer].length*paiMidWidth[1]+posY;
		this.objCard._rotation = 90;
	}
}

//排序
function OrderCards(arrTmp:Array, types:Number, witchPlayer:Number) {
	var radius = 1400;	
	var countMid = arrTmp.length/2;
	var angleIncre = 0.018;
	var angle =  Math.PI+angleIncre*countMid;
	
	arrTmp.sort(OrderCardsSort);
	if(!mePlayerPaiXu){//从大到小
		OrderCardsTmp(arrTmp);
	}
	for (var i = 0; i<arrTmp.length; i++) {
		arrTmp[i].objCard._visible = true;
		var point = (arrTmp[i].cardValue%10-1)*13+int(arrTmp[i].cardValue/10)%100;
		if (witchPlayer == mePlayer) {
			var posX = (screenRange[0]-(arrTmp.length-1)*paiMidWidth[0])/2;
			if (types == 1) {
				arrTmp[i].objCard.states = 1;
				arrTmp[i].objCard.swapDepths(100000+witchPlayer*20+i);
				arrTmp[i].objCard.enabled = true;
				angle -= angleIncre
				//arrTmp[i].objCard._x = screenRange[0]/2   +  radius *Math.sin(angle);
				//arrTmp[i].objCard._y = screenRange[1]*2+640   +  radius *Math.cos(angle);
				//arrTmp[i].objCard._rotation = i - countMid+0.5;
				arrTmp[i].objCard._x = i*paiMidWidth[0]+posX;
				arrTmp[i].objCard._y = screenRange[1]-paiMidWidth[2];
			} else if (types == 2) {
				arrTmp[i].objCard.states = 4;
				arrTmp[i].objCard.swapDepths(101004+witchPlayer*20+i);
				arrTmp[i].objCard._x = i*paiMidWidth[0]+posX;
				arrTmp[i].objCard._y = screenRange[1]-paiMidWidth[3];
				arrTmp[i].objCard.enabled = false;
				arrTmp[i].objCard._rotation =0;	
			}
			arrTmp[i].objCard.gotoAndStop(arrTmp[i].point);
			arrTmp[i].objCard._alpha = 100;
		} else {
			if (types == 1) {
				var posY = (screenRange[1]-(arrTmp.length-1)*paiMidWidth[1])/2;
				arrTmp[i].objCard.swapDepths(100000+witchPlayer*20+i);
				arrTmp[i].objCard._y = i*paiMidWidth[1]+posY;
				arrTmp[i].objCard.gotoAndStop(55);
				arrTmp[i].objCard._alpha = 100;
			} else if (types == 2) {
				var posY = (screenRange[1]-(arrTmp.length-1)*paiMidWidth[0])/2;
				arrTmp[i].objCard.swapDepths(101004+witchPlayer*20+i);
				arrTmp[i].objCard._y = i*paiMidWidth[0]+posY;
				if (witchPlayer-mePlayer == 1 || witchPlayer-mePlayer == -2) {//右边
					arrTmp[i].objCard._x = screenRange[0]-paiMidWidth[5];
				} else {
					arrTmp[i].objCard._x = paiMidWidth[5];
				}
				arrTmp[i].objCard.gotoAndStop(arrTmp[i].point);
			}
		}
	}
}
function OrderCardsTmp(arrTmp:Array){	
	var _arrTmp:Array = new Array();	
	for(var i = 0 ; i < arrTmp.length ; i++){
		var counts = 1;
		for(var j = i + 1; j < arrTmp.length ; j++){
			if( int(arrTmp[i].cardValue/10)  ==  int(arrTmp[j].cardValue/10)){
				counts++;
			}else{
				break;
			}			
		}
		_arrTmp.push(new ClassCard(int(arrTmp[i].cardValue/10) , counts));
		i = i+counts-1;
	}
	_arrTmp.sort(OrderCardsSort);
	var _arrTmp1:Array = new Array();
	for(var i = 0 ; i < _arrTmp.length ; i++){
		var _classcard = _arrTmp[i];
		var index = 0;		
		for( ; index < arrTmp.length ; index++){			
			if( int(arrTmp[index].cardValue/10) == _classcard.values ){
				break;
			}
		}
		for(var j = 0 ; j < _classcard.cardValue ; j++){
			_arrTmp1.push(arrTmp[index+j]);		
		}
	}
	if(arrTmp.length == _arrTmp1.length)	{		
		for(var i = 0 ; i < _arrTmp1.length; i++){
			arrTmp[i] = _arrTmp1[i];
		}
	}
}
function OrderCardsSort(a, b):Number {
	if (a.cardValue<b.cardValue) {//大到小排序
			return 1;
	} else if (a.cardValue>b.cardValue) {
		return -1;
	} else {
		if (a.values<b.values) {
			return 1;
		} else if (a.values>b.values) {
			return -1;
		}
		return 0;
	}
}
function ClassCard(vals,cons){
	this.values = vals;        //牌值
	this.cardValue = cons;  //这里是表示数目 (取此名为了适应 ClassCards上的牌值 ,这样可以供应同一个排序函数 OrderCardsSort )
}


function EnabledCards(arrTmp:Array,able:Boolean ){
	for (var i = 0; i<arrTmp.length; i++) {
		if(arrTmp[i].objCard.states == 1 || arrTmp[i].objCard.states == 2 ){
			arrTmp[i].objCard.enabled = able;
		}
	}
}

function ClearCards(arrTmp:Array) {
	var _12 = 0;
	while (_12<arrTmp.length) {
		arrTmp[_12].objCard.removeMovieClip();
		_12++;
	}
	arrTmp.splice(0);
}
function EndCards(){
	clearInterval(setIntervalMoving);
	clearInterval(setIntervalMovingStart);
	clearInterval(IntervalCountDown);
	clearInterval(setIntervalUpCards);	
	paramMoving = new Array();
	
	mcPai._visible = true;
	mcPai.gotoAndStop(55);
	MCPlayerNum1._visible = false;
	MCPlayerNum2._visible = false;
	MCPlayerNum3._visible = false;
	mcClock._visible = false;
	
	mePlayerPaiXu = true;
	mePlayerTuoGuan = false;
	varBomb = 0;
	varRocket = 0;
	
	//叫牌按钮
	JiaoPaiBtnState("started");
	mcNotJiao1._visible = false;
	mcNotJiao2._visible = false;
	mcNotJiao3._visible = false;
	//出牌按钮
	ChuPaiBtnState("started");
	//游戏结束按钮
	mcResult._visible=false;
	btnMaskOver._visible=false;
	btnMaskOver.useHandCursor = false;
	//功能按钮
	FunctionBtnState("start");
	//不出MC
	mcPass1._visible=false;
	mcPass2._visible=false;
	mcPass3._visible=false;
	
	mcCardPlatFormUp._visible=false;
	mcChunTian._visible=false;
	mcLeaveCardCount1._visible=false;  //剩下的牌张数
	mcLeaveCardCount2._visible=false;
	mcLeaveCardCount3._visible=false;	
	mcTuoGuanZhong1._visible=false; //托管中
	mcTuoGuanZhong2._visible=false;
	mcTuoGuanZhong3._visible=false;
	//用户角色(农民、地主、搭档)
	mcPlayerRole1._visible=false;
	mcPlayerRole2._visible=false;
	mcPlayerRole3._visible=false;
	
	for (var i = 0; i<arrCards.length; i++) {
		ClearCards(arrCards[i]);//用户纸牌
	}
	arrCards.splice(0);
	for (var i = 0; i<arrOutCards.length; i++) {
		ClearCards(arrOutCards[i]);//已出纸牌
	}
	arrOutCards.splice(0);
	for (var i = 0; i<4; i++) {//初始化数组
		arrCards.push(new Array());
		arrOutCards.push(new Array());
	}
	arrUpOutCards.splice(0);
	arrThisOutCards.splice(0);
	for (var i = 0; i<3; i++) {//初始化上一轮 和 本一轮 结果数组
		arrUpOutCards.push("pass");
		arrThisOutCards.push("pass");
	}
	for (var i = 0; i<3; i++) {
		arrUpOutCards.push(new Array());
	}
}
function GameOver(){
	mcResult._visible=true;
	btnMaskOver._visible=true;
}


function MarkOutCards(cardstr:String,  witchPlayer:Number){
	var tmpCardArray = cardstr.split(",");
	for (var i = 0; i < tmpCardArray.length; i++ ) {
		for(var j = 0; j < arrCards[witchPlayer-1].length ; j++ ){
			if(tmpCardArray[i] == arrCards[witchPlayer-1][j].cardValue){
				arrCards[witchPlayer-1][j].objCard._y -= 20;
				arrCards[witchPlayer-1][j].objCard.states = 2;
				break;
			}
		}
	}
}
function OutCards(witchPlayer:Number) { //出牌效果函數
	for (var i = 0; i<arrCards[witchPlayer-1].length; i++) {
		if (arrCards[witchPlayer-1][i].objCard.states == 2) {
			arrOutCards[witchPlayer-1].push(arrCards[witchPlayer-1][i]);
			arrCards[witchPlayer-1][i].objCard.states = 3;
		}
	}
	if (arrOutCards[witchPlayer-1].length>0) {
		var arrTmpCard:Array = new Array();
		for (var i = 0; i<arrCards[witchPlayer-1].length; i++) {
			if (arrCards[witchPlayer-1][i].objCard.states != 3) {
				arrTmpCard.push(arrCards[witchPlayer-1][i]);
			}
		}
		arrCards[witchPlayer-1].splice(0);
		for (var i = 0; i<arrTmpCard.length; i++) {
			arrCards[witchPlayer-1].push(arrTmpCard[i]);
		}
		arrTmpCard.splice(0);
		OrderCards(arrOutCards[witchPlayer-1], 2, witchPlayer);
		OrderCards(arrCards[witchPlayer-1], 1, witchPlayer);
	}
}
function CheckOutCards(){                          //出牌判断(是否可以出,是否符合规格)	
	if( GetOutCardsStr(mePlayer) == ""){
		return false;
	}		
	return true;
}
function GetOutCardsStr(witchPlayer:Number){
	var tmpCardsStr = "";	
	for(var i = 0; i < arrCards[witchPlayer-1].length ; i++ ){
		if(arrCards[witchPlayer-1][i].objCard.states == 2){
			if(tmpCardsStr == ""){
				tmpCardsStr = arrCards[witchPlayer-1][i].cardValue;
			}else{
				tmpCardsStr = tmpCardsStr + ","+arrCards[witchPlayer-1][i].cardValue;
			}
		}
	}
	return tmpCardsStr;
}


var setIntervalMoving;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -