'
document.write(s);my.zIndex=20;pitEventHandlers();gameNew()}
function msg(s,clr){clr=typeof clr!=='undefined'?clr:'black'
var div=document.getElementById('msg')
div.innerHTML=s
div.style.color=clr}
function pitEventHandlers(){var makePitClickHandler=function(pitNo){return function(){pitSelected(pitNo,true);};};for(var pitNo=0;pitNo<13;pitNo++){if(pitNo!=6){document.getElementById(`pit${pitNo}`).addEventListener('click',makePitClickHandler(pitNo),false);}}}
function gameNew(){var playerN=optGet('playerN')
if(playerN==1){my.players[0].name='Human'
my.players[1].name='Computer'}else{my.players[0].name='Player 1'
my.players[1].name='Player 2'}
console.log('playerN',playerN,my.players)
document.getElementById("gamediv").style.display="inline";boardReset()
scoresUpdate()}
function scoresUpdate(){document.getElementById("player1-score_text").innerHTML=my.player1score
document.getElementById("player2-score_text").innerHTML=my.player2score}
function beadsDraw(pit){var count=pit.n
pit.beads=[]
for(var i=0;ivalBest){valBest=val
locnBest={x:x,y:y}}}
return locnBest}
function dist(dx,dy){return Math.sqrt(dx*dx+dy*dy)}
function beadMove(fromPitN,toPitN){my.timerCount--;var fromPit=my.pits[fromPitN]
if(fromPit.beads.count==0)return
var toPit=my.pits[toPitN]
var locn=pitLocnBest(toPit)
var bead=fromPit.beads[0]
fromPit.beads.shift()
toPit.beads.push(bead)
bead.x=toPit.x+locn.x
bead.y=toPit.y+locn.y
var xdiff=toPit.x+locn.x-bead.stt.x
var ydiff=toPit.y+locn.y-bead.stt.y
var div=document.getElementById('gamediv')
console.log('pctToPx',div.clientWidth)
var pctToPx=div.clientWidth/100
bead.img.style.transform='translate('+xdiff*pctToPx+'px,'+ydiff*pctToPx+'px)';bead.img.style.zIndex=my.zIndex++
my.pits[fromPitN].n--;my.pits[toPitN].n++;window.setTimeout('countShow('+fromPitN+', '+my.pits[fromPitN].n+')',1000);window.setTimeout('countShow('+toPitN+', '+my.pits[toPitN].n+')',1000);}
function isGameEnd(){var winner=-1;for(var p=0;p<2;p++){var p2=1-p
var isEmpty=true;for(var cnt=my.players[p].sttN;cnt0){while(my.pits[cnt].n>0){beadMove(cnt,my.players[p2].bankN);}
countShow(cnt,0);}}
if(my.pits[my.players[0].bankN].n>my.pits[my.players[1].bankN].n){winner=0;}else if(my.pits[my.players[0].bankN].n6&&nummy.players[0].bankN&&playerPit0)&&(my.pits[playerPit].n==1)){return true;}}
return false;}
function stealStones(end){var otherside=12-end;for(var x=0;xmy.players[0].bankN&&end=my.players[0].bankN)||(player==1&&(num<=my.players[0].bankN||num==my.players[1].bankN))){msg('Not one of your pits')
setHighlight();inPlay=false;}else{msg('')
for(var i=0;i<6;i++){document.getElementById(`pit${i}`).style.opacity=0}
for(var i=7;i<13;i++){document.getElementById(`pit${i}`).style.opacity=0}
for(stones;stones>0;stones--){if((player==0)&&(start==my.players[1].bankN)){start=0;}else if((player==1)&&(start==my.players[0].bankN)){start=7;}
var object=window.setTimeout('beadMove('+pitMoveFrom+', '+start+')',my.timerCount*400);my.timers[my.timerCount++]=object;if(stones===1){window.setTimeout('checkStealState('+start+')',origStones*500);}
start++;if(start==14){start=0;}}}}
function optGet(name){var val=localStorage.getItem(`mancala.${name}`)
if(val==null)val=my.opts[name]
return val}
function optSet(name,val){localStorage.setItem(`mancala.${name}`,val)
my.opts[name]=val}
function changeTurns(){var winner=isGameEnd();if(winner==0||winner==1){console.log('changeTurns',winner,optGet('playerN'))
if(optGet('playerN')==1&&winner==1){soundPlay('sndLose',true)}else{soundPlay('sndWin',true)}
msg(`${my.players[winner].name} Wins!`)
inPlay=false;return;}else if(winner==2){soundPlay('sndTie',true)
msg(`It's a tie!`)
inPlay=false;return;}else{if(my.keepThisPlayer){msg('Bonus turn')
soundPlay('sndBonus',true)
setHighlight();inPlay=false;}else{if(player==1){player=0;msg(`${my.players[player].name}'s turn`)}else{player=1;msg(`${my.players[player].name}'s turn`)}
inPlay=false;setHighlight();}
if((player==1)&&(optGet("playerN")==1)){var computerChoice=Math.floor(Math.random()*5+7);my.computerTry=7;setTimeout('pitSelected('+computerChoice+', false)',500);}}}
function boardReset(){var div=document.getElementById("gamediv");for(var i=0;i '
s+=' .speaker { height: 30px; width: 30px; position: relative; overflow: hidden; display: inline-block; vertical-align:top; } '
s+=' .speaker span { display: block; width: 9px; height: 9px; background-color:'+onClr+'; margin: 10px 0 0 1px; }'
s+=' .speaker span:after { content: ""; position: absolute; width: 0; height: 0; border-style: solid; border-color: transparent '+onClr+' transparent transparent; border-width: 10px 16px 10px 15px; left: -13px; top: 5px; }'
s+=' .speaker span:before { transform: rotate(45deg); border-radius: 0 60px 0 0; content: ""; position: absolute; width: 5px; height: 5px; border-style: double; border-color:'+onClr+'; border-width: 7px 7px 0 0; left: 18px; top: 9px; transition: all 0.2s ease-out; }'
s+=' .speaker:hover span:before { transform: scale(.8) translate(-3px, 0) rotate(42deg); }'
s+=' .speaker.mute span:before { transform: scale(.5) translate(-15px, 0) rotate(36deg); opacity: 0; }'
s+=' .speaker.mute span { background-color:'+offClr+'; }'
s+=' .speaker.mute span:after {border-color: transparent '+offClr+' transparent '+offClr+';}'
s+=' '
s+='
'
return s}
function soundPlay(name,simulQ){if(!my.soundQ)return
simulQ=typeof simulQ!=='undefined'?simulQ:true
if(simulQ){if(name.length>0){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 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+=`
`
s+=radioHTML('Players:','playerN',my.playerNs,optGet('playerN'),'');s+=radioHTML('Beads per pit:','beadN',my.beadNs,optGet('beadN'),'');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='25vw';}
function optYes(){var pop=document.getElementById('optpop');pop.style.opacity=0;pop.style.zIndex=1;pop.style.left='-200vw';var playerN=document.querySelector('input[name="playerN"]:checked').value
var beadN=document.querySelector('input[name="beadN"]:checked').value
console.log('optYes',playerN,beadN)
optSet('playerN',playerN)
optSet('beadN',beadN)
gameNew()}
function optNo(){var pop=document.getElementById('optpop');pop.style.opacity=0;pop.style.zIndex=1;pop.style.left='-200vw';}
function toggleBtn(btn,onq){if(onq){document.getElementById(btn).classList.add("hi");document.getElementById(btn).classList.remove("lo");}else{document.getElementById(btn).classList.add("lo");document.getElementById(btn).classList.remove("hi");}}
class Pit{constructor(x,y,wd,ht,bankQ){this.x=x
this.y=y
this.bankQ=bankQ
this.wd=wd
this.ht=ht
this.n=0
this.beads=[]
this.div=null}}