diff --git a/Asteroids/src/com/RickBarrette/asteroids/AsteroidGame.java b/Asteroids/src/com/RickBarrette/asteroids/AsteroidGame.java index 66c69bc..6e945c5 100644 --- a/Asteroids/src/com/RickBarrette/asteroids/AsteroidGame.java +++ b/Asteroids/src/com/RickBarrette/asteroids/AsteroidGame.java @@ -73,7 +73,7 @@ public class AsteroidGame extends Thread { if(s != null){ s.allStop(); - hyperJump(s); + s.hyperJump(); } mGameFrame.getStatusBar().decrementShipCount(); @@ -89,6 +89,14 @@ public class AsteroidGame extends Thread { mGameFrame.repaint(); } + /** + * @return the game's frame + * @author ricky barrette + */ + public GameFrame getGameFrame() { + return this.mGameFrame; + } + /** * @return the world * @author ricky barrette @@ -96,26 +104,7 @@ public class AsteroidGame extends Thread { public ArrayList getWorld() { return mWorld; } - - /** - * Hyperjumps the sip - * @param ship - * @author ricky barrette - */ - public void hyperJump(final Ship ship) { -// boolean isSafe = true; - Random gen = new Random(); -// do{ - System.out.println("hyper jumping"); - ship.setLocation(gen.nextInt(mGameFrame.getDisplayWidth()), gen.nextInt(mGameFrame.getDispalyHeight())); -// for(int i = 0; i < mWorld.size(); i++) -// if(mWorld.get(i) instanceof Collider) -// if(((Collider) mWorld.get(i)).checkForCollision(ship)) -// isSafe = false; -// } while (!isSafe); - mGameFrame.repaintDispaly(); - } - + /** * populates the world for a new game * @author ricky barrette @@ -155,7 +144,7 @@ public class AsteroidGame extends Thread { mGameFrame.getStatusBar().setShotCount(0); mGameFrame.getStatusBar().setLevel(1); - mWorld.add(new Ship(gen.nextInt(mGameFrame.getDisplayWidth()), gen.nextInt(mGameFrame.getDispalyHeight()),0,.35,.98,.2,1)); + mWorld.add(new Ship(gen.nextInt(mGameFrame.getDisplayWidth()), gen.nextInt(mGameFrame.getDispalyHeight()), 0, .35, .98, .2, 1, this)); initLevel(); @@ -300,7 +289,7 @@ public class AsteroidGame extends Thread { } } } - + /** * Sets the enabled state of Moving Space Objects * @param b @@ -311,7 +300,7 @@ public class AsteroidGame extends Thread { if(item instanceof MovingSpaceObject) ((MovingSpaceObject) item).setActive(b); } - + /** * @return the number of objects in the world * @author ricky barrette diff --git a/Asteroids/src/com/RickBarrette/asteroids/GameFrame.java b/Asteroids/src/com/RickBarrette/asteroids/GameFrame.java index 6bd89d4..55ec527 100644 --- a/Asteroids/src/com/RickBarrette/asteroids/GameFrame.java +++ b/Asteroids/src/com/RickBarrette/asteroids/GameFrame.java @@ -179,7 +179,7 @@ public class GameFrame extends JFrame implements KeyListener, ActionListener{ */ case KeyEvent.VK_H: if(isKeyPressed){ - mGame.hyperJump(ship); + ship.hyperJump(); } break; @@ -188,7 +188,7 @@ public class GameFrame extends JFrame implements KeyListener, ActionListener{ */ case KeyEvent.VK_SPACE: if(isKeyPressed) - mGame.addElement(new Shot(ship.getX(), ship.getY(), ship.getAngle(), ship.getXVelocity(), ship.getYVelocity(), mGame)); + ship.shoot(); break; } } diff --git a/Asteroids/src/com/RickBarrette/asteroids/MovingSpaceObject.java b/Asteroids/src/com/RickBarrette/asteroids/MovingSpaceObject.java index b0eb014..ddf1527 100644 --- a/Asteroids/src/com/RickBarrette/asteroids/MovingSpaceObject.java +++ b/Asteroids/src/com/RickBarrette/asteroids/MovingSpaceObject.java @@ -45,6 +45,30 @@ public abstract class MovingSpaceObject extends SpaceObject implements Moveable{ isAccelerating = false; } + /** + * @return the moving space object's angle + * @author ricky barrette + */ + public double getAngle() { + return mAngle; + } + + /** + * @return the moving space object's x volocity + * @author ricky barrette + */ + public double getXVelocity() { + return this.mXVelocity; + } + + /** + * @return the moving space object's y velocity + * @author ricky barrette + */ + public double getYVelocity() { + return this.mYVelocity; + } + /** * @return true if the space object is accelerating * @author ricky barrette @@ -68,7 +92,7 @@ public abstract class MovingSpaceObject extends SpaceObject implements Moveable{ public boolean isTurningLeft(){ return isTurningLeft; } - + /** * @return true if the space object is turning right * @author ricky barrette @@ -138,7 +162,7 @@ public abstract class MovingSpaceObject extends SpaceObject implements Moveable{ public void setAccelerating(final boolean accelerating) { this.isAccelerating = accelerating; // start or stop accelerating the ship } - + /** * Sets wether or not this space object is active * @param active diff --git a/Asteroids/src/com/RickBarrette/asteroids/Ship.java b/Asteroids/src/com/RickBarrette/asteroids/Ship.java index 7947d2a..5e22da8 100644 --- a/Asteroids/src/com/RickBarrette/asteroids/Ship.java +++ b/Asteroids/src/com/RickBarrette/asteroids/Ship.java @@ -21,6 +21,7 @@ package com.RickBarrette.asteroids; import java.awt.Color; import java.awt.Graphics; +import java.util.Random; /** * This class will be the user's ship. I will be used to destroy the asteroids, with it's laser! Pew Pew Pew!!! @@ -32,9 +33,10 @@ public class Ship extends MovingSpaceObject { private final int[] mOrigYpoints = { 0, -8, 0, 8 }; private final int[] mOrigFlameXpoints = { -6, -23, -6 }; private final int[] mOrigFlameYpoints = { -3, 0, 3 }; - private final int shotDelay; + private final int mShotDelay; private int[] mXpoints = new int[4], mYpoints = new int[4], mFlameXpoints = new int[3], mFlameYpoints = new int[3]; - private int shotDelayLeft; + private int mShotDelayLeft; + private final AsteroidGame mGame; /** * radius of circle used to approximate the ship @@ -51,8 +53,9 @@ public class Ship extends MovingSpaceObject { * @param rotationalSpeed of the ship * @param shotDelay of the ship * @author ricky barrette + * @param game */ - public Ship(final double x, final double y, final double angle, final double acceleration, final double velocityDecay, final double rotationalSpeed, final int shotDelay) { + public Ship(final double x, final double y, final double angle, final double acceleration, final double velocityDecay, final double rotationalSpeed, final int shotDelay, final AsteroidGame game) { this.mX = x; this.mY = y; this.mAngle = angle; @@ -60,15 +63,16 @@ public class Ship extends MovingSpaceObject { this.mVelocityDecay = velocityDecay; this.mRotationalSpeed = rotationalSpeed; this.mColor = Color.CYAN; + mGame = game; // start off paused this.isActive = false; // # of frames between shots - this.shotDelay = shotDelay; + this.mShotDelay = shotDelay; // ready to shoot - this.shotDelayLeft = 0; + this.mShotDelayLeft = 0; } /** @@ -79,7 +83,7 @@ public class Ship extends MovingSpaceObject { /* * check if the shot delay has been satifiyed */ - if (shotDelayLeft > 0) + if (mShotDelayLeft > 0) return false; else return true; @@ -137,14 +141,6 @@ public class Ship extends MovingSpaceObject { g.fillPolygon(mXpoints, mYpoints, 4); } - /** - * @return the ship's current angle - * @author ricky barrette - */ - public double getAngle() { - return mAngle; - } - /** * @return radius of circle that approximates the ship * @author ricky barrette @@ -153,12 +149,23 @@ public class Ship extends MovingSpaceObject { return mRadius; } - public double getXVelocity() { - return this.mXVelocity; - } - - public double getYVelocity() { - return this.mYVelocity; + /** + * Hyperjumps the sip + * @param ship + * @author ricky barrette + */ + public void hyperJump() { +// boolean isSafe = true; + Random gen = new Random(); +// do{ + System.out.println("hyper jumping"); + setLocation(gen.nextInt(mGame.getGameFrame().getDisplayWidth()), gen.nextInt(mGame.getGameFrame().getDispalyHeight())); +// for(int i = 0; i < mWorld.size(); i++) +// if(mWorld.get(i) instanceof Collider) +// if(((Collider) mWorld.get(i)).checkForCollision(ship)) +// isSafe = false; +// } while (!isSafe); + mGame.getGameFrame().repaintDispaly(); } /** @@ -172,9 +179,20 @@ public class Ship extends MovingSpaceObject { * move() is called every frame that the game * is run, so this ticks down the shot delay */ - if (shotDelayLeft > 0) - shotDelayLeft--; + if (mShotDelayLeft > 0) + mShotDelayLeft--; super.move(scrnWidth, scrnHeight); } + + /** + * Fires a shot from the ship + * @author ricky barrette + */ + public void shoot() { + if(canShoot()) { + mGame.addElement(new Shot(mX, mY, mAngle, mXVelocity, mYVelocity, mGame)); + mShotDelayLeft += mShotDelay; + } + } } \ No newline at end of file