diff --git a/Amendment.class b/Amendment.class new file mode 100644 index 0000000..b23978c Binary files /dev/null and b/Amendment.class differ diff --git a/Amendment.java b/Amendment.java index 5908b66..4a2e56a 100644 --- a/Amendment.java +++ b/Amendment.java @@ -1,10 +1,8 @@ import javax.swing.ImageIcon; +public class Amendment extends Collectable { -public class Amendment extends Collectable{ - - public Amendment(int x, int y, int w, int h){ - super(x,y,w,h,new ImageIcon("Sprites/Amendment.png")); - } - -} \ No newline at end of file + public Amendment(int x, int y, int w, int h) { + super(x, y, w, h, new ImageIcon("Sprites/Amendment.png")); + } +} diff --git a/Brick.class b/Brick.class new file mode 100644 index 0000000..75209c4 Binary files /dev/null and b/Brick.class differ diff --git a/Brick.java b/Brick.java index f4c12c1..6ff79ad 100644 --- a/Brick.java +++ b/Brick.java @@ -1,8 +1,8 @@ import javax.swing.ImageIcon; public class Brick extends Tile { - - public Brick(int x, int y, int w, int h){ - super(x,y,w,h,new ImageIcon("Sprites/Bricks/Brick.png")); - } -} \ No newline at end of file + + public Brick(int x, int y, int w, int h) { + super(x, y, w, h, new ImageIcon("Sprites/Bricks/Brick.png")); + } +} diff --git a/Collectable.class b/Collectable.class new file mode 100644 index 0000000..c3a9449 Binary files /dev/null and b/Collectable.class differ diff --git a/Collectable.java b/Collectable.java index db41a3c..c6b9842 100644 --- a/Collectable.java +++ b/Collectable.java @@ -1,7 +1,7 @@ import javax.swing.ImageIcon; -public class Collectable extends Collidable{ - public Collectable(int x, int y, int w, int h,ImageIcon i){ - super(x,y,w,h,i); - } -} \ No newline at end of file +public class Collectable extends Collidable { + public Collectable(int x, int y, int w, int h, ImageIcon i) { + super(x, y, w, h, i); + } +} diff --git a/Collidable.class b/Collidable.class new file mode 100644 index 0000000..3a97e64 Binary files /dev/null and b/Collidable.class differ diff --git a/Collidable.java b/Collidable.java index 1e92fae..e5211ee 100644 --- a/Collidable.java +++ b/Collidable.java @@ -1,30 +1,30 @@ +import java.awt.Graphics; import java.awt.Rectangle; import javax.swing.ImageIcon; -import java.awt.Graphics; -public class Collidable extends Sprite{ - int x,y,width,height; - Rectangle rect; - - public Collidable(int x1, int y1, int w, int h, ImageIcon icon){ - super(icon); - x = x1; - y = y1; - width = w; - height = h; - rect = new Rectangle(x1,y1,w,h); - } - - public void draw(Graphics g){ - sprite = icon.getImage(); - g.drawImage(sprite, x, y, width, height, null); - } - - public boolean collidesWith(Collidable other) { - return this.rect.intersects(other.rect); - } - - public void onCollide(Collidable other){ - return; - } -} \ No newline at end of file +public class Collidable extends Sprite { + int x, y, width, height; + Rectangle rect; + + public Collidable(int x1, int y1, int w, int h, ImageIcon icon) { + super(icon); + x = x1; + y = y1; + width = w; + height = h; + rect = new Rectangle(x1, y1, w, h); + } + + public void draw(Graphics g) { + sprite = icon.getImage(); + g.drawImage(sprite, x, y, width, height, null); + } + + public boolean collidesWith(Collidable other) { + return this.rect.intersects(other.rect); + } + + public void onCollide(Collidable other) { + return; + } +} diff --git a/Display.class b/Display.class new file mode 100644 index 0000000..231dd33 Binary files /dev/null and b/Display.class differ diff --git a/Display.java b/Display.java index ad7e1b5..f44c3ba 100644 --- a/Display.java +++ b/Display.java @@ -1,21 +1,20 @@ import javax.swing.*; public class Display { - public static void main(String[] args) { - int boardWidth = 800; - int boardHeight = 800; - int tileSize = 20; - - JFrame game = new JFrame(); - game.setSize(boardWidth, boardHeight); - game.setVisible(true); - game.setLocationRelativeTo(null); - game.setResizable(false); - - - Platformer platformer = new Platformer(boardWidth, boardHeight, tileSize); - game.add(platformer); - game.pack(); - platformer.requestFocus(); - } -} \ No newline at end of file + public static void main(String[] args) { + int boardWidth = 800; + int boardHeight = 600; + int tileSize = 20; + + JFrame game = new JFrame(); + game.setSize(boardWidth, boardHeight); + game.setVisible(true); + game.setLocationRelativeTo(null); + game.setResizable(false); + + Platformer platformer = new Platformer(boardWidth, boardHeight, tileSize); + game.add(platformer); + game.pack(); + platformer.requestFocus(); + } +} diff --git a/Enemy.class b/Enemy.class new file mode 100644 index 0000000..1c23417 Binary files /dev/null and b/Enemy.class differ diff --git a/Enemy.java b/Enemy.java index 1a197aa..d2d9bf6 100644 --- a/Enemy.java +++ b/Enemy.java @@ -1,53 +1,53 @@ -import javax.swing.ImageIcon; import java.util.*; -public class Enemy extends Collidable{ - int xVelo, yVelo; - boolean alive; - - public Enemy(int x, int y, int w, int h, int level){ - super(x,y,w,h,new ImageIcon("Sprites/Enemies/" + level + ".png")); - xVelo = 2; - yVelo = 0; - alive = true; - } - - public void moveX(int moveX){ - this.x += moveX; - this.rect.x = this.x; +import javax.swing.ImageIcon; + +public class Enemy extends Collidable { + int xVelo, yVelo; + boolean alive; + + public Enemy(int x, int y, int w, int h, int level) { + super(x, y, w, h, new ImageIcon("Sprites/Enemies/" + level + ".png")); + xVelo = 2; + yVelo = 0; + alive = true; + } + + public void moveX(int moveX) { + this.x += moveX; + this.rect.x = this.x; + } + + public void moveY(int moveY) { + this.y += moveY; + this.rect.y = this.y; + } + + public void patrol(ArrayList collidables) { + moveX(xVelo); + + for (Collidable c : collidables) { + if (this.collidesWith(c)) { + xVelo = -xVelo; + moveX(xVelo * 2); + break; + } } - public void moveY(int moveY){ - this.y += moveY; - this.rect.y = this.y; + // check edge detection - is there ground below next step? + boolean edgeAhead = true; + int nextX = this.x + xVelo; + for (Collidable c : collidables) { + if (c instanceof Tile) { + Tile t = (Tile) c; + // check if tile is below enemy's next position + if (nextX + this.width > t.x && nextX < t.x + t.width && t.y == this.y + this.height) { + edgeAhead = false; + break; + } + } } - - public void patrol(ArrayList collidables){ - moveX(xVelo); - - for (Collidable c : collidables){ - if (this.collidesWith(c)){ - xVelo = -xVelo; - moveX(xVelo * 2); - break; - } - } - - // check edge detection - is there ground below next step? - boolean edgeAhead = true; - int nextX = this.x + xVelo; - for (Collidable c : collidables) { - if (c instanceof Tile) { - Tile t = (Tile) c; - // check if tile is below enemy's next position - if (nextX + this.width > t.x && nextX < t.x + t.width && - t.y == this.y + this.height) { - edgeAhead = false; - break; - } - } - } - if (edgeAhead) { - xVelo = -xVelo; - } + if (edgeAhead) { + xVelo = -xVelo; } -} \ No newline at end of file + } +} diff --git a/Flag.class b/Flag.class new file mode 100644 index 0000000..d7cc9e1 Binary files /dev/null and b/Flag.class differ diff --git a/Flag.java b/Flag.java index feb0536..7ebdf65 100644 --- a/Flag.java +++ b/Flag.java @@ -1,15 +1,15 @@ import javax.swing.ImageIcon; public class Flag extends Collidable { - public Flag(int x, int y, int w, int h) { - super(x, y, w, h, new ImageIcon("Sprites/Flag.png")); - } - - public void setPosition(int x, int y, int w, int h) { - this.x = x; - this.y = y; - this.width = w; - this.height = h; - this.rect.setBounds(x, y, w, h); - } -} \ No newline at end of file + public Flag(int x, int y, int w, int h) { + super(x, y, w, h, new ImageIcon("Sprites/Flag.png")); + } + + public void setPosition(int x, int y, int w, int h) { + this.x = x; + this.y = y; + this.width = w; + this.height = h; + this.rect.setBounds(x, y, w, h); + } +} diff --git a/LevelLoader.class b/LevelLoader.class new file mode 100644 index 0000000..146be3a Binary files /dev/null and b/LevelLoader.class differ diff --git a/LevelLoader.java b/LevelLoader.java index 15c94f0..2c5a9d3 100644 --- a/LevelLoader.java +++ b/LevelLoader.java @@ -1,41 +1,59 @@ -import java.util.*; import java.io.*; +import java.util.*; public class LevelLoader { - static int enemyWidth[] = {0,31,20,20,20,20,20,29,29,20,20}; - static int enemyHeight[] = {0,20,20,20,20,20,20,20,20,20,20}; - - public static void load(int tileSize, - ArrayList collidables, - ArrayList collectables, - ArrayList enemies, - Flag flag, - Player player, int level) throws IOException { - collidables.clear(); - collectables.clear(); - enemies.clear(); - - /*left wall*/ collidables.add(new Brick(-20,0,20,2000)); - - BufferedReader br = new BufferedReader(new FileReader("Levels/level" + level + ".txt")); - String line; - int row = 0; - while ((line = br.readLine()) != null) { - for (int col = 0; col < line.length(); col++) { - char c = line.charAt(col); - int x = col * tileSize; - int y = row * tileSize; - switch(c) { - case 'B': collidables.add(new Brick(x, y, tileSize, tileSize)); break; - case 'Q': collidables.add(new PowerBrick(x, y, tileSize, tileSize, 1)); break; - case 'A': collectables.add(new Amendment(x, y, tileSize, tileSize)); break; - case 'F': flag.setPosition(x, y, tileSize, tileSize); break; - case 'P': player.x = x; player.y = y; player.rect.x = x; player.rect.y = y; break; - case 'E': enemies.add(new Enemy(x,y,enemyWidth[level],enemyHeight[level],level)); break; - } - } - row++; + static int enemyWidth[] = {0, 31, 20, 20, 20, 20, 20, 29, 29, 20, 20}; + static int enemyHeight[] = {0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20}; + + public static void load( + int tileSize, + ArrayList collidables, + ArrayList collectables, + ArrayList enemies, + Flag flag, + Player player, + int level) + throws IOException { + collidables.clear(); + collectables.clear(); + enemies.clear(); + + /*left wall*/ collidables.add(new Brick(-20, 0, 20, 2000)); + + BufferedReader br = new BufferedReader(new FileReader("Levels/level" + level + ".txt")); + String line; + int row = 0; + while ((line = br.readLine()) != null) { + for (int col = 0; col < line.length(); col++) { + char c = line.charAt(col); + int x = col * tileSize; + int y = row * tileSize; + switch (c) { + case 'B': + collidables.add(new Brick(x, y, tileSize, tileSize)); + break; + case 'Q': + collidables.add(new PowerBrick(x, y, tileSize, tileSize, 1)); + break; + case 'A': + collectables.add(new Amendment(x, y, tileSize, tileSize)); + break; + case 'F': + flag.setPosition(x, y, tileSize, tileSize); + break; + case 'P': + player.x = x; + player.y = y; + player.rect.x = x; + player.rect.y = y; + break; + case 'E': + enemies.add(new Enemy(x, y, enemyWidth[level], enemyHeight[level], level)); + break; } - br.close(); + } + row++; } -} \ No newline at end of file + br.close(); + } +} diff --git a/Levels/level2.txt b/Levels/level2.txt index ea68da3..df06d20 100644 --- a/Levels/level2.txt +++ b/Levels/level2.txt @@ -31,9 +31,9 @@ ................................................................. . . -................................................. +............E..................................... ........BBBBB.............A.................................................................... .........................QBQQQQQBBBB .................................................................................................... -.P.............E..............E...................E............................................................F.. -BBBBBBBBBBBBBBBBBB...BBBBBBBBBBBBBBBBB...BBBBBBBBBBBBBBBBBBB...BBBBBBB......................................BBBBBBBBBBBBBBBBBBBB \ No newline at end of file +.P............................E...................E............................................................F.. +BBBBBBBBBBBBBBBBBB...BBBBBBBBBBBBBBBBB...BBBBBBBBBBBBBBBBBBB...BBBBBBB......................................BBBBBBBBBBBBBBBBBBBB diff --git a/Platformer.class b/Platformer.class new file mode 100644 index 0000000..14cd656 Binary files /dev/null and b/Platformer.class differ diff --git a/Platformer.java b/Platformer.java index 584fca0..7b61740 100644 --- a/Platformer.java +++ b/Platformer.java @@ -1,489 +1,474 @@ -import java.util.ArrayList; -import java.util.HashMap; -import java.io.*; import java.awt.*; import java.awt.event.*; - +import java.io.*; +import java.util.ArrayList; +import java.util.HashMap; import javax.swing.*; +public class Platformer extends JPanel implements KeyListener, ActionListener { -public class Platformer extends JPanel implements KeyListener, ActionListener{ + // constants + static final int GRAVITY = 1; + static final Color playerColor = Color.RED; + static final Color tileColor = Color.BLUE; + static final Color SKY = new Color(135, 206, 235); + static final int FRICTION = 1; + static final int MAXYVELO = 15; + static final int MAXXVELO = 5; + static final int totalLevels = 10; + static int[] numAm = {4, 5, 0, 0, 0, 0, 0, 0, 0, 0}; - //constants - static final int GRAVITY = 1; - static final Color playerColor = Color.RED; - static final Color tileColor = Color.BLUE; - static final Color SKY = new Color(135, 206, 235); - static final int FRICTION = 1; - static final int MAXYVELO = 15; - static final int MAXXVELO = 5; - static final int totalLevels = 10; - static int[] numAm = {4,5,0,0,0,0,0,0,0,0}; - - //game objects - Player player; - ArrayList collidables; - ArrayList collectables; - Flag flag; - ArrayList enemies; - ArrayList projectiles; + // game objects + Player player; + ArrayList collidables; + ArrayList collectables; + Flag flag; + ArrayList enemies; + ArrayList projectiles; - //game vars - int boardWidth; - int boardHeight; - int tileSize; - Timer gameTimer; - HashMap pressedKeys; - boolean jumpPressed; - int cameraX, cameraY; - int currentLevel; - boolean allCollected; - boolean gameOver; - boolean gameStarted; - Image heart,emptyHeart,slash,amendmentImg,powerImg,pressRImg,endImg,winImg,titleImg; - ArrayList numbers; - + // game vars + int boardWidth; + int boardHeight; + int tileSize; + Timer gameTimer; + HashMap pressedKeys; + boolean jumpPressed; + int cameraX, cameraY; + int currentLevel; + boolean allCollected; + boolean gameOver; + boolean gameStarted; + Image heart, emptyHeart, slash, amendmentImg, powerImg, pressRImg, endImg, winImg, titleImg; + ArrayList numbers; - public Platformer(int boardWidth, int boardHeight, int tileSize){ - //setup game - this.boardWidth = boardWidth; - this.boardHeight = boardHeight; - this.tileSize = tileSize; - setPreferredSize(new Dimension(this.boardWidth, this.boardHeight)); - addKeyListener(this); - this.setFocusable(true); - this.setLayout(null); - - - pressedKeys = new HashMap<>(); - jumpPressed = false; - gameOver = false; - gameStarted = false; - setBackground(SKY); + public Platformer(int boardWidth, int boardHeight, int tileSize) { + // setup game + this.boardWidth = boardWidth; + this.boardHeight = boardHeight; + this.tileSize = tileSize; + setPreferredSize(new Dimension(this.boardWidth, this.boardHeight)); + addKeyListener(this); + this.setFocusable(true); + this.setLayout(null); - //setup objects - heart = new ImageIcon("Sprites/Hearts/heart.png").getImage(); - titleImg = new ImageIcon("Sprites/Title.png").getImage(); - emptyHeart = new ImageIcon("Sprites/Hearts/emptyHeart.png").getImage(); - endImg = new ImageIcon("Sprites/end.png").getImage(); - pressRImg = new ImageIcon("Sprites/PressR.png").getImage(); - winImg = new ImageIcon("Sprites/win.png").getImage(); - gameTimer = new Timer(15,this); - player = new Player(-20,0,tileSize,tileSize); - collidables = new ArrayList<>(); - collectables = new ArrayList<>(); - enemies = new ArrayList<>(); - projectiles = new ArrayList<>(); - flag = new Flag(-20,0,tileSize,tileSize); - cameraX = 0; - cameraY = 0; - currentLevel = 0; - numbers = new ArrayList<>(); - for (int i =0; i < 10; i++) numbers.add((new ImageIcon("Sprites/Numbers/" + i + ".png")).getImage()); - slash = new ImageIcon("Sprites/Numbers/Slash.png").getImage(); - amendmentImg = new ImageIcon("Sprites/Amendment.png").getImage(); - powerImg = new ImageIcon("Sprites/Powerup1.png").getImage(); - + pressedKeys = new HashMap<>(); + jumpPressed = false; + gameOver = false; + gameStarted = false; + setBackground(SKY); + + // setup objects + heart = new ImageIcon("Sprites/Hearts/heart.png").getImage(); + titleImg = new ImageIcon("Sprites/Title.png").getImage(); + emptyHeart = new ImageIcon("Sprites/Hearts/emptyHeart.png").getImage(); + endImg = new ImageIcon("Sprites/end.png").getImage(); + pressRImg = new ImageIcon("Sprites/PressR.png").getImage(); + winImg = new ImageIcon("Sprites/win.png").getImage(); + gameTimer = new Timer(15, this); + player = new Player(-20, 0, tileSize, tileSize); + collidables = new ArrayList<>(); + collectables = new ArrayList<>(); + enemies = new ArrayList<>(); + projectiles = new ArrayList<>(); + flag = new Flag(-20, 0, tileSize, tileSize); + cameraX = 0; + cameraY = 0; + currentLevel = 0; + numbers = new ArrayList<>(); + for (int i = 0; i < 10; i++) + numbers.add((new ImageIcon("Sprites/Numbers/" + i + ".png")).getImage()); + slash = new ImageIcon("Sprites/Numbers/Slash.png").getImage(); + amendmentImg = new ImageIcon("Sprites/Amendment.png").getImage(); + powerImg = new ImageIcon("Sprites/Powerup1.png").getImage(); + + gameTimer.start(); + + // if i wanna add a button + /*JButton gameStart = new JButton("Start Game"); + gameStart.addActionListener(e -> { + loadLevel(currentLevel); gameTimer.start(); - - - //if i wanna add a button - /*JButton gameStart = new JButton("Start Game"); - gameStart.addActionListener(e -> { - loadLevel(currentLevel); - gameTimer.start(); - this.remove(gameStart); - this.revalidate(); - this.repaint(); - }); - gameStart.setBorderPainted(false); - gameStart.setFocusPainted(false); - gameStart.setBounds(193,200,114,15); - gameStart.setForeground(new Color(52, 152, 219)); - this.add(gameStart);*/ + this.remove(gameStart); + this.revalidate(); + this.repaint(); + }); + gameStart.setBorderPainted(false); + gameStart.setFocusPainted(false); + gameStart.setBounds(193,200,114,15); + gameStart.setForeground(new Color(52, 152, 219)); + this.add(gameStart);*/ + } + + // gameloop + public void gameLoop() { + if (currentLevel > totalLevels) return; + // camera + cameraX = player.x - boardWidth / 2; + cameraX = Math.max(0, cameraX); + cameraY = player.y - boardHeight / 2; + // cameraY = Math.max(0, cameraY); + + // win + allCollected = player.numAmendments >= numAm[currentLevel - 1]; + if (player.collidesWith(flag) && allCollected) { + currentLevel++; + player.health = 3; + if (currentLevel > totalLevels) { + gameTimer.stop(); + System.out.println("You win!"); + return; + } else { + loadLevel(currentLevel); + } + return; } - //gameloop - public void gameLoop(){ - if (currentLevel > totalLevels) return; - //camera - cameraX = player.x - boardWidth / 2; - cameraX = Math.max(0, cameraX); - cameraY = player.y - boardHeight / 2; - //cameraY = Math.max(0, cameraY); - - - - //win - allCollected = player.numAmendments >= numAm[currentLevel-1]; - if (player.collidesWith(flag) && allCollected) { - currentLevel++; - player.health = 3; - if (currentLevel > totalLevels) { - gameTimer.stop(); - System.out.println("You win!"); - return; - } else { - loadLevel(currentLevel); - } - return; - } + // keys + if (Math.abs(player.xVelo) < MAXXVELO) { + if (isKeyPressed(KeyEvent.VK_D) || isKeyPressed(KeyEvent.VK_RIGHT)) { + player.xVelo += 1; + } else if (isKeyPressed(KeyEvent.VK_A) || isKeyPressed(KeyEvent.VK_LEFT)) { + player.xVelo -= 1; + } + } + if (!isKeyPressed(KeyEvent.VK_D) + && !isKeyPressed(KeyEvent.VK_RIGHT) + && !isKeyPressed(KeyEvent.VK_A) + && !isKeyPressed(KeyEvent.VK_LEFT)) { // friction + if (player.xVelo > 0) { + player.xVelo = Math.max(0, player.xVelo - FRICTION); + } else if (player.xVelo < 0) { + player.xVelo = Math.min(0, player.xVelo + FRICTION); + } + } - //keys - if (Math.abs(player.xVelo) < MAXXVELO){ - if(isKeyPressed(KeyEvent.VK_D) || isKeyPressed(KeyEvent.VK_RIGHT)){ - player.xVelo += 1; - } - else if(isKeyPressed(KeyEvent.VK_A) || isKeyPressed(KeyEvent.VK_LEFT)){ - player.xVelo -= 1; - } - - } - if (!isKeyPressed(KeyEvent.VK_D) && !isKeyPressed(KeyEvent.VK_RIGHT) && !isKeyPressed(KeyEvent.VK_A) && !isKeyPressed(KeyEvent.VK_LEFT)){ //friction - if (player.xVelo > 0){ - player.xVelo = Math.max(0, player.xVelo - FRICTION); - } - else if (player.xVelo < 0){ - player.xVelo = Math.min(0, player.xVelo + FRICTION); - } - } - - //jump - boolean jumpKeyDown = (isKeyPressed(KeyEvent.VK_W) || isKeyPressed(KeyEvent.VK_UP)); - if(jumpKeyDown && !jumpPressed){ - if(player.onGround){ - player.yVelo = -15; - player.onGround = false; - jumpPressed = true; - player.airJumps = 0; - } - else if (player.curPower == 1 && player.airJumps < 1){ - player.yVelo = -15; - player.airJumps++; - jumpPressed = true; - } - } - if (!jumpKeyDown){ - jumpPressed = false; - } - - //gravity - if (player.yVelo < MAXYVELO){ - player.yVelo += GRAVITY; - } - - //fall out of world - if (player.y > boardHeight){ - loadLevel(currentLevel); - player.health--; - } - - for (Collectable c : collectables){ - if (c instanceof Powerup){ - Powerup pu = (Powerup) c; - if (pu.yVelo < MAXYVELO && !pu.onGround){ - pu.yVelo += GRAVITY; - } - pu.moveY(pu.yVelo); - for (Collidable col : collidables) { - if (pu.collidesWith(col)) { - pu.yVelo = 0; - pu.onGround = true; - pu.y = ((Tile)col).y - pu.height; - pu.rect.y = pu.y; - } - } - if (player.collidesWith(pu)) { - player.curPower = pu.id; - player.powerTimer = Player.POWER_DURATION; - } - } - else if (c instanceof Amendment){ - Amendment am = (Amendment) c; - if (player.collidesWith(am)){ - player.numAmendments++; - } - } - } - collectables.removeIf(c -> player.collidesWith(c)); - - //update x - player.moveX(player.xVelo); - - //collision with all tiles x - for (Collidable c : collidables) { - if (player.collidesWith(c)) { - player.onCollideX(c); - } - } - - //update y - player.moveY(player.yVelo); - //assume not on ground + // jump + boolean jumpKeyDown = (isKeyPressed(KeyEvent.VK_W) || isKeyPressed(KeyEvent.VK_UP)); + if (jumpKeyDown && !jumpPressed) { + if (player.onGround) { + player.yVelo = -15; player.onGround = false; - - //collision with all tiles y - for (Collidable c : collidables) { - if (player.collidesWith(c)) { - player.onCollideY(c,collectables); - } - } - - - - //Powerup timer - if (player.curPower > 0) { - player.powerTimer--; - if (player.powerTimer <= 0) { - player.curPower = 0; - } - } - - //update facing - if (player.xVelo > 0) player.facing = 1; - else if (player.xVelo < 0) player.facing = -1; - - // shoot cooldown - if (player.shootCooldown > 0) player.shootCooldown--; - - // invincibility timer - if (player.invincibleTimer > 0) player.invincibleTimer--; - - //shoot - //projectiles - if (isKeyPressed(KeyEvent.VK_SPACE) && player.shootCooldown == 0){ - int projX = player.facing == 1 ? player.x + player.width : player.x - 10; - projectiles.add(new Projectile(projX,player.y,tileSize,10,currentLevel,player.facing)); - player.shootCooldown = Player.SHOOT_COOLDOWN; - } - - projectiles.removeIf(p -> p.x < -50 + cameraX || p.x > boardWidth + cameraX + 200); - for (Projectile p : new ArrayList<>(projectiles)) { - p.move(); - // projectile hits tile - for (Collidable c : collidables) { - if (p.collidesWith(c)) { - projectiles.remove(p); - break; - } - } - } - - - // update enemies - for (Enemy e : enemies) { - e.patrol(collidables); - // enemy hits player - if (player.collidesWith(e)) { - player.takeDamage(); - } - } - - //die - if (player.health <= 0) { - System.out.print("Game Over - You Died!"); - gameOver = true; - gameTimer.stop(); - } - - //projectile hits enemy - for (Projectile p : new ArrayList<>(projectiles)){ - for (Enemy e : new ArrayList<>(enemies)){ - if (p.collidesWith(e)) { - enemies.remove(e); - projectiles.remove(p); - break; - } - } - } - enemies.removeIf(e -> !e.alive); + jumpPressed = true; + player.airJumps = 0; + } else if (player.curPower == 1 && player.airJumps < 1) { + player.yVelo = -15; + player.airJumps++; + jumpPressed = true; + } } - - public void loadLevel(int level) { - projectiles.clear(); - try { - LevelLoader.load(tileSize, collidables, collectables, enemies, flag, player, level); - player.reset(); - player.setLevel(level); - cameraX = 0; - cameraY = 0; - } catch (IOException e) { - System.out.println("Could not load level " + level); - } + if (!jumpKeyDown) { + jumpPressed = false; } - //paintComponent - public void paintComponent(Graphics g){ - super.paintComponent(g); - draw(g); - } - - //draw function - public void draw(Graphics g){ - //gameover screen - if (gameOver){ - g.drawImage(endImg, boardWidth/2 - 100, boardHeight/2 - 150, null); - g.drawImage(pressRImg, boardWidth/2 - 80, boardHeight/2, null); - return; - } - - g.translate(-cameraX, -cameraY); - - if (currentLevel > totalLevels) { - g.drawImage(winImg, boardWidth/2 - 100, boardHeight/2 - 50, null); - g.drawImage(pressRImg, boardWidth/2 - 80, boardHeight/2 + 60, null); - return; - } - - player.draw(g); - for (Collidable c : collidables) c.draw(g); - for (Collectable c : collectables) c.draw(g); - for (Enemy e : enemies) e.draw(g); - for (Projectile p : projectiles) p.draw(g); - flag.draw(g); - - //flag counter - int amOnes = player.numAmendments % 10; - int amTens = player.numAmendments / 10; - - if (currentLevel > 0 && player.numAmendments < numAm[currentLevel-1]){ - if (amTens > 0) g.drawImage(numbers.get(amTens),flag.x-20,flag.y-30,null); - g.drawImage(numbers.get(amOnes),flag.x+5,flag.y-30,null); - g.drawImage(slash,flag.x+28,flag.y-32,null); - g.drawImage(numbers.get(numAm[currentLevel-1]),flag.x+55,flag.y-30,null); - g.drawImage(amendmentImg,flag.x+85,flag.y-30,null); - } - - g.translate(cameraX, cameraY); - - - int modAmt = 2000; - int curTime = (int) System.currentTimeMillis() % modAmt; - curTime = Math.abs(curTime); - - //start screen - int startTime = 0; - if (curTime >= 0 && curTime <= modAmt/4-1) startTime = 0; - else if (curTime >= modAmt/4 && curTime <= modAmt/2-1) startTime = 1; - else if (curTime >= modAmt/2 && curTime <= modAmt*3/4-1) startTime = 2; - else if (curTime >= modAmt*3/4 && curTime <= modAmt-1) startTime = 3; - - if (currentLevel == 0){ - g.drawImage(titleImg, boardWidth/2 - 150, boardHeight/2 - 200, null); - - g.drawString("An American Identity Project", boardWidth/2 - 75, boardHeight/2-40); - String text = "Press P to Start!"; - int xBase = 340; - int yBase = 400; - int spacing = 8; - for (int i = 0; i < text.length(); i++) { - char c = text.charAt(i); - - // x moves linearly - int x = xBase + (i * spacing); - - // y uses a sine wave - // Math.sin takes radians. We use (startTime + i) to give each letter a different phase. - double waveOffset = Math.sin(startTime + i * 0.5) * 10; - int y = yBase + (int)waveOffset; - - g.drawString(String.valueOf(c), x, y); - } - } - - if (currentLevel > 0){ - - //draw hearts: - int heartTime = 0; - if (curTime >= 0 && curTime <= modAmt/2-1) heartTime = 1; - else if (curTime >= modAmt/2 && curTime <= modAmt-1) heartTime = 0; - for (int i = 0; i < player.health; i++){ - g.drawImage(heart,(((i+1) * 20)-10)+heartTime,10+heartTime * 2,null); - } - for (int i =0; i < 3 - player.health; i++){ - g.drawImage(emptyHeart,(50 - (i * 20)) + heartTime,10+heartTime * 2,null); - } - - //draw amendments counter in top right - - if (amTens > 0) g.drawImage(numbers.get(amTens),315,10,null); - g.drawImage(numbers.get(amOnes),340,10,null); - g.drawImage(slash,363,12,null); - g.drawImage(numbers.get(numAm[currentLevel-1]),390,10,null); - g.drawImage(amendmentImg,420,10,null); - - - //draw powerup timer - if (player.curPower == 1){ - int secs = player.powerTimer/66; - int tens = secs/10; - int ones = secs%10; - if (tens > 0){ - g.drawImage(numbers.get(tens),184,10,null); - } - g.drawImage(numbers.get(ones),205,10,null); - g.drawImage(powerImg,220,10,null); - } - } + // gravity + if (player.yVelo < MAXYVELO) { + player.yVelo += GRAVITY; } - //is key pressed - public boolean isKeyPressed(int key){ - return pressedKeys.getOrDefault(key,false); + // fall out of world + if (player.y > 2000) { + loadLevel(currentLevel); + player.health--; } - //every tick - @Override - public void actionPerformed(ActionEvent e){ - if (gameStarted) { - gameLoop(); + for (Collectable c : collectables) { + if (c instanceof Powerup) { + Powerup pu = (Powerup) c; + if (pu.yVelo < MAXYVELO && !pu.onGround) { + pu.yVelo += GRAVITY; } + pu.moveY(pu.yVelo); + for (Collidable col : collidables) { + if (pu.collidesWith(col)) { + pu.yVelo = 0; + pu.onGround = true; + pu.y = ((Tile) col).y - pu.height; + pu.rect.y = pu.y; + } + } + if (player.collidesWith(pu)) { + player.curPower = pu.id; + player.powerTimer = Player.POWER_DURATION; + } + } else if (c instanceof Amendment) { + Amendment am = (Amendment) c; + if (player.collidesWith(am)) { + player.numAmendments++; + } + } + } + collectables.removeIf(c -> player.collidesWith(c)); + + // update x + player.moveX(player.xVelo); + + // collision with all tiles x + for (Collidable c : collidables) { + if (player.collidesWith(c)) { + player.onCollideX(c); + } + } + + // update y + player.moveY(player.yVelo); + // assume not on ground + player.onGround = false; + + // collision with all tiles y + for (Collidable c : collidables) { + if (player.collidesWith(c)) { + player.onCollideY(c, collectables); + } + } + + // Powerup timer + if (player.curPower > 0) { + player.powerTimer--; + if (player.powerTimer <= 0) { + player.curPower = 0; + } + } + + // update facing + if (player.xVelo > 0) player.facing = 1; + else if (player.xVelo < 0) player.facing = -1; + + // shoot cooldown + if (player.shootCooldown > 0) player.shootCooldown--; + + // invincibility timer + if (player.invincibleTimer > 0) player.invincibleTimer--; + + // shoot + // projectiles + if (isKeyPressed(KeyEvent.VK_SPACE) && player.shootCooldown == 0) { + int projX = player.facing == 1 ? player.x + player.width : player.x - 10; + projectiles.add(new Projectile(projX, player.y, tileSize, 10, currentLevel, player.facing)); + player.shootCooldown = Player.SHOOT_COOLDOWN; + } + + projectiles.removeIf(p -> p.x < -50 + cameraX || p.x > boardWidth + cameraX + 200); + for (Projectile p : new ArrayList<>(projectiles)) { + p.move(); + // projectile hits tile + for (Collidable c : collidables) { + if (p.collidesWith(c)) { + projectiles.remove(p); + break; + } + } + } + + // update enemies + for (Enemy e : enemies) { + e.patrol(collidables); + // enemy hits player + if (player.collidesWith(e)) { + player.takeDamage(); + } + } + + // die + if (player.health <= 0) { + System.out.print("Game Over - You Died!"); + gameOver = true; + gameTimer.stop(); + } + + // projectile hits enemy + for (Projectile p : new ArrayList<>(projectiles)) { + for (Enemy e : new ArrayList<>(enemies)) { + if (p.collidesWith(e)) { + enemies.remove(e); + projectiles.remove(p); + break; + } + } + } + enemies.removeIf(e -> !e.alive); + } + + public void loadLevel(int level) { + projectiles.clear(); + try { + LevelLoader.load(tileSize, collidables, collectables, enemies, flag, player, level); + player.reset(); + player.setLevel(level); + cameraX = 0; + cameraY = 0; + } catch (IOException e) { + System.out.println("Could not load level " + level); + } + } + + // paintComponent + public void paintComponent(Graphics g) { + super.paintComponent(g); + draw(g); + } + + // draw function + public void draw(Graphics g) { + // gameover screen + if (gameOver) { + g.drawImage(endImg, boardWidth / 2 - 100, boardHeight / 2 - 150, null); + g.drawImage(pressRImg, boardWidth / 2 - 80, boardHeight / 2, null); + return; + } + + if (currentLevel > totalLevels) { + g.drawImage(winImg, boardWidth / 2 - 100, boardHeight / 2 - 50, null); + g.drawImage(pressRImg, boardWidth / 2 - 80, boardHeight / 2 + 60, null); + return; + } + + g.translate(-cameraX, -cameraY); + + player.draw(g); + for (Collidable c : collidables) c.draw(g); + for (Collectable c : collectables) c.draw(g); + for (Enemy e : enemies) e.draw(g); + for (Projectile p : projectiles) p.draw(g); + flag.draw(g); + + // flag counter + int amOnes = player.numAmendments % 10; + int amTens = player.numAmendments / 10; + + if (currentLevel > 0 && player.numAmendments < numAm[currentLevel - 1]) { + if (amTens > 0) g.drawImage(numbers.get(amTens), flag.x - 20, flag.y - 30, null); + g.drawImage(numbers.get(amOnes), flag.x + 5, flag.y - 30, null); + g.drawImage(slash, flag.x + 28, flag.y - 32, null); + g.drawImage(numbers.get(numAm[currentLevel - 1]), flag.x + 55, flag.y - 30, null); + g.drawImage(amendmentImg, flag.x + 85, flag.y - 30, null); + } + + g.translate(cameraX, cameraY); + + int modAmt = 2000; + int curTime = (int) System.currentTimeMillis() % modAmt; + curTime = Math.abs(curTime); + + // start screen + int startTime = 0; + if (curTime >= 0 && curTime <= modAmt / 4 - 1) startTime = 0; + else if (curTime >= modAmt / 4 && curTime <= modAmt / 2 - 1) startTime = 1; + else if (curTime >= modAmt / 2 && curTime <= modAmt * 3 / 4 - 1) startTime = 2; + else if (curTime >= modAmt * 3 / 4 && curTime <= modAmt - 1) startTime = 3; + + if (currentLevel == 0) { + g.drawImage(titleImg, boardWidth / 2 - 150, boardHeight / 2 - 200, null); + + g.drawString("An American Identity Project", boardWidth / 2 - 75, boardHeight / 2 - 40); + String text = "Press P to Start!"; + int xBase = 340; + int yBase = 400; + int spacing = 8; + for (int i = 0; i < text.length(); i++) { + char c = text.charAt(i); + + // x moves linearly + int x = xBase + (i * spacing); + + // y uses a sine wave + // Math.sin takes radians. We use (startTime + i) to give each letter a different phase. + double waveOffset = Math.sin(startTime + i * 0.5) * 10; + int y = yBase + (int) waveOffset; + + g.drawString(String.valueOf(c), x, y); + } + } + + if (currentLevel > 0) { + + // draw hearts: + int heartTime = 0; + if (curTime >= 0 && curTime <= modAmt / 2 - 1) heartTime = 1; + else if (curTime >= modAmt / 2 && curTime <= modAmt - 1) heartTime = 0; + for (int i = 0; i < player.health; i++) { + g.drawImage(heart, (((i + 1) * 20) - 10) + heartTime, 10 + heartTime * 2, null); + } + for (int i = 0; i < 3 - player.health; i++) { + g.drawImage(emptyHeart, (50 - (i * 20)) + heartTime, 10 + heartTime * 2, null); + } + + // draw amendments counter in top right + + if (amTens > 0) g.drawImage(numbers.get(amTens), 315, 10, null); + g.drawImage(numbers.get(amOnes), 340, 10, null); + g.drawImage(slash, 363, 12, null); + g.drawImage(numbers.get(numAm[currentLevel - 1]), 390, 10, null); + g.drawImage(amendmentImg, 420, 10, null); + + // draw powerup timer + if (player.curPower == 1) { + int secs = player.powerTimer / 66; + int tens = secs / 10; + int ones = secs % 10; + if (tens > 0) { + g.drawImage(numbers.get(tens), 184, 10, null); + } + g.drawImage(numbers.get(ones), 205, 10, null); + g.drawImage(powerImg, 220, 10, null); + } + } + } + + // is key pressed + public boolean isKeyPressed(int key) { + return pressedKeys.getOrDefault(key, false); + } + + // every tick + @Override + public void actionPerformed(ActionEvent e) { + if (gameStarted) { + gameLoop(); + } + repaint(); + } + + // check for key presses + @Override + public void keyPressed(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_P) { + if (currentLevel == 0) { + currentLevel = 1; + loadLevel(currentLevel); + gameStarted = true; + } + gameTimer.start(); + return; + } + + if (e.getKeyCode() == KeyEvent.VK_R) { + if (gameOver) { + gameTimer.stop(); + loadLevel(1); + currentLevel = 1; + jumpPressed = false; + player.health = 3; + gameOver = false; repaint(); + gameTimer.start(); + gameStarted = true; + } } - //check for key presses - @Override - public void keyPressed(KeyEvent e){ - if (e.getKeyCode() == KeyEvent.VK_P){ - if(currentLevel == 0) { - currentLevel = 1; - loadLevel(currentLevel); - gameStarted = true; - } - gameTimer.start(); - return; - } - - if (e.getKeyCode() == KeyEvent.VK_R){ - if (gameOver) { - gameTimer.stop(); - loadLevel(1); - currentLevel = 1; - jumpPressed = false; - player.health=3; - gameOver = false; - repaint(); - return; - } - return; - } - - if (e.getKeyCode() == KeyEvent.VK_O){ - currentLevel++; - loadLevel(currentLevel); - } - - pressedKeys.put(e.getKeyCode(),true); + if (e.getKeyCode() == KeyEvent.VK_O) { + currentLevel++; + loadLevel(currentLevel); } - @Override - public void keyReleased(KeyEvent e){ - pressedKeys.put(e.getKeyCode(),false); - } + pressedKeys.put(e.getKeyCode(), true); + } - //dont need - @Override - public void keyTyped(KeyEvent e){ + @Override + public void keyReleased(KeyEvent e) { + pressedKeys.put(e.getKeyCode(), false); + } - } -} \ No newline at end of file + // dont need + @Override + public void keyTyped(KeyEvent e) {} +} diff --git a/Player.class b/Player.class new file mode 100644 index 0000000..711a69b Binary files /dev/null and b/Player.class differ diff --git a/Player.java b/Player.java index 5b22986..c74d14c 100644 --- a/Player.java +++ b/Player.java @@ -1,109 +1,108 @@ -import javax.swing.ImageIcon; import java.util.*; +import javax.swing.ImageIcon; + public class Player extends Collidable { - - static final int JUMP_HEIGHT = 10; - static final int POWER_DURATION = 2000; // 2000 ticks ≈ 30 seconds - static final int I_FRAMES = 67; // ~1 second - static final int SHOOT_COOLDOWN = 33; //~0.5 second - - int health; - int yVelo; - int xVelo; - boolean onGround; - int curPower; - int powerTimer; - int airJumps; - int facing; // 1 is right -1 is left - int invincibleTimer; - int shootCooldown; - int numAmendments; - - public Player(int x, int y, int w, int h){ - super(x,y,w,h,new ImageIcon("Sprites/Player/1.png")); - xVelo = 0; - yVelo = 0; - onGround = false; - curPower = 0; - powerTimer = 0; + + static final int JUMP_HEIGHT = 10; + static final int POWER_DURATION = 2000; // 2000 ticks ≈ 30 seconds + static final int I_FRAMES = 67; // ~1 second + static final int SHOOT_COOLDOWN = 33; // ~0.5 second + + int health; + int yVelo; + int xVelo; + boolean onGround; + int curPower; + int powerTimer; + int airJumps; + int facing; // 1 is right -1 is left + int invincibleTimer; + int shootCooldown; + int numAmendments; + + public Player(int x, int y, int w, int h) { + super(x, y, w, h, new ImageIcon("Sprites/Player/1.png")); + xVelo = 0; + yVelo = 0; + onGround = false; + curPower = 0; + powerTimer = 0; + airJumps = 0; + invincibleTimer = 0; + shootCooldown = 0; + health = 3; + facing = 1; + numAmendments = 0; + } + + public void moveX(int moveX) { + this.x += moveX; + this.rect.x = this.x; + } + + public void moveY(int moveY) { + this.y += moveY; + this.rect.y = this.y; + } + + public void setLevel(int level) { + this.icon = new ImageIcon("Sprites/Player/" + level + ".png"); + } + + public void onCollideX(Collidable other) { + if (other instanceof Tile) { + Tile t = (Tile) other; + int playerCenterX = this.x + this.width / 2; + int tileCenterX = t.x + t.width / 2; + if (playerCenterX > tileCenterX) { // player on right side of tiile + this.x = t.x + t.width; + } else { // player on left side of tile + this.x = t.x - this.width; + } + this.xVelo = 0; + this.rect.x = this.x; + } + } + + public void onCollideY(Collidable other, ArrayList collectables) { + if (other instanceof Tile) { + Tile t = (Tile) other; + if (this.yVelo >= 0) { // falling down, land on top of tile + this.y = t.y - this.height; + onGround = true; airJumps = 0; - invincibleTimer = 0; - shootCooldown = 0; - health = 3; - facing = 1; - numAmendments = 0; - } - - public void moveX(int moveX){ - this.x += moveX; - this.rect.x = this.x; - } - - public void moveY(int moveY){ - this.y += moveY; - this.rect.y = this.y; - } - - public void setLevel(int level){ - this.icon = new ImageIcon("Sprites/Player/" + level + ".png"); - } - - public void onCollideX(Collidable other){ - if (other instanceof Tile){ - Tile t = (Tile) other; - int playerCenterX = this.x + this.width / 2; - int tileCenterX = t.x + t.width / 2; - if (playerCenterX > tileCenterX) { //player on right side of tiile - this.x = t.x + t.width; - } - else { //player on left side of tile - this.x = t.x - this.width; - } - this.xVelo = 0; - this.rect.x = this.x; + } else { // moving up, hit underside of tile + this.y = t.y + t.height; + if (other instanceof PowerBrick) { + PowerBrick pb = (PowerBrick) other; + if (!pb.hit) { + pb.spawnPower(collectables); + } } + } + this.yVelo = 0; + this.rect.y = this.y; } + } - public void onCollideY(Collidable other, ArrayList collectables){ - if (other instanceof Tile){ - Tile t = (Tile) other; - if (this.yVelo >= 0) { // falling down, land on top of tile - this.y = t.y - this.height; - onGround = true; - airJumps = 0; - } - else { // moving up, hit underside of tile - this.y = t.y + t.height; - if (other instanceof PowerBrick){ - PowerBrick pb = (PowerBrick) other; - if(!pb.hit){ - pb.spawnPower(collectables); - } - } - } - this.yVelo = 0; - this.rect.y = this.y; - } + public void takeDamage() { + if (invincibleTimer <= 0) { + health--; + invincibleTimer = I_FRAMES; } - - public void takeDamage() { - if (invincibleTimer <= 0) { - health--; - invincibleTimer = I_FRAMES; - } - } - - public void reset(){ - this.rect.x = this.x; - this.rect.y = this.y; - this.xVelo = this.yVelo = 0; - this.curPower = 0; - this.powerTimer = 0; - this.airJumps = 0; - this.onGround = false; - this.invincibleTimer = 0; - this.shootCooldown = 0; - this.facing = 1; - this.numAmendments = 0; - } -} \ No newline at end of file + } + + public void reset() { + this.rect.x = this.x; + this.rect.y = this.y; + this.xVelo = this.yVelo = 0; + this.curPower = 0; + this.powerTimer = 0; + this.airJumps = 0; + this.onGround = false; + this.invincibleTimer = 0; + this.shootCooldown = 0; + this.facing = 1; + this.numAmendments = 0; + } +} diff --git a/PowerBrick.class b/PowerBrick.class new file mode 100644 index 0000000..b5510f5 Binary files /dev/null and b/PowerBrick.class differ diff --git a/PowerBrick.java b/PowerBrick.java index 7fa6d74..6536d1a 100644 --- a/PowerBrick.java +++ b/PowerBrick.java @@ -1,24 +1,24 @@ -import javax.swing.ImageIcon; import java.util.*; +import javax.swing.ImageIcon; -public class PowerBrick extends Tile{ - int id; - boolean hit; - - public PowerBrick(int x, int y, int w, int h, int id) { - super(x, y, w, h, new ImageIcon("Sprites/Bricks/PowerBrick.png")); - this.id = id; - hit = false; - } - - public void spawnPower(ArrayList powerups){ - this.icon = new ImageIcon("Sprites/Bricks/EmptyBrick.png"); - hit = true; - powerups.add(new Powerup(this.x, this.y - this.height, this.width, this.height, 1)); - } - - public void reset(){ - hit = false; - this.icon = new ImageIcon("Sprites/Bricks/PowerBrick.png"); - } -} \ No newline at end of file +public class PowerBrick extends Tile { + int id; + boolean hit; + + public PowerBrick(int x, int y, int w, int h, int id) { + super(x, y, w, h, new ImageIcon("Sprites/Bricks/PowerBrick.png")); + this.id = id; + hit = false; + } + + public void spawnPower(ArrayList powerups) { + this.icon = new ImageIcon("Sprites/Bricks/EmptyBrick.png"); + hit = true; + powerups.add(new Powerup(this.x, this.y - this.height, this.width, this.height, 1)); + } + + public void reset() { + hit = false; + this.icon = new ImageIcon("Sprites/Bricks/PowerBrick.png"); + } +} diff --git a/Powerup.class b/Powerup.class new file mode 100644 index 0000000..ef472f3 Binary files /dev/null and b/Powerup.class differ diff --git a/Powerup.java b/Powerup.java index 680e3b3..1403f8a 100644 --- a/Powerup.java +++ b/Powerup.java @@ -1,23 +1,24 @@ import javax.swing.ImageIcon; -public class Powerup extends Collectable{ - int yVelo, xVelo, id; - boolean onGround; - - public Powerup(int x, int y, int w, int h, int id){ - super(x,y,w,h,new ImageIcon("Sprites/Powerup" + id + ".png")); - xVelo = 0; yVelo = -7; - onGround = false; - this.id = id; - } - - public void moveX(int moveX){ - this.x += moveX; - this.rect.x = this.x; - } - - public void moveY(int moveY){ - this.y += moveY; - this.rect.y = this.y; - } -} \ No newline at end of file +public class Powerup extends Collectable { + int yVelo, xVelo, id; + boolean onGround; + + public Powerup(int x, int y, int w, int h, int id) { + super(x, y, w, h, new ImageIcon("Sprites/Powerup" + id + ".png")); + xVelo = 0; + yVelo = -7; + onGround = false; + this.id = id; + } + + public void moveX(int moveX) { + this.x += moveX; + this.rect.x = this.x; + } + + public void moveY(int moveY) { + this.y += moveY; + this.rect.y = this.y; + } +} diff --git a/Projectile.class b/Projectile.class new file mode 100644 index 0000000..d1c8aef Binary files /dev/null and b/Projectile.class differ diff --git a/Projectile.java b/Projectile.java index aeb70e3..5035612 100644 --- a/Projectile.java +++ b/Projectile.java @@ -1,15 +1,15 @@ import javax.swing.ImageIcon; public class Projectile extends Collidable { - int xVelo; - - public Projectile(int x, int y, int w, int h, int curLevel, int direction){ - super(x,y,w,h,new ImageIcon("Sprites/Projectiles/" + curLevel + ".png")); - xVelo = 10 * direction; - } - - public void move(){ - this.x += xVelo; - this.rect.x = this.x; - } -} \ No newline at end of file + int xVelo; + + public Projectile(int x, int y, int w, int h, int curLevel, int direction) { + super(x, y, w, h, new ImageIcon("Sprites/Projectiles/" + curLevel + ".png")); + xVelo = 10 * direction; + } + + public void move() { + this.x += xVelo; + this.rect.x = this.x; + } +} diff --git a/Sprite.class b/Sprite.class new file mode 100644 index 0000000..a18ac5a Binary files /dev/null and b/Sprite.class differ diff --git a/Sprite.java b/Sprite.java index d4887e7..53d96f4 100644 --- a/Sprite.java +++ b/Sprite.java @@ -1,12 +1,12 @@ -import javax.swing.ImageIcon; import java.awt.Image; +import javax.swing.ImageIcon; -public class Sprite{ - ImageIcon icon; - Image sprite; - - public Sprite(ImageIcon i){ - icon = i; - sprite = i.getImage(); - } -} \ No newline at end of file +public class Sprite { + ImageIcon icon; + Image sprite; + + public Sprite(ImageIcon i) { + icon = i; + sprite = i.getImage(); + } +} diff --git a/Tile.class b/Tile.class new file mode 100644 index 0000000..b360d7c Binary files /dev/null and b/Tile.class differ diff --git a/Tile.java b/Tile.java index 2bacdf0..1d197cc 100644 --- a/Tile.java +++ b/Tile.java @@ -1,10 +1,8 @@ import javax.swing.ImageIcon; public class Tile extends Collidable { - - public Tile(int x, int y, int w, int h,ImageIcon i){ - super(x,y,w,h,i); - - - } -} \ No newline at end of file + + public Tile(int x, int y, int w, int h, ImageIcon i) { + super(x, y, w, h, i); + } +}