// "Snake" // // This macro set demonstrates how to use numeric keypad keys // as shortcuts, how to generate and use a custom color LUT, // how to create an image centered on the screen and how to // display HTML formatted messages in dialog boxes. // // Keypad keys: // + - start // 8 - move up // 6 - move right // 2 (or 5) - move down // 4 - move left // // Hint: Green and cyan are good, red and black are bad. var d,x,y,score,level; var s=128; macro "New Game [n+]" { score=0; level=1; while (level<=10) { initPlayBoard(); exitLevel=false; while(!exitLevel) { checkCurrentDirection(); if (getPixel(x,y)==1) youAteSomethingGood(); else if ((getPixel(x,y)==2)||((getPixel(x,y)==0)&&(d!=""))) youAteSomethingBad(); else if (getPixel(x,y)==4) exitLevel=true; else setPixel(x,y,0); wait(100-level*8); updateDisplay(); } beep; level++; } level--; showMessage( "Congratulations!
"+
"Level: "+level+" "+
"Level: "+level+"
"+
"Score: "+score+""
);
close;
}
macro"Up [n8]" {d="U";}
macro"Down [n2]" {d="D";}
macro"Down [n5]" {d="D";}
macro"Right [n6]" {d="R";}
macro"Left [n4]" {d="L";}
function initPlayBoard() {
reuse = nImages>0;
if (reuse) reuse = startsWith(getTitle, "Level ");
if (reuse)
rename("Level "+level+" Score "+score);
else {
if (getVersion>="1.37e")
call("ij.gui.ImageWindow.centerNextImage");
newImage("Level "+level,"8-bit",s,s,1);
run("View 100%"); run("In"); run("In");
}
x=s/2;y=x;d="";
r=newArray(0, 0, 255, 255, 0, 220);
g=newArray(0, 200, 0, 255, 255, 230);
b=newArray(0, 0, 0, 255, 255, 255);
setLut(r,g,b); // a custom LUT with just 5 colors.
setColor(3); fillRect(0,0,s,s); // the white image bckgd
setColor(0); drawRect(0,0,s,s); // the black image frame
setColor(5); // the backgroung text color
setFont("Monospaced",32,"bold"); setJustification("center");
drawString("ImageJ",s/2,s/3);
drawString("Snake",s/2,2*s/3);
drawString("Game",s/2,s);
addItem(20,1); // 20 green color food
addItem(20,2); // 20 red color poison
addItem( 1,4); // 1 cyan color door to next level
setPixel(x,y,0); // sets start position to center
}
function addItem(f,type) {
setColor(type);
for (i=0;i
"+
"Score: "+score+""
);
close;
exit;
}
function youAteSomethingGood() {
for (i=x-1;i<=x+1;i++) {
for (j=y-1;j<=y+1;j++) {
if (getPixel(i,j)==1)
setPixel(i,j,3);
}
}
score++;
rename("Level "+level+" Score "+score);
beep();
}