scg/ch01/spacesprites/Meteor

From FANG

Jump to: navigation, search

001 package scg.ch01.spacesprites;
002 
003 import java.awt.Color;
004 
005 import fang2.attributes.Vector2D;
006 import fang2.core.Game;
007 import fang2.core.Sprite;
008 import fang2.core.Transformer;
009 import fang2.sprites.OvalSprite;
010 import fang2.transformers.HitTarget;
011 import fang2.transformers.Shootable;
012 import fang2.transformers.VelocityTransformer;
013 import fang2.transformers.WrapTransformer;
014 
015 /**
016  * Demonstration game sprite. Represents a Meteor in a Meteor avoidance
017  * game. Has automatic checking for being shot and for hitting a ship.
018  * That is why the ship and shots are all kept track of here.
019  */
020 public class Meteor
021   extends OvalSprite
022   implements HitTarget, Shootable {
023   /** the color the meteor is when it is created */
024   private static final Color meteorColor = Game.getColor("SCG Red");
025 
026   /** ratio of size number to scale */
027   private static final double SCALETOSIZE = 0.075;
028 
029   /** what size is this meteor? 1-3 are standard values */
030   private final int sizeNumber;
031 
032   /** the game to which this meteor belongs */
033   private final Game myGame;
034 
035   /**
036    * Construct a new {@link Meteor}. A {@link Meteor} has movement
037    * (built in) and knows how to split itself.
038    *
039    @param  myGame
040    @param  sizeNumber
041    */
042   public Meteor(Game myGame, int sizeNumber{
043     super(sizeNumber * SCALETOSIZE, sizeNumber * SCALETOSIZE);
044     this.sizeNumber = sizeNumber;
045     this.myGame = myGame;
046     addTransformer(new WrapTransformer());
047     addTransformer(new VelocityTransformer(
048         new Vector2D(myGame.randomDouble(-4545), myGame.randomDouble(0.050.4))));
049 
050   }
051 
052   public Meteor(Game myGame{
053     this(myGame, 3);
054   }
055 
056   public void split() {
057     VelocityTransformer v = null;
058     for (Transformer transform : transformers{
059       if (transform instanceof VelocityTransformer{
060         = (VelocityTransformertransform;
061         break;
062       }
063     }
064     if (!= null{
065       split(v.getVelocity());
066     }
067   }
068 
069   private void split(Vector2D travel{
070     double layer = myGame.getLayer(this);
071     this.removeFromCanvas();
072     disableTransformer();
073     Vector2D normal = travel.getNormal();
074     if (sizeNumber > 1{
075       Meteor a = new Meteor(myGame, sizeNumber - 1);
076       a.setColor(getColor());
077       double aVelocity = myGame.randomDouble(0.51.5* travel.getMagnitude();
078       a.addTransformer(new VelocityTransformer(
079           normal.multiply(aVelocity)));
080       a.setLocation(getLocation());
081       myGame.addSprite(layer, a);
082 
083       Meteor b = new Meteor(myGame, sizeNumber - 1);
084       b.setColor(getColor());
085       double bVelocity = myGame.randomDouble(-1.5, -0.5* travel.getMagnitude();
086       b.addTransformer(new VelocityTransformer(
087           normal.multiply(bVelocity)));
088       b.setLocation(getLocation());
089       myGame.addSprite(layer, b);
090     }
091   }
092 
093   public boolean react(Sprite target{
094     split();
095     return true;
096   }
097 
098   public void shot(Sprite shooter{
099     split();
100   }
101 }
102 
103 //Uploaded on Mon Mar 29 21:39:10 EDT 2010


Download/View scg/ch01/spacesprites/Meteor.java





Views
Personal tools
Add to 
del.icio.usAdd to 
diggAdd to 
FacebookAdd to 
favoritesAdd to 
GoogleAdd to 
MySpaceAdd to 
PrintAdd to 
SlashdotAdd to 
StumbleUponAdd to 
Twitter

Games
Games