⽹页版html5⽃地主,HTML5版单机⽃地主
本⽂中所使⽤的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);
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;
SelectPoker=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;
GMain.Poker[GMain.LandlordNum].splice(GMain.Poker[GMain.LandlordNum].length,0,GMain.Poker[0][2]); GMain.Poker[GMain.LandlordNum].splice(GMain.Poker[GMain.LandlordNum].length,0,GMain.Poker[0]
[1]); GMain.Poker[GMain.LandlordNum].splice(GMain.Poker[GMain.LandlordNum].length,0,GMain.Poker[0][0]); GMain.ToPlay=true;
DJDDZ.ToPlay();
return;
}
if(GMain.DealerNum>3) GMain.DealerNum=1;
if(GMain.DealerNum==1){//⾃⼰抢地主
GMain.BtnPanel.clearControls();
var Button1=new GControls.GrabButton({x:10,y:0},{width:130,height:50},1).setText("1
分").setBGImage(ResourceData.Images.btn);
var Button2=new GControls.GrabButton({x:160,y:0},{width:130,height:50},2).setText("2
分").setBGImage(ResourceData.Images.btn);
var Button3=new GControls.GrabButton({x:310,y:0},{width:130,height:50},3).setText("3
分").setBGImage(ResourceData.Images.btn);
var Button4=new GControls.GrabButton({x:460,y:0},{width:130,height:50}).setText("不
抢").setBGImage(ResourceData.Images.btn);
GMain.BtnPanel.addControlInLast([Button1,Button2,Button3,Button4]);
GMain.BtnPanel.visible=true;
JMain.JForm.show();
}else{//电脑抢地主
var r=JFunction.Random(0,3);
if(r>GMain.MaxScore){
GMain.MaxScore=r;
GMain.LandlordNum=GMain.DealerNum;
GMain.DealerNum++;
GMain.GrabTime++;
JMain.JForm.show();
DJDDZ.GrabTheLandlord();
}
}
4、出牌
DJDDZ.ToPlay=function(){//出牌
JMain.JForm.show();
if(GMain.DealerNum>3) GMain.DealerNum=1;
if(GMain.LastHandNum==GMain.DealerNum){
GMain.LastHandNum=0;
}
if(GMain.DealerNum==1){//轮到⾃⼰出牌
GMain.BtnPanel.clearControls();
if(GMain.LastHandNum==2||GMain.LastHandNum==3){//不是该轮第⼀个出牌,可以选择不出牌网页html下载
var Button1=new JControls.Button({x:50,y:0},{width:100,height:50},1).setText("不
出").setBGImage(ResourceData.Images.btn);
for(var i=GMain.Poker[GMain.DealerNum].length-1;i>=0;i--)
GMain.Poker[GMain.DealerNum][i].isSelected=false;
GMain.DealerNum++;
GMain.BtnPanel.visible=false;
DJDDZ.ToPlay();
}
}
var Button2=new JControls.Button({x:250,y:0},{width:100,height:50}).setText("出牌").setBGImage(ResourceData.Images.btn); Click=function(){
var _pokerNumbers=[];
for(var i=GMain.Poker[GMain.DealerNum].length-1;i>=0;i--){
if(GMain.Poker[GMain.DealerNum][i].isSelected){
_pokerNumbers[_pokerNumbers.length]=GMain.Poker[GMain.DealerNum][i].pokerNumber;
}
if(DJDDZ.CheckPlayPoker(_pokerNumbers)){//判断选中的牌是否符合规则
DJDDZ.PlayPoker();//出选中的牌
GMain.BtnPanel.visible=false;
GMain.DealerNum++;
DJDDZ.ToPlay();//下⼀位出牌
}else{
alert("出牌不符合规则,请重新选择!");
}
}
var Button3=new JControls.Button({x:450,y:0},{width:100,height:50}).setText("提⽰").setBGImage(ResourceData.Images.btn); Click=function(){
DJDDZ.AISelectPoker();
JMain.JForm.show();
}
GMain.BtnPanel.addControlInLast([Button1,Button2,Button3]);
GMain.BtnPanel.visible=true;
SelectPoker=true;
JMain.JForm.show();
}else{ //电脑出牌
if(DJDDZ.AISelectPoker()){//电脑AI选牌
DJDDZ.PlayPoker();//出选中的牌
}
GMain.DealerNum++;
setTimeout(DJDDZ.ToPlay, 1500);//暂停1500毫秒,下⼀位出牌
}
}
4.1、检查出牌是否符合规则
DJDDZ.CheckPlayPoker=function(_pokerNumbers){//检查出牌是否符合规则,pokerNumbers从⼩到⼤排序
var pokerType=DJDDZ.GetPokerType(_pokerNumbers);
if(pokerType==null)return false;//没有获取到牌型
if(GMain.LastHandNum==0)return true;//如果是该轮⾸牌,任何牌型都可以
else{
//与该轮出的最后⼀⼿牌⽐较

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。