diff --git a/resources/background.png b/resources/background.png new file mode 100644 index 0000000..6e3abfd Binary files /dev/null and b/resources/background.png differ diff --git a/src/entity/EntityTypeA.java b/src/entity/EntityTypeA.java new file mode 100644 index 0000000..98e5fc7 --- /dev/null +++ b/src/entity/EntityTypeA.java @@ -0,0 +1,13 @@ +package entity; + +import java.awt.Graphics; +import java.awt.Rectangle; + +public interface EntityTypeA { + + public void tick(); + public void render(Graphics g); + public Rectangle getBounds(); + public double getX(); + public double getY(); +} diff --git a/src/entity/EntityTypeB.java b/src/entity/EntityTypeB.java new file mode 100644 index 0000000..134e2ef --- /dev/null +++ b/src/entity/EntityTypeB.java @@ -0,0 +1,14 @@ +package entity; + +import java.awt.Graphics; +import java.awt.Rectangle; + +public interface EntityTypeB { + + public void tick(); + public void render(Graphics g); + public Rectangle getBounds(); + + public double getX(); + public double getY(); +} diff --git a/src/main/Controller.java b/src/main/Controller.java index 0e411e7..1ed4f8f 100644 --- a/src/main/Controller.java +++ b/src/main/Controller.java @@ -2,37 +2,74 @@ package main; import java.awt.Graphics; import java.util.LinkedList; +import java.util.Random; + +import entity.EntityTypeA; +import entity.EntityTypeB; public class Controller { - private LinkedList l = new LinkedList(); - - Laser tempLaser; - - Game game; + private LinkedList ea = new LinkedList(); + private LinkedList eb = new LinkedList(); + + EntityTypeA tempea; + EntityTypeB tempeb; + Random r = new Random(); + private Skins skin; + private Game game; - public Controller(Game game){ + public Controller(Skins skin, Game game){ + this.skin = skin; this.game = game; - addLaser(new Laser(100, 300, game)); + } + public void createEnemy(int enemy_count){ + for(int i = 0; i < enemy_count; i++){ + addEntity(new EnemyFighter(810, r.nextInt(536), skin, this, game)); + + } } public void tick(){ - for(int i = 0; i < l.size(); i++){ - tempLaser = l.get(i); + for(int n = 0; n < ea.size(); n++){ + tempea = ea.get(n); + + tempea.tick(); + } + for(int n = 0; n < eb.size(); n++){ + tempeb = eb.get(n); - tempLaser.tick(); + tempeb.tick(); } } public void render(Graphics g){ - for(int i = 0; i < l.size(); i++){ - tempLaser = l.get(i); + for(int n = 0; n < ea.size(); n++){ + tempea = ea.get(n); - tempLaser.render(g); + tempea.render(g); } + for(int n = 0; n < eb.size(); n++){ + tempeb = eb.get(n); + + tempeb.render(g); + } + } + public void addEntity(EntityTypeA en){ + ea.add(en); + } + public void removeEntity(EntityTypeA en){ + ea.remove(en); } - public void addLaser(Laser laser){ - l.add(laser); + public void addEntity(EntityTypeB en){ + eb.add(en); } - public void removeLaser(Laser laser){ - l.remove(laser); + public void removeEntity(EntityTypeB en){ + eb.remove(en); } + public LinkedList getEntityA(){ + return ea; + } + public LinkedList getEntityB(){ + return eb; + } + } + diff --git a/src/main/EnemyFighter.java b/src/main/EnemyFighter.java new file mode 100644 index 0000000..099c631 --- /dev/null +++ b/src/main/EnemyFighter.java @@ -0,0 +1,44 @@ +package main; + +import java.awt.Graphics; +import java.awt.Rectangle; +import java.util.Random; + +import entity.EntityTypeB; + +public class EnemyFighter extends GameObject implements EntityTypeB{ + private Skins skin; + + Random r = new Random(); + private Game game; + private Controller controller; + private int speed = r.nextInt(3)+1; + + public EnemyFighter(double x, double y, Skins skin, Controller c, Game game){ + super(x,y); + this.game = game; + this.controller = c; + this.skin = skin; + } + public double getX(){ + return x; + } + + public void tick(){ + x -= speed; + if(GamePhysics.Collision(this, game.ea)){ + controller.removeEntity(this); + + game.setKills(game.getKills()+1); + } + } + public void render(Graphics g){ + g.drawImage(skin.enemy1, (int)x, (int)y, null); + } + public double getY() { + return y; + } + public Rectangle getBounds(){ + return new Rectangle((int)x, (int) y, 64, 64); + } +} diff --git a/src/main/Game.java b/src/main/Game.java index 7149022..7df4c42 100644 --- a/src/main/Game.java +++ b/src/main/Game.java @@ -2,21 +2,27 @@ package main; import java.awt.Canvas; +import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.image.BufferStrategy; import java.awt.image.BufferedImage; import java.io.IOException; +import java.util.LinkedList; +import java.util.Random; import javax.swing.JFrame; +import entity.EntityTypeA; +import entity.EntityTypeB; + public class Game extends Canvas implements Runnable{ private static final long serialVersionUID = 1L; public static final int Width = 800; public static final int Height = 600; - public final String Title = "Padriaca"; + public final String Title = "Star Wars"; private boolean gameon = false; private Thread thread; @@ -24,11 +30,23 @@ public class Game extends Canvas implements Runnable{ private BufferedImage image = new BufferedImage(Width, Height, BufferedImage.TYPE_INT_RGB); private BufferedImage spriteSheet = null; + private BufferedImage background = null; + + private int is_shooting = 0; + + private int enemy_count = 1; + private int kills = 0; + public LinkedList ea; + public LinkedList eb; + + Random r = new Random(); + //private BufferedImage player; private Player p; private Controller c; + private Skins tp; public void init() { @@ -37,14 +55,18 @@ public class Game extends Canvas implements Runnable{ try{ spriteSheet = loader.loadimage("/sprite_sheet.png"); + background = loader.loadimage("/background.png"); }catch(IOException e){ e.printStackTrace(); } addKeyListener(new KeyboardInput(this)); - - p = new Player(200, 200, this); - c = new Controller(this); + tp = new Skins(this); + p = new Player(200, 200, tp, this); + c = new Controller(tp, this); + ea = c.getEntityA(); + eb = c.getEntityB(); + c.createEnemy(enemy_count); } @@ -123,6 +145,12 @@ public class Game extends Canvas implements Runnable{ private void tick() { p.tick(); c.tick(); + + if(kills >= enemy_count){ + enemy_count +=2; + kills = 0; + c.createEnemy(enemy_count); + } } private void render(){ BufferStrategy bufferstrat = this.getBufferStrategy(); @@ -133,7 +161,7 @@ public class Game extends Canvas implements Runnable{ Graphics g = bufferstrat.getDrawGraphics(); ///////////////// g.drawImage(image, 0, 0, getWidth(), getHeight(), this); - + g.drawImage(background, 0,0, null); //g.drawImage(player, 100, 100, this); p.render(g); c.render(g); @@ -154,6 +182,13 @@ public class Game extends Canvas implements Runnable{ p.setVelY(5); } else if(key == KeyEvent.VK_UP){ p.setVelY(-5); + } else if(key == KeyEvent.VK_SPACE ){ + if(is_shooting == 3){ + is_shooting = 0; + } + if(is_shooting == 0){ + c.addEntity(new Laser(p.getX(),p.getY(), tp, this));} + is_shooting++; } } @@ -168,6 +203,8 @@ public class Game extends Canvas implements Runnable{ p.setVelY(0); } else if(key == KeyEvent.VK_UP){ p.setVelY(0); + } else if(key == KeyEvent.VK_SPACE ){ + is_shooting =0; } } @@ -175,4 +212,17 @@ public class Game extends Canvas implements Runnable{ public BufferedImage getSpriteSheet(){ return spriteSheet; } + + public int getEnemy_count() { + return enemy_count; + } + public void setEnemy_count(int enemy_count) { + this.enemy_count = enemy_count; + } + public int getKills() { + return kills; + } + public void setKills(int kills) { + this.kills = kills; + } } diff --git a/src/main/GameObject.java b/src/main/GameObject.java new file mode 100644 index 0000000..54790b7 --- /dev/null +++ b/src/main/GameObject.java @@ -0,0 +1,17 @@ +package main; + +import java.awt.Rectangle; + +public class GameObject { + public double x; + public double y; + public GameObject(double x, double y){ + this.x = x; + this.y = y; + + } + + public Rectangle getBounds(int width, int height){ + return new Rectangle((int)x, (int) y, width, height); + } +} diff --git a/src/main/GamePhysics.java b/src/main/GamePhysics.java new file mode 100644 index 0000000..84d204c --- /dev/null +++ b/src/main/GamePhysics.java @@ -0,0 +1,25 @@ +package main; + +import java.util.LinkedList; + +import entity.EntityTypeA; +import entity.EntityTypeB; + +public class GamePhysics { + public static boolean Collision(EntityTypeA enta, LinkedList bb){ + for(int n = 0; n aa){ + for(int n = 0; n = 536){ y = 536; } + if(GamePhysics.Collision(this, game.eb)){ + System.out.println("LOSE"); + } } public void render(Graphics g){ - g.drawImage(player, (int)x, (int)y, null); + g.drawImage(skin.player, (int)x, (int)y, null); } public double getX(){ return x; @@ -61,5 +63,8 @@ public class Player { public void setVelY(double velY){ this.velY = velY; } + public Rectangle getBounds(){ + return new Rectangle((int)x, (int) y, 64, 64); + } } diff --git a/src/main/Skins.java b/src/main/Skins.java new file mode 100644 index 0000000..85827cb --- /dev/null +++ b/src/main/Skins.java @@ -0,0 +1,40 @@ +package main; + +import java.awt.image.BufferedImage; + + +public class Skins { + private int playerx = 1; + private int playery = 1; + public BufferedImage player; + public BufferedImage laser; + public BufferedImage enemy1; + public BufferedImage padraic; + + private SpriteSheet ss = null; + + public Skins(Game game) { + ss = new SpriteSheet(game.getSpriteSheet()); + getTextures(); + + } + private void getTextures(){ + player = ss.grabimage(playerx, playery, 64, 64); + laser = ss.grabimage(2, 3, 64, 64); + enemy1 = ss.grabimage(2, 1, 64, 64); + padraic = ss.grabimage(2, 2, 64, 64); + + } + + public void setSelection(int x, int y){ + playerx = x; + playery = y; + } + + public int getPlayerX(){ + return playerx; + } + public int getPlayerY(){ + return playery; + } +}