用Javascript往一个Div中插入一张图片 - CSDN博客
用Javascript往一个Div中插入一张图片
HTML5火了,JS也得炼一炼
用Javascript往一个Div中插入一张图片
&meta http-equiv=&content-type& content=&text/ charset=utf-8&&
&script type=&text/javascript&&
window.onload = function (){
var bigImg = document.createElement(&img&);
//创建一个img元素
bigImg.src=&/img/baidu_sylogo1.gif&;
//给img元素的src属性赋值
//bigImg.width=&320&;
//320个像素 不用加px
var myDiv = document.getElementById('myDiv'); //获得dom对象
myDiv.appendChild(bigImg);
//为dom添加子元素img
&div id=&myDiv& style=&border:1px solid #width:320height:160&&&/div&
本文已收录于以下专栏:
相关文章推荐
    {
        width:100
        height:100
        }
  ...
注意,切换方法overridePendingTransition只能在startActivity和finish方法之后调用。
第一个参数为第一个Activity离开时的动画,第二参数为所进入的Act...
HTML代码:
产品图组:
图推荐尺寸:376*376
自学前端,没有后台发送数据,自己找了个将图片对象存放在数组中。
之前也有了解过网页爬虫,但是只是按照网上教程练习过,今天想自己写一个爬图片的爬虫,一边写一边查资料,但是只是做了单页的爬虫,后续会继续学习做广度或深度的全网页的爬虫。
他的最新文章
讲师:何宇健
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)HTML5版单机斗地主 - CSDN博客
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);
BeginButton.onClick=function(){
GMain.BtnPanel.visible=
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=//hidePoker为true,显示扑克背面
GMain.PokerPanel1.hidePoker=//hidePoker为false,显示扑克正面
GMain.PokerPanel2.hidePoker=
GMain.PokerPanel3.hidePoker=
GMain.PokerPanel4.hidePoker=
GMain.PokerPanel1.toSelectPoker=
GMain.PokerPanel0.density=1;//设置扑克牌显示密度
GMain.ToPlay=
GMain.LastHandPokerType=
GMain.DealingNum=0;
GMain.DealerNum=JFunction.Random(1,3);
GMain.BeginNum=GMain.DealerN//初始化发牌起始标识
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();//抢地主
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();
DJDDZ.GrabTheLandlord=function(){//抢地主
if(GMain.GrabTime==3&&GMain.MaxScore==0){//没有人抢地主
DJDDZ.GameOver();
if(GMain.MaxScore==3||(GMain.MaxScore&0&&GMain.GrabTime==3)){//地主已产生
GMain.DealerNum=GMain.LandlordN
GMain.LastHandNum=0;
GMain.PokerPanel0.hidePoker=
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=
DJDDZ.ToPlay();
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=
JMain.JForm.show();
}else{//电脑抢地主
var r=JFunction.Random(0,3);
if(r&GMain.MaxScore){
GMain.MaxScore=r;
GMain.LandlordNum=GMain.DealerN
GMain.DealerNum++;
GMain.GrabTime++;
JMain.JForm.show();
DJDDZ.GrabTheLandlord();
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){//不是该轮第一个出牌,可以选择不出牌
var Button1=new JControls.Button({x:50,y:0},{width:100,height:50},1).setText(&不出&).setBGImage(ResourceData.Images.btn);
Button1.onClick=function(){
for(var i=GMain.Poker[GMain.DealerNum].length-1;i&=0;i--)
GMain.Poker[GMain.DealerNum][i].isSelected=
GMain.DealerNum++;
GMain.BtnPanel.visible=
DJDDZ.ToPlay();
var Button2=new JControls.Button({x:250,y:0},{width:100,height:50}).setText(&出牌&).setBGImage(ResourceData.Images.btn);
Button2.onClick=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].pokerN
if(DJDDZ.CheckPlayPoker(_pokerNumbers)){//判断选中的牌是否符合规则
DJDDZ.PlayPoker();//出选中的牌
GMain.BtnPanel.visible=
GMain.DealerNum++;
DJDDZ.ToPlay();//下一位出牌
alert(&出牌不符合规则,请重新选择!&);
var Button3=new JControls.Button({x:450,y:0},{width:100,height:50}).setText(&提示&).setBGImage(ResourceData.Images.btn);
Button3.onClick=function(){
DJDDZ.AISelectPoker();
JMain.JForm.show();
GMain.BtnPanel.addControlInLast([Button1,Button2,Button3]);
GMain.BtnPanel.visible=
GMain.PokerPanel1.toSelectPoker=
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)//没有获取到牌型
if(GMain.LastHandNum==0)//如果是该轮首牌,任何牌型都可以
//与该轮出的最后一手牌比较
if(GMain.PokerTypes[pokerType.type].weight&GMain.PokerTypes[GMain.LastHandPokerType.type].weight)//当前牌型可以压前一手牌型
else if (GMain.PokerTypes[pokerType.type].weight==GMain.PokerTypes[GMain.LastHandPokerType.type].weight){//当前牌型不可以压前一手牌型
if(pokerType.type==GMain.LastHandPokerType.type&&pokerType.length==GMain.LastHandPokerType.length){//牌型与出牌数都相同
if(pokerType.num&GMain.LastHandPokerType.num)//数值大的压数值小的
4.2、获取牌型
DJDDZ.GetPokerType=function(__pokerNumbers,chaiNum){//获取__pokerNumbers的牌型,__pokerNumbers已排序,从小到大
if(chaiNum==null)chaiNum=3;
var splitPoker=DJDDZ.SplitPoker(__pokerNumbers,chaiNum);//把牌拆成非组合类型
var pokerType={type:&&,num:0,length:__pokerNumbers.length};
if(splitPoker[&12&].length&0){
if(pokerType.length==2)pokerType.type=&12&;//王弹
else pokerType=
}else if(splitPoker[&1111&].length&0){
if(splitPoker[&1111&].length==1){
pokerType.num=splitPoker[&1111&][0];
if(pokerType.length==4) pokerType.type=&1111&;//炸弹
else if(pokerType.length==6&&(splitPoker[&1&].length==1||splitPoker[&1&].length==2))pokerType.type=&111123&;//4带2
else if(pokerType.length==8&&splitPoker[&11&].length==2)pokerType.type=&&;//4带2对
else pokerType=
}else pokerType=
}else if(splitPoker[&111&].length&0){
var l=splitPoker[&111&].
if(l==1||DJDDZ.IsStraight(splitPoker[&111&])){//l=1或GMain.SplitPoker[&111&]的值连续
pokerType.num=splitPoker[&111&][0];
if(pokerType.length==3*l)pokerType.type=&111&;//3条,l&=2时为飞机
else if(pokerType.length==4*l&&splitPoker[&1&].length==l) pokerType.type=&1112&;//3条带1,l&=2时为飞机
else if(pokerType.length==5*l&&splitPoker[&11&].length==l)pokerType.type=&11122&;//3条带1对,l&=2时为飞机
else pokerType=
}else pokerType=
}else if(splitPoker[&11&].length&0){
var l=splitPoker[&11&].
if(l==1|| (l&=3&&DJDDZ.IsStraight(splitPoker[&11&]))){
pokerType.num=splitPoker[&11&][0];
if(pokerType.length==2*l)pokerType.type=&11&;//l=1时为对子,l&=3时为连对
else pokerType=
}else pokerType=
}else if(splitPoker[&1&].length&0){
var l=splitPoker[&1&].
if(l==1||(l&=5&&DJDDZ.IsStraight(splitPoker[&1&]))){
pokerType.num=splitPoker[&1&][0];
pokerType.type=&1&;
}else pokerType=
} else pokerType=
if( pokerType==null&&chaiNum&0)pokerType=DJDDZ.GetPokerType(__pokerNumbers,chaiNum-1);
return pokerT
4.3、出选中的牌
DJDDZ.PlayPoker=function(){//出选中的牌
GMain.Poker[4]=[];//清空出牌存储空间
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].pokerN
GMain.Poker[4].splice(GMain.Poker[4].length,0,GMain.Poker[GMain.DealerNum][i]);
GMain.Poker[GMain.DealerNum].splice(i,1);
GMain.LastHandNum=GMain.DealerN//本轮最后一手牌标识
GMain.LastHandPokerType=DJDDZ.GetPokerType(_pokerNumbers);//设置最后一手牌牌型
if(GMain.Poker[GMain.DealerNum].length==0)DJDDZ.GameOver();//牌出完,游戏结束
4.4、电脑AI选牌
DJDDZ.AISelectPoker=function(){//AI选牌
var _pokerNumbers=[];
for(var i=GMain.Poker[GMain.DealerNum].length-1;i&=0;i--){
_pokerNumbers[_pokerNumbers.length]=GMain.Poker[GMain.DealerNum][i].pokerN
var SPN=[];
if(DJDDZ.CheckPlayPoker(_pokerNumbers)){//如果只有一手牌,直接出完
SPN=_pokerN
if(GMain.LastHandNum==0){//本轮第一手牌
var splitPoker=DJDDZ.SplitPoker(_pokerNumbers);
if(splitPoker[&111&].length&0){
//出3条或飞机,优先飞机
if(splitPoker[&111&][0]&7||(splitPoker[&1&].length==0&&splitPoker[&11&].length==0)){
if(splitPoker[&11&].length&0&&(splitPoker[&11&][0]&7||splitPoker[&1&].length==0)){
for(var i=GMain.PokerTypes[&11122&].maxL;i&0;i--){
SPN=DJDDZ.GetPokerByType(_pokerNumbers,{type:&11122&,num:0,length:5*i});
if(SPN.length&0)
if(SPN.length==0&&splitPoker[&1&].length&0&&splitPoker[&1&][0]&15){
for(var i=GMain.PokerTypes[&1112&].maxL;i&0;i--){
SPN=DJDDZ.GetPokerByType(_pokerNumbers,{type:&1112&,num:0,length:4*i});
if(SPN.length&0)
if(SPN.length==0){
for(var i=GMain.PokerTypes[&111&].maxL;i&0;i--){
SPN=DJDDZ.GetPokerByType(_pokerNumbers,{type:&111&,num:0,length:3*i});
if(SPN.length&0)
if(SPN.length==0){
var nn=[];
for(var x=1;x&=3;x++){
if(GMain.Poker[x].length==1||GMain.Poker[x].length==2){
if(GMain.DealerNum==GMain.LandlordNum){
if(GMain.DealerNum!=x)nn[GMain.Poker[x].length]=
if(GMain.LandlordNum==x)nn[GMain.Poker[x].length]=
if((splitPoker[&11&].length&0&&splitPoker[&1&].length&0&&(splitPoker[&11&][0]&splitPoker[&1&][0]||nn[1]))
||(splitPoker[&11&].length&0&&splitPoker[&1&].length==0)){
for(var i=GMain.PokerTypes[&11&].maxL;i&2;i--){
SPN=DJDDZ.GetPokerByType(_pokerNumbers,{type:&11&,num:0,length:2*i});
if(SPN.length&0)
if(SPN.length==0) SPN=DJDDZ.GetPokerByType(_pokerNumbers,{type:&11&,num:0,length:2});//出对子
if(splitPoker[&1&].length&0) SPN[SPN.length]=splitPoker[&1&][0];//出单牌
if(SPN.length==0)SPN=DJDDZ.GetPokerByType(_pokerNumbers,{type:&1111&,num:0,length:4});//出炸弹
if(SPN.length==0)SPN=DJDDZ.GetPokerByType(_pokerNumbers,{type:&12&,num:0,length:2});//出王炸
if(GMain.LastHandPokerType.type!=&12&){
if(GMain.LandlordNum==GMain.DealerNum||GMain.LastHandNum==GMain.LandlordNum){//如果AI是地主或接地主的牌
SPN=DJDDZ.GetPokerByType(_pokerNumbers,GMain.LastHandPokerType);
if(SPN.length==0&&GMain.LastHandPokerType.type!=&1111&)SPN=DJDDZ.GetPokerByType(_pokerNumbers,{type:&1111&,num:0,length:4});
if(SPN.length==0)SPN=DJDDZ.GetPokerByType(_pokerNumbers,{type:&12&,num:0,length:2});
}else{//接同伴的牌
if(GMain.Poker[GMain.LastHandNum].length&5){
if((GMain.LastHandPokerType.type==&1&&&GMain.LastHandPokerType.length==1)
||(GMain.LastHandPokerType.type==&11&&&GMain.LastHandPokerType.length==2)){
SPN=DJDDZ.GetPokerByType(_pokerNumbers,GMain.LastHandPokerType);
if(SPN.length&0&&SPN[0]&10)SPN=[];
if(SPN.length&0){
for(var i=0;i&SPN.i++){
for(var j=GMain.Poker[GMain.DealerNum].length-1;j&=0;j--){
if(!GMain.Poker[GMain.DealerNum][j].isSelected&&GMain.Poker[GMain.DealerNum][j].pokerNumber==SPN[i]){
GMain.Poker[GMain.DealerNum][j].isSelected=//选牌
}else return false
4.5、获取指定牌型的牌
DJDDZ.GetPokerByType=function(__pokerNumbers,type){//从__pokerNumbers中获取type类型的牌
var _pokerNumbers=[];
var SPN=[];
if(__pokerNumbers.length&=type.length){
for(var i=0;i&__pokerNumbers.i++) _pokerNumbers[i]=__pokerNumbers[i];//_pokerNumbers从小到大
if(type.type==&12&){//王炸
if(_pokerNumbers[_pokerNumbers.length-1]==18&&_pokerNumbers[_pokerNumbers.length-2]==17){
SPN.splice(0,0,18);
SPN.splice(0,0,17);
}else if(type.type==&1&||type.type==&11&||type.type==&111&||type.type==&1111&){//非组合类型
var c=GMain.PokerTypes[type.type].allNum-1;
for(var j=c;j&_pokerNumbers.j++){//从小到大取数值
while(j&_pokerNumbers.length&&_pokerNumbers[j]&type.num&&_pokerNumbers[j]==_pokerNumbers[j-c]){
if(SPN.length&0){
if(_pokerNumbers[j]==SPN[0])
else if(_pokerNumbers[j]&SPN[0]+1)SPN=[];//如果不能连续则清空已选数
for(var k=j;k&=j-c;k--) {
SPN.splice(0,0,_pokerNumbers[k]);//选取数值
_pokerNumbers.splice(j,1);//删除数值
if(SPN.length==type.length)//选取完成
if(SPN.length==type.length)
}else if(type.type==&1112&||type.type==&11122&||type.type==&111123&||type.type==&&){//组合类型
var zcy=GMain.PokerTypes[type.type].
var fcy=GMain.PokerTypes[type.type].
var fcyNum=GMain.PokerTypes[type.type].fcyN
var l=type.length/GMain.PokerTypes[type.type].allN
SPN=DJDDZ.GetPokerByType(_pokerNumbers,{type:zcy,num:type.num,length:l*GMain.PokerTypes[zcy].allNum});//先选主类型
if(SPN.length&0){
for(var i=0;i&SPN.i++){
for(var j=0;j&_pokerNumbers.j++){
if(SPN[i]==_pokerNumbers[j]){
_pokerNumbers.splice(j,1);//删除已选数值
while(fcyNum&0){
var spn1=DJDDZ.GetPokerByType(_pokerNumbers,{type:fcy,num:0,length:GMain.PokerTypes[fcy].allNum});
for(var i=0;i&spn1.i++) SPN[SPN.length]=spn1[i];
if(SPN.length!=type.length)SPN=[];//如果选取不成功,则清空选取数据
return SPN;
5、游戏结束
&当某个人出完牌或没有人抢地主时游戏结束。
DJDDZ.GameOver=function(){
GMain.BtnPanel.clearControls();
var Button=new JControls.Button({x:235,y:0},{width:130,height:50}).setText(&重新开始&).setBGImage(ResourceData.Images.btn);
Button.onClick=function(){
DJDDZ.InitGame();
GMain.BtnPanel.visible=
DJDDZ.Dealing();
GMain.BtnPanel.addControlInLast([Button]);//加载重新开始按钮
//翻开低牌和左右电脑的牌
GMain.PokerPanel0.hidePoker=
GMain.PokerPanel2.hidePoker=
GMain.PokerPanel3.hidePoker=
GMain.BtnPanel.visible=
JMain.JForm.show();
本文已收录于以下专栏:
相关文章推荐
【编者前言】以前在MFC或者WIN32工程中写稍长算法的时候就会感觉比较乱,这次尝试将AI算法和UI图像绘制分成两个工程来分别进行,最后再整合到一个工程,这样效率貌似更高了。这个是从准备考研中期开始的...
1.吵架不当着父母,亲戚,邻居的面吵,在公共场所给对方面子。 2.不管谁对谁错,只要一吵架,男方必须先轻声轻气哄女方一次,女方才能马上冷静下来,否则女方一看到男方哇啦哇啦女方也忍不住哇啦哇啦,一旦...
有消息称,腾讯手机QQ游戏大厅将携欢乐斗地主推出Html5版,即将对iPad用户限量发行体验,后续手机QQ游戏大厅的其他游戏也将陆续推出Html5版本。分析认为,手机QQ游戏大厅此举是为了迎合当前移动...
去除了其中的下载服务及通知信息,请点击这里下载
【北方网通】    【电信网通】
【下载说明】
1 点击上面的地址,打开下载页面
2 点击&普通下载&--等待30秒--点击&下...
他的最新文章
讲师:何宇健
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)简陋的斗地主,js实现
来源:博客园
最近闲了两天没事做,用js写了个斗地主,练习练习。代码和功能都很简陋,还有bug,咋只是聊聊自己的思路。 这里说说斗地主主要包含的功能:洗牌,发牌,玩家出牌、电脑出牌,出牌规则的验证,输赢啥的没有判断,只是实现了这几个主要功能,下面依次说说几个功能的实现: 1.洗牌: 1 var pukes=this.manage.//存放扑克牌的数组 2 //洗牌 3 for(var i=0;i&pukes.i++){ 4
var tmp=pukes[i]; 5
var index=util.random(i,pukes.length);//随机交换两张牌 6
pukes[i]=pukes[index]; 7
pukes[index]= 8 }
2.发牌(简版默认是玩家自己为地主,电脑为农民),由于前面洗牌时已经将牌的顺序打乱,所以发牌只是简单的循环把pukes中的元素添加到每个玩家实例中的pukes字段中。 1 //发牌 2
var start=0; 3
for(var i=0;i&this.manage.pukes.length-3;i++) { 4
if(start==this.manage.players.length){ 5
start=0; 6
this.manage.pukes[i].status=true; 8
this.manage.players[start].pukesLen++; 9
this.manage.players[start++].pukes.push(this.manage.pukes[i]); 10
for(var i=this.manage.pukes.length-3;i&this.manage.pukes.i++){ 12
//地主多三张 13
this.manage.pukes[i].status=true; 14
this.manage.players[this.manage.curPlayerIndex].pukesLen++; 15
this.manage.players[this.manage.curPlayerIndex].pukes.push(this.manage.pukes[i]); 16
} 3.玩家出牌,玩家出牌分为电脑和玩家自己两个步骤,电脑出牌是非常傻瓜的出牌方式(有牌就出): 1 //出牌 2
if(this.options.playerIndex==this.manage.curPlayerIndex) { 3
var spks = [],gz=false; 4 5
if (this.manage.curMaxPlayerIndex == this.options.playerIndex) { 6
this.manage.deskPukes = []; 7
if (this.isCompute) { 9
//电脑自动出牌 10
var start = 0; 11
var len=this.manage.deskPukes.length||1; 12
while (start & this.pukes.length) { 13
spks = []; 14
for (var i = 0,j= i &len&&j&this.pukes. i++) { 15
//随便选一张 可以出就行 16
if(this.pukes[j].status) { 17
spks.push(this.pukes[j++]); 18
if(spks.length) { 21
if (rules.valids(spks, this.manage.deskPukes)) { 22
gz = true; 23
break; 24
start++; 27
else { 30
//玩家选择出牌 31
for (var i = 0; i & this.pukes. i++) { 32
if (this.pukes[i].selected && this.pukes[i].status) { 33
spks.push(this.pukes[i]); 34
if (rules.valids(spks, this.manage.deskPukes)) { 37
gz=true; 38
else{ 40
alert("出牌不符合规则!"); 41
if(gz){ 44
this.manage.curMaxPlayerIndex=this.options.playerI 45
this.manage.deskPukes = []; 46
for (var i = 0; i & spks. i++) { 47
this.pukesLen--; 48
this.manage.deskPukes.push(spks[i]); 49
spks[i].status = false; 50
this.manage.renderPukes(); 53
this.manage.renderCurDiscard(); 54
if(this.isCompute||gz) { 55
this.manage.nextPlayer(); 56
else{ 59
alert("没轮到你出牌!"); 60
} View Code 4.出牌规则的验证,是很多函数组合起来,然后循环调用,如果遇到返回ture的即为出牌符合规则:
1 //以下为出牌规则
2 var rules={
_rules:[
new danzRule(),
new duiRule(),
new sandRule(),
new zandRule(),
new shunzRule(),
new liandRule() 10
], 11
valids:function(_pukes,_curPukes){ 12
for(var i=0;i&this._rules.i++){ 13
if(this._rules[i].valid(_pukes,_curPukes)){ 14
return true; 15
return false; 18
} 19 }; 20 21 function danzRule(){ 22
//单张规则 23 } 24 danzRule.prototype.valid=function(_pukes,_curPukes){ 25
//校验 26
var pukes=_//玩家的牌 27
var curPukes=_curP//左面的牌 28
if(pukes&&pukes.length==1){ 29
//比较牌面值 30
if(!curPukes||!curPukes.length){ 31
return true; 32
if(curPukes[0].dians==2&&pukes[0].dians&15){ 34
//2特殊处理 35
return false; 36
if(pukes[0].dians==2&&curPukes[0].dians&15){ 38
//2特殊处理 39
return true; 40
return pukes[0].dians&curPukes[0]. 42
return false; 44 } 45 46 function duiRule(_pukes,_curPukes){ 47
//两张规则 48 49 } 50 duiRule.prototype.valid=function(_pukes,_curPukes){ 51
//校验 52
var pukes=_//玩家的牌 53
var curPukes=_curP//左面的牌 54
if(pukes&&pukes.length==2){ 55
//比较牌面值 56
if(pukes[0].dians&14&&pukes[1].dians&14){ 57
return true; 58
if(pukes[0].dians!=pukes[1].dians){ 60
return false; 61
if(!curPukes||!curPukes.length){ 63
return true; 64
}else { 65
if(curPukes.length!=2){ 66
return false; 67
if (curPukes[0].dians & 14 && curPukes[1].dians & 14) { 69
return false; 70
if (curPukes[0].dians != curPukes[1].dians) { 72
return false; 73
if (curPukes[0].dians == 2) { 75
return false; 76
if(pukes[0].dians==2){ 79
return true; 80
return pukes[0].dians&curPukes[0]. 82
return false; 84 } 85 86 function sandRule(){ 87
//三带 88 } 89 sandRule.prototype.valid=function(_pukes,_curPukes){ 90
//校验 91 92 93
var pukes=_//玩家的牌 94
var curPukes=_curP//左面的牌 95
if(pukes&&(pukes.length&=3)){ 96
//比较牌面值 97
var books=getBooks(pukes); 98
if(!valid(books))return false; 99
if(!curPukes||!curPukes.length)return true; 100
if(curPukes.length!=books.length)return false; 101
var books2=getBooks(curPukes); 102
if(!valid(books2))return false; 103
return getSum(books)&getSum(books2); 104
return false; 106 107
function getSum(books){ 108
var sum=0; 109
for(var i=0;i&books.i++) { 110
if(books[i]==3){ 111
if(i==2)return 9999; 112
sum+=i; 113
return 116
function valid(books){ 118
//验证三带是否有效 119
var counts3= 0,countsd= 0,d2=true,start=false,startIndex=-1; 120 121
for(var i=0;i&books.i++) { 122
if(start&&books[i]==3&&startIndex!=(i-1)){ 123
return false; 124
}else{ 125
startIndex=i; 126
if(books[i]==3){ 128
if(!start) { 129
start = true; 130
startIndex = 131
counts3++; 133
if(books[i]==1){ 135
d2=false; 136
} 138 139
for(var i=0;i&books.i++) { 140
if(d2&&books[i]==2){ 141
countsd++; 142
else if(!d2&&books[i]==1){ 144
countsd++; 145
return counts3&0&&counts3== 148
} 149 150
function getBooks(pukes){ 151
//返回三带的每个点数的个数 152
var books=[]; 153
for(var i=0;i&pukes.i++){ 154
if(!books[pukes[i].dians]){ 155
books[pukes[i].dians]=1; 156
}else{ 157
books[pukes[i].dians]++; 158
return 161
} 162 } 163 164 165 function zandRule(){ 166
//炸弹 167 } 168 zandRule.prototype.valid=function(_pukes,_curPukes){ 169
var pukes=_//玩家的牌 170
var curPukes=_curP//左面的牌 171
if(pukes&&pukes.length==4) { 172
if(!allEqual(pukes)){ 173
return false; 174
if(!curPukes||(curPukes.length&0&&curPukes.length!=4)||!allEqual(curPukes)){ 176
return true; 177
else{ 179
if(pukes[0].dians==2){ 180
return true; 181
if(curPukes[0].dians==2){ 183
return false; 184
return pukes[0].dians&curPukes[0]. 186
} 187 188
return false; 190 191
function allEqual(pukes){ 192
if(!pukes||!pukes.length)return false; 193
var base=pukes[0]. 194
for(var i=1;i&pukes.i++){ 195
if(base!=pukes[i].dians){ 196
return false; 197
return true; 200
} 201 202 } 203 204 function liandRule(){ 205
//连对 206 } 207 liandRule.prototype.valid=function(_pukes,_curPukes) { 208
var pukes=_//玩家的牌 209
var curPukes=_curP//左面的牌 210
if(pukes&&pukes.length&=6) { 211
if(!verificationCoherence(pukes)){ 212
return false; 213
if(!curPukes||curPukes.length&=0){ 215
return true; 216
if(!verificationCoherence(curPukes)){ 218
return false; 219
if(pukes.length!=curPukes.length){ 221
return false; 222
return getSumDians(pukes)&getSumDians(curPukes); 224
return false; 226
function getSumDians(pukes){ 227
var sum=0; 228
for(var i=0;i&pukes.i++) { 229
sum+=pukes[i]. 230
return 232
} 233 234
function verificationCoherence(pukes){ 235
//验证连贯性 236
if(!pukes||!pukes.length)return false; 237
var books=[]; 238
for(var i=0;i&pukes.i++){ 239
if(pukes[i].dians==2||pukes[i].dians&14){ 240
return false; 241
if(!books[pukes[i].dians]){ 243
books[pukes[i].dians]=1; 244
}else{ 245
books[pukes[i].dians]++; 246
if(books[pukes[i].dians]&2){ 248
return false; 249
var start=false; 252 253
for(var i=0;i&books.i++) { 254
if(books[i]&&books[i]!=2){ 255
return false; 256
if(books[i]==2&&!start){ 258
start=true; 259
if(start&&books[i]!=2){ 261
return false; 262
} 264 265
return true; 266
} 267 } 268 function shunzRule(){ 269
//顺子 270 } 271 shunzRule.prototype.valid=function(_pukes,_curPukes){ 272
var pukes=_//玩家的牌 273
var curPukes=_curP//左面的牌 274
if(pukes&&pukes.length&=5) { 275
if(!verificationCoherence(pukes)){ 276
return false; 277
if(!curPukes||curPukes.length&=0){ 279
return true; 280
if(!verificationCoherence(curPukes)){ 282
return false; 283
if(pukes.length!=curPukes.length){ 285
return false; 286
return getSumDians(pukes)&getSumDians(curPukes); 288
return false; 290 291
function getSumDians(pukes){ 292
var sum=0; 293
for(var i=0;i&pukes.i++) { 294
sum+=pukes[i]. 295
return 297
} 298 299
function verificationCoherence(pukes){ 300
//验证连贯性 301
if(!pukes||!pukes.length)return false; 302
var books=[]; 303
for(var i=0;i&pukes.i++){ 304
if(pukes[i].dians==2||pukes[i].dians&14){ 305
return false; 306
if(!books[pukes[i].dians]){ 308
books[pukes[i].dians]=1; 309
}else{ 310
return false; 311
var start=false; 314
for(var i=0;i&books.i++) { 315
if(books[i]==1&&!start){ 316
start=true; 317
if(start&&!books[i]){ 319
return false; 320
return true; 323
} 324 325 } View Code 以上4步,是我认为的主要的4个函数,其他的函数,如初始化,事件注册等,在源码已有注释,写的不好勿喷。
附上源码:
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动}