/* The IRRIGATION PUZZLE is a modified version of an original script developed by Armin Kielack (http://www.kielack.com/games.htm) */

{for(n=0;n<15;n++) {eval("e"+n+" = new Image(54, 54);e"+n+".src = 'pz1_img/p"+n+".gif';"); eval("f"+n+" = new Image(54, 54);f"+n+".src = 'pz1_img/bp"+n+".gif';")} fieldsize=9; if (fieldsize<3) fieldsize=3; if (fieldsize>9) fieldsize=9; startfield=Math.floor((fieldsize+1)/2)*10+Math.floor((fieldsize+1)/2); var score=0; var bak_score=0; var newgame=1; var playfield = new Array(110); var waterlevel = new Array(110); var awf=0; clientplatform = navigator.userAgent.toLowerCase(); mac=false; if (clientplatform.indexOf("mac") != -1) mac=true; function alerting(messa) {document.getElementById("alertbox").value=messa} function soli() {window.status='Sulama'} function randomise(maxim) {tmp=Math.floor(Math.random()*maxim +1); if (tmp>maxim) tmp=maxim; return tmp;}
function start_game() {alerting(" "); score=0; for (n=0;n>111;n++) playfield[n]=20; for (n=1;n<fieldsize+1;n++) for (m=1;m<fieldsize+1;m++) playfield[m*10+n]=0; setupfield(); newgame=0} function setupfield() {currentfield=startfield; winds=randomise(4); playfield[currentfield]=winds+10; direction=getstepfromwind(winds); currentfield+=direction; pathfinder(currentfield, direction); morespace=true; while (morespace) {currentfield=findnextstartfield(); if (currentfield>0){direction=finddirection(currentfield); if (!(direction==0)) {pathfinder(currentfield, direction);} else {morespace=false;}} else {morespace=false;}} mixit(); clearwaterlevel(); awf=0; findwaterlevel(startfield); showallfields(); showscore()} function finddirection(f1) {searchdrct=true; wd=randomise(4); c1=0; while (searchdrct && c1<5) {c1++; wd++; if(wd>4) wd=1; switch (wd) {case 1: drct=-1;break; case 2: drct=-10;break; case 3: drct=1;break; case 4: drct=10;break; default: alert("real error - unexpected value in finddirection")} zb=playfield[f1+drct]; if((zb>0 && zb<7) || (zb>10 && zb<15)) searchdrct=false;} if (searchdrct) { drct=0; } else {drct=drct*(-1); changefieldtoyield(f1-drct,drct);} return drct;} function changefieldtoyield(cf,drct1) {fm=playfield[cf]; switch (fm) {case 14: piecebits=8; break; case 13: piecebits=4; break; case 12: piecebits=2; break; case 11: piecebits=1; break; case 5: piecebits=6; break; case 6: piecebits=5; break; case 4: piecebits=10; break; case 3: piecebits=9; break; case 2: piecebits=12; break; case 1: piecebits=3; break; default: alert("real error1- unexpected piece in yieldfield"+cf+"v"+fm); break;} if (drct1==10 ) piecebits+=1; if (drct1==-10 ) piecebits+=2; if (drct1==-1 ) piecebits+=4; if (drct1==1 ) piecebits+=8; switch (piecebits) {case 13: piece=10; break; case 7: piece=9; break; case 14: piece=8; break; case 11: piece=7; break; case 5: piece=6; break; case 6: piece=5; break; case 10: piece=4; break; case 9: piece=3; break; case 12: piece=2; break; case 3: piece=1; break; default: alert("real error2- unexpected piece in yieldfield"+cf+"v"+piecebits); break;} playfield[cf]=piece; return;} function findnextstartfield() {c1=0; searchingfield=true; f1=randomise(90)+10; while (searchingfield && c1<153) {f1++;c1++; if (f1>100) f1=11; if (playfield[f1]==0) {zb=playfield[f1-1]; if((zb>0 && zb<7) || (zb>10 && zb<15)) {searchingfield=false;} zb=playfield[f1-10]; if((zb>0 && zb<7) || (zb>10 && zb<15)) {searchingfield=false;} zb=playfield[f1+1]; if((zb>0 && zb<7) || (zb>10 && zb<15)) {searchingfield=false;} zb=playfield[f1+10]; if((zb>0 && zb<7) || (zb>10 && zb<15)) {searchingfield=false;}}} if (searchingfield) f1=0; return f1;} function pathfinder(currentfield, direction) {nextfound=true; while (nextfound) {winds=randomise(4); trycount=0; nextfound=false; while(!(nextfound) && trycount<4) {nextdirection=getstepfromwind(winds); nextfield=currentfield+nextdirection; trycount++;winds++; if (winds>4) winds=1; if (playfield[nextfield]==0) nextfound=true;} if (nextfound) {playfield[currentfield]=connectfields(direction,nextdirection); direction=nextdirection; currentfield=nextfield;} else {playfield[currentfield]=getlastfield(direction);}}} function showallfields() {for (n1=1;n1<fieldsize+1;n1++) for (n2=1;n2<fieldsize+1;n2++) {n=n1*10+n2; if (waterlevel[n]==0) {if (mac) eval("window.document.p"+n+".src='pz1_img/p"+playfield[n]+".gif'"); else eval("document.forms['puzzle'].p"+n+".src='pz1_img/p"+playfield[n]+".gif'")} else{if (mac) eval("window.document.p"+n+".src='pz1_img/bp"+playfield[n]+".gif'"); else eval("document.forms['puzzle'].p"+n+".src='pz1_img/bp"+playfield[n]+".gif'")}}} function getstepfromwind(w){if (w==1) d=10; if (w==2) d=-10; if (w==3) d=-1; if (w==4) d=1; return d;} function connectfields(cd,nd) {cd=cd*-1; piecebits=0; if (cd==10 || nd==10) piecebits+=1; if (cd==-10 || nd==-10) piecebits+=2; if (cd==-1 || nd==-1) piecebits+=4; if (cd==1 || nd==1) piecebits+=8; switch (piecebits) {case 5: piece=6; break; case 6: piece=5; break; case 10: piece=4; break; case 9: piece=3; break; case 12: piece=2; break; case 3: piece=1; break; default: alert("real error1- unexpected piece"); break;} return piece;} function getlastfield(cd) {p=0; switch (cd) {case 1: p=13; break; case 10: p=12; break; case -1: p=14; break; case -10: p=11; break; default: alert("real error2- unexpected last piece"); break;} return p;} function click_on_field (field) {alerting(" "); if(newgame==1) {alerting("Yeni oyuna ba\u015Fla\u0021"); return;} if(playfield[field]==0) return; score+=1; turnfield(field); clearwaterlevel(); awf=0; findwaterlevel(startfield); showallfields(); showscore(); if (awf==fieldsize*fieldsize) {alerting(+score+" hareketle ba\u015Fard\u0131n\u0131z\u0021");}} function turnfield(f) {pd=playfield[f]; switch (pd) {case 1: playfield[f]=2; break; case 2: playfield[f]=1; break; case 3: playfield[f]=6; break; case 4: playfield[f]=3; break; case 5: playfield[f]=4; break; case 6: playfield[f]=5; break; case 7: playfield[f]=10; break; case 8: playfield[f]=7; break; case 9: playfield[f]=8; break; case 10: playfield[f]=9; break; case 11: playfield[f]=13; break; case 12: playfield[f]=14; break; case 13: playfield[f]=12; break; case 14: playfield[f]=11; break; default: alert("unexpected piece in turnfield"); return;} return;} function clearwaterlevel() {for (n=0;n<100;n++) waterlevel[n]=0;} function findwaterlevel(cf) {waterlevel[cf]=1; awf++; wpiec=playfield[cf]; switch (wpiec) {case 1: checkwater(cf, -10); checkwater(cf, 10); break; case 2: checkwater(cf, -1); checkwater(cf, 1); break; case 3: checkwater(cf, 10); checkwater(cf, 1); break; case 4: checkwater(cf, -10); checkwater(cf, 1); break; case 5: checkwater(cf, -1); checkwater(cf, -10); break; case 6: checkwater(cf, -1); checkwater(cf, 10); break; case 7: checkwater(cf, -10); checkwater(cf, 10);checkwater(cf, 1); break; case 8: checkwater(cf, -10); checkwater(cf, -1);checkwater(cf, 1); break; case 9: checkwater(cf, -10); checkwater(cf, 10);checkwater(cf, -1); break; case 10: checkwater(cf, -1); checkwater(cf, 10);checkwater(cf, 1); break; case 11: checkwater(cf, 10); break; case 12: checkwater(cf, -10); break; case 13: checkwater(cf, -1); break; case 14: checkwater(cf, 1); break; default: alert("unexpected value in "+wpiec+"find water level"+cf);} return;} function checkwater(cf,drct2) {if (waterlevel[cf+drct2]==1) return; pf=playfield[cf+drct2]; if (drct2==-1 && (pf==2 || pf==3 || pf==4 || pf==7 || pf==8 || pf==10 || pf==14)) {findwaterlevel(cf+drct2);} if (drct2==10 && (pf==1 || pf==4 || pf==5 || pf==7 || pf==8 || pf==9 || pf==12)) {findwaterlevel(cf+drct2);} if (drct2==1 && (pf==2 || pf==5 || pf==6 || pf==9 || pf==8 || pf==10 || pf==13)) {findwaterlevel(cf+drct2);} if (drct2==-10 && (pf==1 || pf==3 || pf==6 || pf==7 || pf==9 || pf==10 || pf==11)) findwaterlevel(cf+drct2); return;} function mixit() {for (n=1;n<fieldsize;n++) for (m=1;m<fieldsize;m++) {r=randomise(4); f=n+m*10; for (z=r;z<5;z++) turnfield(f)}} function showscore() {alerting("\u015Eu ana kadar ki hareket say\u0131n\u0131z "+score)} function divisor(a,b) {if (a/b==Math.floor(a/b)); return true; return false}}
