本文中所使用的JControls、JFunction和ResourceData在前面的《学习HTML5开发RPG游戏》中都有提到,这里不再重述,详细情况,大家可以查看本文最后的源码。
1、初始化界面及游戏
var DJDDZ={};
DJDDZ.Init=function(canvasID){
JFunction.PreLoadData(GMain.URL).done(function () {
JMain.JForm=new JControls.Form(GMain.Size,canvasID).setBGImage(ResourceData.Images.bg1);
JMain.JForm.clearControls();
GMain.BtnPanel=new JControls.Object({x:100,y:280},{width:600,height:50});//用于显示游戏控制按钮
GMain.PokerPanel0=new GControls.PokerPanel({x:100,y:5},{width:600,height:120},0,0);//用于显示底牌,显示对象存储在GMain.Poker[0]
GMain.PokerPanel1=new GControls.PokerPanel({x:200,y:355},{width:400,height:120},1,20);//用于显示自己的牌,显示对象存储在GMain.Poker[1]
GMain.PokerPanel2=new GControls.PokerPanel({x:695,y:60},{width:100,height:440},2,25);//用于显示右边电脑的牌,显示对象存储在GMain.Poker[2]
GMain.PokerPanel3=new GControls.PokerPanel({x:5,y:60},{width:100,height:440},3,25);//用于显示左边电脑的牌,显示对象存储在GMain.Poker[3]
GMain.PokerPanel4=new GControls.PokerPanel({x:200,y:150},{width:400,height:120},4,20);//用于显示出的最后一手牌,显示对象存储在GMain.Poker[4]
var BeginButton=new JControls.Button({x:235,y:0},{width:130,height:50}).setText("开始").setBGImage(ResourceData.Images.btn);
BeginButton.onClick=function(){
GMain.BtnPanel.visible=false;
DJDDZ.Dealing();
}
GMain.BtnPanel.addControlInLast([BeginButton]);
JMain.JForm.addControlInLast([GMain.PokerPanel0,GMain.PokerPanel1
,GMain.PokerPanel2,GMain.PokerPanel3,GMain.PokerPanel4,GMain.BtnPanel]);
DJDDZ.InitGame();
JMain.JForm.show();
});
}
DJDDZ.InitGame=function(){
GMain.Poker=[];
for(var i=0;i<5;i++)GMain.Poker[i]=[];//初始化扑克对象存储空间
for(var j=0;j<54;j++)GMain.Poker[0][j]=new GControls.Poker(j+1);//生成扑克对象
GMain.PokerPanel0.hidePoker=true;//hidePoker为true,显示扑克背面
GMain.PokerPanel1.hidePoker=false;//hidePoker为false,显示扑克正面
GMain.PokerPanel2.hidePoker=true;
GMain.PokerPanel3.hidePoker=true;
GMain.PokerPanel4.hidePoker=false;
GMain.PokerPanel1.toSelectPoker=false;
GMain.PokerPanel0.density=1;//设置扑克牌显示密度
GMain.ToPlay=false;
GMain.LastHandPokerType=null;
GMain.DealingNum=0;
GMain.DealerNum=JFunction.Random(1,3);
GMain.BeginNum=GMain.DealerNum;//初始化发牌起始标识
}
2、点击开始按钮后开始发牌
DJDDZ.Dealing=function(){//发牌
if(GMain.DealingHandle)clearTimeout(GMain.DealingHandle);
if(GMain.DealingNum>=51) {//已发完牌
GMain.MaxScore=0;
GMain.GrabTime=0;
GMain.PokerPanel0.density=105;
DJDDZ.GrabTheLandlord();//抢地主
}else{
if(GMain.DealerNum>3) GMain.DealerNum=1;
var r=JFunction.Random(0,GMain.Poker[0].length-1);
GMain.Poker[GMain.DealerNum].splice(GMain.Poker[ GMain.DealerNum].length,0,GMain.Poker[0][r]);
GMain.Poker[0].splice(r,1);
GMain.DealingNum++;
GMain.DealerNum++;
GMain.DealingHandle=setTimeout(DJDDZ.Dealing, 40);//40毫秒发一张牌
JMain.JForm.show();
}
}
3、抢地主
DJDDZ.GrabTheLandlord=function(){//抢地主
if(GMain.GrabTime==3&&GMain.MaxScore==0){//没有人抢地主
DJDDZ.GameOver();
return;
}
if(GMain.MaxScore==3||(GMain.MaxScore>0&&GMain.GrabTime==3)){//地主已产生
GMain.DealerNum=GMain.LandlordNum;
GMain.LastHandNum=0;
GMain.PokerPanel0.hidePoker=false;