📄 doudizhu.as
字号:
/*
开发人 :小宝 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 + -