home *** CD-ROM | disk | FTP | other *** search
Java Source | 1999-08-19 | 23.7 KB | 884 lines |
- //
- // Pharaoh
- //
- // Author: Michael Kraus
- // Version: 0.1
- // Date: 1999/6/22
- // JDK Version: 1.0.2
- //
- // Email: michael.kraus@informatik.uni-muenchen.de
- // Homepage: www.informatik.uni-muenchen.de/~_michael.kraus/pharaoh.html
- //
- // This applet is dedicated to PHARAOHS CURSE, the
- // best computer game the world has seen so far.
- //
- // <!--
- // Example HTML code:
- // <APPLET code="Pharaoh.class" width=640 height=400>
- // </APPLET>
- // -->
- //
-
- import java.applet.*;
- import java.awt.*;
- import java.net.*;
- import java.util.*;
-
- class Teleport extends Rectangle
- {
- private Point target;
-
- public Teleport(int x,int y,int width,int height,int targetx,int targety)
- {
- super(x,y,width,height);
- target=new Point(targetx,targety);
- }
-
- public Point getTarget()
- {
- return target;
- }
- }
-
- class Link extends Rectangle
- {
- public static AppletContext appletContext;
- public static Softstick softstick;
-
- private URL url;
- private Image image;
-
- public Link(URL url,Image image,int x,int y)
- {
- super(x,y,image.getWidth(null),image.getHeight(null));
-
- this.url=url;
- this.image=image;
- }
-
- public void follow()
- {
- softstick.reset();
- appletContext.showDocument(url);
- }
-
- public void draw(Graphics graphics)
- {
- graphics.drawImage(image,x,y,null);
- }
- }
-
- class Wall extends Rectangle
- {
- private Color color;
-
- public Wall(int x,int y,int width,int height,Color color)
- {
- super(x,y,width,height);
-
- this.color=color;
- }
-
- public void draw(Graphics graphics)
- {
- graphics.setColor(color);
- graphics.fillRect(x,y,width,height);
- }
- }
-
- class Ladder extends Rectangle
- {
- private Color color;
-
- public Ladder(int x,int y,int width,int height,Color color)
- {
- super(x,y,width,height);
-
- this.color=color;
- }
-
- public void draw(Graphics graphics)
- {
- graphics.setColor(color);
- graphics.fillRect(x,y,width,height);
- }
- }
-
- class Chamber extends Rectangle
- {
- private static final int X=0;
- private static final int Y=1;
- private static final int WIDTH=2;
- private static final int HEIGHT=3;
- private static final int TARGETX=4;
- private static final int TARGETY=5;
-
- private Link link[];
- private Wall wall[];
- private Ladder ladder[];
- private Teleport teleport[];
-
- private Rectangle leftWall[];
- private Rectangle rightWall[];
- private Rectangle topWall[];
-
- private Vector manVector;
- private Vector bulletVector;
-
- public static Applet applet;
-
- public Chamber(Rectangle bounds,String linkUrl[],Image linkImage[],int linkPosition[][],int wallBounds[][],int ladderBounds[][],int teleportData[][])
- {
- super(bounds.x,bounds.y,bounds.width,bounds.height);
-
- createLinks(linkUrl,linkImage,linkPosition);
- createWalls(wallBounds);
- createLadders(ladderBounds);
- createTeleports(teleportData);
-
- manVector=new Vector();
- bulletVector=new Vector();
- }
-
- private void createLinks(String linkUrl[],Image linkImage[],int linkPosition[][])
- {
- int n;
-
- link=new Link[linkUrl.length];
-
- try
- {
- for(n=0;n<link.length;n++)
- link[n]=new Link(new URL(applet.getCodeBase(),linkUrl[n]),linkImage[n],linkPosition[n][X],linkPosition[n][Y]);
- }
- catch(MalformedURLException exception)
- {
- System.err.println(exception);
- }
- }
-
- private void createWalls(int wallBounds[][])
- {
- int n;
-
- wall=new Wall[wallBounds.length];
-
- leftWall=new Rectangle[wall.length];
- rightWall=new Rectangle[wall.length];
- topWall=new Rectangle[wall.length];
-
- for(n=0;n<wall.length;n++)
- {
- wall[n]=new Wall(wallBounds[n][X],wallBounds[n][Y],wallBounds[n][WIDTH],wallBounds[n][HEIGHT],Color.blue);
-
- leftWall[n]=new Rectangle(wallBounds[n][X],wallBounds[n][Y],1,wallBounds[n][HEIGHT]);
- rightWall[n]=new Rectangle(wallBounds[n][X]+wallBounds[n][WIDTH],wallBounds[n][Y],1,wallBounds[n][HEIGHT]);
- topWall[n]=new Rectangle(wallBounds[n][X],wallBounds[n][Y]-1,wallBounds[n][WIDTH],1);
- }
- }
-
- private void createLadders(int ladderBounds[][])
- {
- int n;
-
- ladder=new Ladder[ladderBounds.length];
-
- for(n=0;n<ladder.length;n++)
- ladder[n]=new Ladder(ladderBounds[n][X],ladderBounds[n][Y],ladderBounds[n][WIDTH],ladderBounds[n][HEIGHT],Color.magenta);
- }
-
- private void createTeleports(int teleportData[][])
- {
- int n;
-
- teleport=new Teleport[teleportData.length];
-
- for(n=0;n<teleport.length;n++)
- teleport[n]=new Teleport(teleportData[n][X],teleportData[n][Y],teleportData[n][WIDTH],teleportData[n][HEIGHT],teleportData[n][TARGETX],teleportData[n][TARGETY]);
- }
-
- public void addMan(Man man)
- {
- manVector.addElement(man);
- }
-
- public void removeMan(Man man)
- {
- manVector.removeElement(man);
- }
-
- public void move()
- {
- int n;
-
- for(n=0;n<bulletVector.size();n++)
- moveBullet((Bullet)bulletVector.elementAt(n));
-
- for(n=0;n<manVector.size();n++)
- moveMan((Man)manVector.elementAt(n));
- }
-
- private void moveMan(Man man)
- {
- int n;
- boolean contact;
- boolean ladderContact;
- Bullet bullet;
-
- for(n=0;n<teleport.length;n++)
- {
- if(teleport[n].intersects(man))
- {
- man.x=teleport[n].getTarget().x;
- man.y=teleport[n].getTarget().y;
-
- return;
- }
- }
-
- if(man.mode2())
- {
- for(n=0;n<link.length;n++)
- if(link[n].intersects(man))
- link[n].follow();
- }
-
- contact=false;
- ladderContact=false;
-
- for(n=0;n<ladder.length;n++)
- if(ladder[n].intersects(man))
- contact=ladderContact=true;
-
- for(n=0;n<wall.length;n++)
- {
- if(topWall[n].intersects(man))
- {
- contact=true;
-
- if(!ladderContact)
- man.y=topWall[n].y-man.height+1;
- }
- else if(leftWall[n].intersects(man))
- man.x=leftWall[n].x-man.width;
- else if(rightWall[n].intersects(man))
- man.x=rightWall[n].x+rightWall[n].width;
- }
-
- man.move(contact,ladderContact);
-
- if((bullet=man.shoot())!=null&&bulletVector.isEmpty())
- bulletVector.addElement(bullet);
- }
-
- private void moveBullet(Bullet bullet)
- {
- int n;
-
- for(n=0;n<wall.length;n++)
- if(wall[n].intersects(bullet)||!this.intersects(bullet))
- bullet.kill();
-
- bullet.move();
- }
-
- public void draw(Graphics graphics,Color background)
- {
- int n;
-
- for(n=0;n<link.length;n++)
- link[n].draw(graphics);
-
- for(n=0;n<wall.length;n++)
- wall[n].draw(graphics);
-
- for(n=0;n<ladder.length;n++)
- ladder[n].draw(graphics);
-
- graphics.setXORMode(background);
-
- for(n=0;n<manVector.size();n++)
- ((Man)manVector.elementAt(n)).draw(graphics);
-
- for(n=0;n<bulletVector.size();n++)
- ((Bullet)bulletVector.elementAt(n)).draw(graphics);
- }
-
- public void redraw(Graphics graphics,Color background)
- {
- int n;
- Bullet bullet;
-
- graphics.setXORMode(background);
-
- for(n=0;n<manVector.size();n++)
- ((Man)manVector.elementAt(n)).redraw(graphics);
-
- for(n=0;n<bulletVector.size();n++)
- {
- (bullet=(Bullet)bulletVector.elementAt(n)).redraw(graphics);
-
- if(bullet.isKilled())
- bulletVector.removeElement(bullet);
- }
- }
- }
-
- class Man extends Rectangle
- {
- private static final int WIDTH=28;
- private static final int HEIGHT=26;
-
- private static final int FRAME_FRONT=0;
- private static final int FRAME_JUMPUP=1;
- private static final int FRAME_HANDSUP=2;
- private static final int FRAME_LEFT1=3;
- private static final int FRAME_LEFT2=4;
- private static final int FRAME_LEFT3=5;
- private static final int FRAME_LEFT4=6;
- private static final int FRAME_RIGHT1=7;
- private static final int FRAME_RIGHT2=8;
- private static final int FRAME_RIGHT3=9;
- private static final int FRAME_RIGHT4=10;
- private static final int FRAME_JUMPLEFT1=11;
- private static final int FRAME_JUMPLEFT2=12;
- private static final int FRAME_JUMPLEFT3=13;
- private static final int FRAME_JUMPLEFT4=14;
- private static final int FRAME_JUMPRIGHT1=15;
- private static final int FRAME_JUMPRIGHT2=16;
- private static final int FRAME_JUMPRIGHT3=17;
- private static final int FRAME_JUMPRIGHT4=18;
- private static final int FRAME_UP1=19;
- private static final int FRAME_UP2=20;
- private static final int FRAME_UP3=21;
-
- private static final int NEXTFRAME[]=
- {
- FRAME_JUMPUP,FRAME_FRONT,
- FRAME_HANDSUP,
- FRAME_LEFT2,FRAME_LEFT3,FRAME_LEFT4,FRAME_LEFT1,
- FRAME_RIGHT2,FRAME_RIGHT3,FRAME_RIGHT4,FRAME_RIGHT1,
- FRAME_JUMPLEFT2,FRAME_JUMPLEFT3,FRAME_JUMPLEFT4,FRAME_JUMPLEFT1,
- FRAME_JUMPRIGHT2,FRAME_JUMPRIGHT3,FRAME_JUMPRIGHT4,FRAME_JUMPRIGHT1,
- FRAME_UP2,FRAME_UP3,FRAME_UP1
- };
-
- private static final int IMAGE_FRONT=0;
- private static final int IMAGE_HANDSUP=1;
- private static final int IMAGE_JUMPUP=2;
- private static final int IMAGE_LEFT1=3;
- private static final int IMAGE_LEFT2=4;
- private static final int IMAGE_LEFT3=5;
- private static final int IMAGE_RIGHT1=6;
- private static final int IMAGE_RIGHT2=7;
- private static final int IMAGE_RIGHT3=8;
- private static final int IMAGE_UP1=9;
- private static final int IMAGE_UP2=10;
- private static final int IMAGE_UP3=11;
-
- private static final int IMAGE[]=
- {
- IMAGE_FRONT,IMAGE_JUMPUP,
- IMAGE_HANDSUP,
- IMAGE_LEFT1,IMAGE_LEFT2,IMAGE_LEFT3,IMAGE_LEFT2,
- IMAGE_RIGHT1,IMAGE_RIGHT2,IMAGE_RIGHT3,IMAGE_RIGHT2,
- IMAGE_LEFT1,IMAGE_LEFT2,IMAGE_LEFT3,IMAGE_LEFT2,
- IMAGE_RIGHT1,IMAGE_RIGHT2,IMAGE_RIGHT3,IMAGE_RIGHT2,
- IMAGE_UP1,IMAGE_UP2,IMAGE_UP3
- };
-
- private static final int X=0;
- private static final int Y=1;
-
- private static final int OFFSET[][]=
- {
- {0,0},{0,0},
- {0,0},
- {8,0},{4,0},{0,0},{4,0},
- {4,0},{4,0},{-4,0},{4,0},
- {8,0},{4,0},{0,0},{4,0},
- {4,0},{4,0},{-4,0},{4,0},
- {4,0},{0,0},{-4,0}
- };
-
- private static final int FRONTDELAY=64;
- private static final int JUMPUPDELAY=4;
- private static final int HANDSUPDELAY=1;
- private static final int WALKDELAY=2;
- private static final int JUMPDELAY1=16;
- private static final int JUMPDELAY2=2;
- private static final int CLIMBDELAY=4;
-
- private static final int DELAY[]=
- {
- FRONTDELAY,JUMPUPDELAY,
- HANDSUPDELAY,
- WALKDELAY,WALKDELAY,WALKDELAY,WALKDELAY,
- WALKDELAY,WALKDELAY,WALKDELAY,WALKDELAY,
- JUMPDELAY2,JUMPDELAY2,JUMPDELAY1,JUMPDELAY2,
- JUMPDELAY2,JUMPDELAY2,JUMPDELAY1,JUMPDELAY2,
- CLIMBDELAY,CLIMBDELAY,CLIMBDELAY
- };
-
- private static final int VELOCITY=4;
-
- private static final int MOVEMENT[][]=
- {
- {0,0},{0,-VELOCITY},
- {0,0},
- {-VELOCITY,0},{-VELOCITY,0},{-VELOCITY,0},{-VELOCITY,0},
- {VELOCITY,0},{VELOCITY,0},{VELOCITY,0},{VELOCITY,0},
- {-VELOCITY,0},{-VELOCITY,0},{-VELOCITY,-VELOCITY},{-VELOCITY,0},
- {VELOCITY,0},{VELOCITY,0},{VELOCITY,-VELOCITY},{VELOCITY,0},
- {0,-VELOCITY},{0,-VELOCITY},{0,-VELOCITY}
- };
-
- private static final int FALLING_Y=4;
-
- public static Image image[];
-
- private int frame;
- private int delay;
-
- private int undrawFrame;
- private Point undrawLocation;
-
- private int previousDirection;
- private boolean previousContact;
-
- private Softstick softstick;
-
- public Man(int x,int y,Softstick softstick)
- {
- super(x,y,WIDTH,HEIGHT);
-
- setFrame(FRAME_FRONT);
-
- undrawLocation=new Point(0,0);
-
- previousDirection=Softstick.CENTERED;
- previousContact=false;
-
- this.softstick=softstick;
- }
-
- private void setFrame(int frame)
- {
- this.frame=frame;
- delay=0;
- }
-
- public boolean mode2()
- {
- return frame==FRAME_FRONT&&softstick.getFire();
- }
-
- private void moveFrame(boolean ladderContact)
- {
- int direction;
-
- if((direction=softstick.getDirection())==previousDirection)
- {
- if(++delay==DELAY[frame])
- setFrame(NEXTFRAME[frame]);
- }
- else if(direction==Softstick.LEFT||direction==Softstick.LEFTDOWN)
- setFrame(FRAME_LEFT1);
- else if(direction==Softstick.RIGHT||direction==Softstick.RIGHTDOWN)
- setFrame(FRAME_RIGHT1);
- else if(direction==Softstick.UP)
- {
- if(ladderContact)
- setFrame(FRAME_UP1);
- else
- setFrame(FRAME_HANDSUP);
- }
- else if(direction==Softstick.LEFTUP)
- setFrame(FRAME_JUMPLEFT1);
- else if(direction==Softstick.RIGHTUP)
- setFrame(FRAME_JUMPRIGHT1);
- else
- setFrame(FRAME_FRONT);
-
- previousDirection=direction;
- }
-
- public void move(boolean contact,boolean ladderContact)
- {
- moveFrame(ladderContact);
-
- if((contact=contact||DELAY[frame]==JUMPDELAY1&&previousContact))
- translate(MOVEMENT[frame][X],delay==0?MOVEMENT[frame][Y]:0);
- else
- translate(0,FALLING_Y);
-
- previousContact=contact;
- }
-
- public Bullet shoot()
- {
- Bullet bullet;
-
- bullet=null;
-
- if(softstick.getFire())
- {
- if((previousDirection&Softstick.LEFTMASK)!=0)
- bullet=new Bullet(x,y+height/2,Softstick.LEFT);
- else if((previousDirection&Softstick.RIGHTMASK)!=0)
- bullet=new Bullet(x+width,y+height/2,Softstick.RIGHT);
- }
-
- return bullet;
- }
-
- public void draw(Graphics graphics)
- {
- graphics.drawImage(image[IMAGE[frame]],x+OFFSET[frame][X],y+OFFSET[frame][Y],null);
-
- undrawLocation.move(x+OFFSET[frame][X],y+OFFSET[frame][Y]);
- undrawFrame=frame;
- }
-
- public void redraw(Graphics graphics)
- {
- if(x+OFFSET[frame][X]!=undrawLocation.x||y+OFFSET[frame][Y]!=undrawLocation.y||frame!=undrawFrame)
- {
- graphics.drawImage(image[IMAGE[undrawFrame]],undrawLocation.x,undrawLocation.y,null);
- draw(graphics);
- }
- }
- }
-
- class Bullet extends Rectangle
- {
- public static Image image;
-
- private static final int VELOCITY=32;
-
- private int xvelocity;
- private Point undrawLocation;
-
- private static final int NODRAW=0;
- private static final int DRAW=1;
- private static final int UNDRAW=2;
-
- private int drawState;
-
- public Bullet(int x,int y,int direction)
- {
- super(x,y,image.getWidth(null),image.getHeight(null));
- translate(0,-height/2);
-
- if(direction==Softstick.LEFT)
- {
- translate(-width,0);
- xvelocity=-VELOCITY;
- }
- else if(direction==Softstick.RIGHT)
- {
- xvelocity=VELOCITY;
- }
-
- undrawLocation=new Point(0,0);
- drawState=DRAW;
- }
-
- public void move()
- {
- translate(xvelocity,0);
- }
-
- public void draw(Graphics graphics)
- {
- graphics.drawImage(image,x,y,null);
-
- undrawLocation.move(x,y);
- drawState|=UNDRAW;
- }
-
- public void redraw(Graphics graphics)
- {
- if((drawState&UNDRAW)!=0)
- graphics.drawImage(image,undrawLocation.x,undrawLocation.y,null);
-
- if((drawState&DRAW)!=0)
- draw(graphics);
- }
-
- public void kill()
- {
- drawState&=~DRAW;
- }
-
- public boolean isKilled()
- {
- return (drawState&DRAW)==0;
- }
- }
-
- public class Pharaoh extends Applet implements Runnable
- {
- private static final int DELAY=50;
-
- private static final String manimage[]=
- {
- "images/man/front.gif",
- "images/man/handsup.gif",
- "images/man/jumpup.gif",
- "images/man/left1.gif",
- "images/man/left2.gif",
- "images/man/left3.gif",
- "images/man/right1.gif",
- "images/man/right2.gif",
- "images/man/right3.gif",
- "images/man/up1.gif",
- "images/man/up2.gif",
- "images/man/up3.gif"
- };
-
- private static final String bulletimage="images/bullet.gif";
-
- private static final String linkurl[]=
- {
- "../double.html",
- "../kubik.html",
- "../uhr.html",
- "../countdown.html",
- "../pharaoh.html",
- "../webcom.html",
- "../contents.html",
- "../introduction.html",
- "../photos.html",
- "../links.html",
- "../curriculum_vitae.html",
- "../list_of_subjects.html",
- "../contact.html"
- };
-
- private static final String linkimage[]=
- {
- "images/links/double_link.gif",
- "images/links/kubik_link.gif",
- "images/links/uhr_link.gif",
- "images/links/countdown_link.gif",
- "images/links/pharaoh_link.gif",
- "images/links/webcom_link.gif",
- "images/links/contents_link.gif",
- "images/links/introduction_link.gif",
- "images/links/photos_link.gif",
- "images/links/links_link.gif",
- "images/links/curriculum_vitae_link.gif",
- "images/links/list_of_subjects_link.gif",
- "images/links/contact_link.gif"
- };
-
- private static final int WIDTH=640;
- private static final int HEIGHT=400;
- private static final int WALLSIZE=10;
- private static final int LADDERWIDTH=5;
- private static final int STAIRSWIDTH=100;
- private static final int PLATEAUWIDTH=100;
- private static final int STAIRSSTEP=15;
- private static final int CONTENTSWIDTH=68;
- private static final int INTRODUCTIONWIDTH=96;
- private static final int PHOTOSWIDTH=51;
- private static final int LINKSWIDTH=38;
- private static final int CONTACTWIDTH=60;
- private static final int LISTWIDTH=117;
- private static final int CVWIDTH=124;
- private static final int TEXTHEIGHT=15;
- private static final int RIGHTBLOCKWIDTH=200;
- private static final int PERSONALBLOCKHEIGHT=180;
- private static final int FLOORHEIGHT=40;
- private static final int SHAFTWIDTH=40;
- private static final int DOUBLEWIDTH=128;
- private static final int DOUBLEHEIGHT=32;
- private static final int KUBIKWIDTH=111;
- private static final int KUBIKHEIGHT=38;
- private static final int UHRWIDTH=49;
- private static final int UHRHEIGHT=49;
- private static final int COUNTDOWNWIDTH=105;
- private static final int COUNTDOWNHEIGHT=36;
- private static final int PHARAOHWIDTH=112;
- private static final int PHARAOHHEIGHT=34;
- private static final int WEBCOMWIDTH=70;
- private static final int WEBCOMHEIGHT=22;
- private static final int SOFTWAREPLATEAUWIDTH=80;
-
- private static final int linkposition[][]=
- {
- // software block
-
- {WALLSIZE+SHAFTWIDTH+SOFTWAREPLATEAUWIDTH+SHAFTWIDTH+SOFTWAREPLATEAUWIDTH/2-DOUBLEWIDTH/2,WALLSIZE+2*(HEIGHT-2*WALLSIZE)/7-DOUBLEHEIGHT-WALLSIZE/2},
- {WALLSIZE+SHAFTWIDTH+SOFTWAREPLATEAUWIDTH/2-KUBIKWIDTH/2,WALLSIZE+3*(HEIGHT-2*WALLSIZE)/7-KUBIKHEIGHT-WALLSIZE/2},
- {WALLSIZE+SHAFTWIDTH+SOFTWAREPLATEAUWIDTH+SHAFTWIDTH+SOFTWAREPLATEAUWIDTH/2-UHRWIDTH/2,WALLSIZE+4*(HEIGHT-2*WALLSIZE)/7-UHRHEIGHT-WALLSIZE/2},
- {WALLSIZE+SHAFTWIDTH+SOFTWAREPLATEAUWIDTH/2-COUNTDOWNWIDTH/2,WALLSIZE+5*(HEIGHT-2*WALLSIZE)/7-COUNTDOWNHEIGHT-WALLSIZE/2},
- {WALLSIZE+SHAFTWIDTH+SOFTWAREPLATEAUWIDTH+SHAFTWIDTH+SOFTWAREPLATEAUWIDTH/2-PHARAOHWIDTH/2,WALLSIZE+6*(HEIGHT-2*WALLSIZE)/7-PHARAOHHEIGHT-WALLSIZE/2},
- {WALLSIZE+SHAFTWIDTH+SOFTWAREPLATEAUWIDTH/2-WEBCOMWIDTH/2,WALLSIZE+7*(HEIGHT-2*WALLSIZE)/7-WEBCOMHEIGHT-WALLSIZE/2},
-
- // contents
-
- {WIDTH/2-CONTENTSWIDTH/2,WALLSIZE+FLOORHEIGHT-TEXTHEIGHT},
-
- // personal block
-
- {WIDTH-WALLSIZE-RIGHTBLOCKWIDTH/2-WALLSIZE/2-SHAFTWIDTH/2-INTRODUCTIONWIDTH/2,HEIGHT-WALLSIZE-PERSONALBLOCKHEIGHT+(PERSONALBLOCKHEIGHT-FLOORHEIGHT)/6},
- {WIDTH-WALLSIZE-RIGHTBLOCKWIDTH/2-WALLSIZE/2-SHAFTWIDTH/2-PHOTOSWIDTH/2,HEIGHT-WALLSIZE-PERSONALBLOCKHEIGHT+3*(PERSONALBLOCKHEIGHT-FLOORHEIGHT)/6},
- {WIDTH-WALLSIZE-RIGHTBLOCKWIDTH/2-WALLSIZE/2-SHAFTWIDTH/2-LINKSWIDTH/2,HEIGHT-WALLSIZE-PERSONALBLOCKHEIGHT+5*(PERSONALBLOCKHEIGHT-FLOORHEIGHT)/6},
-
- // official block
-
- {WIDTH-WALLSIZE-CVWIDTH-WALLSIZE/2,HEIGHT-5*WALLSIZE-PERSONALBLOCKHEIGHT-3*FLOORHEIGHT-TEXTHEIGHT},
- {WIDTH-WALLSIZE-RIGHTBLOCKWIDTH+WALLSIZE/2,HEIGHT-4*WALLSIZE-PERSONALBLOCKHEIGHT-2*FLOORHEIGHT-TEXTHEIGHT},
- {WIDTH-WALLSIZE-CONTACTWIDTH-WALLSIZE/2,HEIGHT-3*WALLSIZE-PERSONALBLOCKHEIGHT-FLOORHEIGHT-TEXTHEIGHT}
- };
-
- private static final int wallbounds[][]=
- {
- // bounding rectangle
-
- {0,0,WALLSIZE,HEIGHT-WALLSIZE-FLOORHEIGHT},
- {0,HEIGHT-WALLSIZE,WIDTH-WALLSIZE-RIGHTBLOCKWIDTH/2-WALLSIZE/2-SHAFTWIDTH,WALLSIZE},
- {WIDTH-WALLSIZE-RIGHTBLOCKWIDTH/2-WALLSIZE/2,HEIGHT-WALLSIZE,WALLSIZE+RIGHTBLOCKWIDTH/2+WALLSIZE/2,WALLSIZE},
- {WALLSIZE,0,WIDTH-WALLSIZE,WALLSIZE},
- {WIDTH-WALLSIZE,WALLSIZE+FLOORHEIGHT,WALLSIZE,HEIGHT-2*WALLSIZE-FLOORHEIGHT},
-
- // stairs & contents plateau
-
- {WIDTH/2-STAIRSWIDTH/2,HEIGHT-2*WALLSIZE,STAIRSWIDTH,WALLSIZE},
- {WIDTH/2-STAIRSWIDTH/2+STAIRSSTEP,HEIGHT-3*WALLSIZE,STAIRSWIDTH-2*STAIRSSTEP,WALLSIZE},
- {WIDTH/2-STAIRSWIDTH/2+2*STAIRSSTEP,HEIGHT-4*WALLSIZE,STAIRSWIDTH-4*STAIRSSTEP,WALLSIZE},
- {WIDTH/2-PLATEAUWIDTH/2,WALLSIZE+FLOORHEIGHT,PLATEAUWIDTH,WALLSIZE},
- {WIDTH/2-PLATEAUWIDTH/2-2*WALLSIZE,2*WALLSIZE,WALLSIZE,FLOORHEIGHT-WALLSIZE},
-
- // personal block
-
- {WIDTH-2*WALLSIZE-RIGHTBLOCKWIDTH,WALLSIZE,WALLSIZE,HEIGHT-2*WALLSIZE-FLOORHEIGHT},
- {WIDTH-2*WALLSIZE-SHAFTWIDTH,HEIGHT-WALLSIZE-PERSONALBLOCKHEIGHT,WALLSIZE,PERSONALBLOCKHEIGHT-FLOORHEIGHT},
- {WIDTH-WALLSIZE-WALLSIZE/2-RIGHTBLOCKWIDTH/2,HEIGHT-2*WALLSIZE-PERSONALBLOCKHEIGHT,RIGHTBLOCKWIDTH/2+WALLSIZE/2,WALLSIZE},
-
- // official block
-
- {WIDTH-WALLSIZE-RIGHTBLOCKWIDTH,HEIGHT-2*WALLSIZE-PERSONALBLOCKHEIGHT,RIGHTBLOCKWIDTH/2-WALLSIZE/2-SHAFTWIDTH,WALLSIZE},
- {WIDTH-WALLSIZE-RIGHTBLOCKWIDTH+SHAFTWIDTH,HEIGHT-3*WALLSIZE-PERSONALBLOCKHEIGHT-FLOORHEIGHT,RIGHTBLOCKWIDTH-SHAFTWIDTH,WALLSIZE},
- {WIDTH-WALLSIZE-RIGHTBLOCKWIDTH,HEIGHT-4*WALLSIZE-PERSONALBLOCKHEIGHT-2*FLOORHEIGHT,RIGHTBLOCKWIDTH-SHAFTWIDTH,WALLSIZE},
- {WIDTH-WALLSIZE-RIGHTBLOCKWIDTH+SHAFTWIDTH,HEIGHT-5*WALLSIZE-PERSONALBLOCKHEIGHT-3*FLOORHEIGHT,RIGHTBLOCKWIDTH-SHAFTWIDTH,WALLSIZE},
-
- // software block
-
- {WALLSIZE+SHAFTWIDTH,WALLSIZE+(HEIGHT-2*WALLSIZE)/7,SOFTWAREPLATEAUWIDTH,WALLSIZE},
- {WALLSIZE+SHAFTWIDTH+SOFTWAREPLATEAUWIDTH+SHAFTWIDTH,WALLSIZE+2*(HEIGHT-2*WALLSIZE)/7,SOFTWAREPLATEAUWIDTH,WALLSIZE},
- {WALLSIZE+SHAFTWIDTH,WALLSIZE+3*(HEIGHT-2*WALLSIZE)/7,SOFTWAREPLATEAUWIDTH,WALLSIZE},
- {WALLSIZE+SHAFTWIDTH+SOFTWAREPLATEAUWIDTH+SHAFTWIDTH,WALLSIZE+4*(HEIGHT-2*WALLSIZE)/7,SOFTWAREPLATEAUWIDTH,WALLSIZE},
- {WALLSIZE+SHAFTWIDTH,WALLSIZE+5*(HEIGHT-2*WALLSIZE)/7,SOFTWAREPLATEAUWIDTH,WALLSIZE},
- {WALLSIZE+SHAFTWIDTH+SOFTWAREPLATEAUWIDTH+SHAFTWIDTH,WALLSIZE+6*(HEIGHT-2*WALLSIZE)/7,SOFTWAREPLATEAUWIDTH,WALLSIZE}
- };
-
- private static final int ladderbounds[][]=
- {
- // contents plateau
-
- {WIDTH/2-LADDERWIDTH/2,2*WALLSIZE+FLOORHEIGHT,LADDERWIDTH,HEIGHT-6*WALLSIZE-FLOORHEIGHT},
-
- // personal block
-
- {WIDTH-WALLSIZE-SHAFTWIDTH/2-LADDERWIDTH/2,HEIGHT-WALLSIZE-PERSONALBLOCKHEIGHT,LADDERWIDTH,PERSONALBLOCKHEIGHT},
-
- // official block
-
- {WIDTH-WALLSIZE-SHAFTWIDTH-SHAFTWIDTH/2-LADDERWIDTH/2,HEIGHT-2*WALLSIZE-PERSONALBLOCKHEIGHT-FLOORHEIGHT,LADDERWIDTH,FLOORHEIGHT},
- {WIDTH-WALLSIZE-RIGHTBLOCKWIDTH+SHAFTWIDTH+SHAFTWIDTH/2-LADDERWIDTH/2,HEIGHT-3*WALLSIZE-PERSONALBLOCKHEIGHT-2*FLOORHEIGHT,LADDERWIDTH,FLOORHEIGHT},
- {WIDTH-WALLSIZE-SHAFTWIDTH-SHAFTWIDTH/2-LADDERWIDTH/2,HEIGHT-4*WALLSIZE-PERSONALBLOCKHEIGHT-3*FLOORHEIGHT,LADDERWIDTH,FLOORHEIGHT},
-
- // software block
-
- {WALLSIZE+SHAFTWIDTH+SOFTWAREPLATEAUWIDTH+SHAFTWIDTH+SOFTWAREPLATEAUWIDTH/2-LADDERWIDTH/2,2*WALLSIZE+6*(HEIGHT-2*WALLSIZE)/7,LADDERWIDTH,HEIGHT-3*WALLSIZE-6*(HEIGHT-2*WALLSIZE)/7}
- };
-
- private static final int teleportData[][]=
- {
- {WIDTH-WALLSIZE-RIGHTBLOCKWIDTH/2-WALLSIZE/2-SHAFTWIDTH,HEIGHT,SHAFTWIDTH,FLOORHEIGHT,WALLSIZE+SHAFTWIDTH/2+SOFTWAREPLATEAUWIDTH/2,WALLSIZE},
- {-SHAFTWIDTH,HEIGHT-WALLSIZE-FLOORHEIGHT,SHAFTWIDTH,FLOORHEIGHT,WIDTH-SHAFTWIDTH,WALLSIZE},
- {WIDTH,WALLSIZE,SHAFTWIDTH,FLOORHEIGHT,0,HEIGHT-WALLSIZE-FLOORHEIGHT}
- };
-
- private ImageProvider imageprovider;
- private Chamber chamber;
- private Softstick softstick;
- private Thread thread;
-
- public void init()
- {
- imageprovider=new ImageProvider(this);
- Chamber.applet=this;
-
- chamber=new Chamber(bounds(),linkurl,imageprovider.getArray(linkimage),linkposition,wallbounds,ladderbounds,teleportData);
- softstick=new Softstick();
- chamber.addMan(new Man(teleportData[0][4],teleportData[0][5],softstick));
- thread=null;
-
- Link.appletContext=getAppletContext();
- Link.softstick=softstick;
- Man.image=imageprovider.getArray(manimage);
- Bullet.image=imageprovider.get(bulletimage);
-
- setBackground(Color.black);
- }
-
- public void start()
- {
- if(thread==null)
- {
- thread=new Thread(this);
- thread.start();
- }
- }
-
- public void stop()
- {
- if(thread!=null)
- {
- thread.stop();
- thread=null;
- }
- }
-
- public boolean handleEvent(Event event)
- {
- return softstick.handleEvent(event);
- }
-
- public void paint(Graphics graphics)
- {
- chamber.draw(graphics,getBackground());
- }
-
- public void update(Graphics graphics)
- {
- chamber.redraw(graphics,getBackground());
- }
-
- public void run()
- {
- requestFocus();
-
- for(;;)
- {
- try
- {
- Thread.sleep(DELAY);
- }
- catch(InterruptedException exception)
- {
- System.err.println(exception);
- }
-
- chamber.move();
-
- repaint();
- }
- }
- }
-
-