From 57575947f4d23e29cacb73ef5ee60f70ee09f715 Mon Sep 17 00:00:00 2001 From: Sagi Dayan Date: Sat, 23 Jan 2016 18:20:50 +0200 Subject: [PATCH] Added documentation --- src/Engine/GameEngine.java | 20 +++++++++------- src/GamePanels/GamePanel.java | 5 ++-- src/Images/start.png | Bin 11900 -> 31598 bytes src/Sprites/Bird.java | 10 +++++--- src/Sprites/Pipe.java | 1 + src/Sprites/SideScollerBackground.java | 17 ++----------- src/Sprites/Sprite.java | 32 ++++++++++++++++--------- 7 files changed, 45 insertions(+), 40 deletions(-) diff --git a/src/Engine/GameEngine.java b/src/Engine/GameEngine.java index 38b396f..2568736 100644 --- a/src/Engine/GameEngine.java +++ b/src/Engine/GameEngine.java @@ -19,17 +19,17 @@ import java.util.Vector; public class GameEngine extends MouseAdapter { - private final int PIPE_ACC = 10, PIPE_WIDTH = 90; + private final int PIPE_ACC = 10, PIPE_WIDTH = 90, PIPE_INTERVAL_TIME = 2000; public boolean gameOn , gameOver, isFirstGame, canScore; private Bird bird; private Vector pipes; //will save all laser shots and asteroids which are currently on the screen. private int pWidth, pHeight; //panel dimensions - private Timer pipeTimer; + private Timer pipeTimer; //interval to create new pipe private Random r; private int score; private BufferedImage sceneImage; - private Vector backgrounds; + private Vector backgrounds; //Background elements private Vector successSounds; private AudioClip themeAudioClip; @@ -50,8 +50,10 @@ public class GameEngine extends MouseAdapter { themeAudioClip = null; } - if(themeAudioClip != null) + if(themeAudioClip != null) { + themeAudioClip.loop(); + } r = new Random(); sceneImage = new BufferedImage(width, height, Image.SCALE_SMOOTH); loadSuccessSounds(); @@ -67,7 +69,7 @@ public class GameEngine extends MouseAdapter { */ private void startNewGame(){ this.gameOn = true; - pipeTimer = new Timer(2000, new PipeTimerListener()); + pipeTimer = new Timer(PIPE_INTERVAL_TIME, new PipeTimerListener()); backgrounds = new Vector<>(); initBackgrounds(); initGame(); @@ -87,13 +89,14 @@ public class GameEngine extends MouseAdapter { } + // Loads soundFX Vector private void loadSuccessSounds(){ successSounds = new Vector<>(); for (int i = 1 ; i < 5 ; i++){ successSounds.add(Applet.newAudioClip(getClass().getResource("/Sounds/pass"+i+".wav"))); } } - + //initialize background Sprites private void initBackgrounds(){ backgrounds.add(new SideScollerBackground(pWidth, pHeight, 2, "skyLine.png", pWidth, pHeight)); backgrounds.add(new SideScollerBackground(pWidth, pHeight, 5, "trees.png", pWidth + 50, pHeight)); @@ -175,6 +178,7 @@ public class GameEngine extends MouseAdapter { pipeTimer.stop(); } + //passed the pipe? if(canScore && !pipes.isEmpty() && bird.getLocX() >= pipes.elementAt(0).getLocX() + pipes.elementAt(0).getSWidth()) { score++; canScore = false; @@ -223,9 +227,9 @@ public class GameEngine extends MouseAdapter { } } - public void mouseClicked(MouseEvent e){ + //mouse clicked starts game Or jumps + public void mousePressed(MouseEvent e){ if(gameOver){ -// gameOn = true; this.isFirstGame = false; gameOver = false; initGame(); diff --git a/src/GamePanels/GamePanel.java b/src/GamePanels/GamePanel.java index 26dac0a..1256cd6 100644 --- a/src/GamePanels/GamePanel.java +++ b/src/GamePanels/GamePanel.java @@ -16,7 +16,6 @@ public class GamePanel extends JPanel implements Runnable{ private final URL startURL= getClass().getResource("/Images/start.png"); -// private int width, height; private GameEngine engine; private JLabel lbl_score, lbl_gameOver, lbl_bg, lbl_start; @@ -51,7 +50,7 @@ public class GamePanel extends JPanel implements Runnable{ lbl_bg = new JLabel(img_bg); lbl_bg.setBounds(0,0,width,height); - + //create "start game" & "game over" labels img_start = new ImageIcon(startURL); lbl_start = new JLabel(img_start); lbl_start.setVisible(true); @@ -119,7 +118,7 @@ public class GamePanel extends JPanel implements Runnable{ g2d.drawImage(engine.getScene(),0,0,this); //Draw the scene - //Some labels - Score & countDown + //Update Score lbl_score.setText("SCORE : " + engine.getScore()); } diff --git a/src/Images/start.png b/src/Images/start.png index 6f371d1755a0e7d0b52fee7f32409e3199ec171d..8815b52b78ba63f48bf42348b4962924eb4701d4 100644 GIT binary patch literal 31598 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 diff --git a/src/Sprites/Bird.java b/src/Sprites/Bird.java index 9e907e8..f047d29 100644 --- a/src/Sprites/Bird.java +++ b/src/Sprites/Bird.java @@ -8,24 +8,28 @@ package Sprites; public class Bird extends Sprite { + private final int ACC = 10, MAX_ANGLE=45; + public Bird(int xPosition, int pWidth, int pHeight, int size){ super(xPosition, pHeight/2, pWidth, pHeight, 0, "birdSprite.png", 0 ,size, size); } + //"pull" sprite down up to ACC speed @Override public void update() { - if(acceleration > -10 ) { + if(acceleration > -ACC ) { acceleration--; } locY -= acceleration; - if(angle <= 45) + if(angle <= MAX_ANGLE) angle += 5; } + //bird "jumps" ACC pixels up, and img angle is set to MAX_ANGLE public void jump() { this.acceleration = 10; - angle = -45; + angle = -1*MAX_ANGLE; } } diff --git a/src/Sprites/Pipe.java b/src/Sprites/Pipe.java index 757e926..92bd821 100644 --- a/src/Sprites/Pipe.java +++ b/src/Sprites/Pipe.java @@ -11,6 +11,7 @@ public class Pipe extends Sprite { } + //move pipe left @Override public void update() { locX -= acceleration; diff --git a/src/Sprites/SideScollerBackground.java b/src/Sprites/SideScollerBackground.java index bee410a..dba9e75 100644 --- a/src/Sprites/SideScollerBackground.java +++ b/src/Sprites/SideScollerBackground.java @@ -25,22 +25,8 @@ public class SideScollerBackground extends Sprite { } - /* - * resizes image to a set size - */ - @Override - protected void setImageDimensions() - { - Image tmp = bImage.getScaledInstance(sWidth, sHeight, Image.SCALE_SMOOTH); - BufferedImage bi = new BufferedImage(sWidth, sHeight, BufferedImage.TYPE_INT_ARGB); - - Graphics2D g2d = bi.createGraphics(); - g2d.drawImage(tmp,0,0,null); - g2d.dispose(); - bImage = bi; - - } + //if a bg element moves pass the screen, it returns to the begining @Override public void update() { locX -= acceleration; @@ -51,6 +37,7 @@ public class SideScollerBackground extends Sprite { locXCopy = pWidth; } + //draws 2 bg instances that follow each other @Override public void drawSprite(Graphics g, JPanel p){ super.drawSprite(g,p); diff --git a/src/Sprites/Sprite.java b/src/Sprites/Sprite.java index 60bcdf3..47f10c5 100644 --- a/src/Sprites/Sprite.java +++ b/src/Sprites/Sprite.java @@ -77,8 +77,18 @@ public abstract class Sprite { */ public double getLocY() {return locY;} + /** + * returns sprite image width + * @return + * int + */ public int getSWidth() {return sWidth;} + /** + * returns sprite image height + * @return + * int + */ public int getsHeight() {return sHeight;} /** @@ -131,17 +141,17 @@ public abstract class Sprite { /** * its not a bug it's a feature. actually it just moves a shape that goes beyond the screen to the other side. */ - protected void outOfScreeFix(){ - if(locX < 0 - sWidth) - locX = pWidth; - else if (locX > pWidth+sWidth) - locX = 0-sWidth; - - if(locY < 0 - sHeight) - locY = pHeight; - else if(locY > pHeight+sHeight) - locY = 0-sHeight ; - } +// protected void outOfScreeFix(){ +// if(locX < 0 - sWidth) +// locX = pWidth; +// else if (locX > pWidth+sWidth) +// locX = 0-sWidth; +// +// if(locY < 0 - sHeight) +// locY = pHeight; +// else if(locY > pHeight+sHeight) +// locY = 0-sHeight ; +// } /** * abstract method for drawing sprite.