import java.awt.*; import java.awt.image.ImageObserver; public class Sprite { public static final int REST = 0; public static final int LEFT = 1; public static final int RIGHT = 2; public static final int UP = 3; public static final int DOWN = 4; private Image image = null; private int width = -1, height = -1; private int x = 0, y = 0; private int state = REST; private int tx = 0, ty = 0; protected Level level = null; public Sprite( Image image ) { this( image, 0, 0 ); } public Sprite( Image image, int x, int y ) { this.image = image; this.x = x; this.y = y; } protected int getState() { return state; } public void setPosition( int x, int y ) { this.x = x; this.y = y; this.tx = x; this.ty = y; } public void reset() { state = REST; setPosition( x, y ); } public void goLeft() { if ( state == REST ) { tx = x - Level.ELEMENT_SIZE; if ( level.isSpace( tx, y ) ) state = LEFT; } } public void goRight() { if ( state == REST ) { tx = x + Level.ELEMENT_SIZE; if ( level.isSpace( tx, y ) ) state = RIGHT; } } public void goUp() { if ( state == REST ) { ty = y - Level.ELEMENT_SIZE; if ( level.isSpace( x, ty ) ) state = UP; } } public void goDown() { if ( state == REST ) { ty = y + Level.ELEMENT_SIZE; if ( level.isSpace( x, ty ) ) state = DOWN; } } private int speed = 2; public void tick( Level level ) { this.level = level; switch( state ) { case LEFT: if ( x == tx ) state = REST; else x-=speed; break; case RIGHT: if ( x == tx ) state = REST; else x+=speed; break; case UP: if ( y == ty ) state = REST; else y-=speed; break; case DOWN: if ( y == ty ) state = REST; else y+=speed; break; } } public int getX() { return x; } public int getY() { return y; } private boolean boundsTest( Sprite sprite ) { int s = Level.ELEMENT_SIZE; return x <= sprite.x && sprite.x < (x + s) && y <= sprite.y && sprite.y < (y + s); } public boolean isColliding( Sprite sprite ) { return boundsTest( sprite ) || sprite.boundsTest( this ); } public boolean onTop( Sprite sprite ) { return x == sprite.x && y == sprite.y; } public void paint( Graphics g, ImageObserver o ) { if ( width == -1 || height == -1 ) { width = image.getWidth( o ); height = image.getHeight( o ); } g.drawImage( image, x, y + Level.ELEMENT_SIZE - height, o ); } }