pin
This commit is contained in:
parent
1c1667d37a
commit
9e8fda4eb7
17 changed files with 802 additions and 497 deletions
|
@ -1,15 +1,14 @@
|
||||||
package com.sagi.dayan.Games.Elements;
|
package com.sagi.dayan.Games.Elements;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import java.awt.Graphics;
|
||||||
import javax.swing.*;
|
import java.awt.Graphics2D;
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.ActionEvent;
|
|
||||||
import java.awt.event.ActionListener;
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.awt.image.ImageProducer;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by sagi on 2/10/16.
|
* Created by sagi on 2/10/16.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,9 +1,5 @@
|
||||||
package com.sagi.dayan.Games.Elements;
|
package com.sagi.dayan.Games.Elements;
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
import javax.swing.border.MatteBorder;
|
|
||||||
import java.awt.event.ActionEvent;
|
|
||||||
import java.awt.event.ActionListener;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
package com.sagi.dayan.Games.Elements;
|
package com.sagi.dayan.Games.Elements;
|
||||||
|
|
||||||
import javax.swing.*;
|
import java.awt.Graphics;
|
||||||
import java.awt.*;
|
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by sagi on 2/20/16.
|
* Created by sagi on 2/20/16.
|
||||||
|
|
|
@ -1,13 +1,16 @@
|
||||||
package com.sagi.dayan.Games.Elements;
|
package com.sagi.dayan.Games.Elements;
|
||||||
|
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import java.awt.Graphics;
|
||||||
import javax.swing.*;
|
import java.awt.Graphics2D;
|
||||||
import java.awt.*;
|
import java.awt.Image;
|
||||||
|
import java.awt.Rectangle;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.Vector;
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
|
|
||||||
public abstract class Sprite {
|
public abstract class Sprite {
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
package com.sagi.dayan.Games.Elements;
|
package com.sagi.dayan.Games.Elements;
|
||||||
|
|
||||||
import com.sagi.dayan.Games.Stage.Level;
|
import java.awt.Graphics;
|
||||||
import com.sagi.dayan.Games.Stage.Scene;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
import java.awt.*;
|
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
|
import com.sagi.dayan.Games.Stage.Level;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by sagi on 3/11/16.
|
* Created by sagi on 3/11/16.
|
||||||
*/
|
*/
|
||||||
|
@ -52,6 +52,7 @@ public class Wave {
|
||||||
for (int i = 0; i < enemies.size() ; i++){
|
for (int i = 0; i < enemies.size() ; i++){
|
||||||
enemies.get(i).update();
|
enemies.get(i).update();
|
||||||
if (enemies.get(i).isDone() || enemies.get(i).isOutOfScreen()) {
|
if (enemies.get(i).isDone() || enemies.get(i).isOutOfScreen()) {
|
||||||
|
|
||||||
enemiesToRemove.add(enemies.get(i));
|
enemiesToRemove.add(enemies.get(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -72,6 +73,7 @@ public class Wave {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void fireFromEnemy(EnemyShip e){
|
public void fireFromEnemy(EnemyShip e){
|
||||||
|
if(!e.isDead())
|
||||||
level.enemyFire(e.getCenterX(), (int)(e.getLocY() + e.getsHeight()), -(e.getAcceleration() + 2));
|
level.enemyFire(e.getCenterX(), (int)(e.getLocY() + e.getsHeight()), -(e.getAcceleration() + 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,6 +85,6 @@ public class Wave {
|
||||||
es.gotHit();
|
es.gotHit();
|
||||||
}
|
}
|
||||||
public boolean isWaveOver() {
|
public boolean isWaveOver() {
|
||||||
return enemies.size() == 0 && currentAmount == enemyMaxAmount;
|
return enemies.size() == 0 && currentAmount >= enemyMaxAmount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,11 +7,11 @@ package com.sagi.dayan.Games.Engine;
|
||||||
* Created by sagi on 12/19/15.
|
* Created by sagi on 12/19/15.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import java.awt.Rectangle;
|
||||||
|
import java.awt.image.PixelGrabber;
|
||||||
|
|
||||||
import com.sagi.dayan.Games.Elements.AnimatedSprite;
|
import com.sagi.dayan.Games.Elements.AnimatedSprite;
|
||||||
import com.sagi.dayan.Games.Elements.Sprite;
|
import com.sagi.dayan.Games.Elements.Sprite;
|
||||||
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.image.PixelGrabber;
|
|
||||||
public class CollisionUtil {
|
public class CollisionUtil {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -4,21 +4,23 @@ package com.sagi.dayan.Games.Engine;
|
||||||
* Created by sagi on 2/8/16.
|
* Created by sagi on 2/8/16.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import com.sagi.dayan.Games.Stage.*;
|
import java.awt.Font;
|
||||||
import com.sagi.dayan.Games.Utils.Utils;
|
import java.awt.FontFormatException;
|
||||||
import com.sagi.dayan.Games.Utils.WaveConfigs;
|
import java.awt.event.KeyEvent;
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.*;
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.Vector;
|
|
||||||
|
|
||||||
/**
|
import javax.swing.JFrame;
|
||||||
* Created by sagi on 12/18/15.
|
import javax.swing.JPanel;
|
||||||
*/
|
|
||||||
|
import com.sagi.dayan.Games.Stage.*;
|
||||||
|
import com.sagi.dayan.Games.Stage.MainMenuScene;
|
||||||
|
import com.sagi.dayan.Games.Stage.Scene;
|
||||||
|
import com.sagi.dayan.Games.Stage.SettingsMenuScene;
|
||||||
|
import com.sagi.dayan.Games.Stage.Stage;
|
||||||
|
import com.sagi.dayan.Games.Utils.Utils;
|
||||||
|
import com.sagi.dayan.Games.Utils.WaveConfigs;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -33,9 +35,10 @@ public class GameEngine {
|
||||||
private int p1CreditTime, p2CreditTime, creditTickTime = 1;
|
private int p1CreditTime, p2CreditTime, creditTickTime = 1;
|
||||||
public static final int PLAYER_WIDTH = 120, PLAYER_HEIGHT = 120;
|
public static final int PLAYER_WIDTH = 120, PLAYER_HEIGHT = 120;
|
||||||
public static final int UP=0,RIGHT=1,DOWN=2, LEFT=3, FIRE=4, SPECIAL=5;
|
public static final int UP=0,RIGHT=1,DOWN=2, LEFT=3, FIRE=4, SPECIAL=5;
|
||||||
|
public int p1HighScore, p2HighScore;
|
||||||
|
|
||||||
private int[] p1Controlles = {KeyEvent.VK_UP, KeyEvent.VK_RIGHT, KeyEvent.VK_DOWN, KeyEvent.VK_LEFT, KeyEvent.VK_K};
|
private int[] p1Controlles = {KeyEvent.VK_UP, KeyEvent.VK_RIGHT, KeyEvent.VK_DOWN, KeyEvent.VK_LEFT, KeyEvent.VK_K};
|
||||||
private int[] p2Controlles = {KeyEvent.VK_W, KeyEvent.VK_D, KeyEvent.VK_S, KeyEvent.VK_A, KeyEvent.VK_SHIFT};
|
private int[] p2Controlles = {KeyEvent.VK_W, KeyEvent.VK_D, KeyEvent.VK_S, KeyEvent.VK_A, KeyEvent.VK_Q};
|
||||||
|
|
||||||
private int p1Lives, p2Lives, p1Health, p2Health, credits, p1Score, p2Score;
|
private int p1Lives, p2Lives, p1Health, p2Health, credits, p1Score, p2Score;
|
||||||
|
|
||||||
|
@ -47,6 +50,7 @@ public class GameEngine {
|
||||||
private int currentLevel;
|
private int currentLevel;
|
||||||
|
|
||||||
public GameEngine(int width, int height, Stage stage){
|
public GameEngine(int width, int height, Stage stage){
|
||||||
|
p1HighScore = p2HighScore = 0;
|
||||||
this.isFirstGame = true;
|
this.isFirstGame = true;
|
||||||
this.gameOver = true;
|
this.gameOver = true;
|
||||||
this.pWidth = width;
|
this.pWidth = width;
|
||||||
|
@ -78,16 +82,7 @@ public class GameEngine {
|
||||||
p2Health = 100;
|
p2Health = 100;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void resetPlayer(int i){
|
|
||||||
resetPlayerHealth(i);
|
|
||||||
|
|
||||||
if (i==0){
|
|
||||||
p1Lives = 3;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
p2Lives = 3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -171,15 +166,22 @@ public class GameEngine {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changeLevel(){
|
public void changeLevel(){
|
||||||
|
System.out.println("current level: "+currentLevel);
|
||||||
currentLevel++;
|
currentLevel++;
|
||||||
stage.removeMouseListener(scene);
|
stage.removeMouseListener(scene);
|
||||||
stage.removeKeyListener(scene);
|
stage.removeKeyListener(scene);
|
||||||
switch (currentLevel){
|
switch (currentLevel){
|
||||||
case 0:
|
case 0:
|
||||||
scene = new FirstStage(pWidth, pHeight, numOfPlayers, this, "-= STAGE 1.0 =-", new int[]{5, 20});
|
scene = new FirstStage(pWidth, pHeight, numOfPlayers, this, "-= STAGE 1.0 =-", new int[]{5, 1,1,1});
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
scene = new FirstStage(pWidth, pHeight, numOfPlayers, this, "-= STAGE 1.1 =-", new int[]{5, 20});
|
scene = new SecondStage(pWidth, pHeight, numOfPlayers, this, "-= STAGE 2.0 =-", new int[]{5, 5,5,5});
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
scene = new ThirdStage(pWidth, pHeight, numOfPlayers, this, "-= STAGE 3.0 =-", new int[]{5, 0,0,8});
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
scene = new FourthStage(pWidth, pHeight, numOfPlayers, this, "-= STAGE 4.0 =-", new int[]{5, 0,0,8});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -239,6 +241,22 @@ public class GameEngine {
|
||||||
credits--;
|
credits--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void revivePlayer(int i)
|
||||||
|
{
|
||||||
|
useCredit();
|
||||||
|
|
||||||
|
if(i==0){
|
||||||
|
p1Health=100;
|
||||||
|
p1Lives =3;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
p2Health=100;
|
||||||
|
p2Lives =3;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setScore(int i, int score)
|
public void setScore(int i, int score)
|
||||||
{
|
{
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
|
@ -289,4 +307,26 @@ public class GameEngine {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int getP1HighScore() {
|
||||||
|
return p1HighScore;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setP1HighScore(int p1HighScore) {
|
||||||
|
this.p1HighScore = p1HighScore;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int getP2HighScore() {
|
||||||
|
return p2HighScore;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setP2HighScore(int p2HighScore) {
|
||||||
|
this.p2HighScore = p2HighScore;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -10,14 +10,17 @@ import com.sagi.dayan.Games.Utils.WaveConfigs;
|
||||||
*/
|
*/
|
||||||
public class FirstStage extends Level{
|
public class FirstStage extends Level{
|
||||||
|
|
||||||
|
protected final int NUM_OF_WAVES = 4;
|
||||||
|
|
||||||
public FirstStage(int width, int height, int numOfPlayers, GameEngine engine, String stageTitle, int[] waveDelay) {
|
public FirstStage(int width, int height, int numOfPlayers, GameEngine engine, String stageTitle, int[] waveDelay) {
|
||||||
super(width, height, numOfPlayers, engine, stageTitle, waveDelay);
|
super(width, height, numOfPlayers, engine, stageTitle, waveDelay);
|
||||||
|
numOfWaves = NUM_OF_WAVES;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void launchWave(long now) {
|
protected void launchWave(long now) {
|
||||||
lastWaveTime = now;
|
lastWaveTime = now;
|
||||||
System.out.println("New Wave!! Time: " + now);
|
System.out.println("New Wave!! " + currentWave + ", Time: " + now);
|
||||||
WaveConfig wc;
|
WaveConfig wc;
|
||||||
int numOfEnemies = 5, numOfHits = 1;
|
int numOfEnemies = 5, numOfHits = 1;
|
||||||
double launchDelay = 0.5, fireDelay = 5;
|
double launchDelay = 0.5, fireDelay = 5;
|
||||||
|
@ -31,11 +34,25 @@ public class FirstStage extends Level{
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
numOfEnemies = 5;
|
numOfEnemies = 5;
|
||||||
fireDelay = 0.1;
|
fireDelay = 1;
|
||||||
launchDelay = 1;
|
launchDelay = 1;
|
||||||
numOfHits = 1;
|
numOfHits = 2;
|
||||||
wc = engine.getWaveConfigs().getWaveConfig(3);
|
wc = engine.getWaveConfigs().getWaveConfig(3);
|
||||||
break;
|
break;
|
||||||
|
case 2:
|
||||||
|
numOfEnemies = 10;
|
||||||
|
fireDelay = 0.8;
|
||||||
|
launchDelay = 1;
|
||||||
|
numOfHits = 3;
|
||||||
|
wc = engine.getWaveConfigs().getWaveConfig(2);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
numOfEnemies = 15;
|
||||||
|
fireDelay = 1.5;
|
||||||
|
launchDelay = 1;
|
||||||
|
numOfHits = 5;
|
||||||
|
wc = engine.getWaveConfigs().getWaveConfig(7);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
wc = engine.getWaveConfigs().getWaveConfig(WaveConfigs.DEMO);
|
wc = engine.getWaveConfigs().getWaveConfig(WaveConfigs.DEMO);
|
||||||
break;
|
break;
|
||||||
|
|
63
src/com/sagi/dayan/Games/Stage/FourthStage.java
Normal file
63
src/com/sagi/dayan/Games/Stage/FourthStage.java
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
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 FourthStage extends Level{
|
||||||
|
|
||||||
|
protected final int NUM_OF_WAVES = 4;
|
||||||
|
|
||||||
|
public FourthStage(int width, int height, int numOfPlayers, GameEngine engine, String stageTitle, int[] waveDelay) {
|
||||||
|
super(width, height, numOfPlayers, engine, stageTitle, waveDelay);
|
||||||
|
numOfWaves = NUM_OF_WAVES;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void launchWave(long now) {
|
||||||
|
lastWaveTime = now;
|
||||||
|
System.out.println("New Wave!! " + currentWave + ", Time: " + now);
|
||||||
|
WaveConfig wc;
|
||||||
|
int numOfEnemies = 5, numOfHits = 1;
|
||||||
|
double launchDelay = 0.5, fireDelay = 5;
|
||||||
|
switch (currentWave){
|
||||||
|
case 0:
|
||||||
|
numOfEnemies = 5;
|
||||||
|
fireDelay = 0.5;
|
||||||
|
launchDelay = 0.5;
|
||||||
|
numOfHits = 1;
|
||||||
|
wc = engine.getWaveConfigs().getWaveConfig(6);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
numOfEnemies = 5;
|
||||||
|
fireDelay = 0.3;
|
||||||
|
launchDelay = 1;
|
||||||
|
numOfHits = 2;
|
||||||
|
wc = engine.getWaveConfigs().getWaveConfig(3);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
numOfEnemies = 10;
|
||||||
|
fireDelay = 0.3;
|
||||||
|
launchDelay = 1;
|
||||||
|
numOfHits = 3;
|
||||||
|
wc = engine.getWaveConfigs().getWaveConfig(2);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
numOfEnemies = 15;
|
||||||
|
fireDelay = 0.2;
|
||||||
|
launchDelay = 1;
|
||||||
|
numOfHits = 5;
|
||||||
|
wc = engine.getWaveConfigs().getWaveConfig(7);
|
||||||
|
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++;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,21 +1,27 @@
|
||||||
package com.sagi.dayan.Games.Stage;
|
package com.sagi.dayan.Games.Stage;
|
||||||
|
|
||||||
import com.sagi.dayan.Games.Elements.*;
|
import java.awt.Color;
|
||||||
import com.sagi.dayan.Games.Engine.CollisionUtil;
|
import java.awt.Font;
|
||||||
import com.sagi.dayan.Games.Engine.GameEngine;
|
import java.awt.FontMetrics;
|
||||||
import com.sagi.dayan.Games.Utils.Utils;
|
import java.awt.Graphics;
|
||||||
import com.sagi.dayan.Games.Utils.WaveConfig;
|
import java.awt.Image;
|
||||||
import com.sagi.dayan.Games.Utils.WaveConfigs;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
import javax.swing.Timer;
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.ActionEvent;
|
|
||||||
import java.awt.event.ActionListener;
|
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.*;
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import javax.swing.JLabel;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
|
import com.sagi.dayan.Games.Elements.Background;
|
||||||
|
import com.sagi.dayan.Games.Elements.Missile;
|
||||||
|
import com.sagi.dayan.Games.Elements.Player;
|
||||||
|
import com.sagi.dayan.Games.Elements.Wave;
|
||||||
|
import com.sagi.dayan.Games.Engine.CollisionUtil;
|
||||||
|
import com.sagi.dayan.Games.Engine.GameEngine;
|
||||||
|
import com.sagi.dayan.Games.Utils.Utils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by sagi on 2/20/16.
|
* Created by sagi on 2/20/16.
|
||||||
|
@ -38,6 +44,7 @@ public abstract class Level extends Scene {
|
||||||
protected String title;
|
protected String title;
|
||||||
protected JLabel stageTitle;
|
protected JLabel stageTitle;
|
||||||
protected long lastWaveTime, lastPulseTime;
|
protected long lastWaveTime, lastPulseTime;
|
||||||
|
protected int numOfWaves;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -94,7 +101,8 @@ public abstract class Level extends Scene {
|
||||||
Vector <Wave> wavesToRemove = new Vector<>();
|
Vector <Wave> wavesToRemove = new Vector<>();
|
||||||
|
|
||||||
long now = System.currentTimeMillis();
|
long now = System.currentTimeMillis();
|
||||||
if(currentWave < waveDelay.length && now - lastWaveTime >= waveDelay[currentWave] * 1000){
|
// if(currentWave < waveDelay.length && now - lastWaveTime >= waveDelay[currentWave] * 1000){
|
||||||
|
if(currentWave < numOfWaves && now - lastWaveTime >= waveDelay[currentWave] * 1000){
|
||||||
launchWave(now);
|
launchWave(now);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,13 +145,26 @@ public abstract class Level extends Scene {
|
||||||
for(int i = 0 ; i < waves.size() ; i++){
|
for(int i = 0 ; i < waves.size() ; i++){
|
||||||
waves.get(i).update();
|
waves.get(i).update();
|
||||||
if(waves.get(i).isWaveOver()) {
|
if(waves.get(i).isWaveOver()) {
|
||||||
|
System.out.println("in remove");
|
||||||
wavesToRemove.add(waves.get(i));
|
wavesToRemove.add(waves.get(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
waves.removeAll(wavesToRemove);
|
waves.removeAll(wavesToRemove);
|
||||||
|
|
||||||
|
if(engine.getP1Score() > engine.getP1HighScore())
|
||||||
|
engine.setP1HighScore(engine.getP1Score());
|
||||||
|
if(engine.getP2Score() > engine.getP2HighScore())
|
||||||
|
engine.setP2HighScore(engine.getP2Score());
|
||||||
}
|
}
|
||||||
checkCollision();
|
checkCollision();
|
||||||
engine.setGameOver(isGameOver());
|
engine.setGameOver(isGameOver());
|
||||||
|
if(currentWave >= numOfWaves && waves.size()==0)
|
||||||
|
{
|
||||||
|
System.out.println("Done");
|
||||||
|
engine.changeLevel();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void launchWave(long time);
|
protected abstract void launchWave(long time);
|
||||||
|
@ -179,10 +200,15 @@ public abstract class Level extends Scene {
|
||||||
players.get(0).setvDirection(0);
|
players.get(0).setvDirection(0);
|
||||||
}
|
}
|
||||||
if(keys.get(engine.getP1Controlles()[GameEngine.FIRE]) ){
|
if(keys.get(engine.getP1Controlles()[GameEngine.FIRE]) ){
|
||||||
if(players.get(0).isAbleToFire()){
|
if(players.get(0).isAbleToFire() && !players.get(0).isGameOver()){
|
||||||
p1Missiles.add(new Missile(players.get(0).getCenterX() - 15, (int)players.get(0).getLocY(), players.get(0).getAcceleration() + 3, "P1Laser.png", 4));
|
p1Missiles.add(new Missile(players.get(0).getCenterX() - 15, (int)players.get(0).getLocY(), players.get(0).getAcceleration() + 3, "P1Laser.png", 4));
|
||||||
players.get(0).updateFireTime();
|
players.get(0).updateFireTime();
|
||||||
}
|
}
|
||||||
|
if(engine.getP1Health() <= 0 && engine.getCredits() > 0) {
|
||||||
|
engine.revivePlayer(0);
|
||||||
|
players.get(0).resetPlayer();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -208,12 +234,18 @@ public abstract class Level extends Scene {
|
||||||
players.get(1).setvDirection(0);
|
players.get(1).setvDirection(0);
|
||||||
}
|
}
|
||||||
if(keys.get(engine.getP2Controlles()[GameEngine.FIRE]) ){
|
if(keys.get(engine.getP2Controlles()[GameEngine.FIRE]) ){
|
||||||
if(players.get(1).isAbleToFire()){
|
if(players.get(1).isAbleToFire() && !players.get(1).isGameOver()){
|
||||||
p2Missiles.add(new Missile(players.get(1).getCenterX() - 15, (int)players.get(1).getLocY(), players.get(1).getAcceleration() + 3, "P1Laser.png", 4));
|
p2Missiles.add(new Missile(players.get(1).getCenterX() - 15, (int)players.get(1).getLocY(), players.get(1).getAcceleration() + 3, "P1Laser.png", 4));
|
||||||
players.get(1).updateFireTime();
|
players.get(1).updateFireTime();
|
||||||
}
|
}
|
||||||
|
if(engine.getP2Health() <= 0 && engine.getCredits() > 0) {
|
||||||
|
engine.revivePlayer(1);
|
||||||
|
players.get(0).resetPlayer();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -245,6 +277,16 @@ public abstract class Level extends Scene {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (isGameOver())
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
System.in.read();
|
||||||
|
} catch (IOException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
//print score
|
//print score
|
||||||
f = f.deriveFont(15F);
|
f = f.deriveFont(15F);
|
||||||
g.setFont(f);
|
g.setFont(f);
|
||||||
|
@ -252,7 +294,9 @@ public abstract class Level extends Scene {
|
||||||
//print life bar
|
//print life bar
|
||||||
for(int i=0; i<players.size(); i++){
|
for(int i=0; i<players.size(); i++){
|
||||||
|
|
||||||
|
g.setColor(Color.WHITE);
|
||||||
g.drawRect(15,35*(i+1)+10,100,10);
|
g.drawRect(15,35*(i+1)+10,100,10);
|
||||||
|
|
||||||
g.setColor(Color.GREEN);
|
g.setColor(Color.GREEN);
|
||||||
|
|
||||||
if (i==0 && engine.getP1Health()<=30)
|
if (i==0 && engine.getP1Health()<=30)
|
||||||
|
@ -341,6 +385,7 @@ public abstract class Level extends Scene {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void renderGameOver(Graphics g, JPanel p, int i){
|
protected void renderGameOver(Graphics g, JPanel p, int i){
|
||||||
|
System.out.println("HERE");
|
||||||
long now = System.currentTimeMillis();
|
long now = System.currentTimeMillis();
|
||||||
players.get(i).setGameOver(true);
|
players.get(i).setGameOver(true);
|
||||||
if(now - lastPulseTime >= PRESS_START_PULE * 1000){
|
if(now - lastPulseTime >= PRESS_START_PULE * 1000){
|
||||||
|
|
|
@ -1,16 +1,20 @@
|
||||||
package com.sagi.dayan.Games.Stage;
|
package com.sagi.dayan.Games.Stage;
|
||||||
|
|
||||||
|
import java.awt.Font;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Image;
|
||||||
|
import java.awt.event.KeyEvent;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
|
import sun.audio.AudioPlayer;
|
||||||
|
import sun.audio.AudioStream;
|
||||||
|
|
||||||
import com.sagi.dayan.Games.Elements.MenuBoxSprite;
|
import com.sagi.dayan.Games.Elements.MenuBoxSprite;
|
||||||
import com.sagi.dayan.Games.Engine.GameEngine;
|
import com.sagi.dayan.Games.Engine.GameEngine;
|
||||||
import com.sagi.dayan.Games.Utils.Utils;
|
import com.sagi.dayan.Games.Utils.Utils;
|
||||||
import sun.audio.AudioPlayer;
|
|
||||||
import sun.audio.AudioStream;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.KeyEvent;
|
|
||||||
import java.awt.image.BufferedImage;
|
|
||||||
import java.io.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by sagi on 2/24/16.
|
* Created by sagi on 2/24/16.
|
||||||
|
@ -51,6 +55,15 @@ public class MainMenuScene extends Scene {
|
||||||
Graphics g = sceneImage.getGraphics();
|
Graphics g = sceneImage.getGraphics();
|
||||||
g.drawImage(menuBox.getbImage(), 0, 0, p);
|
g.drawImage(menuBox.getbImage(), 0, 0, p);
|
||||||
menuBox.drawSprite(g, p);
|
menuBox.drawSprite(g, p);
|
||||||
|
|
||||||
|
Font f = engine.getGameFont();
|
||||||
|
f = f.deriveFont(25F);
|
||||||
|
g.setFont(f);
|
||||||
|
g.drawString("Player1 record: " +engine.p1HighScore, 700, 50);
|
||||||
|
g.drawString("Player2 record: " +engine.p2HighScore, 700, 100);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -4,15 +4,14 @@ package com.sagi.dayan.Games.Stage;
|
||||||
* Created by sagi on 2/8/16.
|
* Created by sagi on 2/8/16.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import com.sagi.dayan.Games.Elements.*;
|
|
||||||
import com.sagi.dayan.Games.Engine.GameEngine;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.KeyListener;
|
import java.awt.event.KeyListener;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
|
import com.sagi.dayan.Games.Engine.GameEngine;
|
||||||
|
|
||||||
public abstract class Scene extends MouseAdapter implements KeyListener{
|
public abstract class Scene extends MouseAdapter implements KeyListener{
|
||||||
|
|
||||||
public int getStageWidth() {
|
public int getStageWidth() {
|
||||||
|
|
63
src/com/sagi/dayan/Games/Stage/SecondStage.java
Normal file
63
src/com/sagi/dayan/Games/Stage/SecondStage.java
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
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 SecondStage extends Level{
|
||||||
|
|
||||||
|
protected final int NUM_OF_WAVES = 4;
|
||||||
|
|
||||||
|
public SecondStage(int width, int height, int numOfPlayers, GameEngine engine, String stageTitle, int[] waveDelay) {
|
||||||
|
super(width, height, numOfPlayers, engine, stageTitle, waveDelay);
|
||||||
|
numOfWaves = NUM_OF_WAVES;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void launchWave(long now) {
|
||||||
|
lastWaveTime = now;
|
||||||
|
System.out.println("New Wave!! " + currentWave + ", Time: " + now);
|
||||||
|
WaveConfig wc;
|
||||||
|
int numOfEnemies = 5, numOfHits = 1;
|
||||||
|
double launchDelay = 0.5, fireDelay = 5;
|
||||||
|
switch (currentWave){
|
||||||
|
case 0:
|
||||||
|
numOfEnemies = 5;
|
||||||
|
fireDelay = 0.5;
|
||||||
|
launchDelay = 0.5;
|
||||||
|
numOfHits = 1;
|
||||||
|
wc = engine.getWaveConfigs().getWaveConfig(6);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
numOfEnemies = 5;
|
||||||
|
fireDelay = 0.3;
|
||||||
|
launchDelay = 1;
|
||||||
|
numOfHits = 2;
|
||||||
|
wc = engine.getWaveConfigs().getWaveConfig(3);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
numOfEnemies = 10;
|
||||||
|
fireDelay = 0.3;
|
||||||
|
launchDelay = 1;
|
||||||
|
numOfHits = 3;
|
||||||
|
wc = engine.getWaveConfigs().getWaveConfig(2);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
numOfEnemies = 15;
|
||||||
|
fireDelay = 0.2;
|
||||||
|
launchDelay = 1;
|
||||||
|
numOfHits = 5;
|
||||||
|
wc = engine.getWaveConfigs().getWaveConfig(7);
|
||||||
|
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++;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,17 +1,19 @@
|
||||||
package com.sagi.dayan.Games.Stage;
|
package com.sagi.dayan.Games.Stage;
|
||||||
|
|
||||||
import com.sagi.dayan.Games.Engine.GameEngine;
|
import java.awt.Graphics;
|
||||||
import com.sagi.dayan.Games.Utils.Utils;
|
import java.awt.Image;
|
||||||
import sun.audio.AudioPlayer;
|
|
||||||
import sun.audio.AudioStream;
|
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
|
||||||
import javax.swing.*;
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
|
import com.sagi.dayan.Games.Engine.GameEngine;
|
||||||
|
import com.sagi.dayan.Games.Utils.Utils;
|
||||||
|
//import sun.audio.AudioPlayer;
|
||||||
|
//import sun.audio.AudioStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by sagi on 2/27/16.
|
* Created by sagi on 2/27/16.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
package com.sagi.dayan.Games.Stage;
|
package com.sagi.dayan.Games.Stage;
|
||||||
|
|
||||||
import com.sagi.dayan.Games.Engine.GameEngine;
|
import java.awt.Graphics;
|
||||||
import com.sagi.dayan.Games.Utils.Utils;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.image.BufferStrategy;
|
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
|
import com.sagi.dayan.Games.Engine.GameEngine;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by sagi on 2/8/16.
|
* Created by sagi on 2/8/16.
|
||||||
*/
|
*/
|
||||||
|
|
63
src/com/sagi/dayan/Games/Stage/ThirdStage.java
Normal file
63
src/com/sagi/dayan/Games/Stage/ThirdStage.java
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
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 ThirdStage extends Level{
|
||||||
|
|
||||||
|
protected final int NUM_OF_WAVES = 4;
|
||||||
|
|
||||||
|
public ThirdStage(int width, int height, int numOfPlayers, GameEngine engine, String stageTitle, int[] waveDelay) {
|
||||||
|
super(width, height, numOfPlayers, engine, stageTitle, waveDelay);
|
||||||
|
numOfWaves = NUM_OF_WAVES;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void launchWave(long now) {
|
||||||
|
lastWaveTime = now;
|
||||||
|
System.out.println("New Wave!! " + currentWave + ", Time: " + now);
|
||||||
|
WaveConfig wc;
|
||||||
|
int numOfEnemies = 5, numOfHits = 1;
|
||||||
|
double launchDelay = 0.5, fireDelay = 5;
|
||||||
|
switch (currentWave){
|
||||||
|
case 0:
|
||||||
|
numOfEnemies = 5;
|
||||||
|
fireDelay = 0.5;
|
||||||
|
launchDelay = 0.5;
|
||||||
|
numOfHits = 1;
|
||||||
|
wc = engine.getWaveConfigs().getWaveConfig(6);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
numOfEnemies = 5;
|
||||||
|
fireDelay = 0.3;
|
||||||
|
launchDelay = 1;
|
||||||
|
numOfHits = 2;
|
||||||
|
wc = engine.getWaveConfigs().getWaveConfig(3);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
numOfEnemies = 10;
|
||||||
|
fireDelay = 0.3;
|
||||||
|
launchDelay = 1;
|
||||||
|
numOfHits = 3;
|
||||||
|
wc = engine.getWaveConfigs().getWaveConfig(2);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
numOfEnemies = 15;
|
||||||
|
fireDelay = 0.2;
|
||||||
|
launchDelay = 1;
|
||||||
|
numOfHits = 5;
|
||||||
|
wc = engine.getWaveConfigs().getWaveConfig(7);
|
||||||
|
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++;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,12 +1,12 @@
|
||||||
package com.sagi.dayan.Games.Utils;
|
package com.sagi.dayan.Games.Utils;
|
||||||
|
|
||||||
import sun.audio.AudioPlayer;
|
|
||||||
import sun.audio.AudioStream;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
|
||||||
|
import sun.audio.AudioPlayer;
|
||||||
|
import sun.audio.AudioStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by sagi on 2/24/16.
|
* Created by sagi on 2/24/16.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue