wave & stage abstraction
also cleaned some code.
This commit is contained in:
parent
d5ca3d4dd9
commit
f6407115e6
8 changed files with 143 additions and 11 deletions
|
@ -10,14 +10,15 @@ import java.awt.event.ActionListener;
|
|||
* Created by sagi on 2/20/16.
|
||||
*/
|
||||
public class EnemyShip extends AnimatedSprite {
|
||||
protected int fireDelay, stepDelay, currentStep;
|
||||
protected int currentStep;
|
||||
protected double stepDelay, fireDelay;
|
||||
protected long lastFireTime, lastStepTime;
|
||||
protected int[] moveVector;
|
||||
protected Wave wave;
|
||||
protected int hitsToDestroy;
|
||||
protected boolean isDone;
|
||||
protected long startExploded;
|
||||
public EnemyShip(int x, int y, int w, int h, int acc, String imgName, double angle, int sWidth, int sHeight,int fireDelay, int stepDelay, Wave wave, int[] moveVector,int numOfFirstFrames, int hitsToDestroy) {
|
||||
public EnemyShip(int x, int y, int w, int h, int acc, String imgName, double angle, int sWidth, int sHeight,double fireDelay, double stepDelay, Wave wave, int[] moveVector,int numOfFirstFrames, int hitsToDestroy) {
|
||||
super(x, y, w, h, acc, imgName, angle, sWidth, sHeight, numOfFirstFrames);
|
||||
this.fireDelay = fireDelay;
|
||||
this.stepDelay = stepDelay;
|
||||
|
|
|
@ -13,7 +13,8 @@ import java.util.Vector;
|
|||
public class Wave {
|
||||
|
||||
protected Level level;
|
||||
protected int enemyMaxAmount, currentAmount,fireDelay, launchDelay, stepDelay, acc, startX, startY;
|
||||
protected int enemyMaxAmount, currentAmount, acc, startX, startY;
|
||||
protected double stepDelay,fireDelay, launchDelay;
|
||||
protected int[] moveVector;
|
||||
protected Vector<EnemyShip> enemies;
|
||||
protected Vector<Missile> bullets;
|
||||
|
@ -21,7 +22,7 @@ public class Wave {
|
|||
protected String imageName;
|
||||
protected int hitsToDestroy;
|
||||
|
||||
public Wave(int enemyMaxAmount, int[] moveVector, int fireDelay, int stepDelay, int launchDelay, int acc, String imageName, int startX, int startY, Level stage, int hitsToDestroy){
|
||||
public Wave(int enemyMaxAmount, int[] moveVector, double fireDelay, double stepDelay, double launchDelay, int acc, String imageName, int startX, int startY, Level stage, int hitsToDestroy){
|
||||
this.enemies = new Vector<>();
|
||||
this.bullets = new Vector<>();
|
||||
this.enemyMaxAmount = enemyMaxAmount;
|
||||
|
|
|
@ -6,6 +6,7 @@ package com.sagi.dayan.Games.Engine;
|
|||
|
||||
import com.sagi.dayan.Games.Stage.*;
|
||||
import com.sagi.dayan.Games.Utils.Utils;
|
||||
import com.sagi.dayan.Games.Utils.WaveConfigs;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
@ -37,8 +38,12 @@ public class GameEngine {
|
|||
|
||||
private int p1Strikes, p2Strikes, p1CurrentStrikes, p2CurentStrikes;
|
||||
|
||||
|
||||
|
||||
private Font gameFont;
|
||||
|
||||
private WaveConfigs waveConfigs;
|
||||
|
||||
public GameEngine(int width, int height, Stage stage){
|
||||
this.currentScene = 0;
|
||||
this.isFirstGame = true;
|
||||
|
@ -61,6 +66,7 @@ public class GameEngine {
|
|||
e.printStackTrace();
|
||||
gameFont = null;
|
||||
}
|
||||
this.waveConfigs = new WaveConfigs();
|
||||
startNewGame();
|
||||
}
|
||||
|
||||
|
@ -83,6 +89,9 @@ public class GameEngine {
|
|||
|
||||
}
|
||||
|
||||
public WaveConfigs getWaveConfigs() {
|
||||
return waveConfigs;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -128,7 +137,7 @@ public class GameEngine {
|
|||
|
||||
public void startGame(int numOfPlayers){
|
||||
this.numOfPlayers = numOfPlayers;
|
||||
scenes.add(new Level(pWidth, pHeight, numOfPlayers, this, "-= STAGE 1.0 =-", new int[]{5, 20}));
|
||||
scenes.add(new FirstStage(pWidth, pHeight, numOfPlayers, this, "-= STAGE 1.0 =-", new int[]{5, 20}));
|
||||
changeScene(currentScene+1);
|
||||
}
|
||||
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 2.4 KiB |
46
src/com/sagi/dayan/Games/Stage/FirstStage.java
Normal file
46
src/com/sagi/dayan/Games/Stage/FirstStage.java
Normal file
|
@ -0,0 +1,46 @@
|
|||
package com.sagi.dayan.Games.Stage;
|
||||
|
||||
import com.sagi.dayan.Games.Elements.Wave;
|
||||
import com.sagi.dayan.Games.Engine.GameEngine;
|
||||
import com.sagi.dayan.Games.Utils.WaveConfig;
|
||||
import com.sagi.dayan.Games.Utils.WaveConfigs;
|
||||
|
||||
/**
|
||||
* Created by sagi on 3/19/16.
|
||||
*/
|
||||
public class FirstStage extends Level{
|
||||
|
||||
public FirstStage(int width, int height, int numOfPlayers, GameEngine engine, String stageTitle, int[] waveDelay) {
|
||||
super(width, height, numOfPlayers, engine, stageTitle, waveDelay);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void launchWave(long now) {
|
||||
lastWaveTime = now;
|
||||
System.out.println("New Wave!! Time: " + now);
|
||||
WaveConfig wc;
|
||||
int numOfEnemies = 5, numOfHits = 1;
|
||||
double launchDelay = 0.5, fireDelay = 5;
|
||||
switch (currentWave){
|
||||
case 0:
|
||||
numOfEnemies = 5;
|
||||
fireDelay = 0.2;
|
||||
launchDelay = 0.5;
|
||||
numOfHits = 1;
|
||||
wc = engine.getWaveConfigs().getWaveConfig(WaveConfigs.DEMO);
|
||||
break;
|
||||
case 1:
|
||||
numOfEnemies = 5;
|
||||
fireDelay = 5;
|
||||
launchDelay = 1;
|
||||
numOfHits = 1;
|
||||
wc = engine.getWaveConfigs().getWaveConfig(WaveConfigs.DEMO);
|
||||
break;
|
||||
default:
|
||||
wc = engine.getWaveConfigs().getWaveConfig(WaveConfigs.DEMO);
|
||||
break;
|
||||
}
|
||||
waves.add(new Wave(numOfEnemies, wc.getMoveVector(), fireDelay, wc.getStepDelay(), launchDelay, wc.getAcc(), "L1-ES1.png", wc.getStartX(), wc.getStartY(), this, numOfHits));
|
||||
currentWave++;
|
||||
}
|
||||
}
|
|
@ -4,6 +4,8 @@ import com.sagi.dayan.Games.Elements.*;
|
|||
import com.sagi.dayan.Games.Engine.CollisionUtil;
|
||||
import com.sagi.dayan.Games.Engine.GameEngine;
|
||||
import com.sagi.dayan.Games.Utils.Utils;
|
||||
import com.sagi.dayan.Games.Utils.WaveConfig;
|
||||
import com.sagi.dayan.Games.Utils.WaveConfigs;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.Timer;
|
||||
|
@ -18,7 +20,7 @@ import java.util.*;
|
|||
/**
|
||||
* Created by sagi on 2/20/16.
|
||||
*/
|
||||
public class Level extends Scene {
|
||||
public abstract class Level extends Scene {
|
||||
protected Vector<Player> players;
|
||||
protected int p1Speed = 10;
|
||||
protected Vector<Missile> p1Missiles, p2Missiles, enemyMissiles;
|
||||
|
@ -83,17 +85,13 @@ public class Level extends Scene {
|
|||
|
||||
@Override
|
||||
public void update() {
|
||||
|
||||
bg.update();
|
||||
movePlayers();
|
||||
Vector <Wave> wavesToRemove = new Vector<Wave>();
|
||||
|
||||
long now = System.currentTimeMillis();
|
||||
if(currentWave < waveDelay.length && now - lastWaveTime >= waveDelay[currentWave] * 1000){
|
||||
lastWaveTime = now;
|
||||
System.out.println("New Wave!! Time: "+ now);
|
||||
currentWave++;
|
||||
waves.add(new Wave(5, new int[]{90,90,120, 120, 150, 150, 270, 270, 270} , 4, 1, 2, 4, "L1-ES1.png" , 500, 0, this, 1));
|
||||
launchWave(now);
|
||||
}
|
||||
|
||||
if(startingAnimationIndex < 3 && !isStarted){
|
||||
|
@ -145,6 +143,8 @@ public class Level extends Scene {
|
|||
checkCollision();
|
||||
}
|
||||
|
||||
protected abstract void launchWave(long time);
|
||||
|
||||
private void movePlayers() {
|
||||
/**
|
||||
* Player 1 Movement:
|
||||
|
|
41
src/com/sagi/dayan/Games/Utils/WaveConfig.java
Normal file
41
src/com/sagi/dayan/Games/Utils/WaveConfig.java
Normal file
|
@ -0,0 +1,41 @@
|
|||
package com.sagi.dayan.Games.Utils;
|
||||
|
||||
/**
|
||||
* Created by sagi on 3/18/16.
|
||||
*/
|
||||
public class WaveConfig {
|
||||
protected int[] moveVector;
|
||||
protected double stepDelay;
|
||||
protected int acc;
|
||||
protected int startX;
|
||||
protected int startY;
|
||||
|
||||
public WaveConfig(int[] moveVector, double stepDelay, int acc, int staryX, int startY){
|
||||
this.moveVector = moveVector;
|
||||
this.stepDelay = stepDelay;
|
||||
this.acc = acc;
|
||||
this.startX = staryX;
|
||||
this.startY = startY;
|
||||
}
|
||||
|
||||
|
||||
public int[] getMoveVector() {
|
||||
return moveVector;
|
||||
}
|
||||
|
||||
public double getStepDelay() {
|
||||
return stepDelay;
|
||||
}
|
||||
|
||||
public int getAcc() {
|
||||
return acc;
|
||||
}
|
||||
|
||||
public int getStartX() {
|
||||
return startX;
|
||||
}
|
||||
|
||||
public int getStartY() {
|
||||
return startY;
|
||||
}
|
||||
}
|
34
src/com/sagi/dayan/Games/Utils/WaveConfigs.java
Normal file
34
src/com/sagi/dayan/Games/Utils/WaveConfigs.java
Normal file
|
@ -0,0 +1,34 @@
|
|||
package com.sagi.dayan.Games.Utils;
|
||||
|
||||
import java.util.Vector;
|
||||
|
||||
/**
|
||||
* Created by sagi on 3/18/16.
|
||||
*/
|
||||
public class WaveConfigs {
|
||||
public static final int DEMO = 0;
|
||||
Vector<WaveConfig> configs;
|
||||
|
||||
public WaveConfigs(){
|
||||
configs = new Vector<>();
|
||||
// int[] moveVector, double stepDelay, int acc, int staryX, int startY
|
||||
configs.add(new WaveConfig(new int[]{90,90,120, 120, 150, 150, 270, 270, 270} , 0.5, 8,500 , 0));
|
||||
|
||||
// configs.add(new WaveConfig( , , , , ));
|
||||
// configs.add(new WaveConfig( , , , , ));
|
||||
// configs.add(new WaveConfig( , , , , ));
|
||||
// configs.add(new WaveConfig( , , , , ));
|
||||
// configs.add(new WaveConfig( , , , , ));
|
||||
// configs.add(new WaveConfig( , , , , ));
|
||||
// configs.add(new WaveConfig( , , , , ));
|
||||
// configs.add(new WaveConfig( , , , , ));
|
||||
// configs.add(new WaveConfig( , , , , ));
|
||||
// configs.add(new WaveConfig( , , , , ));
|
||||
}
|
||||
|
||||
public WaveConfig getWaveConfig(int config){
|
||||
if (config < 0 || configs.size() <= config)
|
||||
throw new IllegalArgumentException("no such config...");
|
||||
return configs.get(config);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue