import java.applet.*; import java.awt.*; import java.awt.image.*; public class Maze extends Applet { final int BGTILE=0; final int HTILE=1; final int VTILE=2; final int SQTILE=3; final int HEROTILE=4; final int BADTILE=5; final int TILECOUNT=6; final int TILEWIDTH=20; final int TILEHEIGHT=20; final int TILESACROSS=16; final int TILESDOWN=10; Image tileImage[]=new Image[8]; final char tile[][] = { { /* BGTILE */ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, },{ /* HTILE */ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,3,3,3, 3,3,3,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,3,3,3, 3,3,3,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,3,3,3, 3,3,3,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, },{ /* VTILE */ 0,0,0,0,0, 3,3,3,3,3, 3,3,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,3,3, 3,3,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,3,3, 3,3,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,0,0, 0,0,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,0,0, 0,0,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,0,0, 0,0,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,0,0, 0,0,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,0,0, 0,0,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,0,0, 0,0,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,0,0, 0,0,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,0,0, 0,0,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,0,0, 0,0,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,0,0, 0,0,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,0,0, 0,0,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,0,0, 0,0,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,0,0, 0,0,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,0,0, 0,0,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,3,3, 3,3,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,3,3, 3,3,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,3,3, 3,3,3,3,3, 0,0,0,0,0, },{ /* SQTILE */ 0,0,0,0,0, 3,3,3,3,3, 3,3,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,3,3, 3,3,3,3,3, 0,0,0,0,0, 0,0,0,0,3, 3,3,3,3,3, 3,3,3,3,3, 3,0,0,0,0, 0,0,0,0,3, 3,3,3,3,3, 3,3,3,3,3, 3,0,0,0,0, 0,0,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,0,0, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 0,0,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,0,0, 0,0,0,0,3, 3,3,3,3,3, 3,3,3,3,3, 3,0,0,0,0, 0,0,0,0,3, 3,3,3,3,3, 3,3,3,3,3, 3,0,0,0,0, 0,0,0,0,0, 3,3,3,3,3, 3,3,3,3,3, 0,0,0,0,0, 0,0,0,0,0, 3,3,3,3,3, 3,3,3,3,3, 0,0,0,0,0, },{ /* HEROTILE */ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,5,5,5, 5,5,5,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,5,5,5,5, 5,5,5,5,0, 0,0,0,0,0, 0,0,0,0,0, 5,5,5,5,5, 5,5,5,5,5, 0,0,0,0,0, 0,0,0,0,5, 5,5,5,5,5, 5,5,5,5,5, 5,0,0,0,0, 0,0,0,5,5, 7,7,5,5,5, 5,7,7,5,5, 5,5,0,0,0, 0,0,5,5,5, 7,7,7,5,5, 5,7,7,7,5, 5,5,5,0,0, 0,0,5,5,5, 5,5,5,5,5, 5,5,5,5,5, 5,5,5,0,0, 0,0,5,5,5, 5,5,5,5,5, 5,5,5,5,5, 5,5,5,0,0, 0,0,5,5,5, 5,5,5,5,5, 5,5,5,5,5, 5,5,5,0,0, 0,0,5,5,5, 5,5,5,5,5, 5,5,5,5,5, 5,5,5,0,0, 0,0,5,5,5, 5,5,5,5,5, 5,5,5,5,5, 5,5,5,0,0, 0,0,0,5,5, 7,7,5,5,5, 5,5,5,7,7, 5,5,0,0,0, 0,0,0,0,5, 5,7,7,7,7, 7,7,7,7,5, 5,0,0,0,0, 0,0,0,0,0, 5,5,7,7,7, 7,7,7,5,5, 0,0,0,0,0, 0,0,0,0,0, 0,5,5,5,5, 5,5,5,5,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,5,5,5, 5,5,5,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, },{ /* BADGTILE */ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,6,6,6, 6,6,6,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,6,6,6,6, 6,6,6,6,0, 0,0,0,0,0, 0,0,0,0,0, 6,6,6,6,6, 6,6,6,6,6, 0,0,0,0,0, 0,0,0,0,6, 6,6,6,6,6, 6,6,6,6,6, 6,0,0,0,0, 0,0,0,6,6, 7,7,6,6,6, 6,7,7,6,6, 6,6,0,0,0, 0,0,6,6,6, 7,7,7,6,6, 6,7,7,7,6, 6,6,6,0,0, 0,0,6,6,6, 6,6,6,6,6, 6,6,6,6,6, 6,6,6,0,0, 0,0,6,6,6, 6,6,6,6,6, 6,6,6,6,6, 6,6,6,0,0, 0,0,6,6,6, 6,6,6,6,6, 6,6,6,6,6, 6,6,6,0,0, 0,0,6,6,6, 6,6,6,6,6, 6,6,6,6,6, 6,6,6,0,0, 0,0,6,6,6, 6,6,7,7,7, 7,7,7,6,6, 6,6,6,0,0, 0,0,0,6,6, 7,7,7,7,7, 7,7,7,7,7, 6,6,0,0,0, 0,0,0,0,6, 6,7,7,7,7, 7,7,7,7,6, 6,0,0,0,0, 0,0,0,0,0, 6,6,6,6,6, 6,6,6,6,6, 0,0,0,0,0, 0,0,0,0,0, 0,6,6,6,6, 6,6,6,6,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,6,6,6, 6,6,6,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, } }; final int BACK=0; final int HORI=1; final int VERT=2; final int SQUA=3; final int HERO=4; final int BADG=5; final String maze1[]={ "+--------------+", "| |", "| +---+ +----+ |", "| | | |", "| | +------+ | |", "| + | | + |", "| | +--+ | |", "| +-+ | +-+ |", "| |", "+--------------+", }; char maze[] = { SQUA,HORI,HORI,HORI,HORI,HORI,HORI,HORI,HORI,HORI,HORI,HORI,HORI,HORI,HORI,SQUA, VERT,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,VERT, VERT,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,VERT, VERT,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,VERT, VERT,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,VERT, VERT,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,VERT, VERT,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,VERT, VERT,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,VERT, VERT,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,BACK,VERT, SQUA,HORI,HORI,HORI,HORI,HORI,HORI,HORI,HORI,HORI,HORI,HORI,HORI,HORI,HORI,SQUA, }; int herox=-1,heroy=-1,badgx=-1,badgy=-1; void resetmaze() { int i,j; for(j=0;j=0 y>=0 x=0 && x=0 && y=0 && x=0 && y ",dist,x,y); if(distmap[badgy-1][badgx]>max && distmap[badgy-1][badgx]!=-1) { x=badgx; y=badgy-1; max=distmap[y][x]; // printf("down (%d,%d) %d : ",x,y,max); } if(distmap[badgy+1][badgx]>max && distmap[badgy+1][badgx]!=-1) { x=badgx; y=badgy+1; max=distmap[y][x]; // printf("up (%d,%d) %d : ",x,y,max); } if(distmap[badgy][badgx-1]>max && distmap[badgy][badgx-1]!=-1) { x=badgx-1; y=badgy; max=distmap[y][x]; // printf("left (%d,%d) %d : ",x,y,max); } if(distmap[badgy][badgx+1]>max && distmap[badgy][badgx+1]!=-1) { x=badgx+1; y=badgy; max=distmap[y][x]; // printf("right (%d,%d) %d : ",x,y,max); } // printf("\n"); badgx=x; badgy=y; break; } } public void setState(int mode) { if(mode>=0 && mode<=5) badgstate=mode; } int oldx,oldy; private void nextState(int ch) { if(ch==-1 || ch==27 || ch=='q') resetmaze(); if(ch>='0' && ch<='5') badgstate=ch-'0'; oldx=herox; oldy=heroy; if(herox>0 && (ch=='h' || ch==Event.LEFT)) herox--; if(heroy>0 && (ch=='k' || ch==Event.UP)) heroy--; if(herox