import java.applet.Applet; import java.awt.*; import java.awt.event.*; import com.genuts.gameui.*; /** * Display moving balls and scrolling playfield with all tiles of the example.
* A special wrapper follow the selected ball.
* The size of each tile is automaticaly computed. */ public class FollowPathFinder extends Applet implements MouseListener { private PlayField playfield = null; private Sprite currentSprite; private Image ballImage = null; private Image redBallImage = null; public void init() { setLayout(null); // Loading images ballImage = getImage(getClass().getResource("anim-split.gif")); redBallImage = getImage(getClass().getResource("anim-split-red.gif")); Image tileImage = getImage(getClass().getResource("tile.gif")); MediaTracker tracker = new MediaTracker(this); tracker.addImage(ballImage, 0); tracker.addImage(redBallImage, 0); tracker.addImage(tileImage, 0); try { tracker.waitForID(0); } catch (InterruptedException e) { System.out.println("Loading interrupted"); } // Gets the size of a tile Tiles.tileSize = tileImage.getWidth(null); // Creates the playfield SpriteCollisionManager collisionManager = new SpriteCollisionManager(10); playfield = new PlayField(collisionManager, 10*Tiles.tileSize, 5*Tiles.tileSize); playfield.setPreferredSize(Tiles.tiles[0].length*Tiles.tileSize, Tiles.tiles.length*Tiles.tileSize); playfield.setBackground(Color.white); // Disposes tiles from class Tiles for (int y = 0; y < Tiles.tiles.length; y++) { for (int x = 0; x < Tiles.tiles[y].length; x++) { if (Tiles.tiles[y][x]) { Sprite tile = new Sprite(tileImage); tile.setPosition(x*Tiles.tileSize, y*Tiles.tileSize); playfield.addSprite(tile); } } } // Disposes 20 balls for (int cpt = 0; cpt < 19; cpt++) { AnimatedSprite anim = new AnimatedSprite(ballImage, 8, 1, 2); anim.setCurrentPictureNumber((int) (Math.random()*8)); MovingBall moving = new MovingBall(anim, 1, 1); if ((int) (Math.random()*2) == 0) { moving.setClockWise(false); } playfield.addSprite(moving); while (!moving.setPosition((int) (Math.random()*playfield.getPreferredWidth()), (int) (Math.random()*playfield.getPreferredHeight()))); } // Adds a ball with the follow wrapper AnimatedSprite anim = new AnimatedSprite(redBallImage, 8, 1, 2); anim.setCurrentPictureNumber((int) (Math.random()*8)); MovingBall moving = new MovingBall(new FollowWrapper(anim), 1, 1); if ((int) (Math.random()*2) == 0) { moving.setClockWise(false); } playfield.addSprite(moving); while (!moving.setPosition((int) (Math.random()*playfield.getPreferredWidth()), (int) (Math.random()*playfield.getPreferredHeight()))); currentSprite = moving; // Displays the playfield add(playfield); setSize(10*Tiles.tileSize, 5*Tiles.tileSize); // Adds mouse listeners playfield.addMouseListener(this); } public void start() { // Activate the playfield playfield.setPause(false); } public void stop() { if (playfield != null) { playfield.stop(); } } //////////////////////////////////////////////////// ///////// MouseListener ////////////////////////// //////////////////////////////////////////////////// public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { Sprite sprite = ((SpriteCollisionManager) playfield.getCollisionManager()).getSpriteAt(playfield.getXOffset() + e.getX(), playfield.getYOffset() + e.getY()); if ((sprite != null) && (sprite != currentSprite)) { Sprite actionSprite = sprite.getFinalActionSprite(); if (actionSprite instanceof AnimatedSprite) { playfield.removeSprite(currentSprite); playfield.removeSprite(sprite); FollowWrapper followWrapper = (FollowWrapper) currentSprite.getActionSprite(); ((SpriteWrapper) currentSprite).setActionSprite(followWrapper.getActionSprite()); ((AnimatedSprite) currentSprite.getFinalActionSprite()).setSequence(ballImage, 8, 1); ((SpriteWrapper) followWrapper).setActionSprite(sprite.getActionSprite()); ((SpriteWrapper) sprite).setActionSprite(followWrapper); ((AnimatedSprite) actionSprite).setSequence(redBallImage, 8, 1); playfield.addSprite(currentSprite); playfield.addSprite(sprite); currentSprite = sprite; } } } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } }