{"id":349,"date":"2026-10-26T16:25:31","date_gmt":"2026-10-26T20:25:31","guid":{"rendered":"https:\/\/tanerkarakas.com\/?page_id=349"},"modified":"2026-10-26T20:37:13","modified_gmt":"2026-10-27T00:37:13","slug":"games","status":"publish","type":"page","link":"https:\/\/tanerkarakas.com\/?page_id=349","title":{"rendered":"Games"},"content":{"rendered":"<div id=\"bn-wrap\">\n<style>\n#bn-wrap{max-width:340px;margin:0 auto;font-family:Georgia,\"Times New Roman\",serif;color:#fff;background:#0f3d2a;border-radius:12px;padding:10px;box-sizing:border-box;line-height:1.3}\n#bn-wrap *{box-sizing:border-box}\n#bn-wrap canvas{display:block;width:100%;height:auto;border-radius:8px;touch-action:none;cursor:crosshair;margin:0}\n#bn-hud{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px}\n#bn-hole{font-size:20px;font-weight:bold}\n#bn-info{font-size:13px;opacity:.85;text-align:right}\n#bn-clubs{display:flex;flex-wrap:wrap;gap:4px;margin:8px 0}\n#bn-clubs button,#bn-next{font:inherit;font-size:13px;border:0;border-radius:6px;padding:7px 9px;background:#1f6b49;color:#fff;cursor:pointer}\n#bn-clubs button.on{background:#f4c7d8;color:#0f3d2a;font-weight:bold}\n#bn-next{background:#f4c7d8;color:#0f3d2a;font-weight:bold;width:100%;display:none;margin-bottom:8px}\n#bn-meter{height:14px;background:#0a2a1d;border-radius:7px;overflow:hidden}\n#bn-fill{height:100%;width:0;background:#f4c7d8}\n#bn-msg{font-size:14px;min-height:38px;margin:6px 0}\n#bn-card{width:100%;border-collapse:collapse;font-size:12px;text-align:center}\n#bn-card td,#bn-card th{border:1px solid #2c7a56;padding:3px 0;color:#fff;background:none}\n<\/style>\n<div id=\"bn-hud\">\n<div id=\"bn-hole\">Loading\u2026<\/div>\n<div id=\"bn-info\"><\/div>\n<\/div>\n<p><canvas id=\"bn-cv\" width=\"480\" height=\"640\"><\/canvas><\/p>\n<div id=\"bn-clubs\"><\/div>\n<div id=\"bn-meter\">\n<div id=\"bn-fill\"><\/div>\n<\/div>\n<div id=\"bn-msg\">Press and drag backward from anywhere, like a slingshot. Release to swing.<\/div>\n<p><button id=\"bn-next\" type=\"button\">Next hole<\/button><\/p>\n<table id=\"bn-card\"><\/table>\n<p><noscript>This game needs JavaScript enabled.<\/noscript><br \/>\n<script>(function(){try{(0,eval)(\"\\n(function(){\\nfunction go(){\\nvar cv=document.getElementById('bn-cv');\\nif(!cv||!cv.getContext){return;}\\nvar cx=cv.getContext('2d'),W=480,H=640;\\nvar HOLES=[\\n{n:'Camellia',par:4,p:[[0,0],[-5,250],[-40,400],[-75,480]],fw:38,w:[],b:[[18,300,9,16],[-95,485,9,12],[-55,468,8,10]]},\\n{n:'White Dogwood',par:4,p:[[0,0],[10,200],[0,350],[-30,515]],fw:36,w:[[-64,500,22,30]],b:[[22,262,8,16],[-8,508,8,10]]},\\n{n:'Golden Bell',par:3,p:[[0,0],[0,155]],fw:60,w:[[0,118,70,9]],b:[[-14,138,11,5],[14,138,11,5],[0,174,24,7]]},\\n{n:'Azalea',par:5,p:[[0,0],[0,250],[-45,380],[-90,490]],fw:34,w:[[-68,452,38,7]],b:[[14,235,8,14],[-108,498,9,12],[-72,490,8,10]]},\\n{n:'Chinese Fir',par:4,p:[[0,0],[0,200],[15,330],[25,440]],fw:36,w:[],b:[[3,426,9,7],[48,448,9,10]]},\\n{n:'Firethorn',par:5,p:[[0,0],[0,280],[10,430],[10,550]],fw:34,w:[[8,522,42,9]],b:[[-22,300,8,14],[-14,548,8,10],[38,555,8,10]]},\\n{n:'Redbud',par:3,p:[[0,0],[15,170]],fw:50,w:[[-12,134,46,22]],b:[[38,166,9,12],[15,193,17,6]]},\\n{n:'Nandina',par:4,p:[[0,0],[0,260],[-10,350],[-12,440]],fw:36,w:[],b:[[22,272,8,14],[-32,432,9,12],[8,449,8,10]]},\\n{n:'Holly',par:4,p:[[0,0],[0,240],[25,350],[28,465]],fw:34,w:[],b:[[-20,292,9,18],[8,458,9,14],[48,470,8,12]]}];\\nvar CL=[['Driver',280],['3 Wood',240],['5 Iron',195],['7 Iron',165],['9 Iron',135],['P Wedge',110],['S Wedge',80],['Putter',35]];\\nvar MULT={tee:1,fairway:1,green:1,rough:.78,sand:.6};\\nvar SIG={tee:1.4,fairway:1.6,green:.4,rough:3.2,sand:3.8};\\nvar ROLL={tee:.07,fairway:.07,green:.025,rough:.03,sand:0};\\nvar hi=0,ci=0,ball={x:0,y:0},strokes=0,scores=[],lie='tee',wind={s:6,a:1},busy=false,done=false,hole,gc,gr,cup,B,S,OX,OY,drag=null,pw=0,aim={x:0,y:1},anim=null,msg='';\\nvar $=function(i){return document.getElementById(i);};\\nfunction g(){return (Math.random()+Math.random()+Math.random()-1.5)*2;}\\nfunction dist(a,b,c,d){return Math.sqrt((a-c)*(a-c)+(b-d)*(b-d));}\\nfunction dseg(px,py,ax,ay,bx,by){var dx=bx-ax,dy=by-ay,l=dx*dx+dy*dy,t=l?((px-ax)*dx+(py-ay)*dy)\/l:0;t=t\\u003c0?0:(t\\u003e1?1:t);return dist(px,py,ax+t*dx,ay+t*dy);}\\nfunction inE(x,y,e){var a=(x-e[0])\/e[2],b=(y-e[1])\/e[3];return a*a+b*b\\u003c=1;}\\nfunction lieAt(x,y){var i;\\nif(x\\u003cB.x0||x\\u003eB.x1||y\\u003cB.y0||y\\u003eB.y1){return 'ob';}\\nfor(i=0;i\\u003chole.w.length;i++){if(inE(x,y,hole.w[i])){return 'water';}}\\nfor(i=0;i\\u003chole.b.length;i++){if(inE(x,y,hole.b[i])){return 'sand';}}\\nif(dist(x,y,gc[0],gc[1])\\u003c=gr){return 'green';}\\nfor(i=0;i\\u003chole.p.length-1;i++){if(dseg(x,y,hole.p[i][0],hole.p[i][1],hole.p[i+1][0],hole.p[i+1][1])\\u003c=hole.fw\/2){return 'fairway';}}\\nreturn 'rough';}\\nfunction sx(x){return OX+(x-B.x0)*S;}\\nfunction sy(y){return OY-(y-B.y0)*S;}\\nfunction setup(){\\nhole=HOLES[hi];var p=hole.p,i,xs=[],ys=[];\\ngc=p[p.length-1];gr=hole.par==3?15:17;cup=[gc[0]+3,gc[1]-3];\\nfor(i=0;i\\u003cp.length;i++){xs.push(p[i][0]);ys.push(p[i][1]);}\\nfor(i=0;i\\u003chole.w.length;i++){xs.push(hole.w[i][0]-hole.w[i][2],hole.w[i][0]+hole.w[i][2]);}\\nB={x0:Math.min.apply(null,xs)-55,x1:Math.max.apply(null,xs)+55,y0:-25,y1:gc[1]+38};\\nS=Math.min((W-24)\/(B.x1-B.x0),(H-24)\/(B.y1-B.y0));\\nOX=(W-(B.x1-B.x0)*S)\/2;OY=(H+(B.y1-B.y0)*S)\/2;\\nball={x:0,y:0};strokes=0;lie='tee';done=false;busy=false;\\nwind={s:2+Math.floor(Math.random()*14),a:Math.random()*6.283};\\n$('bn-next').style.display='none';\\nsuggest();info();\\nmsg='Hole '+(hi+10)+', '+Math.round(gc[1]*1)+' yards to the pin area. Check the wind arrow.';\\n$('bn-msg').textContent=msg;}\\nfunction toPin(){return dist(ball.x,ball.y,cup[0],cup[1]);}\\nfunction suggest(){var d=toPin(),k;\\nif(lie=='green'){ci=7;}\\nelse{ci=0;for(k=6;k\\u003e=0;k--){if(CL[k][1]*MULT[lie]\\u003e=d){ci=k;break;}}}\\ndrawClubs();}\\nfunction drawClubs(){var h='',k;for(k=0;k\\u003cCL.length;k++){h+='\\u003cbutton type=\\\"button\\\" data-k=\\\"'+k+'\\\"'+(k==ci?' class=\\\"on\\\"':'')+'\\u003e'+CL[k][0]+'\\u003c\/button\\u003e';}\\n$('bn-clubs').innerHTML=h;}\\nfunction info(){$('bn-hole').textContent=(hi+10)+'. '+hole.n+' (Par '+hole.par+')';\\n$('bn-info').textContent='Strokes '+strokes+'  |  Pin '+Math.round(toPin())+' yds  |  Lie: '+lie;}\\nfunction card(){var t='\\u003ctr\\u003e\\u003cth\\u003eHole\\u003c\/th\\u003e',a='\\u003ctr\\u003e\\u003ctd\\u003ePar\\u003c\/td\\u003e',s='\\u003ctr\\u003e\\u003ctd\\u003eYou\\u003c\/td\\u003e',i,tp=0,ts=0;\\nfor(i=0;i\\u003c9;i++){t+='\\u003cth\\u003e'+(i+10)+'\\u003c\/th\\u003e';a+='\\u003ctd\\u003e'+HOLES[i].par+'\\u003c\/td\\u003e';s+='\\u003ctd\\u003e'+(scores[i]===undefined?'-':scores[i])+'\\u003c\/td\\u003e';if(scores[i]!==undefined){tp+=HOLES[i].par;ts+=scores[i];}}\\nvar d=ts-tp;$('bn-card').innerHTML=t+'\\u003cth\\u003eTo par\\u003c\/th\\u003e\\u003c\/tr\\u003e'+a+'\\u003ctd\\u003e\\u003c\/td\\u003e\\u003c\/tr\\u003e'+s+'\\u003ctd\\u003e'+(ts?(d\\u003e0?'+'+d:d):'-')+'\\u003c\/td\\u003e\\u003c\/tr\\u003e';}\\nfunction shoot(dx,dy,power){\\nvar c=CL[ci],L=lie,putt=c[0]=='Putter',mult=MULT[L]*(putt\\u0026\\u0026L!='green'?.5:1);\\nvar sg=SIG[L]*(power\\u003e.92?1.8:1);\\nvar ang=Math.atan2(dy,dx)+g()*sg*Math.PI\/180;\\nvar d=c[1]*power*mult*(1+(L=='rough'||L=='sand'?g()*.06:g()*.01));\\nvar st={x:ball.x,y:ball.y};\\nvar lx=st.x+Math.cos(ang)*d,ly=st.y+Math.sin(ang)*d;\\nif(!putt){lx+=Math.cos(wind.a)*wind.s*d*.0045;ly+=Math.sin(wind.a)*wind.s*d*.0045;}\\nvar l1=lieAt(lx,ly),fx=lx,fy=ly,hz=null;\\nif(l1=='water'||l1=='ob'){hz=l1;}\\nelse{var dd=dist(st.x,st.y,lx,ly)||1,r=putt?0:d*ROLL[l1];fx=lx+(lx-st.x)\/dd*r;fy=ly+(ly-st.y)\/dd*r;var l2=lieAt(fx,fy);if(l2=='water'||l2=='ob'){hz=l2;}}\\nvar holed=false;\\nif(!hz){var tot=dist(st.x,st.y,fx,fy);\\nif(dseg(cup[0],cup[1],st.x,st.y,fx,fy)\\u003c(putt?.9:1.3)\\u0026\\u0026tot\\u003c=toPin()+(putt?6:2)){holed=true;fx=cup[0];fy=cup[1];}}\\nstrokes++;busy=true;\\nanim={a:st,l:{x:lx,y:ly},f:{x:fx,y:fy},t:0,ph:putt?2:1,arc:Math.min(80,d*.35),n1:34+d*.12,hz:hz,holed:holed,carry:Math.round(d),from:L,putt:putt};\\nif(!hz){wind.s=Math.max(0,Math.min(20,wind.s+Math.round(g()*2)));wind.a+=g()*.3;}}\\nfunction finish(){var a=anim;anim=null;\\nif(a.hz){strokes++;ball={x:a.a.x,y:a.a.y};lie=lieAt(ball.x,ball.y);if(strokes==1+1\\u0026\\u0026false){lie='tee';}\\nmsg=(a.hz=='water'?'Splash! ':'Out of bounds. ')+'One stroke penalty, replay from the same spot.';busy=false;suggest();info();$('bn-msg').textContent=msg;return;}\\nball={x:a.f.x,y:a.f.y};\\nif(a.holed||strokes\\u003e=10){scores[hi]=strokes;done=true;busy=false;var df=strokes-hole.par;\\nvar nm=strokes==1?'Hole in one!':(df\\u003c=-2?'Eagle!':(df==-1?'Birdie.':(df==0?'Par.':(df==1?'Bogey.':'Score '+strokes+'.'))));\\nif(!a.holed){nm='Pick up at 10 strokes.';}\\nmsg=nm+' '+strokes+' strokes.';\\nif(hi==8){var tp=0,ts=0,i;for(i=0;i\\u003c9;i++){tp+=HOLES[i].par;ts+=scores[i];}msg+=' Round complete: '+ts+' ('+(ts-tp\\u003e0?'+':'')+(ts-tp)+'). Tap to play again.';$('bn-next').textContent='Play again';}\\nelse{$('bn-next').textContent='Next hole';}\\n$('bn-next').style.display='block';card();info();$('bn-msg').textContent=msg;return;}\\nlie=lieAt(ball.x,ball.y);busy=false;suggest();info();\\nmsg=(a.putt?'Putt':'Carry '+a.carry+' yds')+' to the '+lie+'. Wind '+Math.round(wind.s)+' mph.';$('bn-msg').textContent=msg;}\\nfunction step(){\\nif(anim){var a=anim;a.t+=1\/(a.ph==1?a.n1:22);\\nif(a.t\\u003e=1){if(a.ph==1\\u0026\\u0026!a.hz){a.ph=2;a.t=0;}else{if(a.hz){}finish();}}}\\ndraw();requestAnimationFrame(step);}\\nfunction arrow(x,y,ang,len){cx.beginPath();cx.moveTo(x-Math.cos(ang)*len\/2,y+Math.sin(ang)*len\/2);cx.lineTo(x+Math.cos(ang)*len\/2,y-Math.sin(ang)*len\/2);cx.stroke();\\nvar ex=x+Math.cos(ang)*len\/2,ey=y-Math.sin(ang)*len\/2;cx.beginPath();cx.moveTo(ex,ey);cx.lineTo(ex-Math.cos(ang-.5)*8,ey+Math.sin(ang-.5)*8);cx.lineTo(ex-Math.cos(ang+.5)*8,ey+Math.sin(ang+.5)*8);cx.closePath();cx.fill();}\\nfunction ell(e,col){cx.fillStyle=col;cx.beginPath();cx.ellipse(sx(e[0]),sy(e[1]),e[2]*S,e[3]*S,0,0,6.283);cx.fill();}\\nfunction draw(){var i,p=hole.p;\\ncx.fillStyle='#14421f';cx.fillRect(0,0,W,H);\\ncx.fillStyle='#3f8a34';cx.fillRect(sx(B.x0),sy(B.y1),(B.x1-B.x0)*S,(B.y1-B.y0)*S);\\ncx.lineJoin='round';cx.lineCap='round';cx.strokeStyle='#6dbb55';cx.lineWidth=hole.fw*S;cx.beginPath();\\nfor(i=0;i\\u003cp.length;i++){if(i==0){cx.moveTo(sx(p[i][0]),sy(p[i][1]));}else{cx.lineTo(sx(p[i][0]),sy(p[i][1]));}}cx.stroke();\\ncx.fillStyle='#8ccf6e';cx.beginPath();cx.arc(sx(gc[0]),sy(gc[1]),(gr+3)*S,0,6.283);cx.fill();\\ncx.fillStyle='#a6e08a';cx.beginPath();cx.arc(sx(gc[0]),sy(gc[1]),gr*S,0,6.283);cx.fill();\\nfor(i=0;i\\u003chole.b.length;i++){ell(hole.b[i],'#efe2b0');}\\nfor(i=0;i\\u003chole.w.length;i++){ell(hole.w[i],'#3b86c4');}\\ncx.fillStyle='#fff';cx.beginPath();cx.arc(sx(cup[0]),sy(cup[1]),2.5,0,6.283);cx.fill();\\ncx.strokeStyle='#fff';cx.lineWidth=1.5;cx.beginPath();cx.moveTo(sx(cup[0]),sy(cup[1]));cx.lineTo(sx(cup[0]),sy(cup[1])-24);cx.stroke();\\ncx.fillStyle='#e0457b';cx.beginPath();cx.moveTo(sx(cup[0]),sy(cup[1])-24);cx.lineTo(sx(cup[0])+13,sy(cup[1])-19);cx.lineTo(sx(cup[0]),sy(cup[1])-14);cx.fill();\\ncx.fillStyle='#1d5a2a';cx.fillRect(sx(-6),sy(0)-2,12*S,5);\\nvar bx=ball.x,by=ball.y,h=0;\\nif(anim){var a=anim,t=Math.min(1,a.t);\\nif(a.ph==1){bx=a.a.x+(a.l.x-a.a.x)*t;by=a.a.y+(a.l.y-a.a.y)*t;h=Math.sin(t*3.1416)*a.arc;}\\nelse{var s0=a.putt?a.a:a.l;bx=s0.x+(a.f.x-s0.x)*t;by=s0.y+(a.f.y-s0.y)*t;}\\nif(a.hz\\u0026\\u0026a.ph==1\\u0026\\u0026t\\u003e.97){h=0;}}\\ncx.fillStyle='rgba(0,0,0,.3)';cx.beginPath();cx.ellipse(sx(bx),sy(by)+1,3.5,2,0,0,6.283);cx.fill();\\nif(drag\\u0026\\u0026!busy\\u0026\\u0026!done){var c=CL[ci],m=MULT[lie]*(ci==7\\u0026\\u0026lie!='green'?.5:1),ln=c[1]*pw*m;\\ncx.strokeStyle='rgba(255,255,255,.85)';cx.lineWidth=2;cx.setLineDash([6,6]);cx.beginPath();cx.moveTo(sx(ball.x),sy(ball.y));cx.lineTo(sx(ball.x+aim.x*ln),sy(ball.y+aim.y*ln));cx.stroke();cx.setLineDash([]);\\ncx.strokeStyle='#f4c7d8';cx.beginPath();cx.arc(sx(ball.x+aim.x*ln),sy(ball.y+aim.y*ln),5,0,6.283);cx.stroke();}\\ncx.fillStyle='#fff';cx.beginPath();cx.arc(sx(bx),sy(by)-h,3.6,0,6.283);cx.fill();\\ncx.fillStyle='rgba(15,61,42,.8)';cx.fillRect(W-92,8,84,52);\\ncx.fillStyle='#fff';cx.strokeStyle='#fff';cx.lineWidth=2;cx.font='bold 13px Georgia,serif';cx.textAlign='center';cx.fillText('Wind '+Math.round(wind.s)+' mph',W-50,24);\\narrow(W-50,42,wind.a,34);cx.textAlign='left';}\\nfunction pos(e){var r=cv.getBoundingClientRect();return {x:(e.clientX-r.left)*W\/r.width,y:(e.clientY-r.top)*H\/r.height};}\\ncv.addEventListener('pointerdown',function(e){if(busy||done){return;}e.preventDefault();drag=pos(e);drag.cur=drag;pw=0;try{cv.setPointerCapture(e.pointerId);}catch(x){}});\\ncv.addEventListener('pointermove',function(e){if(!drag){return;}var q=pos(e),vx=drag.x-q.x,vy=drag.y-q.y,l=Math.sqrt(vx*vx+vy*vy);\\npw=Math.min(1,l\/130);if(l\\u003e3){aim={x:vx\/l,y:-vy\/l};}\\nvar c=CL[ci],m=MULT[lie]*(ci==7\\u0026\\u0026lie!='green'?.5:1);\\n$('bn-fill').style.width=Math.round(pw*100)+'%';\\n$('bn-msg').textContent='Power '+Math.round(pw*100)+'%  |  about '+Math.round(c[1]*pw*m)+' yds before wind';});\\nfunction up(){if(!drag){return;}drag=null;$('bn-fill').style.width='0';\\nif(pw\\u003e.05\\u0026\\u0026!busy\\u0026\\u0026!done){shoot(aim.x,aim.y,pw);}pw=0;}\\ncv.addEventListener('pointerup',up);cv.addEventListener('pointercancel',function(){drag=null;pw=0;$('bn-fill').style.width='0';});\\n$('bn-clubs').addEventListener('click',function(e){var k=e.target.getAttribute('data-k');if(k!==null\\u0026\\u0026!busy){ci=parseInt(k,10);drawClubs();}});\\ndocument.addEventListener('keydown',function(e){if(busy||done){return;}if(e.key=='ArrowLeft'\\u0026\\u0026ci\\u003e0){ci--;drawClubs();}if(e.key=='ArrowRight'\\u0026\\u0026ci\\u003c7){ci++;drawClubs();}});\\n$('bn-next').addEventListener('click',function(){if(hi==8){hi=0;scores=[];}else{hi++;}setup();card();});\\ncard();setup();requestAnimationFrame(step);\\n}\\nif(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',go);}else{go();}\\n})();\\n\");}catch(e){var m=document.getElementById(\"bn-msg\");if(m){m.textContent=\"Game error: \"+e.message;}}})();<\/script>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Loading\u2026 Press and drag backward from anywhere, like a slingshot. Release to swing. Next hole This game needs JavaScript enabled.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"_links":{"self":[{"href":"https:\/\/tanerkarakas.com\/index.php?rest_route=\/wp\/v2\/pages\/349"}],"collection":[{"href":"https:\/\/tanerkarakas.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tanerkarakas.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tanerkarakas.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tanerkarakas.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=349"}],"version-history":[{"count":10,"href":"https:\/\/tanerkarakas.com\/index.php?rest_route=\/wp\/v2\/pages\/349\/revisions"}],"predecessor-version":[{"id":380,"href":"https:\/\/tanerkarakas.com\/index.php?rest_route=\/wp\/v2\/pages\/349\/revisions\/380"}],"wp:attachment":[{"href":"https:\/\/tanerkarakas.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=349"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}