var w,h,g,my={};function spiderMain(){var version='0.5';w=675;h=500;my.suitRules=[{id:'any',name:'Any'},{id:'alt',name:'Alternating Red Black'},{id:'same',name:'Same'},];my.suitRule=my.suitRules[0] my.tabDropKingQ=false my.tabShowFrontQ=false my.cardWd=62 my.cardHt=83 my.gap={x:65,y:15} my.freePt={x:10,y:48} my.fdnPnt={x:145,y:48} my.tabPt={x:10,y:160} my.fdnMax=8 my.tabMax=10 my.imgHome=(document.domain=='localhost')?'/mathsisfun/games/images/':'/games/images/' var s='';s+='' my.sndHome=(document.domain=='localhost')?'/mathsisfun/images/sounds/':'/images/sounds/' s+='';s+='';s+='';s+='
';s+='';s+='';s+='';s+='
';s+='
';s+='
' s+='
' s+='' s+='' my.snds=[];my.soundQ=true s+='   ' s+=soundBtnHTML() s+='   ' s+='' s+='
' s+='' s+='
 
';s+='';s+=optPopHTML();s+='
';s+='
© 2019 MathsIsFun.com v'+version+'
';s+='
';s+='
';s+='
';document.write(s);var el=document.getElementById('canvas1');var ratio=3;el.width=w*ratio;el.height=h*ratio;el.style.width=w+"px";el.style.height=h+"px";g=el.getContext("2d");g.setTransform(ratio,0,0,ratio,0,0);my.drag={onQ:false} window.addEventListener('mousemove',function(ev){mouseMove(ev)}) window.addEventListener('touchmove',function(ev){console.log('touchmove') var touch=ev.targetTouches[0];ev.clientX=touch.clientX;ev.clientY=touch.clientY;ev.touchQ=true;mouseMove(ev)}) my.frees=[{id:'',per:3,passN:999,descr:'Turn three cards at a time, with no limit on passes through the deck.'},{id:'',per:3,passN:3,descr:'Turn three cards at a time, with three passes through the deck.'},{id:'',per:1,passN:3,descr:'Turn one card at a time, with three passes through the deck.'},{id:'',per:1,passN:1,descr:'Turn one card at a time, with only a single pass through the deck.'},{id:'',per:1,passN:999,descr:'Turn one card at a time, with no limit on passes through the deck.'},] my.zIndex=20;my.autoFdnQ=true my.deck=new Deck();} function msg(s,clr){clr=typeof clr!=='undefined'?clr:'gold' var div=document.getElementById('msg') div.innerHTML=s div.style.color=clr} function mouseMove(ev){if(!my.drag.onQ)return var div=my.drag.div var lt=parseFloat(div.style.left)+ev.clientX-my.drag.x div.style.left=lt+'px' my.drag.x=ev.clientX var tp=parseFloat(div.style.top)+ev.clientY-my.drag.y div.style.top=tp+'px' my.drag.y=ev.clientY for(var i=0;i'+h.pTo.id,h)} var h=my.hist.pop() console.log('hist',h.card.name,h.pFr.id+'->'+h.pTo.id,h) var card=h.card var pFr=h.pTo var pTo=h.pFr pFr.sub(card) pTo.add(card) for(var i=0;i0){div.style.visibility='visible' div.innerHTML='Deal ('+passLeft+')'}else{div.style.visibility='hidden'}} function winCheck(){for(var i=0;i=54)break}} for(var i=0;imax){maxi=i max=v}}} console.log('pileDrop',max,maxi) if(max>0){var pFr=me.pile var pTo=my.piles[maxi] me.show('front') pFr.sub(me) pTo.add(me) my.hist.push({pFr:pFr,pTo:pTo,card:me,alsos:me.drag.alsos.slice()}) for(var i=0;i=12){autoMove(cards) return} n++}else{n==0 cards=[]}}}} return ''} function autoMove(cards){console.log('autoMove',cards) var pTo=null for(var i=0;ir1.rt||r2.rtr1.bt||r2.bt0){var div=document.getElementById(name) if(div.currentTime>0&&div.currentTime0)soundPlayQueue();};} function soundToggle(){var btn='sound' if(my.soundQ){my.soundQ=false document.getElementById(btn).classList.add("mute")}else{my.soundQ=true document.getElementById(btn).classList.remove("mute")}} function suitRuleChg(){var id=document.querySelector('input[name="suitRule"]:checked').id var n=(id.match(/\d+$/)||[]).pop() my.suitRule=my.suitRules[n] console.log('suitRule',id,n,my.suitRule)} function stockPerNChg(){my.stockPerN=document.querySelector('input[name="stockPerN"]:checked').value console.log('stockPerNChg',my.stockPerN)} function stockPassMaxChg(){my.stockPassMax=document.querySelector('input[name="stockPassMax"]:checked').value console.log('stockPassMaxChg',my.stockPassMax)} function radioHTML(prompt,id,lbls,checkId,func){var s='';s+='
';s+='
';s+=prompt;s+='
';s+='
';for(var i=0;i';s+='';} s+='
';s+='
';return s;} function optPopHTML(){var s='';s+='
';my.stockPerNs=[{id:1,name:'1'},{id:2,name:2},{id:3,name:3}];my.stockPassMaxs=[{id:1,name:'1'},{id:2,name:2},{id:3,name:3},{id:99,name:99}];s+=radioHTML('Suit order:','suitRule',my.suitRules,'any','suitRuleChg');s+='
';s+='' s+='
' s+='' s+='
' s+='' s+='
' s+='
';s+='';s+='
';s+='
';return s;} function optPop(){var pop=document.getElementById('optpop');pop.style.transitionDuration="0.3s";pop.style.opacity=1;pop.style.zIndex=my.zIndex+1 pop.style.left=(w-340)/2+'px';} function optYes(){var pop=document.getElementById('optpop');pop.style.opacity=0;pop.style.zIndex=1;pop.style.left='-999px';stockPassBtnUpdate() console.log('optYes',my.suitRule,my.stockPerN,my.stockPassMax,my.tabDropKingQ,my.tabShowFrontQ,my.autoFdnQ)} function optNo(){var pop=document.getElementById('optpop');pop.style.opacity=0;pop.style.zIndex=1;pop.style.left='-999px';} function autoFdnToggle(){my.autoFdnQ=!my.autoFdnQ;toggleBtn("autoFdnBtn",my.autoFdnQ);autoFdn()} function tabShowFrontToggle(){my.tabShowFrontQ=!my.tabShowFrontQ;toggleBtn("tabShowFrontQ",my.tabShowFrontQ);for(var i=0;i0;i-=1){var j=Math.floor(Math.random()*(i+1));var temp=this.cards[i];this.cards[i]=this.cards[j];this.cards[j]=temp;}} Deck.prototype.redraw=function(){for(var i=0;iemptyN)return[] var alsos=[] var cardCurr=card for(var i=this.cards.length-n+1;i=this.cards.length-my.stockPerN)addx+=my.gap.y break case 'free':card.place(this.x,this.y) break case 'fdn':card.place(this.x,this.y) break case 'tab':card.place(this.x,this.y+addy) addy+=my.gap.y if(my.tabShowFrontQ){card.show('front')} if(i>=this.cards.length-1){if(card.face!='front'){card.show('front') soundPlay('sndFlip')}} break default:card.place(this.x,this.y)} card.setZ(this.zIndex++) s+=card.name+','} console.log('draw '+this.id+': '+s)} Pile.prototype.toString=function(){var s='' for(var i=0;i