diff --git a/.gitignore b/.gitignore index b8d3919..e1d074d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ -/.metadata/ +*.DS_Store +*.metadata/ *.class +*.prefs /GameProject/doc/ /GameProject/log/ /GameProject/highscore.txt diff --git a/GameProject/.classpath b/GameProject/.classpath index a32988c..9c1fe8d 100644 --- a/GameProject/.classpath +++ b/GameProject/.classpath @@ -1,8 +1,11 @@ - - + + + + + diff --git a/GameProject/src/base/GameLoop.java b/GameProject/src/base/GameLoop.java index eb72c12..f98bd42 100644 --- a/GameProject/src/base/GameLoop.java +++ b/GameProject/src/base/GameLoop.java @@ -217,8 +217,8 @@ public class GameLoop { /** - * main to start the whole application. - * initializes the {@link #levels} ArrayList of Playground instances (levels) to be played with one level {@link SpaceInvadersLevel} in constructor of {@link #GameLoop}. + * main to start the whole application. It calls. {@link #runGame(String[])}. + * (levels are automatically added/loaded by constructor of {@link #GameLoop}). * * @param args Java default command line args, forwarded to {@link #runGame(String[])} * @throws IOException in case highscore.txt cannot be written. diff --git a/GameProject/src/base/MovingObjectsGame.java b/GameProject/src/base/MovingObjectsGame.java new file mode 100644 index 0000000..ab52fec --- /dev/null +++ b/GameProject/src/base/MovingObjectsGame.java @@ -0,0 +1,33 @@ +package base; + +import java.io.IOException; +import playground.LevelMovingObjects; + +/** + * main class to start a game with only one level {@link playground.LevelMovingObjects}. + * + */ +public class MovingObjectsGame extends GameLoop { + + /** + * starts this game. + * + * @param args command line parameters (forwarded to {@link GameLoop#runGame(String[])}). + * @throws IOException if highscore.txt file cannot be written or accessed, the exception is + * thrown (and game ends). + */ + public static void main(String[] args) throws IOException { + GameLoop myGame = new MovingObjectsGame(); + myGame.runGame(args); + } + + /** + * adds only one level to play ({@link playground.LevelMovingObjects}). + */ + @Override + public void defineLevels() { + this.resetLevels(); + this.addLevel(new LevelMovingObjects()); + } + +} diff --git a/GameProject/src/collider/CircleCollider.java b/GameProject/src/collider/CircleCollider.java index c968a1b..56743c3 100644 --- a/GameProject/src/collider/CircleCollider.java +++ b/GameProject/src/collider/CircleCollider.java @@ -1,6 +1,5 @@ package collider; -import java.awt.Color; import gameobjects.*; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; @@ -17,7 +16,7 @@ public class CircleCollider extends Collider { double r; private static Logger logger = LogManager.getLogger(Collider.class); - + /** * Constructor which sets the radius to be respected for collisions. * @@ -48,7 +47,7 @@ public class CircleCollider extends Collider { public boolean checkCollisionCircCirc(Collider _c2) throws Exception { CircleCollider c2 = (CircleCollider) _c2; CircleCollider c1 = this; - logger.trace(c1.x + " " + c1.y + " " + c1.r + " " + c2.x + " " + c2.y+ " " + c2.r); + logger.trace(c1.x + " " + c1.y + " " + c1.r + " " + c2.x + " " + c2.y + " " + c2.r); int kathete1 = (int) (Math.abs(c2.gameobject.getX() - c1.gameobject.getX())); int kathete2 = (int) (Math.abs(c2.gameobject.getX() - c1.gameobject.getY())); int hypothenuse = (int) (c1.r + c2.r); @@ -81,8 +80,4 @@ public class CircleCollider extends Collider { throw new RuntimeException("Collider type not implemented!"); } - private Color color = Color.WHITE; - - - } diff --git a/GameProject/src/collider/Collider.java b/GameProject/src/collider/Collider.java index 0651db3..81793cd 100644 --- a/GameProject/src/collider/Collider.java +++ b/GameProject/src/collider/Collider.java @@ -1,7 +1,5 @@ package collider; -import java.awt.Graphics2D; -import java.util.LinkedList; import gameobjects.GameObject; import playground.Playground; import controller.ObjectController; diff --git a/GameProject/src/collider/RectCollider.java b/GameProject/src/collider/RectCollider.java index f25e62b..c781c8b 100644 --- a/GameProject/src/collider/RectCollider.java +++ b/GameProject/src/collider/RectCollider.java @@ -1,7 +1,5 @@ package collider; -import java.awt.Color; - import gameobjects.*; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; @@ -13,11 +11,8 @@ public class RectCollider extends Collider { //double x; //double y; - //double vx; - //double vy; double w, h; - private Color color = Color.WHITE; private static Logger logger = LogManager.getLogger(RectCollider.class); diff --git a/GameProject/src/collider/package-info.java b/GameProject/src/collider/package-info.java new file mode 100644 index 0000000..f101edb --- /dev/null +++ b/GameProject/src/collider/package-info.java @@ -0,0 +1,9 @@ +/** + * The package contains classes implementing a 'bounding box' area around game objects.
+ * The abstract base class {@link Collider} provides the abstract method {@link Collider#collidesWith(Collider)}, + * which needs to be implemented by child classes to detect and decide whether or not an object with such instance really collides with the other. + * {@link Collider} instances are to be used for game objects ({@link gameobjects}); see constructors.
+ * + * The benefit of seperating Colliders from visual representations is that the area for collisions can be smaller/bigger/other shape to improve game play experience. + */ +package collider; diff --git a/GameProject/src/controller/CollisionAwareEgoController.java b/GameProject/src/controller/CollisionAwareEgoController.java index 12ccf29..e223487 100644 --- a/GameProject/src/controller/CollisionAwareEgoController.java +++ b/GameProject/src/controller/CollisionAwareEgoController.java @@ -37,6 +37,9 @@ public class CollisionAwareEgoController extends EgoController { this.shot = soundOnShot; } + /** + * Copies current values of x,y position and speed vx,vy into attributes. These can be restored by call to {@link #restoreDynamicState()}. + */ public void saveDynamicState() { this.savex = this.getX(); this.savey = this.getY(); @@ -45,6 +48,10 @@ public class CollisionAwareEgoController extends EgoController { } + /** + * Restores formally saved values of x,y position and speed vx,vy from attributes back to the ego object. + * These values should have been stored before by a call to {@link #saveDynamicState()}, otherwise all values will be 0.00. + */ public void restoreDynamicState() { this.setX(savex); this.setY(savey); @@ -53,6 +60,10 @@ public class CollisionAwareEgoController extends EgoController { } + /** + * extends parent class implementation by a check whether or not the ego object collides with any other "obstacle" object. + * If yes, the position stays fixed (by using {@link #saveDynamicState()} and {@link #restoreDynamicState()}. + */ public boolean stopObject() { boolean s = super.stopObject(); @@ -73,6 +84,9 @@ public class CollisionAwareEgoController extends EgoController { return s; } + /** + * calls superclass {@link EgoController#onSpace(KeyEvent, GameObject)} only, if the time elapsed since last pressing of space is above 0.1 ms. + */ public void onSpace(KeyEvent e, GameObject ego) { double cgt = ego.getGameTime(); if ((cgt - this.lastSpaceAt) > 0.1) { diff --git a/GameProject/src/controller/EgoController.java b/GameProject/src/controller/EgoController.java index 85f7a16..e00877a 100644 --- a/GameProject/src/controller/EgoController.java +++ b/GameProject/src/controller/EgoController.java @@ -42,26 +42,51 @@ public class EgoController extends ObjectController { } + /** + * moves ego up by {@link SpaceInvadersLevel#EGOSPEED}. + * @param kc KeyEvent to process (ignored) + * @param ego the ego object + */ public void onUp(KeyEvent kc, GameObject ego) { ego.setVX(0.0); ego.setVY(-SpaceInvadersLevel.EGOSPEED); } + /** + * moves ego down by {@link SpaceInvadersLevel#EGOSPEED}. + * @param kc KeyEvent to process (ignored) + * @param ego the ego object + */ public void onDown(KeyEvent kc, GameObject ego) { ego.setVX(0.0); ego.setVY(SpaceInvadersLevel.EGOSPEED); } + /** + * moves ego left by {@link SpaceInvadersLevel#EGOSPEED}. + * @param kc KeyEvent to process (ignored) + * @param ego the ego object + */ public void onLeft(KeyEvent kc, GameObject ego) { ego.setVY(0.0); ego.setVX(-SpaceInvadersLevel.EGOSPEED); } + /** + * moves ego right by {@link SpaceInvadersLevel#EGOSPEED}. + * @param kc KeyEvent to process (ignored) + * @param ego the ego object + */ public void onRight(KeyEvent kc, GameObject ego) { ego.setVY(0.0); ego.setVX(SpaceInvadersLevel.EGOSPEED); } + /** + * sets speed to 0.0 + * @param kc KeyEvent to process (ignored) + * @param ego the ego object + */ public void onStop(KeyEvent kc, GameObject ego) { ego.setVY(0.0); ego.setVX(0.0); @@ -72,7 +97,7 @@ public class EgoController extends ObjectController { /** checks the position and respects level boundaries and own radius or width/height set on constructor. * - * @return true if the object reached the boundaries of the level, false otherwise + * @return true if the object reached the boundaries of the level, false otherwise. */ public boolean stopObject() { // check whether ego object is at level boundaries @@ -93,7 +118,7 @@ public class EgoController extends ObjectController { } - /** behavior for shooting on key space + /** behavior for shooting on key space. Creates a new shot using {#link SimpleShotController} with a {@link RectObject}. * * @param e KeyEvent of the space key * @param ego EgoObject instance (used to determine position of shot object's start) @@ -119,7 +144,7 @@ public class EgoController extends ObjectController { /** - * updates position based on key events (mouse currently ignored) + * updates position based on key events (mouse currently ignored). */ public void updateObject() { @@ -140,23 +165,14 @@ public class EgoController extends ObjectController { released = false; } - /** - * Generelle Idee: Wenn eine Taste gedrückt wird wird sie gespeichert. wenn die zuvor - * gespeicherte Taste wieder losgelassen wird stoppt das Ego-Objekt. Falls vor dem Loslassen - * eine andere Taste gedrückt wird, wird diese gespeichert und die alte vergessen. Dh das - * loslassen der alten Taste stoppt das Objekt nicht. Spezialfall: space, das loslassen von - * space stoppt das Objekt nicht! - */ if (pressed == true) { lastPressedKey = pressedKey; pressedKey = kc; } - /** - * Nur eine losgelassene Taste die auch vorher gedrückt wurde stoppt das Objekt. Eine - * losgelassene Taste die nicht vorher gedrückt wurde bzw vergessen wurde stoppt das Objekt - * nicht + /* + * Only if the released key is the same as the before pressed one, it stops the ego object movement. */ if (released == true) { if (pressedKey != null) { @@ -194,7 +210,7 @@ public class EgoController extends ObjectController { // shot if (kc == KeyEvent.VK_SPACE) { - // space is not registered! Releasing space does not stop the egoobject + // space is not registered! Releasing space does not stop the ego object this.onSpace(e, ego); } } diff --git a/GameProject/src/controller/EnemyController.java b/GameProject/src/controller/EnemyController.java index 71e5c7e..9e6aa6c 100644 --- a/GameProject/src/controller/EnemyController.java +++ b/GameProject/src/controller/EnemyController.java @@ -1,6 +1,7 @@ package controller; +import playground.Playground; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; @@ -27,8 +28,8 @@ public class EnemyController extends ObjectController { if (gameObject.getY() >= this.getPlayground().getSizeY()) { this.getPlayground().deleteObject(gameObject.getId()); // add to points counter - Integer pts = (Integer) this.getPlayground().getGlobalFlag("points"); - this.getPlayground().setGlobalFlag("points", pts - 200); + Integer pts = (Integer) Playground.getGlobalFlag("points"); + Playground.setGlobalFlag("points", pts - 200); } applySpeedVector(); diff --git a/GameProject/src/controller/MineController.java b/GameProject/src/controller/MineController.java index 28a4348..5aa7e83 100644 --- a/GameProject/src/controller/MineController.java +++ b/GameProject/src/controller/MineController.java @@ -1,6 +1,5 @@ package controller; -import controller.ObjectController; import gameobjects.GameObject; import org.apache.logging.log4j.Logger; diff --git a/GameProject/src/controller/ObjectController.java b/GameProject/src/controller/ObjectController.java index dd16f16..65478f2 100644 --- a/GameProject/src/controller/ObjectController.java +++ b/GameProject/src/controller/ObjectController.java @@ -56,7 +56,7 @@ public abstract class ObjectController { public void applySpeedVector() { double ts = this.getPlayground().getTimestep(); this.setX(this.getX() + this.getVX() * ts); - gameObject.setY(this.getY() + this.getVY() * ts); + this.setY(this.getY() + this.getVY() * ts); } diff --git a/GameProject/src/gameobjects/AnimatedGameobject.java b/GameProject/src/gameobjects/AnimatedGameobject.java index 9105cca..571f59e 100644 --- a/GameProject/src/gameobjects/AnimatedGameobject.java +++ b/GameProject/src/gameobjects/AnimatedGameobject.java @@ -1,9 +1,7 @@ package gameobjects; -import java.util.LinkedList; import playground.Playground; import playground.Animation; -import collider.Collider; import collider.RectCollider; import rendering.*; import org.apache.logging.log4j.Logger; diff --git a/GameProject/src/gameobjects/EgoObject.java b/GameProject/src/gameobjects/EgoObject.java index b1e5043..442cbec 100644 --- a/GameProject/src/gameobjects/EgoObject.java +++ b/GameProject/src/gameobjects/EgoObject.java @@ -3,14 +3,6 @@ package gameobjects; import java.awt.Color; import collider.*; -import java.awt.Graphics2D; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import java.util.LinkedList; -import javax.imageio.ImageIO; -import collider.Collider; -import controller.ObjectController; import playground.Playground; import rendering.*; diff --git a/GameProject/src/gameobjects/FallingStar.java b/GameProject/src/gameobjects/FallingStar.java index 17af7b6..d5b0e1a 100644 --- a/GameProject/src/gameobjects/FallingStar.java +++ b/GameProject/src/gameobjects/FallingStar.java @@ -8,7 +8,6 @@ import rendering.*; public class FallingStar extends GameObject { - private Color color = Color.WHITE; protected double rad = -1; @@ -16,8 +15,7 @@ public class FallingStar extends GameObject { public FallingStar(String id, Playground playground, double x, double y, double vx, double vy, Color color, double rad) { super(id, playground, x, y, vx, vy); - this.rad = rad; - this.color = color; + this.rad = rad; LinkedList cols = new LinkedList(); CircleCollider cc = new CircleCollider("cc", this, rad); cols.add(cc); diff --git a/GameProject/src/gameobjects/RectObject.java b/GameProject/src/gameobjects/RectObject.java index 8009dc0..78efdb5 100644 --- a/GameProject/src/gameobjects/RectObject.java +++ b/GameProject/src/gameobjects/RectObject.java @@ -1,10 +1,8 @@ package gameobjects; import java.awt.Color; -import java.io.File; import collider.RectCollider; import playground.Playground; -import playground.SpaceInvadersLevel; import rendering.RectArtist; /** diff --git a/GameProject/src/gameobjects/TextObject.java b/GameProject/src/gameobjects/TextObject.java index c5263cb..30fca81 100644 --- a/GameProject/src/gameobjects/TextObject.java +++ b/GameProject/src/gameobjects/TextObject.java @@ -1,14 +1,8 @@ package gameobjects; import java.awt.Color; -import java.awt.Font; -import java.awt.Graphics2D; -import java.awt.font.FontRenderContext; -import java.awt.font.TextAttribute; -import java.text.AttributedString; import java.util.LinkedList; import collider.*; -import controller.ObjectController; import playground.Playground; import rendering.*; diff --git a/GameProject/src/gameobjects/package-info.java b/GameProject/src/gameobjects/package-info.java new file mode 100644 index 0000000..7ec704e --- /dev/null +++ b/GameProject/src/gameobjects/package-info.java @@ -0,0 +1,7 @@ +/** + * The package gameobjects contains all objects with a visual representation on screen. + * They can be combined to use controller instances for their behavior (subclasses of {@link controller.ObjectController}). + * The abstract base class is {@link GameObject}, which forces child-classes to implement the method + * {@link GameObject#updateObject()}. + */ +package gameobjects; diff --git a/GameProject/src/log4j2.xml b/GameProject/src/log4j2.xml index 87ecf74..21a7607 100644 --- a/GameProject/src/log4j2.xml +++ b/GameProject/src/log4j2.xml @@ -7,7 +7,7 @@ - + diff --git a/GameProject/src/playground/Animation.java b/GameProject/src/playground/Animation.java index c1c12c6..5b658c0 100644 --- a/GameProject/src/playground/Animation.java +++ b/GameProject/src/playground/Animation.java @@ -38,7 +38,6 @@ public class Animation { String zeile; double zeit; - int it = 0; while (scanner.hasNext()) { if (scanner.hasNextDouble()) { @@ -57,7 +56,6 @@ public class Animation { logger.warn(file + " not found!!"); } - it++; logger.trace(basePath.getParent().toString() + "/" + zeile); } } diff --git a/GameProject/src/playground/Level2.java b/GameProject/src/playground/Level2.java index e553575..be0a998 100644 --- a/GameProject/src/playground/Level2.java +++ b/GameProject/src/playground/Level2.java @@ -3,7 +3,7 @@ package playground; /** - * extends extends {@link SpaceInvadersLevel} with a different startup message. + * extends {@link SpaceInvadersLevel} with a different startup message. */ public class Level2 extends SpaceInvadersLevel { diff --git a/GameProject/src/playground/Level4.java b/GameProject/src/playground/Level4.java index cfb39b3..dacfd4f 100644 --- a/GameProject/src/playground/Level4.java +++ b/GameProject/src/playground/Level4.java @@ -10,14 +10,14 @@ import org.apache.logging.log4j.Logger; /** - * extends extends {@link SpaceInvadersLevel} + * extends {@link SpaceInvadersLevel} with aliens that need two hits to be destroyed. *
    *
  • Hit aliens twice to kill them *
  • they say AUA when not destroyed *
*/ public class Level4 extends SpaceInvadersLevel { - + /** constant defining the number of shots needed to destroy an enemy */ public static final int MAX_HITS = 2; diff --git a/GameProject/src/playground/LevelHitTwice.java b/GameProject/src/playground/LevelHitTwice.java index 241ae9e..f0fc782 100644 --- a/GameProject/src/playground/LevelHitTwice.java +++ b/GameProject/src/playground/LevelHitTwice.java @@ -1,11 +1,6 @@ package playground; -import controller.FallingStarController; -import gameobjects.EgoObject; -import gameobjects.FallingStar; import gameobjects.GameObject; -import gameobjects.RectObject; -import java.awt.Color; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/GameProject/src/playground/LevelMovingObjects.java b/GameProject/src/playground/LevelMovingObjects.java new file mode 100644 index 0000000..dd93acf --- /dev/null +++ b/GameProject/src/playground/LevelMovingObjects.java @@ -0,0 +1,21 @@ +package playground; + + + +/** This level adds two distracting objects to the canvas that cannot collide but bounce around all the time. + */ +public class LevelMovingObjects extends SpaceInvadersLevel { + + // TODO your code here + + + /** "Moving Objects Level!" is the message. + * + * @return String "Moving Objects Level!" + */ + @Override + protected String getStartupMessage() { + return "Moving Objects Level!"; + } +} + diff --git a/GameProject/src/playground/SpaceInvadersLevel.java b/GameProject/src/playground/SpaceInvadersLevel.java index 0d577ea..4d16fb5 100644 --- a/GameProject/src/playground/SpaceInvadersLevel.java +++ b/GameProject/src/playground/SpaceInvadersLevel.java @@ -1,6 +1,5 @@ package playground; -// import utilities.* ; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; @@ -237,7 +236,6 @@ public class SpaceInvadersLevel extends Playground { // check whether all enemies have been destroyed or escaped if (enemies.size() == 0) { - HighscoreManager hsm = new HighscoreManager(); HighscoreManager.writeHSToFile((Integer) Playground.getGlobalFlag("points"), (Integer) Playground.getGlobalFlag("highscore")); this.doneLevel = true; @@ -487,7 +485,6 @@ public class SpaceInvadersLevel extends Playground { } void createCollectables() { - double gameTime = this.getGameTime(); // create collectables for (int i = 0; i < this.calcNrCollect(); i++) { diff --git a/GameProject/src/playground/SpaceInvadersLevelTest.java b/GameProject/src/playground/SpaceInvadersLevelTest.java deleted file mode 100644 index 23c18f4..0000000 --- a/GameProject/src/playground/SpaceInvadersLevelTest.java +++ /dev/null @@ -1,81 +0,0 @@ -package playground; - -import static org.junit.Assert.assertTrue; -import java.awt.Color; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import gameobjects.EgoObject; -import gameobjects.GameObject; -import gameobjects.RectObject; - -/** - * Tests {@link SpaceInvadersLevel} for - *
    - *
  1. calcEnemySpeedX() returns the same value as constant SpaceInvadersLevel.ENEMYSPEEDX - *
  2. calcEnemySpeedY() returns the same value as constant SpaceInvadersLevel.ENEMYSPEEDY - *
  3. calcNrEnemies() returns the same value as constant SpaceInvadersLevel.NR_ENEMIES - *
  4. actionIfEnemyIsHit() adds 200 points to score - *
  5. actionIfEgoObjectIsHit() reduces number of lives (egoLives) - *
- * @author jkonert - * - */ -class SpaceInvadersLevelTest { - - private static SpaceInvadersLevel myLevel; - - @BeforeAll - static void setUpBeforeClass() throws Exception { - myLevel = new SpaceInvadersLevel(); - SpaceInvadersLevel.setGlobalFlag("egoLives", 5); - SpaceInvadersLevel.setGlobalFlag("points", 500); - SpaceInvadersLevel.setGlobalFlag("highscore", 5000); - } - - @AfterAll - static void tearDownAfterClass() throws Exception { - // nothing - } - - @Test - void testCalcEnemySpeedX() { - assertTrue("EnemySpeedX is as in SpaceInvadersLevel defined", myLevel.calcEnemySpeedX() == SpaceInvadersLevel.ENEMYSPEEDX); - } - - @Test - void testCalcEnemySpeedY() { - assertTrue("EnemySpeedY is as in SpaceInvadersLevel defined", myLevel.calcEnemySpeedY() == SpaceInvadersLevel.ENEMYSPEEDY); - } - - @Test - void testCalcNrEnemies() { - assertTrue("NrOfEnemies is as in SpaceInvadersLevel defined", myLevel.calcNrEnemies() == SpaceInvadersLevel.NR_ENEMIES); - } - - - @Test - void testActionIfEnemyIsHitPointsUp() { - Integer numPointsBefore = (Integer)myLevel.getGlobalFlag("points"); - GameObject dummyShot = new RectObject("shot1", myLevel, 0,0,0,0, 12, 12, Color.WHITE); - GameObject dummyEnemy = new RectObject("ego1", myLevel, 0,0,0,0, 12, 12, Color.BLACK); - myLevel.addObject(dummyShot); - myLevel.addObject(dummyEnemy); - myLevel.actionIfEnemyIsHit(dummyEnemy, dummyShot);; // this is the call under test - Integer numPointsAfter = (Integer)myLevel.getGlobalFlag("points"); // changed? - assertTrue("numPoints is up +200 after EnemyIsHit", numPointsAfter == numPointsBefore + 200); // points are set +200 , check. - } - - @Test - void testActionIfEgoObjectIsHitLivesDown() { - Integer numLivesBefore = (Integer)myLevel.getGlobalFlag("egoLives"); - GameObject dummyShot = new RectObject("shot1", myLevel, 0,0,0,0, 12, 12, Color.RED); - GameObject dummyEgo = new EgoObject("ego1", myLevel, 0,0,0,0, 5); - myLevel.addObject(dummyShot); - myLevel.actionIfEgoObjectIsHit(dummyShot, dummyEgo); // this is the call under test - Integer numLivesAfter = (Integer)myLevel.getGlobalFlag("egoLives"); // changed? - assertTrue("numLives is reduced by one ifEgoIsHit", numLivesAfter == numLivesBefore - 1); // lives is reduced by one - - } - -} diff --git a/GameProject/src/playground/package-info.java b/GameProject/src/playground/package-info.java new file mode 100644 index 0000000..bbbf357 --- /dev/null +++ b/GameProject/src/playground/package-info.java @@ -0,0 +1,9 @@ +/** + * The package playground contains all level specific logic and control of level logic. + * The structure and general logic (with global and local flags to be stored/used) + * is provided in abstract base class {@link Playground}.
+ * Child-classes implement specific logic for one level and game type (e.g. {@link SpaceInvadersLevel}). + * + * Generally, the base class {@link Playground} supports totally different game types to be implemented. + */ +package playground; diff --git a/GameProject/src/rendering/RectArtist.java b/GameProject/src/rendering/RectArtist.java index e1ff70e..e6de3b6 100644 --- a/GameProject/src/rendering/RectArtist.java +++ b/GameProject/src/rendering/RectArtist.java @@ -23,8 +23,6 @@ public class RectArtist extends Artist { // g.drawLine((int) (Math.round(this.getX())), (int) (Math.round(this.getY()-this.height/2.)), // (int) Math.round(this.getX()), // (int) Math.round(this.getY() + this.height/2.)); - int x = (int) this.getX(); - int y = (int) this.getY(); g.fillRect((int) (this.getX() - this.width / 2.), (int) (this.getY() - this.height / 2.), (int) this.width, (int) this.height); diff --git a/GameProject/src/rendering/TextArtist.java b/GameProject/src/rendering/TextArtist.java index 5c312fd..4d33b45 100644 --- a/GameProject/src/rendering/TextArtist.java +++ b/GameProject/src/rendering/TextArtist.java @@ -14,14 +14,19 @@ import java.text.AttributedString; public class TextArtist extends Artist { private String text = null; - private int size = 1; private Color textColor = null; protected double textWidth, textHeight; Font serifFont = null; + /** Constructor to intitialize the TextArtist attributes + * + * @param go GameObject to be used for xy coordinate reference + * @param text the text to draw + * @param size point size to be used for font "Serif" + * @param textColor color to draw the text with (foreground) + */ public TextArtist(GameObject go, String text, int size, Color textColor) { super(go); - this.size = size; this.text = text; this.serifFont = new Font("Serif", Font.PLAIN, size); diff --git a/GameProject/src/ui/GameUI.java b/GameProject/src/ui/GameUI.java index beaad14..ff19226 100644 --- a/GameProject/src/ui/GameUI.java +++ b/GameProject/src/ui/GameUI.java @@ -1,6 +1,5 @@ package ui; -import java.awt.Dimension; import java.util.*; import javax.swing.JFrame; import javax.swing.JMenu; diff --git a/GameProject/video/alexG.jpg b/GameProject/video/alexG.jpg deleted file mode 100644 index bc03a8c..0000000 Binary files a/GameProject/video/alexG.jpg and /dev/null differ