{"id":4367,"date":"2026-11-08T19:20:47","date_gmt":"2026-11-08T18:20:47","guid":{"rendered":"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/grain-invaders\/"},"modified":"2026-11-08T19:20:47","modified_gmt":"2026-11-08T18:20:47","slug":"grain-invaders","status":"publish","type":"page","link":"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/grain-invaders\/","title":{"rendered":"Grain Invaders"},"content":{"rendered":"<div class=\"tgi\" id=\"tgi\"><div class=\"tgi-hud\" aria-live=\"off\"><span>Score<b data-h=\"s\">0<\/b><\/span><span>Batch<b data-h=\"w\">1<\/b><\/span><span>Pot stills<b data-h=\"l\">3<\/b><\/span><button type=\"button\" data-h=\"b\" aria-pressed=\"true\">Geluid aan<\/button><\/div><div class=\"tgi-stage\"><canvas tabindex=\"0\" role=\"img\" aria-label=\"Speelveld Grain Invaders\"><\/canvas><div class=\"tgi-ov\"><\/div><\/div><div class=\"tgi-pad\" aria-label=\"Besturing\"><button type=\"button\" data-t=\"l\" aria-label=\"Naar links\">&#9664;<\/button><button type=\"button\" data-t=\"f\">Schiet<\/button><button type=\"button\" data-t=\"r\" aria-label=\"Naar rechts\">&#9654;<\/button><\/div><section class=\"tgi-top\" id=\"tgi-top\" aria-labelledby=\"tgi-top-h\"><h3 id=\"tgi-top-h\">Klassement<\/h3><ol class=\"tgi-list\"><li class=\"first\"><span class=\"tgi-pos\">1<\/span><span class=\"tgi-name\">Batteraaf<small>batch 3<\/small><\/span><strong>3.080<\/strong><\/li><li><span class=\"tgi-pos\">2<\/span><span class=\"tgi-name\">Stickman<small>batch 2<\/small><\/span><strong>2.070<\/strong><\/li><li><span class=\"tgi-pos\">3<\/span><span class=\"tgi-name\">Leon<small>batch 2<\/small><\/span><strong>1.840<\/strong><\/li><li><span class=\"tgi-pos\">4<\/span><span class=\"tgi-name\">Loki<small>batch 2<\/small><\/span><strong>1.380<\/strong><\/li><li><span class=\"tgi-pos\">5<\/span><span class=\"tgi-name\">Sabel Wizz Kie<small>batch 1<\/small><\/span><strong>1.170<\/strong><\/li><\/ol><p class=\"tgi-note\">Beste score per speler, aller tijden. Elke score is door de server nagespeeld en gecontroleerd.<\/p><\/section><\/div><style>.tgi{font-family:Inter,system-ui,sans-serif;font-size:16px;line-height:1.5;color:#F3EBDD;max-width:600px;margin:0 auto 40px}\n#tgi{max-width:min(600px,max(300px,calc((100vh - 120px) * 224 \/ 256)));min-width:min(100%,340px);scroll-margin-top:12px}\n.tgi *{box-sizing:border-box}\n.tgi-hud{display:flex;flex-wrap:wrap;align-items:center;gap:8px 18px;padding:10px 4px;font-size:14px;color:#CFC3B0}\n.tgi-hud b{color:#F3EBDD;font-size:17px;font-weight:700;margin-left:4px}\n.tgi-hud button{margin-left:auto;background:transparent!important;color:#CFC3B0!important;border:1px solid #3A3029;border-radius:8px;padding:8px 12px;font:inherit;font-size:13px;min-height:40px;cursor:pointer}\n.tgi-stage{position:relative;border:1px solid #3A3029;border-radius:14px;overflow:hidden;background:#0E0B09;display:grid}\n.tgi-stage canvas{grid-area:1\/1;align-self:start;display:block;width:100%;height:auto;aspect-ratio:224\/256;image-rendering:pixelated;touch-action:none;outline:none}\n.tgi-ov{grid-area:1\/1;position:relative;background:rgba(14,11,9,.9);padding:22px 22px 18px;display:flex;flex-direction:column;gap:10px}\n.tgi-ov[hidden]{display:none}\n.tgi-ov h2{font-family:Fraunces,Georgia,serif!important;font-size:34px!important;line-height:1.05!important;color:#F3EBDD!important;margin:0!important;font-weight:600!important}\n.tgi-ov h2.tgi-big{font-size:52px!important;color:#E8B566!important}\n.tgi-ov p{margin:0;color:#CFC3B0;font-size:15px}\n.tgi-kick{font-size:12px!important;letter-spacing:.14em;text-transform:uppercase;color:#D9A04A!important;font-weight:600}\n.tgi-leg{list-style:none;margin:2px 0;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 14px}\n.tgi-leg li{display:flex;align-items:center;gap:8px;font-size:14px;color:#CFC3B0;margin:0}\n.tgi-leg canvas{width:32px;height:16px;image-rendering:pixelated}\n.tgi-leg strong{margin-left:auto;color:#E8B566}\n.tgi-form{display:flex;flex-direction:column;gap:6px;margin-top:4px}\n.tgi-form label{font-size:13px;font-weight:600;color:#F3EBDD}\n.tgi-in{width:100%;background:#1C1712!important;color:#F3EBDD!important;border:1px solid #5A4C40!important;border-radius:8px!important;padding:11px 12px!important;font:inherit!important;font-size:16px!important;min-height:46px}\n.tgi-in:focus{outline:2px solid #D9A04A;outline-offset:1px}\n.tgi-code{letter-spacing:.4em;text-align:center;font-size:22px!important}\n.tgi-btn{background:#D9A04A!important;color:#15110E!important;border:0!important;border-radius:8px!important;padding:12px 20px!important;font:inherit!important;font-weight:700!important;font-size:16px!important;min-height:48px;cursor:pointer;margin-top:4px}\n.tgi-btn:hover{background:#E8B566!important}\n.tgi-btn:disabled{opacity:.6;cursor:wait}\n.tgi-link{background:transparent!important;border:0!important;color:#E8B566!important;text-decoration:underline;font:inherit!important;font-size:14px!important;padding:6px 0!important;cursor:pointer;align-self:flex-start;min-height:36px}\n.tgi-err{color:#F0A08A!important;font-size:14px!important;min-height:0}\n.tgi-err:empty{display:none}\n.tgi-small{font-size:12.5px!important;color:#B9AC98!important}\n.tgi-status{color:#F3EBDD!important;font-weight:600}\n.tgi-res{display:flex;gap:12px}\n.tgi-res div{flex:1;background:#201A15;border:1px solid #3A3029;border-radius:12px;padding:10px 14px;display:flex;flex-direction:column}\n.tgi-res strong{font-family:Fraunces,Georgia,serif;font-size:30px;color:#E8B566;line-height:1.1}\n.tgi-res span{font-size:13px;color:#B9AC98}\n.tgi-pad{display:none;gap:10px;margin-top:12px}\n.tgi.playing .tgi-pad{display:flex}\n.tgi-pad button{flex:1;min-height:64px;border-radius:14px!important;border:1px solid #3A3029!important;background:#201A15!important;color:#F3EBDD!important;font:inherit!important;font-size:24px!important;font-weight:700!important;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}\n.tgi-pad button[data-t=f]{flex:1.4;background:#D9A04A!important;color:#15110E!important;font-size:17px!important}\n.tgi-pad button.on{filter:brightness(1.25)}\n@media (hover:hover) and (pointer:fine){.tgi.playing .tgi-pad{display:none}}\n@media (max-width:420px){.tgi-ov{padding:16px 14px}.tgi-ov h2{font-size:28px!important}.tgi-ov h2.tgi-big{font-size:40px!important}.tgi-ov p{font-size:14px}.tgi-leg{gap:2px 10px}}\n.tgi-top{margin-top:28px;background:#1C1712;border:1px solid #3A3029;border-radius:16px;padding:20px 20px 14px}\n.tgi-top h3{font-family:Fraunces,Georgia,serif!important;font-size:24px!important;color:#F3EBDD!important;margin:0 0 8px!important;font-weight:600!important}\n.tgi-list{list-style:none;margin:0;padding:0}\n.tgi-list li{display:flex;align-items:center;gap:12px;padding:9px 0;border-top:1px solid #3A3029;margin:0}\n.tgi-list li:first-child{border-top:0}\n.tgi-list li.me .tgi-name{color:#E8B566}\n.tgi-pos{width:28px;height:28px;flex:0 0 28px;border-radius:14px;background:#2A221B;color:#D9A04A;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px}\n.tgi-list li.first .tgi-pos{background:#D9A04A;color:#15110E}\n.tgi-name{flex:1;font-weight:600;color:#F3EBDD;min-width:0;overflow-wrap:anywhere}\n.tgi-name small{display:block;font-weight:400;font-size:12.5px;color:#B9AC98}\n.tgi-list strong{color:#D9A04A;font-size:17px}\n.tgi-empty{color:#B9AC98;margin:4px 0 10px}\n.tgi-note{font-size:12.5px;color:#B9AC98;margin:10px 0 0}\n<\/style><script>\/* Grain Invaders - deterministische spelkern. Moet exact gelijk lopen met sim.php. *\/\nvar GI_SIM=(function(){\nvar W=224,H=256,PY=228,PW=13,PH=8,COLS=11,ROWS=5,IW=12,IH=8,SX=16,SY=14,SHY=196,SHX=[26,75,124,173],MAXT=216000;\nvar PTS=[30,20,20,10,10],UFOP=[50,100,150,300];\nfunction rnd(s){var x=s.r;x^=x<<13;x>>>=0;x^=x>>>17;x^=x<<5;x>>>=0;s.r=x;return x;}\nfunction ov(ax,ay,aw,ah,bx,by,bw,bh){return ax<bx+bw&&ax+aw>bx&&ay<by+bh&&ay+ah>by;}\nfunction shape(){var a=[];for(var r=0;r<8;r++)for(var c=0;c<12;c++){var on=1;if((r===0&&(c<2||c>9))||(r===1&&(c<1||c>10))||(r===7&&(c<1||c>10)))on=0;a.push(on);}return a;}\nfunction wave(s){s.ox=26;s.oy=40+Math.min(s.wave-1,6)*8;s.dir=1;s.al=[];for(var i=0;i<55;i++)s.al.push(1);s.n=55;s.st=30;s.fr=0;s.bul=null;s.bombs=[];s.ufo=null;s.ufoT=1200;s.sh=[shape(),shape(),shape(),shape()];}\nfunction create(seed){var s={r:(seed>>>0)||1,t:0,score:0,lives:3,wave:1,px:105,dead:0,over:0,nl:1500,ud:1,ev:[]};wave(s);return s;}\nfunction shHit(s,x,y,w,h,dir){\n  if(y>SHY+16||y+h<SHY)return 0;\n  var bi=-1,bs=-1,bcy=0;\n  for(var k=0;k<4;k++){var sx=SHX[k];if(x>=sx+24||x+w<=sx)continue;var a=s.sh[k];\n    for(var i=0;i<96;i++){if(!a[i])continue;var cx=sx+(i%12)*2,cy=SHY+((i\/12)|0)*2;\n      if(ov(x,y,w,h,cx,cy,2,2)){if(bi<0||(dir<0?cy>bcy:cy<bcy)){bi=i;bs=k;bcy=cy;}}}}\n  if(bi<0)return 0;\n  var a2=s.sh[bs];a2[bi]=0;var r=(bi\/12)|0,c=bi%12,r2=r+dir;\n  if(r2>=0&&r2<8)a2[r2*12+c]=0;\n  if(c>0&&(r*7+c)%3===0)a2[r*12+c-1]=0;\n  s.ev.push(['s',SHX[bs]+c*2,SHY+r*2]);\n  return 1;\n}\nfunction eraseSh(s){\n  for(var i=0;i<55;i++){if(!s.al[i])continue;var ix=s.ox+(i%COLS)*SX,iy=s.oy+((i\/COLS)|0)*SY;\n    if(iy+IH<=SHY||iy>=SHY+16)continue;\n    for(var k=0;k<4;k++){var sx=SHX[k];if(ix>=sx+24||ix+IW<=sx)continue;var a=s.sh[k];\n      for(var j=0;j<96;j++){if(a[j]&&ov(ix,iy,IW,IH,sx+(j%12)*2,SHY+((j\/12)|0)*2,2,2))a[j]=0;}}}\n}\nfunction step(s,b){\n  if(s.over)return;\n  s.t++;\n  if(s.t>=MAXT){s.over=1;return;}\n  if(s.dead>0){s.dead--;if(s.dead===0){if(s.lives<=0){s.over=1;s.ev.push(['b']);return;}s.px=105;}return;}\n  if(b&1)s.px-=2;\n  if(b&2)s.px+=2;\n  if(s.px<4)s.px=4;\n  if(s.px>W-4-PW)s.px=W-4-PW;\n  if((b&4)&&!s.bul){s.bul={x:s.px+6,y:PY-4};s.ev.push(['f']);}\n  if(s.bul){\n    var oy=s.bul.y;s.bul.y-=6;var bx=s.bul.x,by=s.bul.y,bh=oy-by+4;\n    if(by<16){s.bul=null;}\n    else{\n      var hit=0,i,j;\n      if(s.ufo&&ov(bx,by,1,bh,s.ufo.x,20,16,8)){var p=UFOP[rnd(s)%4];s.score+=p;s.ev.push(['u',s.ufo.x,20,p]);s.ufo=null;hit=1;}\n      if(!hit){for(i=0;i<55;i++){if(!s.al[i])continue;var r=(i\/COLS)|0,c=i%COLS,ix=s.ox+c*SX,iy=s.oy+r*SY;\n        if(ov(bx,by,1,bh,ix,iy,IW,IH)){s.al[i]=0;s.n--;s.score+=PTS[r];s.ev.push(['k',ix,iy,r]);hit=1;break;}}}\n      if(!hit){var nb=[];for(j=0;j<s.bombs.length;j++){var q=s.bombs[j];if(!hit&&ov(bx,by,1,bh,q.x-1,q.y,3,6)){hit=1;s.ev.push(['x',q.x,q.y]);}else nb.push(q);}s.bombs=nb;}\n      if(!hit){hit=shHit(s,bx,by,1,bh,-1);}\n      if(hit)s.bul=null;\n    }\n  }\n  if(s.n===0){s.wave++;wave(s);s.ev.push(['w',s.wave]);return;}\n  s.st--;\n  if(s.st<=0){\n    var minc=99,maxc=-1,maxr=-1,i2;\n    for(i2=0;i2<55;i2++)if(s.al[i2]){var c2=i2%COLS,r3=(i2\/COLS)|0;if(c2<minc)minc=c2;if(c2>maxc)maxc=c2;if(r3>maxr)maxr=r3;}\n    var dx=s.n===1?4:2;\n    var L=s.ox+minc*SX+s.dir*dx,R=s.ox+maxc*SX+IW+s.dir*dx;\n    if(L<4||R>W-4){s.oy+=8;s.dir=-s.dir;}else{s.ox+=s.dir*dx;}\n    s.fr^=1;\n    var k=((s.n*2)\/3|0)-Math.min(s.wave-1,4)*2;s.st=k<1?1:k;\n    s.ev.push(['m']);\n    if(s.oy+maxr*SY+IH>SHY)eraseSh(s);\n    if(s.oy+maxr*SY+IH>=PY){s.over=1;s.ev.push(['b']);return;}\n  }\n  var maxB=Math.min(2+s.wave,5);\n  if(s.bombs.length<maxB){var ch=15+Math.min(s.wave,8)*3;\n    if(rnd(s)%1000<ch){var c0=rnd(s)%COLS;\n      for(var k2=0;k2<COLS;k2++){var cc=(c0+k2)%COLS,bi=-1;for(var r4=ROWS-1;r4>=0;r4--){if(s.al[r4*COLS+cc]){bi=r4;break;}}\n        if(bi>=0){s.bombs.push({x:s.ox+cc*SX+6,y:s.oy+bi*SY+IH,k:cc%3});break;}}}}\n  var sp=s.wave>3?3:2,nb2=[];\n  for(var j2=0;j2<s.bombs.length;j2++){var q2=s.bombs[j2],oq=q2.y;q2.y+=sp;\n    if(q2.y>H-12){s.ev.push(['g',q2.x,q2.y]);continue;}\n    if(shHit(s,q2.x-1,oq,3,q2.y-oq+6,1))continue;\n    if(ov(q2.x-1,q2.y,3,6,s.px,PY,PW,PH)){s.lives--;s.dead=90;s.ev.push(['d',s.px,PY]);s.bombs=[];s.bul=null;return;}\n    nb2.push(q2);}\n  s.bombs=nb2;\n  if(s.ufo){s.ufo.x+=s.ufo.d;if(s.ufo.x<-16||s.ufo.x>W)s.ufo=null;}\n  else{s.ufoT--;if(s.ufoT<=0&&s.n>8){s.ufo={x:s.ud>0?-16:W,d:s.ud};s.ud=-s.ud;s.ufoT=1500;}}\n  if(s.score>=s.nl){if(s.lives<5)s.lives++;s.nl+=1500;s.ev.push(['l']);}\n}\nfunction run(seed,log,end){var s=create(seed),li=0,b=0;\n  while(!s.over&&s.t<end){while(li<log.length&&log[li][0]<=s.t){b=log[li][1];li++;}step(s,b);s.ev.length=0;}\n  return s;}\nfunction enc(log){var o=[],p=0;for(var i=0;i<log.length;i++){o.push((log[i][0]-p).toString(36)+'.'+log[i][1]);p=log[i][0];}return o.join(',');}\nfunction dec(str){var out=[],p=0;if(!str)return out;var a=str.split(',');for(var i=0;i<a.length;i++){var q=a[i].split('.');p+=parseInt(q[0],36);out.push([p,parseInt(q[1],10)]);}return out;}\nreturn {W:W,H:H,PY:PY,PW:PW,PH:PH,COLS:COLS,ROWS:ROWS,IW:IW,IH:IH,SX:SX,SY:SY,SHY:SHY,SHX:SHX,create:create,step:step,run:run,enc:enc,dec:dec};\n})();\n\n\n(function(){\nvar root=document.getElementById('tgi');if(!root||root.getAttribute('data-ready'))return;root.setAttribute('data-ready','1');\nvar S=GI_SIM,API='\/?rest_route=\/tdwa\/v1\/gi\/',LS='tdwa_gi_p',SC=3;\nvar cv=root.querySelector('canvas'),ctx=cv.getContext('2d');cv.width=S.W*SC;cv.height=S.H*SC;ctx.imageSmoothingEnabled=false;\nvar ov=root.querySelector('.tgi-ov'),hud={s:root.querySelector('[data-h=s]'),w:root.querySelector('[data-h=w]'),l:root.querySelector('[data-h=l]'),b:root.querySelector('[data-h=b]')};\nvar topEl=document.getElementById('tgi-top');\nfunction $(t,a,k){var e=document.createElement(t);if(a)for(var x in a){if(x==='text')e.textContent=a[x];else if(x==='html')e.innerHTML=a[x];else if(x.slice(0,2)==='on')e.addEventListener(x.slice(2),a[x]);else e.setAttribute(x,a[x]);}(k||[]).forEach(function(c){if(c)e.appendChild(typeof c==='string'?document.createTextNode(c):c);});return e;}\nfunction api(a,b){return fetch(API+a,{method:b?'POST':'GET',headers:b?{'Content-Type':'application\/json'}:{},body:b?JSON.stringify(b):undefined,credentials:'omit'}).then(function(r){return r.json();});}\nfunction getP(){try{return JSON.parse(localStorage.getItem(LS)||'null');}catch(e){return null;}}\nfunction setP(p){try{if(p)localStorage.setItem(LS,JSON.stringify(p));else localStorage.removeItem(LS);}catch(e){}}\nvar ERR={email:'Vul een geldig e-mailadres in.',nick:'Kies een bijnaam van 2 tot 16 tekens (letters, cijfers, spatie, - of _).',taken:'Deze bijnaam is al bezet. Kies een andere.',rate:'Even rustig aan. Probeer het over een paar minuten opnieuw.',code:'Die code klopt niet. Controleer hem en probeer het opnieuw.',expired:'De code is verlopen of te vaak fout ingevuld. Vraag een nieuwe aan.',mail:'De mail kon niet worden verstuurd. Probeer het later opnieuw.',auth:'Je bent niet meer herkend. Vul je e-mailadres opnieuw in.',fast:'Deze score kon niet worden gecontroleerd.',mismatch:'Deze score kon niet worden gecontroleerd.',log:'Deze score kon niet worden gecontroleerd.',used:'Deze score is al verwerkt.',session:'Dit spel is verlopen. Start een nieuw spel.'};\nfunction errT(e){return ERR[e]||'Er ging iets mis met de verbinding. Probeer het opnieuw.';}\n\n\/* ---------- sprites ---------- *\/\nvar SPR={\n rye:[[\"....XXXX....\",\"..XXXXXXXX..\",\".XX.XXXX.XX.\",\".XXXXXXXXXX.\",\"..XX.XX.XX..\",\"..X.XXXX.X..\",\".X........X.\",\"X..........X\"],[\"....XXXX....\",\"..XXXXXXXX..\",\".XX.XXXX.XX.\",\".XXXXXXXXXX.\",\"..XX.XX.XX..\",\"...XX..XX...\",\"..XX....XX..\",\"...X....X...\"]],\n wheat:[[\".....XX.....\",\"...XXXXXX...\",\"..XXXXXXXX..\",\".XX..XX..XX.\",\".XXXXXXXXXX.\",\"...X.XX.X...\",\"..X..XX..X..\",\".X........X.\"],[\".....XX.....\",\"...XXXXXX...\",\"..XXXXXXXX..\",\".XX..XX..XX.\",\".XXXXXXXXXX.\",\"...X.XX.X...\",\"...X....X...\",\"....X..X....\"]],\n maize:[[\"..XXXXXXXX..\",\".XXXXXXXXXX.\",\"XXX..XX..XXX\",\"XXXXXXXXXXXX\",\".XXXXXXXXXX.\",\"..XX.XX.XX..\",\".XX......XX.\",\"XX........XX\"],[\"..XXXXXXXX..\",\".XXXXXXXXXX.\",\"XXX..XX..XXX\",\"XXXXXXXXXXXX\",\".XXXXXXXXXX.\",\"..XX.XX.XX..\",\"..XX....XX..\",\"...XX..XX...\"]],\n still:[\"......X......\",\"......X......\",\".....XXX.....\",\"....XXXXX....\",\"..XXXXXXXXX..\",\".XXXXXXXXXXX.\",\".XXXXXXXXXXX.\",\"..XXXXXXXXX..\"],\n glass:[\"XX............XX\",\".XX..........XX.\",\"..XXXXXXXXXXXX..\",\"...XXXXXXXXXX...\",\"....XXXXXXXX....\",\".......XX.......\",\".......XX.......\",\"....XXXXXXXX....\"],\n pop:[\"..X..X..X..\",\".XXX.XX.XXX\",\"XXXXXXXXXXX\",\".XXXXXXXXX.\",\"XXXXXXXXXXX\",\".XXX.XX.XXX\",\"..X..X..X..\"]\n};\nvar COL=['#B79A6E','#E3B45B','#E3B45B','#F2CF4A','#F2CF4A'],KIND=['rye','wheat','wheat','maize','maize'];\nfunction bm(rows,x,y,c,sh){ctx.fillStyle=c;for(var r=0;r<rows.length;r++){var row=rows[r];for(var k=0;k<row.length;k++)if(row.charAt(k)==='X')ctx.fillRect((x+k)*SC,(y+r)*SC,SC,SC);}\n  if(sh){ctx.fillStyle=sh;for(var r2=0;r2<rows.length;r2++){var rw=rows[r2];for(var k2=0;k2<rw.length;k2++)if(rw.charAt(k2)==='X'&&(r2===0||rows[r2-1].charAt(k2)!=='X'))ctx.fillRect((x+k2)*SC,(y+r2)*SC,SC,SC\/3);}}}\nfunction px(x,y,w,h,c){ctx.fillStyle=c;ctx.fillRect(x*SC,y*SC,w*SC,h*SC);}\n\n\/* ---------- geluid ---------- *\/\nvar ac=null,mute=false;try{mute=localStorage.getItem('tdwa_gi_m')==='1';}catch(e){}\nfunction snd(f,d,type,vol,slide){if(mute)return;try{ac=ac||new (window.AudioContext||window.webkitAudioContext)();var o=ac.createOscillator(),g=ac.createGain(),t=ac.currentTime;o.type=type||'square';o.frequency.setValueAtTime(f,t);if(slide)o.frequency.exponentialRampToValueAtTime(slide,t+d);g.gain.setValueAtTime(vol||.04,t);g.gain.exponentialRampToValueAtTime(.0001,t+d);o.connect(g);g.connect(ac.destination);o.start(t);o.stop(t+d+.02);}catch(e){}}\nvar mb=hud.b;function mlab(){mb.textContent=mute?'Geluid uit':'Geluid aan';mb.setAttribute('aria-pressed',mute?'false':'true');}mlab();\nmb.addEventListener('click',function(){mute=!mute;try{localStorage.setItem('tdwa_gi_m',mute?'1':'0');}catch(e){}mlab();});\n\n\/* ---------- invoer ---------- *\/\nvar keys={},touch={};\nfunction bits(){var b=0;if(keys.l||touch.l)b|=1;if(keys.r||touch.r)b|=2;if(keys.f||touch.f)b|=4;if((b&3)===3)b&=4;return b;}\nvar KM={ArrowLeft:'l',KeyA:'l',ArrowRight:'r',KeyD:'r',Space:'f',ArrowUp:'f',KeyW:'f'};\nvar NOSCROLL=\/^(Arrow(Up|Down|Left|Right)|Space|PageUp|PageDown|Home|End)$\/;\nwindow.addEventListener('keydown',function(e){var k=KM[e.code],tg=(e.target&&e.target.tagName)||'',typing=\/INPUT|TEXTAREA|SELECT\/.test(tg),ns=NOSCROLL.test(e.code);\n  if(mode==='play'||mode==='pause'){if(k)keys[k]=1;if(ns)e.preventDefault();if(e.code==='KeyP'||e.code==='Escape'){e.preventDefault();togglePause();}return;}\n  if(ns&&!typing&&(mode==='over'||root.contains(e.target)))e.preventDefault();});\nwindow.addEventListener('keyup',function(e){var k=KM[e.code];if(k){keys[k]=0;}});\nwindow.addEventListener('blur',function(){keys={};touch={};});\nroot.querySelectorAll('[data-t]').forEach(function(b){var k=b.getAttribute('data-t');\n  function on(e){e.preventDefault();touch[k]=1;b.classList.add('on');}function off(e){touch[k]=0;b.classList.remove('on');}\n  b.addEventListener('pointerdown',on);b.addEventListener('pointerup',off);b.addEventListener('pointercancel',off);b.addEventListener('pointerleave',off);b.addEventListener('contextmenu',function(e){e.preventDefault();});});\ndocument.addEventListener('visibilitychange',function(){if(document.hidden&&mode==='play')togglePause();});\n\n\/* ---------- spel ---------- *\/\nvar mode='intro',s=null,sess=null,log=[],lastB=-1,acc=0,lt=0,fx=[],banner=0,bannerTxt='',shake=0,raf=0;\nvar dust=[];for(var i=0;i<40;i++)dust.push([Math.random()*S.W|0,(Math.random()*180|0)+16,Math.random()<.3?'#3A3029':'#261E18']);\nfunction newGame(se){s=S.create(se.seed);sess=se;log=[];lastB=-1;acc=0;fx=[];banner=120;bannerTxt='Batch 1';keys={};touch={};mode='play';hideOv();root.classList.add('playing');view();lt=performance.now();cancelAnimationFrame(raf);raf=requestAnimationFrame(loop);try{cv.focus({preventScroll:true});}catch(e){}}\nfunction togglePause(){if(mode==='play'){mode='pause';showOv([$('h2',{text:'Pauze'}),$('p',{text:'Het graan wacht even op je.'}),$('button',{type:'button',class:'tgi-btn',text:'Verder spelen',onclick:function(){mode='play';hideOv();lt=performance.now();raf=requestAnimationFrame(loop);}})]);}\n  else if(mode==='pause'){mode='play';hideOv();lt=performance.now();raf=requestAnimationFrame(loop);}}\nfunction tick(){var b=bits();if(b!==lastB){log.push([s.t,b]);lastB=b;}S.step(s,b);\n  for(var i=0;i<s.ev.length;i++){var e=s.ev[i];\n    if(e[0]==='f')snd(880,.06,'square',.025,440);\n    else if(e[0]==='k'){fx.push({t:'p',x:e[1],y:e[2],a:16});snd(220,.12,'triangle',.06,90);}\n    else if(e[0]==='u'){fx.push({t:'u',x:e[1],y:e[2],a:70,v:e[3]});snd(660,.3,'sawtooth',.05,1320);}\n    else if(e[0]==='x')fx.push({t:'p',x:e[1]-5,y:e[2]-2,a:10});\n    else if(e[0]==='s')fx.push({t:'d',x:e[1],y:e[2],a:8});\n    else if(e[0]==='g')fx.push({t:'d',x:e[1]-1,y:e[2]+2,a:10});\n    else if(e[0]==='d'){shake=20;snd(110,.6,'sawtooth',.08,40);}\n    else if(e[0]==='w'){banner=120;bannerTxt='Batch '+e[1];snd(523,.15,'square',.05);setTimeout(function(){snd(784,.2,'square',.05);},150);}\n    else if(e[0]==='l'){banner=90;bannerTxt='Extra pot still!';snd(988,.2,'square',.05);}\n    else if(e[0]==='m')snd(s.fr?62:55,.08,'square',.03);}\n  s.ev.length=0;\n  if(s.over)gameOver();}\nfunction loop(now){if(mode!=='play')return;var dt=Math.min(now-lt,250);lt=now;acc+=dt;var n=0;while(acc>=1000\/60&&n<5&&mode==='play'){tick();acc-=1000\/60;n++;}if(n===5)acc=0;draw();if(mode==='play')raf=requestAnimationFrame(loop);}\n\nfunction draw(){\n  var w=S.W,h=S.H;ctx.save();\n  if(shake>0){shake--;ctx.translate((Math.random()*4-2)*SC|0,(Math.random()*4-2)*SC|0);}\n  var g=ctx.createLinearGradient(0,0,0,h*SC);g.addColorStop(0,'#0E0B09');g.addColorStop(1,'#1E1712');ctx.fillStyle=g;ctx.fillRect(-20,-20,w*SC+40,h*SC+40);\n  for(var i=0;i<dust.length;i++)px(dust[i][0],dust[i][1],1,1,dust[i][2]);\n  if(!s){ctx.restore();return;}\n  \/\/ gemoute gerst\n  px(0,h-12,w,12,'#2A2017');\n  for(var x=0;x<w;x+=4){var yy=h-11+((x*7)%3);px(x,yy,3,2,'#C9A063');px(x+1,yy+3+((x*5)%2),3,2,'#A9844C');px(x+2,yy+7,2,2,'#8E6C3B');}\n  \/\/ vaten\n  for(var k=0;k<4;k++){var a=s.sh[k],sx=S.SHX[k];for(var j=0;j<96;j++){if(!a[j])continue;var r=(j\/12)|0,c=j%12;var col=(r===1||r===6)?'#3B2A1D':(c%4===0?'#6E4426':'#8A5733');if(r===3||r===4)col=(c%4===0)?'#7A4C2B':'#97623A';px(sx+c*2,S.SHY+r*2,2,2,col);}}\n  \/\/ graan\n  for(var i2=0;i2<55;i2++){if(!s.al[i2])continue;var rr=(i2\/S.COLS)|0,cc=i2%S.COLS;bm(SPR[KIND[rr]][s.fr],s.ox+cc*S.SX,s.oy+rr*S.SY,COL[rr],'rgba(255,255,255,.35)');}\n  \/\/ glencairn\n  if(s.ufo){bm(SPR.glass,s.ufo.x,20,'#EDE6DA');px(s.ufo.x+4,23,8,2,'#D9A04A');px(s.ufo.x+5,25,6,1,'#D9A04A');}\n  \/\/ bommen (vallende korrels)\n  for(var b=0;b<s.bombs.length;b++){var q=s.bombs[b],ph=((s.t>>2)+b)%2;px(q.x-1,q.y+1,3,4,'#D9AE55');px(q.x-(ph?1:0),q.y,2,1,'#F0D08A');px(q.x,q.y+5,1,1,'#B08A40');}\n  \/\/ kogel: druppel new make\n  if(s.bul){px(s.bul.x,s.bul.y,1,4,'#FFF3D6');px(s.bul.x-1,s.bul.y+2,3,2,'#E8B566');}\n  \/\/ pot still\n  if(s.dead>0){if(s.dead>60){var f=(s.dead>>2)%2;bm(SPR.pop,s.px+1,S.PY,f?'#F3EBDD':'#D9A04A');}}\n  else{bm(SPR.still,s.px,S.PY,'#C9783E','rgba(255,220,180,.6)');px(s.px+3,S.PY+5,2,2,'#E9A06A');}\n  \/\/ effecten\n  var nf=[];for(var e=0;e<fx.length;e++){var o=fx[e];o.a--;\n    if(o.t==='p'){bm(SPR.pop,o.x,o.y,o.a>8?'#F3EBDD':'#CFC3B0');}\n    else if(o.t==='d'){px(o.x,o.y,2,2,'#D9A04A');px(o.x+2,o.y-2,1,1,'#B9AC98');px(o.x-2,o.y-1,1,1,'#B9AC98');}\n    else if(o.t==='u'){ctx.fillStyle='#E8B566';ctx.font='bold '+(8*SC)+'px Inter,system-ui,sans-serif';ctx.textAlign='center';ctx.fillText('+'+o.v,(o.x+8)*SC,(o.y+8)*SC);}\n    if(o.a>0)nf.push(o);}fx=nf;\n  if(banner>0&&mode==='play'){banner--;ctx.fillStyle='rgba(21,17,14,.75)';ctx.fillRect(0,(h\/2-22)*SC,w*SC,30*SC);ctx.fillStyle='#E8B566';ctx.font='600 '+(14*SC)+'px Fraunces,Georgia,serif';ctx.textAlign='center';ctx.fillText(bannerTxt,w\/2*SC,(h\/2-2)*SC);}\n  ctx.restore();\n  hud.s.textContent=s.score.toLocaleString('nl-NL');hud.w.textContent=s.wave;hud.l.textContent=Math.max(0,s.lives);\n}\n\n\/* ---------- schermen ---------- *\/\nfunction view(){try{var st=root.querySelector('.tgi-stage'),r=st.getBoundingClientRect();if(r.top<0||r.bottom>window.innerHeight)st.scrollIntoView({block:r.height>window.innerHeight?'start':'center',behavior:'smooth'});}catch(e){}}\nfunction showOv(kids,nofocus){ov.innerHTML='';kids.forEach(function(k){if(k)ov.appendChild(k);});ov.hidden=false;ov.scrollTop=0;root.classList.remove('playing');setTimeout(view,30);var f=ov.querySelector('input');if(f&&!nofocus&&mode!=='play')try{f.focus({preventScroll:true});}catch(e){}}\nfunction hideOv(){ov.hidden=true;ov.innerHTML='';}\nfunction legend(){return $('ul',{class:'tgi-leg'},[li('rye',0,'Rogge','30'),li('wheat',1,'Tarwe','20'),li('maize',3,'Ma\u00efs','10'),li('glass',-1,'Glencairn','?')]);\n  function li(k,r,n,p){var c=document.createElement('canvas');c.width=16*3;c.height=8*3;var x=c.getContext('2d');var rows=k==='glass'?SPR.glass:SPR[k][0];x.fillStyle=r<0?'#EDE6DA':COL[r];rows.forEach(function(row,y){for(var i=0;i<row.length;i++)if(row.charAt(i)==='X')x.fillRect((i+(16-row.length)\/2)*3,y*3,3,3);});return $('li',{},[c,$('span',{text:n}),$('strong',{text:p})]);}}\nfunction getPend(){try{var x=JSON.parse(sessionStorage.getItem('tdwa_gi_pend')||'null');return x&&Date.now()-x.t<20*60000?x:null;}catch(e){return null;}}\nfunction setPend(x){try{if(x)sessionStorage.setItem('tdwa_gi_pend',JSON.stringify(x));else sessionStorage.removeItem('tdwa_gi_pend');}catch(e){}}\nfunction intro(){\n  mode='intro';var p=getP();if(!(p&&p.pid)){var pe=getPend();if(pe)return codeScreen(pe.email,pe.nick);}\n  var head=[$('p',{class:'tgi-kick',text:'Arcade \u00b7 voor de eer'}),$('h2',{text:'Grain Invaders'}),$('p',{text:'Het graan valt aan! Rogge, tarwe en ma\u00efs zakken af naar jouw gemoute gerst. Schuil achter de whiskyvaten en schiet terug met druppels new make uit je koperen pot still. Bereikt het graan je gerst, dan ben je blended. Blijf een single malt!'}),legend()];\n  if(p&&p.pid){showOv(head.concat([$('button',{type:'button',class:'tgi-btn',text:'Speel als '+p.nick,onclick:function(){start(this);}}),$('p',{class:'tgi-err'}),$('button',{type:'button',class:'tgi-link',text:'Niet '+p.nick+'? Ander e-mailadres',onclick:function(){setP(null);intro();}}),keysHelp()]));return;}\n  var em=$('input',{type:'email',class:'tgi-in',id:'tgi-em',autocomplete:'email',required:'required',maxlength:'120'}),nk=$('input',{type:'text',class:'tgi-in',id:'tgi-nk',autocomplete:'nickname',maxlength:'16',required:'required'}),er=$('p',{class:'tgi-err',role:'alert'});\n  var bt=$('button',{type:'submit',class:'tgi-btn',text:'Speel'});\n  var fm=$('form',{class:'tgi-form',novalidate:'novalidate',onsubmit:function(e){e.preventDefault();er.textContent='';\n    if(!\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(em.value.trim())){er.textContent=ERR.email;em.focus();return;}\n    if(!\/^[\\p{L}\\p{N} _-]{2,16}$\/u.test(nk.value.trim())){er.textContent=ERR.nick;nk.focus();return;}\n    bt.disabled=true;api('hello',{email:em.value.trim(),nick:nk.value.trim()}).then(function(j){bt.disabled=false;if(j.error){er.textContent=errT(j.error);return;}if(j.pid){setP({pid:j.pid,tok:j.tok,nick:j.nick});ready();return;}setPend({email:em.value.trim(),nick:nk.value.trim(),t:Date.now()});codeScreen(em.value.trim(),nk.value.trim());}).catch(function(){bt.disabled=false;er.textContent=errT();});}},\n    [$('label',{for:'tgi-em',text:'E-mailadres'}),em,$('label',{for:'tgi-nk',text:'Bijnaam (komt op het klassement)'}),nk,er,bt,$('p',{class:'tgi-small',text:'Je e-mailadres gebruiken we alleen tegen spam. We sturen je \u00e9\u00e9n keer een bevestigingscode en bewaren het adres zelf niet.'})]);\n  showOv(head.concat([fm,keysHelp()]));\n}\nfunction keysHelp(){return $('p',{class:'tgi-small tgi-keys',text:'Toetsenbord: \u2190 \u2192 of A\/D om te bewegen, spatie om te schieten, P voor pauze. Op je telefoon gebruik je de knoppen onder het spel.'});}\nfunction codeScreen(email,nick){\n  mode='code';var cd=$('input',{type:'text',class:'tgi-in tgi-code',id:'tgi-cd',inputmode:'numeric',autocomplete:'one-time-code',maxlength:'6',pattern:'[0-9]*'}),er=$('p',{class:'tgi-err',role:'alert'}),bt=$('button',{type:'submit',class:'tgi-btn',text:'Bevestig'});\n  var fm=$('form',{class:'tgi-form',onsubmit:function(e){e.preventDefault();er.textContent='';bt.disabled=true;\n    api('verify',{email:email,code:cd.value.replace(\/\\D\/g,''),nick:nick}).then(function(j){bt.disabled=false;if(j.error){er.textContent=errT(j.error);return;}setPend(null);setP({pid:j.pid,tok:j.tok,nick:j.nick});ready();}).catch(function(){bt.disabled=false;er.textContent=errT();});}},\n    [$('label',{for:'tgi-cd',text:'Code van 6 cijfers'}),cd,er,bt]);\n  var again=$('button',{type:'button',class:'tgi-link',text:'Geen mail ontvangen? Stuur opnieuw',onclick:function(){again.disabled=true;api('hello',{email:email,nick:nick}).then(function(j){er.textContent=j.error?errT(j.error):'Nieuwe code verstuurd.';}).catch(function(){er.textContent=errT();});}});\n  showOv([$('h2',{text:'Check je mail'}),$('p',{text:'We hebben een bevestigingscode van 6 cijfers gestuurd naar '+email+'. Vul die hieronder in. Geen mail? Kijk ook in je spam of ongewenste e-mail. De code is 20 minuten geldig.'}),fm,again,$('button',{type:'button',class:'tgi-link',text:'Ander e-mailadres',onclick:function(){setPend(null);intro();}})]);\n}\nfunction ready(){intro();}\nfunction start(btn){var p=getP();if(!p)return intro();btn.disabled=true;var er=ov.querySelector('.tgi-err');\n  api('start',{pid:p.pid,tok:p.tok}).then(function(j){btn.disabled=false;if(j.error){if(j.error==='auth'){setP(null);intro();ov.querySelector('.tgi-err').textContent=ERR.auth;return;}if(er)er.textContent=errT(j.error);return;}newGame(j);}).catch(function(){btn.disabled=false;if(er)er.textContent=errT();});}\nfunction gameOver(){\n  mode='over';cancelAnimationFrame(raf);draw();keys={};touch={};\n  var st=$('p',{class:'tgi-status',role:'status',text:'Je score wordt gecontroleerd\u2026'});\n  var again=$('button',{type:'button',class:'tgi-btn',text:'Nog een keer',onclick:function(){start(again);}});\n  showOv([$('p',{class:'tgi-kick',text:'Game over'}),$('h2',{class:'tgi-big',text:'Blended!'}),$('p',{text:'Het graan heeft je gerst bereikt. Je bent geen single malt meer.'}),$('div',{class:'tgi-res'},[$('div',{},[$('strong',{text:s.score.toLocaleString('nl-NL')}),$('span',{text:'punten'})]),$('div',{},[$('strong',{text:String(s.wave)}),$('span',{text:'batch'})])]),st,again,$('p',{class:'tgi-err'}),$('a',{class:'tgi-link',href:'#tgi-top',text:'Bekijk het klassement'})],true);\n  try{if(document.activeElement&&document.activeElement.blur)document.activeElement.blur();}catch(e){}\n  again.disabled=true;setTimeout(function(){again.disabled=false;},1200);\n  var p=getP();\n  api('finish',{sid:sess.sid,stok:sess.stok,end:s.t,log:S.enc(log)}).then(function(j){\n    if(j.error){st.textContent=errT(j.error);return;}\n    st.textContent=j.newbest?('Nieuw persoonlijk record! Je staat op plek '+j.rank+' van het klassement.'):('Opgeslagen. Je beste score is '+Number(j.best).toLocaleString('nl-NL')+' (plek '+j.rank+').');\n    loadTop();\n  }).catch(function(){st.textContent='De verbinding viel weg. Je score kon niet worden opgeslagen.';});\n}\nfunction loadTop(){if(!topEl)return;api('top').then(function(j){if(!j||!j.rows)return;var p=getP();var ol=topEl.querySelector('ol');if(!ol){ol=$('ol',{class:'tgi-list'});topEl.querySelector('.tgi-empty')&&topEl.querySelector('.tgi-empty').remove();topEl.insertBefore(ol,topEl.querySelector('.tgi-note'));}\n  ol.innerHTML='';j.rows.forEach(function(r,i){ol.appendChild($('li',{class:(i===0?'first ':'')+(p&&r.n===p.nick?'me':'')},[$('span',{class:'tgi-pos',text:String(i+1)}),$('span',{class:'tgi-name',text:r.n},[$('small',{text:'batch '+r.w})]),$('strong',{text:Number(r.s).toLocaleString('nl-NL')})]));});}).catch(function(){});}\ndraw();intro();\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Grain Invaders: het graan valt aan! Schuil achter de whiskyvaten, schiet terug met je pot still en blijf een single malt. Speel voor de eer en kom in het klassement.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"footnotes":"","_members_access_role":[],"_members_access_error":""},"class_list":["post-4367","page","type-page","status-publish","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.5 - aioseo.com -->\n\t<meta name=\"description\" content=\"Grain Invaders: het graan valt aan! Schuil achter de whiskyvaten, schiet terug met je pot still en blijf een single malt. Speel voor de eer en kom in het klassement.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/grain-invaders\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"The Dutch Whisky Association - Whisky reviews, nieuwe releases en tastings\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Grain Invaders - The Dutch Whisky Association\" \/>\n\t\t<meta property=\"og:description\" content=\"Grain Invaders: het graan valt aan! Schuil achter de whiskyvaten, schiet terug met je pot still en blijf een single malt. Speel voor de eer en kom in het klassement.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/grain-invaders\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/www.thedutchwhiskyassociation.nl\/wp-content\/uploads\/2021\/11\/cropped-def_logo_TDWA_2021_black-05.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/www.thedutchwhiskyassociation.nl\/wp-content\/uploads\/2021\/11\/cropped-def_logo_TDWA_2021_black-05.png\" \/>\n\t\t<meta property=\"og:image:width\" content=\"512\" \/>\n\t\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-11-08T18:20:47+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-11-08T18:20:47+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/TDWAbeheer\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Grain Invaders - The Dutch Whisky Association\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Grain Invaders: het graan valt aan! Schuil achter de whiskyvaten, schiet terug met je pot still en blijf een single malt. Speel voor de eer en kom in het klassement.\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.thedutchwhiskyassociation.nl\/wp-content\/uploads\/2022\/02\/cropped-cropped-def_logo_TDWA_2021_white-02.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.thedutchwhiskyassociation.nl\\\/index.php\\\/grain-invaders\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.thedutchwhiskyassociation.nl\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.thedutchwhiskyassociation.nl\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.thedutchwhiskyassociation.nl\\\/index.php\\\/grain-invaders\\\/#listItem\",\"name\":\"Grain Invaders\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.thedutchwhiskyassociation.nl\\\/index.php\\\/grain-invaders\\\/#listItem\",\"position\":2,\"name\":\"Grain Invaders\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.thedutchwhiskyassociation.nl\\\/#listItem\",\"name\":\"Home\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.thedutchwhiskyassociation.nl\\\/#organization\",\"name\":\"The Dutch Whisky Association\",\"description\":\"Whisky reviews, nieuwe releases en tastings\",\"url\":\"https:\\\/\\\/www.thedutchwhiskyassociation.nl\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.thedutchwhiskyassociation.nl\\\/wp-content\\\/uploads\\\/2022\\\/02\\\/cropped-def_logo_TDWA_2021_white-02.png\",\"@id\":\"https:\\\/\\\/www.thedutchwhiskyassociation.nl\\\/index.php\\\/grain-invaders\\\/#organizationLogo\",\"width\":1500,\"height\":460},\"image\":{\"@id\":\"https:\\\/\\\/www.thedutchwhiskyassociation.nl\\\/index.php\\\/grain-invaders\\\/#organizationLogo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/TDWAbeheer\"]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.thedutchwhiskyassociation.nl\\\/index.php\\\/grain-invaders\\\/#webpage\",\"url\":\"https:\\\/\\\/www.thedutchwhiskyassociation.nl\\\/index.php\\\/grain-invaders\\\/\",\"name\":\"Grain Invaders - The Dutch Whisky Association\",\"description\":\"Grain Invaders: het graan valt aan! Schuil achter de whiskyvaten, schiet terug met je pot still en blijf een single malt. Speel voor de eer en kom in het klassement.\",\"inLanguage\":\"nl-NL\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.thedutchwhiskyassociation.nl\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.thedutchwhiskyassociation.nl\\\/index.php\\\/grain-invaders\\\/#breadcrumblist\"},\"datePublished\":\"2026-11-08T19:20:47+01:00\",\"dateModified\":\"2026-11-08T19:20:47+01:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.thedutchwhiskyassociation.nl\\\/#website\",\"url\":\"https:\\\/\\\/www.thedutchwhiskyassociation.nl\\\/\",\"name\":\"The Dutch Whisky Association\",\"description\":\"Whisky reviews, nieuwe releases en tastings\",\"inLanguage\":\"nl-NL\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.thedutchwhiskyassociation.nl\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Grain Invaders - The Dutch Whisky Association","description":"Grain Invaders: het graan valt aan! Schuil achter de whiskyvaten, schiet terug met je pot still en blijf een single malt. Speel voor de eer en kom in het klassement.","canonical_url":"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/grain-invaders\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/grain-invaders\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.thedutchwhiskyassociation.nl\/#listItem","position":1,"name":"Home","item":"https:\/\/www.thedutchwhiskyassociation.nl\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/grain-invaders\/#listItem","name":"Grain Invaders"}},{"@type":"ListItem","@id":"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/grain-invaders\/#listItem","position":2,"name":"Grain Invaders","previousItem":{"@type":"ListItem","@id":"https:\/\/www.thedutchwhiskyassociation.nl\/#listItem","name":"Home"}}]},{"@type":"Organization","@id":"https:\/\/www.thedutchwhiskyassociation.nl\/#organization","name":"The Dutch Whisky Association","description":"Whisky reviews, nieuwe releases en tastings","url":"https:\/\/www.thedutchwhiskyassociation.nl\/","logo":{"@type":"ImageObject","url":"https:\/\/www.thedutchwhiskyassociation.nl\/wp-content\/uploads\/2022\/02\/cropped-def_logo_TDWA_2021_white-02.png","@id":"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/grain-invaders\/#organizationLogo","width":1500,"height":460},"image":{"@id":"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/grain-invaders\/#organizationLogo"},"sameAs":["https:\/\/www.facebook.com\/TDWAbeheer"]},{"@type":"WebPage","@id":"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/grain-invaders\/#webpage","url":"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/grain-invaders\/","name":"Grain Invaders - The Dutch Whisky Association","description":"Grain Invaders: het graan valt aan! Schuil achter de whiskyvaten, schiet terug met je pot still en blijf een single malt. Speel voor de eer en kom in het klassement.","inLanguage":"nl-NL","isPartOf":{"@id":"https:\/\/www.thedutchwhiskyassociation.nl\/#website"},"breadcrumb":{"@id":"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/grain-invaders\/#breadcrumblist"},"datePublished":"2026-11-08T19:20:47+01:00","dateModified":"2026-11-08T19:20:47+01:00"},{"@type":"WebSite","@id":"https:\/\/www.thedutchwhiskyassociation.nl\/#website","url":"https:\/\/www.thedutchwhiskyassociation.nl\/","name":"The Dutch Whisky Association","description":"Whisky reviews, nieuwe releases en tastings","inLanguage":"nl-NL","publisher":{"@id":"https:\/\/www.thedutchwhiskyassociation.nl\/#organization"}}]},"og:locale":"nl_NL","og:site_name":"The Dutch Whisky Association - Whisky reviews, nieuwe releases en tastings","og:type":"article","og:title":"Grain Invaders - The Dutch Whisky Association","og:description":"Grain Invaders: het graan valt aan! Schuil achter de whiskyvaten, schiet terug met je pot still en blijf een single malt. Speel voor de eer en kom in het klassement.","og:url":"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/grain-invaders\/","og:image":"https:\/\/www.thedutchwhiskyassociation.nl\/wp-content\/uploads\/2021\/11\/cropped-def_logo_TDWA_2021_black-05.png","og:image:secure_url":"https:\/\/www.thedutchwhiskyassociation.nl\/wp-content\/uploads\/2021\/11\/cropped-def_logo_TDWA_2021_black-05.png","og:image:width":512,"og:image:height":512,"article:published_time":"2026-11-08T18:20:47+00:00","article:modified_time":"2026-11-08T18:20:47+00:00","article:publisher":"https:\/\/www.facebook.com\/TDWAbeheer","twitter:card":"summary_large_image","twitter:title":"Grain Invaders - The Dutch Whisky Association","twitter:description":"Grain Invaders: het graan valt aan! Schuil achter de whiskyvaten, schiet terug met je pot still en blijf een single malt. Speel voor de eer en kom in het klassement.","twitter:image":"https:\/\/www.thedutchwhiskyassociation.nl\/wp-content\/uploads\/2022\/02\/cropped-cropped-def_logo_TDWA_2021_white-02.png"},"aioseo_meta_data":{"post_id":"4367","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2026-11-09 06:51:08","updated":"2026-11-09 06:51:08","ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.thedutchwhiskyassociation.nl\/\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tGrain Invaders\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.thedutchwhiskyassociation.nl\/"},{"label":"Grain Invaders","link":"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/grain-invaders\/"}],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/wp-json\/wp\/v2\/pages\/4367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/wp-json\/wp\/v2\/comments?post=4367"}],"version-history":[{"count":0,"href":"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/wp-json\/wp\/v2\/pages\/4367\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.thedutchwhiskyassociation.nl\/index.php\/wp-json\/wp\/v2\/media?parent=4367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}