diff --git a/resources/sprite_sheet.png b/resources/sprite_sheet.png index d9264c6..e3d5bbc 100644 Binary files a/resources/sprite_sheet.png and b/resources/sprite_sheet.png differ diff --git a/src/entity/EntityTypeC.java b/src/entity/EntityTypeC.java new file mode 100644 index 0000000..2b16798 --- /dev/null +++ b/src/entity/EntityTypeC.java @@ -0,0 +1,13 @@ +package entity; + +import java.awt.Graphics; +import java.awt.Rectangle; +//used for Star Destroyer +public interface EntityTypeC { + + public void tick(); + public void render(Graphics g); + public Rectangle getBounds(); + public double getX(); + public double getY(); +} diff --git a/src/entity/EntityTypeD.java b/src/entity/EntityTypeD.java new file mode 100644 index 0000000..9e0a38d --- /dev/null +++ b/src/entity/EntityTypeD.java @@ -0,0 +1,13 @@ +package entity; + +import java.awt.Graphics; +import java.awt.Rectangle; + +public interface EntityTypeD { + + 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 1ed4f8f..fc253aa 100644 --- a/src/main/Controller.java +++ b/src/main/Controller.java @@ -6,13 +6,20 @@ import java.util.Random; import entity.EntityTypeA; import entity.EntityTypeB; +import entity.EntityTypeC; +import entity.EntityTypeD; public class Controller { private LinkedList ea = new LinkedList(); private LinkedList eb = new LinkedList(); + private LinkedList ec = new LinkedList(); + private LinkedList ed = new LinkedList(); + EntityTypeA tempea; EntityTypeB tempeb; + EntityTypeC tempec; + EntityTypeD temped; Random r = new Random(); private Skins skin; private Game game; @@ -27,6 +34,12 @@ public class Controller { } } + public void createStarDestroyer(int SDcount){ + for(int i = 0; i < SDcount; i++){ + addEntity(new StarDestroyer(810, r.nextInt(400), skin, this, game)); + + } + } public void tick(){ for(int n = 0; n < ea.size(); n++){ @@ -39,6 +52,16 @@ public class Controller { tempeb.tick(); } + for(int n = 0; n < ec.size(); n++){ + tempec = ec.get(n); + + tempec.tick(); + } + for(int n = 0; n < ed.size(); n++){ + temped = ed.get(n); + + temped.tick(); + } } public void render(Graphics g){ for(int n = 0; n < ea.size(); n++){ @@ -51,6 +74,16 @@ public class Controller { tempeb.render(g); } + for(int n = 0; n < ec.size(); n++){ + tempec = ec.get(n); + + tempec.render(g); + } + for(int n = 0; n < ed.size(); n++){ + temped = ed.get(n); + + temped.render(g); + } } public void addEntity(EntityTypeA en){ ea.add(en); @@ -70,6 +103,24 @@ public class Controller { public LinkedList getEntityB(){ return eb; } + public void addEntity(EntityTypeC en){ + ec.add(en); + } + public void removeEntity(EntityTypeC en){ + ec.remove(en); + } + public LinkedList getEntityC(){ + return ec; + } + public void addEntity(EntityTypeD en){ + ed.add(en); + } + public void removeEntity(EntityTypeD en){ + ed.remove(en); + } + public LinkedList getEntityD(){ + return ed; + } } diff --git a/src/main/EnemyFighter.java b/src/main/EnemyFighter.java index 099c631..95d62d4 100644 --- a/src/main/EnemyFighter.java +++ b/src/main/EnemyFighter.java @@ -4,6 +4,7 @@ import java.awt.Graphics; import java.awt.Rectangle; import java.util.Random; +import entity.EntityTypeA; import entity.EntityTypeB; public class EnemyFighter extends GameObject implements EntityTypeB{ @@ -12,7 +13,7 @@ public class EnemyFighter extends GameObject implements EntityTypeB{ Random r = new Random(); private Game game; private Controller controller; - private int speed = r.nextInt(3)+1; + private double speed = 0.3 + 3 * r.nextDouble() ; public EnemyFighter(double x, double y, Skins skin, Controller c, Game game){ super(x,y); @@ -26,10 +27,13 @@ public class EnemyFighter extends GameObject implements EntityTypeB{ public void tick(){ x -= speed; - if(GamePhysics.Collision(this, game.ea)){ - controller.removeEntity(this); - - game.setKills(game.getKills()+1); + for(int n = 0; n < game.ea.size(); n++){ + EntityTypeA tempa = game.ea.get(n); + if(GamePhysics.Collision(this, tempa)){ + controller.removeEntity(this); + controller.removeEntity(tempa); + game.setKills(game.getKills()+1); + } } } public void render(Graphics g){ diff --git a/src/main/EnemyLaser.java b/src/main/EnemyLaser.java new file mode 100644 index 0000000..c441ba2 --- /dev/null +++ b/src/main/EnemyLaser.java @@ -0,0 +1,34 @@ +package main; + +import java.awt.Graphics; +import java.awt.Rectangle; + +import entity.EntityTypeD; + +public class EnemyLaser extends GameObject implements EntityTypeD{ + + private Skins skin; + public EnemyLaser(double x, double y, Skins skin, Game game){ + super(x,y); + this.skin = skin; + + } + + public void tick(){ + x-=4; + } + public void render(Graphics g){ + g.drawImage(skin.enemyLaser, (int)x, (int)y, null); + } + public double getX(){ + return x; + } + + 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 0e56586..82b02ba 100644 --- a/src/main/Game.java +++ b/src/main/Game.java @@ -15,6 +15,8 @@ import javax.swing.JFrame; import entity.EntityTypeA; import entity.EntityTypeB; +import entity.EntityTypeC; +import entity.EntityTypeD; public class Game extends Canvas implements Runnable{ @@ -36,8 +38,12 @@ public class Game extends Canvas implements Runnable{ private int enemy_count = 1; private int kills = 0; + private int SDcount = 0; public LinkedList ea; public LinkedList eb; + public LinkedList ec; + public LinkedList ed; + Random r = new Random(); @@ -72,6 +78,9 @@ public class Game extends Canvas implements Runnable{ c = new Controller(tp, this); ea = c.getEntityA(); eb = c.getEntityB(); + ec = c.getEntityC(); + ed = c.getEntityD(); + c.createStarDestroyer(1); c.createEnemy(enemy_count); } diff --git a/src/main/GamePhysics.java b/src/main/GamePhysics.java index 84d204c..20a5745 100644 --- a/src/main/GamePhysics.java +++ b/src/main/GamePhysics.java @@ -4,22 +4,31 @@ import java.util.LinkedList; import entity.EntityTypeA; import entity.EntityTypeB; +import entity.EntityTypeC; 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){ diff --git a/src/main/Player2.java b/src/main/Player2.java index add2d57..8177e16 100644 --- a/src/main/Player2.java +++ b/src/main/Player2.java @@ -35,9 +35,7 @@ public class Player2 extends GameObject implements EntityTypeA{ if (y >= 536){ y = 536; } - if(GamePhysics.Collision(this, game.eb)){ - System.out.println("LOSE"); - } + } public void render(Graphics g){ diff --git a/src/main/Skins.java b/src/main/Skins.java index d584c52..a7ebd03 100644 --- a/src/main/Skins.java +++ b/src/main/Skins.java @@ -11,8 +11,10 @@ public class Skins { public BufferedImage player; public BufferedImage laser; public BufferedImage enemy1; - public BufferedImage padraic; + public BufferedImage starDestroyer; public BufferedImage player2; + public BufferedImage enemyLaser; + Game game; private SpriteSheet ss = null; @@ -29,11 +31,14 @@ public class Skins { laser = ss.grabimage(3, 2, 64, 64); enemy1 = ss.grabimage(1, 3, 64, 64); player2 = ss.grabimage(2, 2, 64, 64); + enemyLaser = ss.grabimage(3, 2, 64, 64); }else{ player = ss.grabimage(playerx, playery, 64, 64); laser = ss.grabimage(2, 3, 64, 64); enemy1 = ss.grabimage(2, 1, 64, 64); player2 = ss.grabimage(3, 1, 64, 64); + starDestroyer = ss.grabimage(3, 3, 128, 128); + enemyLaser = ss.grabimage(1, 4, 64, 64); } } diff --git a/src/main/StarDestroyer.java b/src/main/StarDestroyer.java new file mode 100644 index 0000000..d1e593e --- /dev/null +++ b/src/main/StarDestroyer.java @@ -0,0 +1,67 @@ +package main; + +import java.awt.Graphics; +import java.awt.Rectangle; +import java.util.Random; + +import entity.EntityTypeA; +import entity.EntityTypeC; + +public class StarDestroyer extends GameObject implements EntityTypeC{ + + private Skins skin; + private Game game; + private Controller controller; + private double speed = 0.3; + private int health = 10; + private int is_shooting = 0; + Random r = new Random(); + + public StarDestroyer(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; + shoot(); + for(int n = 0; n < game.ea.size(); n++){ + EntityTypeA tempa = game.ea.get(n); + + if(GamePhysics.Collision(this, tempa)){ + if(health ==1) + {controller.removeEntity(this); + game.setKills(game.getKills()+1);} + else{health--;} + controller.removeEntity(tempa); + } + } + + } + public void shoot(){ + if(is_shooting == 0){ + controller.addEntity(new EnemyLaser(x, y, skin, game)); + is_shooting++; + } + else if(is_shooting == r.nextDouble()* 60 + 60){ + is_shooting = 0; + } + else{ + is_shooting++; + } + } + public void render(Graphics g){ + g.drawImage(skin.starDestroyer, (int)x, (int)y, null); + } + public double getY() { + return y; + } + public Rectangle getBounds(){ + return new Rectangle((int)x, (int) y, 64, 64); + } +}