it might work idfk

master
Marcus Gosselin 2014-10-16 18:40:06 -04:00
parent 3ac43a68f6
commit 0652f56d9e
25 changed files with 2530 additions and 0 deletions

View File

@ -2,5 +2,6 @@
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry combineaccessrules="false" kind="src" path="/MAndEngine"/>
<classpathentry kind="output" path="bin"/>
</classpath>

1
bin/.gitignore vendored 100644
View File

@ -0,0 +1 @@
/MAndApps/

View File

@ -0,0 +1,33 @@
package MAndApps.apps.spacewars;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.util.Random;
import MAndApps.apps.spacewars.tools.BasicTickAndRender;
public abstract class Entity extends BasicTickAndRender{
private Rectangle boundingBox;
private Random r = new Random();
public Entity(int x, int y, int width, int height){
boundingBox = new Rectangle(x, y, width, height);
}
public void updateBoundingBox(int x, int y, int width, int height){
boundingBox.setBounds(x, y, width, height);
}
public void keyPressed(KeyEvent e){}
public void keyReleased(KeyEvent e){}
public final double getX(){
return boundingBox.getX();
}
public final double getY(){
return boundingBox.getY();
}
public int rand(int i, int j){
return r.nextInt(j-i) + i;
}
public Rectangle getBoundingBox(){
return boundingBox;
}
}

View File

@ -0,0 +1,344 @@
package MAndApps.apps.spacewars;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.net.URL;
import java.util.Random;
import java.util.Stack;
import javax.imageio.ImageIO;
import MAndApps.apps.spacewars.entity.Enemy;
import MAndApps.apps.spacewars.entity.Player;
import MAndApps.apps.spacewars.shop.Shop;
import MAndApps.apps.spacewars.tools.Explosion;
import MAndEngine.BasicApp;
import MAndEngine.Engine;
public class SpaceWars implements BasicApp {
//
private static boolean paused = false, debug = false;
private static int redPoints = 0, bluePoints = 0, greenPoints = 0, time = 0;
private static final int WIDTH = 1024, HEIGHT = 600;
private static Player player = new Player();
private static Image background;
private static Random r = new Random();
private static Stack<Enemy> enemies = new Stack<Enemy>();
private static Stack<Explosion> explosions = new Stack<Explosion>();
private static Stack<String> logs = new Stack<String>();
private static int lvl = 1, xpToNextLVL = getMaxXPForLvl(lvl), xp = 0, expBar = 424;
private static boolean shopping = false;
private Shop shop = new Shop();
//
public static final Font defaultFont = new Font("Ubuntu", Font.BOLD, 10);
public static final Font moneyFont = new Font("Ubuntu", Font.BOLD, 20);
public static final Font levelFont = new Font("Ubuntu", Font.BOLD, 40);
public static final Font pausedFont = new Font("Ubuntu", Font.BOLD, 60);
@Override
public void tick() {
addEXP(1);
if (!paused && !shopping) {
time++;
// ticks enemy stack
for (int i = 0; i < enemies.size(); i++)
enemies.elementAt(i).tick();
// tick explosions
for (int i = 0; i < explosions.size(); i++)
explosions.elementAt(i).tick();
// tick player class
player.tick();
Rectangle playerRect = player.getBoundingBox();
if (player.getAlive())
for (int i = 0; i < enemies.size(); i++)
if (enemies.elementAt(i).getBoundingBox().intersects(playerRect))
player.collideWithEnemy(enemies.elementAt(i).getX(), enemies.elementAt(i).getY());
int i = 0;
while (i < enemies.size()) {
if (!enemies.elementAt(i).getAlive()) {
/*
* BOOM( 75, 1.2,
* enemies.elementAt(i).getColor().getRed()-50,
* enemies.elementAt(i).getColor().getGreen()-50,
* enemies.elementAt(i).getColor().getBlue()-50, 50,
* (int)enemies.elementAt(i).getX(),
* (int)enemies.elementAt(i).getY(), 550, true, true, 10 );
*/
addRedPoints(enemies.elementAt(i).getColor().getRed());
addGreenPoints(enemies.elementAt(i).getColor().getGreen());
addBluePoints(enemies.elementAt(i).getColor().getBlue());
log("You gained " + enemies.elementAt(i).getWorth() + " exp.");
addEXP(enemies.elementAt(i).getWorth());
//enemies.remove(i);
} else
i++;
}
i = 0;
while (i < explosions.size()) {
if (!explosions.elementAt(i).getAlive()) {
explosions.remove(i);
} else {
i++;
}
}
expBar += ((int) (((double) xp / (double) xpToNextLVL) * 424) - expBar) / 10;
}
shop.tick();
// check if there are any new items to log
int cap = logs.size();
for (int i = 0; i < cap; i++)
Engine.log(logs.pop());
}
public static void log(String s) {
logs.push(s);
}
public static Stack<Enemy> getEnemies() {
return enemies;
}
@Override
public void render(Graphics2D g) {
try {
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g.setFont(defaultFont);
g.drawImage(background, 0, 0, WIDTH, HEIGHT, null);
for (int i = 0; i < explosions.size(); i++)
explosions.elementAt(i).render(g, i);
player.render(g);
for (int i = 0; i < enemies.size(); i++)
enemies.elementAt(i).render(g);
// render points
g.setFont(moneyFont);
g.setColor(Color.RED);
g.drawString(redPointsToString(), 10, HEIGHT - 10 - (20 * 3));
g.setColor(Color.GREEN);
g.drawString(greenPointsToString(), 10, HEIGHT - 10 - (20 * 2));
g.setColor(Color.BLUE);
g.drawString(bluePointsToString(), 10, HEIGHT - 10 - (20 * 1));
g.setFont(defaultFont);
// render level and xp bar.
g.setFont(levelFont);
g.setColor(Color.WHITE);
g.drawString("" + lvl, 300 - ((("" + lvl).length() - 1) * 20), 40);
g.drawRect(330, 18, 424, 15);
g.fillRect(330, 18, expBar, 15);
g.setFont(defaultFont);
if (paused) {
g.setFont(pausedFont);
g.setColor(Color.WHITE);
g.drawString("Paused", 410, 280);
g.setFont(defaultFont);
}
shop.render(g, WIDTH);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void resumeApp() {
}
@Override
public void pauseApp() {
}
public static Player getPlayer() {
return player;
}
public boolean getDebug() {
return debug;
}
@Override
public Dimension getResolution() {
return new Dimension(WIDTH, HEIGHT);
}
@Override
public void initialize() {
try {
background = ImageIO.read(new URL("http://wallpapersus.com/wallpapers/2012/10/Cool-Wave-600x1024.jpg"));
} catch (Exception e) {
background = (Image) new BufferedImage(1024, 600, BufferedImage.TRANSLUCENT);
Graphics g = background.getGraphics();
g.setColor(Color.BLUE);
g.fillRect(0, 0, 1024, 600);
}
}
@Override
public void keyPressed(KeyEvent e) {
player.keyPressed(e);
for (int i = 0; i < enemies.size(); i++)
enemies.elementAt(i).keyPressed(e);
if (e.getKeyCode() == KeyEvent.VK_P || e.getKeyCode() == KeyEvent.VK_SPACE) {
paused = !paused;
} else if (e.getKeyCode() == KeyEvent.VK_E) {
xp = xpToNextLVL - 1;
} else if (e.getKeyCode() == KeyEvent.VK_Q) {
debug = !debug;
} else if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
shopping = !shopping;
shop.toggleState();
}
}
@Override
public void keyReleased(KeyEvent e) {
player.keyReleased(e);
for (int i = 0; i < enemies.size(); i++)
enemies.elementAt(i).keyReleased(e);
shop.keyReleased(e);
}
@Override
public String getTitle() {
return "Space Wars";
}
@Override
public Color getColor() {
return new Color(88, 128, 255);
}
@Override
public int getFramerate() {
return 50;
}
@Override
public boolean getResizable() {
return false;
}
public static void BOOM(double speed, double decay, int r, int g, int b, int variant, int x, int y, int size, boolean singleVariant, boolean bubble, int sizeOfParticles) {
explosions.push(new Explosion(speed, decay, r, g, b, variant, singleVariant));
explosions.peek().goBoom(x, y, size, bubble, sizeOfParticles);
}
public void addRedPoints(int d) {
redPoints += d;
}
public void addGreenPoints(int d) {
greenPoints += d;
}
public void addBluePoints(int d) {
bluePoints += d;
}
private String redPointsToString() {
String _return = "$" + redPoints / 100d;
if (_return.length() == ("" + redPoints).length() + 1 || _return.length() == ("" + redPoints).length() + 3)
_return += "0";
return _return;
}
private String greenPointsToString() {
String _return = "$" + greenPoints / 100d;
if (_return.length() == ("" + greenPoints).length() + 1 || _return.length() == ("" + greenPoints).length() + 3)
_return += "0";
return _return;
}
private String bluePointsToString() {
String _return = "$" + bluePoints / 100d;
if (_return.length() == ("" + bluePoints).length() + 1 || _return.length() == ("" + bluePoints).length() + 3)
_return += "0";
return _return;
}
private static int getMaxXPForLvl(int lvl) {
return (int)(Math.pow(lvl, 1.618));
}
public void addEXP(int i) {
xp += i;
while (xp >= xpToNextLVL) {
xp -= xpToNextLVL;
lvl++;
xpToNextLVL = getMaxXPForLvl(lvl);
for (int j = 0; j < 424; j += 100) {
BOOM(75, 1.618, 255, 255, 255, 0, 300 + (j), 20, 200, true, false, 2);
}
}
}
// i got bored and made logic methods... so?
public boolean or(boolean a, boolean b) {
return a || b;
}
public boolean not(boolean a) {
return !a;
}
public boolean and(boolean a, boolean b) {
return not(or(not(a), not(b)));
}
public boolean xor(boolean a, boolean b) {
return not(or(not(or(not(a), not(b))), not(or(a, b))));
// return !((!((!a)||(!b)))||(!(a||b)));
// return or(not(or(not(a),b)),not(or(not(b),a)));
// return ((!(a||!(b)))||(!(b||!(a))));
}
@Override
public boolean visibleInMenu() {
// TODO Auto-generated method stub
return true;
}
public static int getHEIGHT() {
return HEIGHT;
}
public static int getWIDTH() {
return WIDTH;
}
@Override
public void resized(int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void click() {
// TODO Auto-generated method stub
}
}

View File

@ -0,0 +1,193 @@
package MAndApps.apps.spacewars.entity;
import MAndApps.apps.spacewars.Entity;
import MAndApps.apps.spacewars.entity.bullet.BasicPlayerBullet;
import MAndApps.apps.spacewars.entity.bullet.PlayerExplodeBullet;
import MAndApps.apps.spacewars.entity.bullet.PlayerImpactBullet;
import MAndApps.apps.spacewars.entity.bullet.PlayerPiercingBullet;
public abstract class Bullet extends Entity {
//these are the bullet identities. i think its fairly self explanatory..
//public static final int NAME_OF_BULLET_TYPE = some_number_not_being_used_as_another_id;
public static final int BASIC = 0;
public static final int PLAYER_PIERCE_ONE = 1;
public static final int PLAYER_PIERCE_TWO = 2;
public static final int PLAYER_PIERCE_THREE = 3;
public static final int PLAYER_PIERCE_FOUR = 4;
public static final int PLAYER_PIERCE_FIVE = 5;
public static final int PLAYER_PIERCE_SIX = 6;
public static final int PLAYER_PIERCE_SEVEN = 7;
public static final int PLAYER_PIERCE_EIGHT = 8;
public static final int PLAYER_PIERCE_NINE = 9;
public static final int PLAYER_PIERCE_TEN = 10;
public static final int PLAYER_EXPLOSIVE_ONE = 11;
public static final int PLAYER_EXPLOSIVE_TWO = 12;
public static final int PLAYER_EXPLOSIVE_THREE = 13;
public static final int PLAYER_EXPLOSIVE_FOUR = 14;
public static final int PLAYER_EXPLOSIVE_FIVE = 15;
public static final int PLAYER_EXPLOSIVE_SIX = 16;
public static final int PLAYER_EXPLOSIVE_SEVEN = 17;
public static final int PLAYER_EXPLOSIVE_EIGHT = 18;
public static final int PLAYER_EXPLOSIVE_NINE = 19;
public static final int PLAYER_EXPLOSIVE_TEN = 20;
public static final int PLAYER_IMPACT_ONE = 21;
public static final int PLAYER_IMPACT_TWO = 22;
public static final int PLAYER_IMPACT_THREE = 23;
public static final int PLAYER_IMPACT_FOUR = 24;
public static final int PLAYER_IMPACT_FIVE = 25;
public static final int PLAYER_IMPACT_SIX = 26;
public static final int PLAYER_IMPACT_SEVEN = 27;
public static final int PLAYER_IMPACT_EIGHT = 28;
public static final int PLAYER_IMPACT_NINE = 29;
public static final int PLAYER_IMPACT_TEN = 30;
public static final int PLAYER_GODMODE = 31;
public Bullet(int x, int y, int width, int height) {
super(x, y, width, height);
}
/**
* bullet class now references here to get the cool down for the current bullet
* updates upon ammo change or initialization of a gun type.
* @param bulletType
* @return
*/
public static int getCooldown(int bulletType){
switch (bulletType){
case BASIC:
return 25;
case PLAYER_PIERCE_ONE:
return 20;
case PLAYER_PIERCE_TWO:
return 18;
case PLAYER_PIERCE_THREE:
return 16;
case PLAYER_PIERCE_FOUR:
return 14;
case PLAYER_PIERCE_FIVE:
return 12;
case PLAYER_PIERCE_SIX:
return 10;
case PLAYER_PIERCE_SEVEN:
return 8;
case PLAYER_PIERCE_EIGHT:
return 6;
case PLAYER_PIERCE_NINE:
return 4;
case PLAYER_PIERCE_TEN:
return 2;
case PLAYER_EXPLOSIVE_ONE:
return 50;
case PLAYER_EXPLOSIVE_TWO:
return 48;
case PLAYER_EXPLOSIVE_THREE:
return 46;
case PLAYER_EXPLOSIVE_FOUR:
return 44;
case PLAYER_EXPLOSIVE_FIVE:
return 42;
case PLAYER_EXPLOSIVE_SIX:
return 40;
case PLAYER_EXPLOSIVE_SEVEN:
return 38;
case PLAYER_EXPLOSIVE_EIGHT:
return 36;
case PLAYER_EXPLOSIVE_NINE:
return 34;
case PLAYER_EXPLOSIVE_TEN:
return 32;
case PLAYER_GODMODE:
return 0;
default:
return 25;
}
}
public static Bullet getNewBullet(int bulletType, int x, int y, int direction){
switch(bulletType){
//this is the literal bit that goes through and indexes what to do
//with certain IDs that you defined above..
//formatting is simple, cases can not go after the default so
//they must be added in between it and the last "case"
//return new PlayerPiercingBullet(direction, x, y, 2);
//this returns a new pierce bullet at position x(this parameter
//was passed via the function...) and y(also passed), with a
//direction, direction(also passed in..), with a pierce amount of
//whatever is entered in place of the 2.
//inside the parenthesis, in the returns, are called
//"arguments" or "parameters".
case BASIC:
return new BasicPlayerBullet(direction, x, y);
case PLAYER_PIERCE_ONE:
return new PlayerPiercingBullet(direction, x, y, 2, false);
case PLAYER_PIERCE_TWO:
return new PlayerPiercingBullet(direction, x, y, 3, false);
case PLAYER_PIERCE_THREE:
return new PlayerPiercingBullet(direction, x, y, 4, false);
case PLAYER_PIERCE_FOUR:
return new PlayerPiercingBullet(direction, x, y, 5, false);
case PLAYER_PIERCE_FIVE:
return new PlayerPiercingBullet(direction, x, y, 6, false);
case PLAYER_PIERCE_SIX:
return new PlayerPiercingBullet(direction, x, y, 7, false);
case PLAYER_PIERCE_SEVEN:
return new PlayerPiercingBullet(direction, x, y, 8, false);
case PLAYER_PIERCE_EIGHT:
return new PlayerPiercingBullet(direction, x, y, 9, false);
case PLAYER_PIERCE_NINE:
return new PlayerPiercingBullet(direction, x, y, 10, false);
case PLAYER_PIERCE_TEN:
return new PlayerPiercingBullet(direction, x, y, 15, true);
case PLAYER_EXPLOSIVE_ONE:
return new PlayerExplodeBullet(direction, x, y, 2);
case PLAYER_EXPLOSIVE_TWO:
return new PlayerExplodeBullet(direction, x, y, 3);
case PLAYER_EXPLOSIVE_THREE:
return new PlayerExplodeBullet(direction, x , y, 4);
case PLAYER_EXPLOSIVE_FOUR:
return new PlayerExplodeBullet(direction, x, y, 5);
case PLAYER_EXPLOSIVE_FIVE:
return new PlayerExplodeBullet(direction, x, y, 6);
case PLAYER_EXPLOSIVE_SIX:
return new PlayerExplodeBullet(direction, x, y, 7);
case PLAYER_EXPLOSIVE_SEVEN:
return new PlayerExplodeBullet(direction, x, y, 8);
case PLAYER_EXPLOSIVE_EIGHT:
return new PlayerExplodeBullet(direction, x, y, 9);
case PLAYER_EXPLOSIVE_NINE:
return new PlayerExplodeBullet(direction, x, y, 10);
case PLAYER_EXPLOSIVE_TEN:
return new PlayerExplodeBullet(direction, x, y, 15);
case PLAYER_IMPACT_ONE:
return new PlayerImpactBullet(direction, x, y, 1);
case PLAYER_IMPACT_TWO:
return new PlayerImpactBullet(direction, x, y, 2);
case PLAYER_IMPACT_THREE:
return new PlayerImpactBullet(direction, x, y, 3);
case PLAYER_IMPACT_FOUR:
return new PlayerImpactBullet(direction, x, y, 4);
case PLAYER_IMPACT_FIVE:
return new PlayerImpactBullet(direction, x, y, 5);
case PLAYER_IMPACT_SIX:
return new PlayerImpactBullet(direction, x, y, 6);
case PLAYER_IMPACT_SEVEN:
return new PlayerImpactBullet(direction, x, y, 7);
case PLAYER_IMPACT_EIGHT:
return new PlayerImpactBullet(direction, x, y, 8);
case PLAYER_IMPACT_NINE:
return new PlayerImpactBullet(direction, x, y, 9);
case PLAYER_IMPACT_TEN:
return new PlayerImpactBullet(direction, x, y, 10);
case PLAYER_GODMODE:
return new PlayerExplodeBullet(direction, x, y, 200);
default://if the bullet type passed in for this function is not one of the above cases..
return new BasicPlayerBullet(direction, x, y);//return it a basic bullet.
}
}
public abstract boolean getAlive();
public abstract int getDamage();
public abstract int getWIDTH();
public abstract int getHEIGHT();
}

View File

@ -0,0 +1,58 @@
package MAndApps.apps.spacewars.entity;
import java.awt.Color;
import MAndApps.apps.spacewars.entity.enemy.BlueEnemy;
import MAndApps.apps.spacewars.entity.enemy.GreenEnemy;
import MAndApps.apps.spacewars.entity.enemy.NormalEnemy;
import MAndApps.apps.spacewars.entity.enemy.RedEnemy;
import MAndApps.apps.spacewars.tools.Entity;
public abstract class Enemy extends Entity {
public static final int NORMAL = 0;
public static final int
RED_TIER_ONE = 1,
RED_TIER_TWO = 2,
RED_TIER_THREE = 3,
RED_TIER_FOUR = 4,
RED_TIER_FIVE = 5;
public static final int
BLUE_TIER_ONE = 6,
BLUE_TIER_TWO = 7,
BLUE_TIER_THREE = 8,
BLUE_TIER_FOUR = 9,
BLUE_TIER_FIVE = 10;
public static final int
GREEN_TIER_ONE = 11,
GREEN_TIER_TWO = 12,
GREEN_TIER_THREE = 13,
GREEN_TIER_FOUR = 14,
GREEN_TIER_FIVE = 15;
public Enemy(int x, int y, int width, int height) {
super(x, y, width, height);
}
public final static Enemy getNewEnemy(int type, int x, int y){
switch(type){
case NORMAL:
return new NormalEnemy(x, y);
case BLUE_TIER_ONE:
return new BlueEnemy(x, y, 2);
case RED_TIER_ONE:
return new RedEnemy(x, y, 2);
case GREEN_TIER_ONE:
return new GreenEnemy(x, y, 2);
default:
return new NormalEnemy(x, y);
}
}
public abstract boolean getAlive();
public abstract Color getColor();
public int getWorth() {
return 1;
}
public abstract void damage(int damage);
}

View File

@ -0,0 +1,268 @@
package MAndApps.apps.spacewars.entity;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.util.Random;
import MAndApps.apps.spacewars.SpaceWars;
import MAndApps.apps.spacewars.gun.Gun;
import MAndApps.apps.spacewars.tools.Direction;
import MAndApps.apps.spacewars.tools.Entity;
public class Player extends Entity {
private final static int WIDTH = 16, HEIGHT = 16;
private double x = 512, y = 550;
private static final double ACC = 0.5, MAXSPEED = 5;
private double dx = 0, dy = 0;
private boolean A = false, S = false, D = false, W = false, alive = true;
private Random r = new Random();
private Gun gun = new Gun(Bullet.BASIC, 25, (int)x, (int)y);
private boolean goBoom = false;
public Player() {
super((int) 512, (int) 550, WIDTH, HEIGHT);
}
@Override
public int tick() {
if (goBoom) {
SpaceWars.BOOM(50, 1.2, 50, 50, 50, 30, (int) x, (int) y, 550, true,
false, 3);
goBoom = false;
}
gun.tick();
if (alive) {
if (time != 1)
time -= 0.05d;
if (time < 1)
time = 1;
if (D && !A)
dx += ACC;
else if (A && !D) {
dx -= ACC;
} else {
if ((int) (dx * 100) > 0)
dx -= ACC;
else if ((int) (dx * 100) < 0)
dx += ACC;
else
dx = 0;
}
if (S && !W)
dy += ACC;
else if (W && !S) {
dy -= ACC;
} else {
if ((int) (dy * 100) > 0)
dy -= ACC;
else if ((int) (dy * 100) < 0)
dy += ACC;
else
dy = 0;
}
if (dx > MAXSPEED)
while (dx > MAXSPEED)
dx -= ACC;
if (dx < 0 - MAXSPEED)
while (dx < 0 - MAXSPEED)
dx += ACC;
if (dy > MAXSPEED)
while (dy > MAXSPEED)
dy -= ACC;
if (dy < 0 - MAXSPEED)
while (dy < 0 - MAXSPEED)
dy += ACC;
y += dy;
x += dx;
if (x > SpaceWars.getWIDTH() - WIDTH)
while (x > SpaceWars.getWIDTH() - WIDTH)
x--;
if (x < 0)
while (x < 0)
x++;
if (y > SpaceWars.getHEIGHT() - HEIGHT)
while (y > SpaceWars.getHEIGHT() - HEIGHT)
y--;
if (y < 0)
while (y < 0)
y++;
} else {
x = -1;
y = -1;
if (timer > 4 * 50) {
alive = true;
x = 512;
y = 550;
}
timer++;
}
updateBoundingBox((int) x, (int) y, WIDTH, HEIGHT);
return 0;
}
private int timer = 0;
@Override
public void render(Graphics g) {
g.setColor(Color.BLACK);
if (alive) {
int temp;
try {
temp = r.nextInt((int) time);
} catch (Exception e) {
temp = 1;
}
if (temp == 0)
g.fillRect((int) x, (int) y, WIDTH, HEIGHT);
}
gun.render(g);
}
private double time = 0;
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_W:
W = true;
break;
case KeyEvent.VK_D:
D = true;
break;
case KeyEvent.VK_S:
S = true;
break;
case KeyEvent.VK_A:
A = true;
break;
case KeyEvent.VK_I:
shoot(Direction.UP);
break;
case KeyEvent.VK_J:
shoot(Direction.LEFT);
break;
case KeyEvent.VK_K:
shoot(Direction.DOWN);
break;
case KeyEvent.VK_L:
shoot(Direction.RIGHT);
break;
}
}
private void shoot(int direction) {
gun.updatePosition((int)x + WIDTH/2, (int)y + HEIGHT/2);
gun.shoot(direction);
}
@Override
public void keyReleased(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_W:
W = false;
break;
case KeyEvent.VK_D:
D = false;
break;
case KeyEvent.VK_S:
S = false;
break;
case KeyEvent.VK_A:
A = false;
break;
}
}
public void collideWithEnemy(double x, double y) {
goBoom = true;
timer = 0;
alive = false;
time = 5;
}
public boolean getAlive() {
return alive;
}
public void setLevel(int i) {
switch (i) {
case 2:
gun.switchAmmo(Bullet.PLAYER_PIERCE_ONE);
break;
case 3:
gun.switchAmmo(Bullet.PLAYER_PIERCE_TWO);
break;
case 4:
gun.switchAmmo(Bullet.PLAYER_PIERCE_THREE);
break;
case 5:
gun.switchAmmo(Bullet.PLAYER_PIERCE_FOUR);
break;
case 6:
gun.switchAmmo(Bullet.PLAYER_PIERCE_FIVE);
break;
case 7:
gun.switchAmmo(Bullet.PLAYER_PIERCE_SIX);
break;
case 8:
gun.switchAmmo(Bullet.PLAYER_PIERCE_SEVEN);
break;
case 9:
gun.switchAmmo(Bullet.PLAYER_PIERCE_EIGHT);
break;
case 10:
gun.switchAmmo(Bullet.PLAYER_PIERCE_NINE);
break;
case 11:
gun.switchAmmo(Bullet.PLAYER_PIERCE_TEN);
break;
case 12:
gun.switchAmmo(Bullet.PLAYER_EXPLOSIVE_ONE);
break;
case 13:
gun.switchAmmo(Bullet.PLAYER_EXPLOSIVE_TWO);
break;
case 14:
gun.switchAmmo(Bullet.PLAYER_EXPLOSIVE_THREE);
break;
case 15:
gun.switchAmmo(Bullet.PLAYER_EXPLOSIVE_FOUR);
break;
case 16:
gun.switchAmmo(Bullet.PLAYER_EXPLOSIVE_FIVE);
break;
case 17:
gun.switchAmmo(Bullet.PLAYER_EXPLOSIVE_SIX);
break;
case 18:
gun.switchAmmo(Bullet.PLAYER_EXPLOSIVE_SEVEN);
break;
case 19:
gun.switchAmmo(Bullet.PLAYER_EXPLOSIVE_EIGHT);
break;
case 20:
gun.switchAmmo(Bullet.PLAYER_EXPLOSIVE_NINE);
break;
case 21:
gun.switchAmmo(Bullet.PLAYER_EXPLOSIVE_TEN);
break;
case 22:
gun.switchAmmo(Bullet.PLAYER_GODMODE);
break;
}
if(i >= 22){
gun.switchAmmo(Bullet.PLAYER_GODMODE);
}
}
}

View File

@ -0,0 +1,85 @@
package MAndApps.apps.spacewars.entity.bullet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import MAndApps.apps.spacewars.SpaceWars;
import MAndApps.apps.spacewars.entity.Bullet;
import MAndApps.apps.spacewars.tools.Direction;
public class BasicPlayerBullet extends Bullet {
private final int direction;
private final int WIDTH, HEIGHT;
private final static int SPEED = 10;
private double x, y;
private boolean alive = true;
public BasicPlayerBullet(int direction, int x, int y) {
super(x, y, 1, 1);
this.x = x;
this.y = y;
this.direction = direction;
if (direction == Direction.UP || direction == Direction.DOWN) {
WIDTH = 3;
HEIGHT = 8;
} else {
WIDTH = 8;
HEIGHT = 3;
}
updateBoundingBox((int) this.x, (int) this.y, WIDTH, HEIGHT);
}
public int tick() {
if (alive) {
if (direction == Direction.UP) {
y -= SPEED;
} else if (direction == Direction.DOWN) {
y += SPEED;
} else if (direction == Direction.LEFT) {
x -= SPEED;
} else if (direction == Direction.RIGHT) {
x += SPEED;
}
updateBoundingBox((int) x, (int) y, WIDTH, HEIGHT);
Rectangle r = getBoundingBox();
for (int i = 0; i < SpaceWars.getEnemies().size(); i++) {
if (r.intersects(SpaceWars.getEnemies().elementAt(i).getBoundingBox())) {
SpaceWars.getEnemies().elementAt(i).damage(getDamage());
alive = false;
i = SpaceWars.getEnemies().size();
}
}
if(x > SpaceWars.getWIDTH() || x < 0 - WIDTH || y > SpaceWars.getHEIGHT() || y < 0 - HEIGHT){
alive = false;
}
}
return 0;
}
public void render(Graphics g) {
g.setColor(Color.BLACK);
if (alive)
g.fillRect((int) x, (int) y, WIDTH, HEIGHT);
}
@Override
public boolean getAlive() {
return alive;
}
@Override
public int getDamage() {
return 1;
}
public int getWIDTH(){
return WIDTH;
}
public int getHEIGHT(){
return HEIGHT;
}
}

View File

@ -0,0 +1,94 @@
package MAndApps.apps.spacewars.entity.bullet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import MAndApps.apps.spacewars.SpaceWars;
import MAndApps.apps.spacewars.entity.Bullet;
import MAndApps.apps.spacewars.tools.BulletExplosion;
import MAndApps.apps.spacewars.tools.Direction;
public class PlayerExplodeBullet extends Bullet {
private BulletExplosion bulletExplosion;
private final int direction;
private final int WIDTH, HEIGHT;
private final static int SPEED = 10;
private double x, y;
private boolean alive = true;
private final int size;
private static final double PHI = 1.618033988749894848204586;
public int getWIDTH(){
return WIDTH;
}
public int getHEIGHT(){
return HEIGHT;
}
public PlayerExplodeBullet(int direction, int x, int y, int i) {
super(x, y, 1, 1);
this.x = x;
this.y = y;
this.direction = direction;
if (direction == Direction.UP || direction == Direction.DOWN) {
WIDTH = 3;
HEIGHT = 8;
} else {
WIDTH = 8;
HEIGHT = 3;
}
updateBoundingBox((int) this.x, (int) this.y, WIDTH, HEIGHT);
bulletExplosion = new BulletExplosion(i, 1.02, 100, 100, 100, 0, false, i);
size = i;
}
public int tick() {
if (alive) {
if (direction == Direction.UP) {
y -= SPEED;
} else if (direction == Direction.DOWN) {
y += SPEED;
} else if (direction == Direction.LEFT) {
x -= SPEED;
} else if (direction == Direction.RIGHT) {
x += SPEED;
}
updateBoundingBox((int) x, (int) y, WIDTH, HEIGHT);
Rectangle r = getBoundingBox();
for (int i = 0; i < SpaceWars.getEnemies().size(); i++) {
if (r.intersects(SpaceWars.getEnemies().elementAt(i).getBoundingBox())) {
SpaceWars.getEnemies().elementAt(i).damage(getDamage());
bulletExplosion.goBoom((int)x, (int)y, size * 10, false, size+2);
alive = false;
i = SpaceWars.getEnemies().size();
}
}
if(x > SpaceWars.getWIDTH() || x < 0 - WIDTH || y > SpaceWars.getHEIGHT() || y < 0 - HEIGHT){
alive = false;
}
}
bulletExplosion.tick();
return 0;
}
public void render(Graphics g) {
g.setColor(Color.BLACK);
if (alive)
g.fillRect((int) x, (int) y, WIDTH, HEIGHT);
bulletExplosion.render(g);
}
@Override
public boolean getAlive() {
return alive || bulletExplosion.getAlive();
}
@Override
public int getDamage() {
return 1;
}
}

View File

@ -0,0 +1,87 @@
package MAndApps.apps.spacewars.entity.bullet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import MAndApps.apps.spacewars.SpaceWars;
import MAndApps.apps.spacewars.entity.Bullet;
import MAndApps.apps.spacewars.tools.Direction;
public class PlayerImpactBullet extends Bullet {
private final int direction;
private final int WIDTH, HEIGHT;
private final static int SPEED = 10;
private double x, y;
private boolean alive = true;
private final int level;
public int getWIDTH(){
return WIDTH;
}
public int getHEIGHT(){
return HEIGHT;
}
public PlayerImpactBullet(int direction, int x, int y, int level) {
super(x, y, 1, 1);
this.x = x;
this.y = y;
this.direction = direction;
if (direction == Direction.UP || direction == Direction.DOWN) {
WIDTH = 3;
HEIGHT = 8;
} else {
WIDTH = 8;
HEIGHT = 3;
}
updateBoundingBox((int) this.x, (int) this.y, WIDTH, HEIGHT);
this.level = level;
}
public int tick() {
if (alive) {
if (direction == Direction.UP) {
y -= SPEED;
} else if (direction == Direction.DOWN) {
y += SPEED;
} else if (direction == Direction.LEFT) {
x -= SPEED;
} else if (direction == Direction.RIGHT) {
x += SPEED;
}
updateBoundingBox((int) x, (int) y, WIDTH, HEIGHT);
Rectangle r = getBoundingBox();
for (int i = 0; i < SpaceWars.getEnemies().size(); i++) {
if (r.intersects(SpaceWars.getEnemies().elementAt(i).getBoundingBox())) {
SpaceWars.getEnemies().elementAt(i).damage(getDamage());
alive = false;
i = SpaceWars.getEnemies().size();
}
}
if(x > SpaceWars.getWIDTH() || x < 0 - WIDTH || y > SpaceWars.getHEIGHT() || y < 0 - HEIGHT){
alive = false;
}
}
return 0;
}
public void render(Graphics g) {
g.setColor(Color.BLACK);
if (alive)
g.fillRect((int) x, (int) y, WIDTH, HEIGHT);
}
@Override
public boolean getAlive() {
return alive;
}
@Override
public int getDamage() {
return 1;
}
}

View File

@ -0,0 +1,97 @@
package MAndApps.apps.spacewars.entity.bullet;
import java.awt.Color;
import java.awt.Graphics;
import MAndApps.apps.spacewars.SpaceWars;
import MAndApps.apps.spacewars.entity.Bullet;
import MAndApps.apps.spacewars.tools.Direction;
public class PlayerPiercingBullet extends Bullet {
private final int direction, MAX_HITS;
private final int WIDTH, HEIGHT;
private final static int SPEED = 10;
private double x, y, oldX, oldY;
private boolean alive = true;
private int hits = 0;
private final boolean INFINISHOT;
final boolean lolface = true;
public int getWIDTH(){
return WIDTH;
}
public int getHEIGHT(){
return HEIGHT;
}
public PlayerPiercingBullet(int direction, int x, int y, int pierce, boolean b) {
super(x, y, 1, 1);
this.x = x;
this.y = y;
MAX_HITS = pierce;
this.direction = direction;
if (direction == Direction.UP || direction == Direction.DOWN) {
WIDTH = 3;
HEIGHT = 8;
} else {
WIDTH = 8;
HEIGHT = 3;
}
updateBoundingBox((int) this.x, (int) this.y, WIDTH, HEIGHT);
INFINISHOT = b;
}
public int tick() {
oldX = x;
oldY = y;
if (alive) {
switch(direction){
case Direction.UP:
y -= SPEED;
break;
case Direction.DOWN:
y += SPEED;
break;
case Direction.LEFT:
x -= SPEED;
break;
case Direction.RIGHT:
x += SPEED;
break;
}
updateBoundingBox((int) x, (int) y, WIDTH, HEIGHT);
for (int i = 0; i < SpaceWars.getEnemies().size() && hits < MAX_HITS; i++) {
if (SpaceWars.getEnemies().elementAt(i).getBoundingBox().intersectsLine((int)x, (int)y, (int)oldX, (int)oldY)) {
hits++;
SpaceWars.getEnemies().elementAt(i).damage(getDamage());
if(hits >= MAX_HITS){
alive = false;
i = SpaceWars.getEnemies().size();
}
}
}
if(x > SpaceWars.getWIDTH() || x < 0 - WIDTH || y > SpaceWars.getHEIGHT() || y < 0 - HEIGHT){
alive = false;
}
}
return 0;
}
@Override
public void render(Graphics g) {
g.setColor(Color.CYAN);
if (alive)
g.fillRect((int) x, (int) y, WIDTH, HEIGHT);
}
@Override
public boolean getAlive() {
return alive;
}
@Override
public int getDamage(){
return 2;
}
}

View File

@ -0,0 +1,177 @@
package MAndApps.apps.spacewars.entity.enemy;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import MAndApps.apps.spacewars.SpaceWars;
import MAndApps.apps.spacewars.entity.Enemy;
public class BlueEnemy extends Enemy {
private int health = 2;
private final int MAX_HEALTH = health;
private static final int WIDTH = 16, HEIGHT = 16, PROXIMITY = 200;
private double x, y, time = 0, desiredX, desiredY, Xmod, Ymod, dx = 0,
dy = 0;
private static final double ACC = 0.005, MAXSPEED = 1, DEAD_ACC = 0.5d,
DEAD_MAXSPEED = 5;
private Color color;
private boolean debug = false, alive = true;
private double healthBar = 1;
public BlueEnemy(int x, int y, int i) {
super(x, y, 16, 16);
this.x = x;
this.y = y;
final int LOW = 200, HIGH = 256, color = rand(LOW, HIGH);
this.color = new Color(color, color, color);
}
@Override
public int tick() {
// epic AI
if((int)healthBar <= 0){
alive = false;
}
if (alive) {
if (SpaceWars.getPlayer().getAlive()) {
if (time > 0.4d) {
time = 0;
Xmod = rand(-PROXIMITY, PROXIMITY);
Ymod = rand(-PROXIMITY, PROXIMITY);
}
desiredX = SpaceWars.getPlayer().getX() + Xmod;
desiredY = SpaceWars.getPlayer().getY() + Ymod;
if ((int) desiredX > (int) x)
dx += ACC;
else if ((int) desiredX < (int) x) {
dx -= ACC;
}
if ((int) desiredY > (int) y)
dy += ACC;
else if ((int) desiredY < (int) y) {
dy -= ACC;
}
if (dx > MAXSPEED)
while (dx > MAXSPEED)
dx -= ACC;
if (dx < 0 - MAXSPEED)
while (dx < 0 - MAXSPEED)
dx += ACC;
if (dy > MAXSPEED)
while (dy > MAXSPEED)
dy -= ACC;
if (dy < 0 - MAXSPEED)
while (dy < 0 - MAXSPEED)
dy += ACC;
} else {
if (time > 0.4d) {
time = 0;
Xmod = rand(0, 1024);
Ymod = rand(0, 200);
}
desiredX = Xmod;
desiredY = Ymod;
if ((int) desiredX > (int) x)
dx += DEAD_ACC;
else if ((int) desiredX < (int) x) {
dx -= DEAD_ACC;
}
if ((int) desiredY > (int) y)
dy += DEAD_ACC;
else if ((int) desiredY < (int) y) {
dy -= DEAD_ACC;
}
if (dx > DEAD_MAXSPEED)
while (dx > DEAD_MAXSPEED)
dx -= DEAD_ACC;
if (dx < 0 - DEAD_MAXSPEED)
while (dx < 0 - DEAD_MAXSPEED)
dx += DEAD_ACC;
if (dy > DEAD_MAXSPEED)
while (dy > DEAD_MAXSPEED)
dy -= DEAD_ACC;
if (dy < 0 - DEAD_MAXSPEED)
while (dy < 0 - DEAD_MAXSPEED)
dy += DEAD_ACC;
}
x += dx;
y += dy;
if (x > SpaceWars.getWIDTH() - WIDTH)
while (x > SpaceWars.getWIDTH() - WIDTH)
x--;
if (x < 0)
while (x < 0)
x++;
if (y > SpaceWars.getHEIGHT() - HEIGHT)
while (y > SpaceWars.getHEIGHT() - HEIGHT)
y--;
if (y < 0)
while (y < 0)
y++;
}
time += 0.01;
absoluteTime++;
updateBoundingBox((int) x, (int) y, 16, 16);
return 0;
}
private Random r = new Random();
private int absoluteTime = 0;
@Override
public void render(Graphics g) {
g.setColor(color);
int temp;
try{
temp = r.nextInt((int)(0-((double)absoluteTime/20d))+5);
}catch(Exception e){
temp = 0;
}
if (temp == 0) if (alive) g.fillRect((int) x, (int) y, WIDTH, HEIGHT);
if (debug) g.drawLine((int) x, (int) y, (int) desiredX, (int) desiredY);
healthBar += ((((double)health/(double)MAX_HEALTH)*16) - healthBar)/6;
//healthbar
g.setColor(Color.RED);
g.fillRect((int)x, (int)y, WIDTH - 1, 3);
g.setColor(Color.GREEN);
g.fillRect((int)x, (int)y, (int)healthBar, 3);
g.setColor(Color.BLACK);
g.drawRect((int)x, (int)y, WIDTH - 1, 3);
}
@Override
public void damage(int i) {
health -= i;
}
@Override
public boolean getAlive() {
return alive;
}
@Override
public Color getColor() {
return color;
}
@Override
public int getWorth(){
return r.nextInt(3)+1;
}
}

View File

@ -0,0 +1,183 @@
package MAndApps.apps.spacewars.entity.enemy;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import MAndApps.apps.spacewars.SpaceWars;
import MAndApps.apps.spacewars.entity.Enemy;
public class GreenEnemy extends Enemy {
private int health = 2;
private final int MAX_HEALTH = health;
private static final int WIDTH = 16, HEIGHT = 16, PROXIMITY = 200;
private double x, y, time = 0, desiredX, desiredY, Xmod, Ymod, dx = 0,
dy = 0;
private static final double ACC = 0.005, MAXSPEED = 1, DEAD_ACC = 0.5d,
DEAD_MAXSPEED = 5;
private Color color;
private boolean debug = false, alive = true;
private double healthBar = 1;
public GreenEnemy(int x, int y, int i) {
super(x, y, WIDTH, HEIGHT);
this.x = x;
this.y = y;
this.color = new Color(rand(50, 75), 255, rand(50, 75));
}
@Override
public int tick() {
// epic AI
if((int)healthBar <= 0){
alive = false;
}
if (alive) {
//UIFM
if (SpaceWars.getPlayer().getAlive()) {
if (time > 0.4d) {
time = 0;
Xmod = rand(-PROXIMITY, PROXIMITY);
Ymod = rand(-PROXIMITY, PROXIMITY);
}
desiredX = SpaceWars.getPlayer().getX() + Xmod;
desiredY = SpaceWars.getPlayer().getY() + Ymod;
//UIFM
if ((int) desiredX > (int) x)
dx += ACC;
else if ((int) desiredX < (int) x) {
dx -= ACC;
}
if ((int) desiredY > (int) y)
dy += ACC;
else if ((int) desiredY < (int) y) {
dy -= ACC;
}
//UIFM
if (dx > MAXSPEED)
while (dx > MAXSPEED)
dx -= ACC;
if (dx < 0 - MAXSPEED)
while (dx < 0 - MAXSPEED)
dx += ACC;
if (dy > MAXSPEED)
while (dy > MAXSPEED)
dy -= ACC;
if (dy < 0 - MAXSPEED)
while (dy < 0 - MAXSPEED)
dy += ACC;
} else {
//UIFM
if (time > 0.4d) {
time = 0;
Xmod = rand(0, 1024);
Ymod = rand(0, 200);
}
desiredX = Xmod;
desiredY = Ymod;
if ((int) desiredX > (int) x)
dx += DEAD_ACC;
else if ((int) desiredX < (int) x) {
dx -= DEAD_ACC;
}
if ((int) desiredY > (int) y)
dy += DEAD_ACC;
else if ((int) desiredY < (int) y) {
dy -= DEAD_ACC;
}
if (dx > DEAD_MAXSPEED)
while (dx > DEAD_MAXSPEED)
dx -= DEAD_ACC;
if (dx < 0 - DEAD_MAXSPEED)
while (dx < 0 - DEAD_MAXSPEED)
dx += DEAD_ACC;
if (dy > DEAD_MAXSPEED)
while (dy > DEAD_MAXSPEED)
dy -= DEAD_ACC;
if (dy < 0 - DEAD_MAXSPEED)
while (dy < 0 - DEAD_MAXSPEED)
dy += DEAD_ACC;
//UIFMMMMMMMMM
}
//UIFMMMMM
x += dx;
y += dy;
if (x > SpaceWars.getWIDTH() - WIDTH)
while (x > SpaceWars.getWIDTH() - WIDTH)
x--;
if (x < 0)
while (x < 0)
x++;
//UIFM UNIDENTIFIED FLYING MATH
if (y > SpaceWars.getHEIGHT() - HEIGHT)
while (y > SpaceWars.getHEIGHT() - HEIGHT)
y--;
if (y < 0)
while (y < 0)
y++;
}
time += 0.01;
absoluteTime++;
updateBoundingBox((int) x, (int) y, 16, 16);
return 0;
}
private Random r = new Random();
private int absoluteTime = 0;
@Override
public void render(Graphics g) {
g.setColor(color);
int temp;
try{
temp = r.nextInt((int)(0-((double)absoluteTime/20d))+5);
}catch(Exception e){
temp = 0;
}
//uifm
if (temp == 0) if (alive) g.fillRect((int) x, (int) y, WIDTH, HEIGHT);
if (debug) g.drawLine((int) x, (int) y, (int) desiredX, (int) desiredY);
healthBar += ((((double)health/(double)MAX_HEALTH)*16) - healthBar)/6;
//healthbar
g.setColor(Color.RED);
g.fillRect((int)x, (int)y, WIDTH - 1, 3);
g.setColor(Color.GREEN);
g.fillRect((int)x, (int)y, (int)healthBar, 3);
g.setColor(Color.BLACK);
g.drawRect((int)x, (int)y, WIDTH - 1, 3);
}
@Override
public void damage(int i) {
health -= i;
}
@Override
public boolean getAlive() {
return alive;
}
@Override
public Color getColor() {
return color;
}
@Override
public int getWorth(){
return r.nextInt(3)+1;
}
}

View File

@ -0,0 +1,177 @@
package MAndApps.apps.spacewars.entity.enemy;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import MAndApps.apps.spacewars.SpaceWars;
import MAndApps.apps.spacewars.entity.Enemy;
public class NormalEnemy extends Enemy {
private int health = 2;
private final int MAX_HEALTH = health;
private static final int WIDTH = 16, HEIGHT = 16, PROXIMITY = 200;
private double x, y, time = 0, desiredX, desiredY, Xmod, Ymod, dx = 0,
dy = 0;
private static final double ACC = 0.005, MAXSPEED = 1, DEAD_ACC = 0.5d,
DEAD_MAXSPEED = 5;
private Color color;
private boolean debug = false, alive = true;
private double healthBar = 1;
public NormalEnemy(int x, int y) {
super(x, y, 16, 16);
this.x = x;
this.y = y;
final int LOW = 200, HIGH = 256, color = rand(LOW, HIGH);
this.color = new Color(color, color, color);
}
@Override
public int tick() {
// epic AI
if((int)healthBar <= 0){
alive = false;
}
if (alive) {
if (SpaceWars.getPlayer().getAlive()) {
if (time > 0.4d) {
time = 0;
Xmod = rand(-PROXIMITY, PROXIMITY);
Ymod = rand(-PROXIMITY, PROXIMITY);
}
desiredX = SpaceWars.getPlayer().getX() + Xmod;
desiredY = SpaceWars.getPlayer().getY() + Ymod;
if ((int) desiredX > (int) x)
dx += ACC;
else if ((int) desiredX < (int) x) {
dx -= ACC;
}
if ((int) desiredY > (int) y)
dy += ACC;
else if ((int) desiredY < (int) y) {
dy -= ACC;
}
if (dx > MAXSPEED)
while (dx > MAXSPEED)
dx -= ACC;
if (dx < 0 - MAXSPEED)
while (dx < 0 - MAXSPEED)
dx += ACC;
if (dy > MAXSPEED)
while (dy > MAXSPEED)
dy -= ACC;
if (dy < 0 - MAXSPEED)
while (dy < 0 - MAXSPEED)
dy += ACC;
} else {
if (time > 0.4d) {
time = 0;
Xmod = rand(0, 1024);
Ymod = rand(0, 200);
}
desiredX = Xmod;
desiredY = Ymod;
if ((int) desiredX > (int) x)
dx += DEAD_ACC;
else if ((int) desiredX < (int) x) {
dx -= DEAD_ACC;
}
if ((int) desiredY > (int) y)
dy += DEAD_ACC;
else if ((int) desiredY < (int) y) {
dy -= DEAD_ACC;
}
if (dx > DEAD_MAXSPEED)
while (dx > DEAD_MAXSPEED)
dx -= DEAD_ACC;
if (dx < 0 - DEAD_MAXSPEED)
while (dx < 0 - DEAD_MAXSPEED)
dx += DEAD_ACC;
if (dy > DEAD_MAXSPEED)
while (dy > DEAD_MAXSPEED)
dy -= DEAD_ACC;
if (dy < 0 - DEAD_MAXSPEED)
while (dy < 0 - DEAD_MAXSPEED)
dy += DEAD_ACC;
}
x += dx;
y += dy;
if (x > SpaceWars.getWIDTH() - WIDTH)
while (x > SpaceWars.getWIDTH() - WIDTH)
x--;
if (x < 0)
while (x < 0)
x++;
if (y > SpaceWars.getHEIGHT() - HEIGHT)
while (y > SpaceWars.getHEIGHT() - HEIGHT)
y--;
if (y < 0)
while (y < 0)
y++;
}
time += 0.01;
absoluteTime++;
updateBoundingBox((int) x, (int) y, 16, 16);
return 0;
}
private Random r = new Random();
private int absoluteTime = 0;
@Override
public void render(Graphics g) {
g.setColor(color);
int temp;
try{
temp = r.nextInt((int)(0-((double)absoluteTime/20d))+5);
}catch(Exception e){
temp = 0;
}
if (temp == 0) if (alive) g.fillRect((int) x, (int) y, WIDTH, HEIGHT);
if (debug) g.drawLine((int) x, (int) y, (int) desiredX, (int) desiredY);
healthBar += ((((double)health/(double)MAX_HEALTH)*16) - healthBar)/6;
//healthbar
g.setColor(Color.RED);
g.fillRect((int)x, (int)y, WIDTH - 1, 3);
g.setColor(Color.GREEN);
g.fillRect((int)x, (int)y, (int)healthBar, 3);
g.setColor(Color.BLACK);
g.drawRect((int)x, (int)y, WIDTH - 1, 3);
}
@Override
public void damage(int i) {
health -= i;
}
@Override
public boolean getAlive() {
return alive;
}
@Override
public Color getColor() {
return color;
}
@Override
public int getWorth(){
return r.nextInt(3)+1;
}
}

View File

@ -0,0 +1,174 @@
package MAndApps.apps.spacewars.entity.enemy;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import MAndApps.apps.spacewars.SpaceWars;
import MAndApps.apps.spacewars.entity.Enemy;
public class RedEnemy extends Enemy {
private int health = 2;
private final int MAX_HEALTH = health;
private static final int WIDTH = 16, HEIGHT = 16, PROXIMITY = 200;
private double x, y, time = 0, desiredX, desiredY, Xmod, Ymod, dx = 0,
dy = 0;
private static final double ACC = 0.005, MAXSPEED = 1, DEAD_ACC = 0.5d,
DEAD_MAXSPEED = 5;
private Color color;
private boolean debug = false, alive = true;
private double healthBar = 1;
public RedEnemy(int x, int y, int i) {
super(x, y, WIDTH, HEIGHT);
this.x = x;
this.y = y;
this.color = new Color(255, rand(50, 75), rand(50, 75));
}
public int tick() {
// epic AI
if((int)healthBar <= 0){
alive = false;
}
if (alive) {
if (SpaceWars.getPlayer().getAlive()) {
if (time > 0.4d) {
time = 0;
Xmod = rand(-PROXIMITY, PROXIMITY);
Ymod = rand(-PROXIMITY, PROXIMITY);
}
desiredX = SpaceWars.getPlayer().getX() + Xmod;
desiredY = SpaceWars.getPlayer().getY() + Ymod;
if ((int) desiredX > (int) x)
dx += ACC;
else if ((int) desiredX < (int) x) {
dx -= ACC;
}
if ((int) desiredY > (int) y)
dy += ACC;
else if ((int) desiredY < (int) y) {
dy -= ACC;
}
if (dx > MAXSPEED)
while (dx > MAXSPEED)
dx -= ACC;
if (dx < 0 - MAXSPEED)
while (dx < 0 - MAXSPEED)
dx += ACC;
if (dy > MAXSPEED)
while (dy > MAXSPEED)
dy -= ACC;
if (dy < 0 - MAXSPEED)
while (dy < 0 - MAXSPEED)
dy += ACC;
} else {
if (time > 0.4d) {
time = 0;
Xmod = rand(0, 1024);
Ymod = rand(0, 200);
}
desiredX = Xmod;
desiredY = Ymod;
if ((int) desiredX > (int) x)
dx += DEAD_ACC;
else if ((int) desiredX < (int) x) {
dx -= DEAD_ACC;
}
if ((int) desiredY > (int) y)
dy += DEAD_ACC;
else if ((int) desiredY < (int) y) {
dy -= DEAD_ACC;
}
if (dx > DEAD_MAXSPEED)
while (dx > DEAD_MAXSPEED)
dx -= DEAD_ACC;
if (dx < 0 - DEAD_MAXSPEED)
while (dx < 0 - DEAD_MAXSPEED)
dx += DEAD_ACC;
if (dy > DEAD_MAXSPEED)
while (dy > DEAD_MAXSPEED)
dy -= DEAD_ACC;
if (dy < 0 - DEAD_MAXSPEED)
while (dy < 0 - DEAD_MAXSPEED)
dy += DEAD_ACC;
}
x += dx;
y += dy;
if (x > SpaceWars.getWIDTH() - WIDTH)
while (x > SpaceWars.getWIDTH() - WIDTH)
x--;
if (x < 0)
while (x < 0)
x++;
if (y > SpaceWars.getHEIGHT() - HEIGHT)
while (y > SpaceWars.getHEIGHT() - HEIGHT)
y--;
if (y < 0)
while (y < 0)
y++;
}
time += 0.01;
absoluteTime++;
updateBoundingBox((int) x, (int) y, 16, 16);
return 0;
}
private Random r = new Random();
private int absoluteTime = 0;
public void render(Graphics g) {
g.setColor(color);
int temp;
try{
temp = r.nextInt((int)(0-((double)absoluteTime/20d))+5);
}catch(Exception e){
temp = 0;
}
if (temp == 0) if (alive) g.fillRect((int) x, (int) y, WIDTH, HEIGHT);
if (debug) g.drawLine((int) x, (int) y, (int) desiredX, (int) desiredY);
healthBar += ((((double)health/(double)MAX_HEALTH)*16) - healthBar)/6;
//healthbar
g.setColor(Color.RED);
g.fillRect((int)x, (int)y, WIDTH - 1, 3);
g.setColor(Color.GREEN);
g.fillRect((int)x, (int)y, (int)healthBar, 3);
g.setColor(Color.BLACK);
g.drawRect((int)x, (int)y, WIDTH - 1, 3);
}
@Override
public void damage(int i) {
health -= i;
}
@Override
public boolean getAlive() {
return alive;
}
@Override
public Color getColor() {
return color;
}
@Override
public int getWorth(){
return (int)(Math.random() * 3)+1;
}
}

View File

@ -0,0 +1,58 @@
package MAndApps.apps.spacewars.gun;
import java.awt.Graphics;
import java.util.Stack;
import MAndApps.apps.spacewars.entity.Bullet;
public class Gun {
private Stack<Bullet> bullets = new Stack<Bullet>();
private int bulletType;
private int MAX_COOLDOWN;
private int cooldown = 0, x, y;
public Gun(int bulletType, int cooldown, int x, int y){
MAX_COOLDOWN = cooldown;
this.bulletType = bulletType;
this.x = x;
this.y = y;
}
public void updatePosition(int x, int y){
this.x = x;
this.y = y;
}
public void render(Graphics g){
for(int i = 0; i < bullets.size(); i ++)
bullets.elementAt(i).render(g);
}
public void tick(){
cooldown ++;
//tick bullets
for(int i = 0; i < bullets.size(); i++)
bullets.elementAt(i).tick();
for(int i = 0; i < bullets.size(); i++){
if(!bullets.elementAt(i).getAlive())
bullets.remove(i);
else
i++;
}
}
public void shoot(int direction){
if(cooldown >= MAX_COOLDOWN){
cooldown = 0;
bullets.push(Bullet.getNewBullet(bulletType, x-(Bullet.getNewBullet(bulletType, x, y, direction).getWIDTH()/2), y-(Bullet.getNewBullet(bulletType, x, y, direction).getHEIGHT()/2), direction));
}
}
public void switchAmmo(int bulletType){
this.bulletType = bulletType;
MAX_COOLDOWN = Bullet.getCooldown(bulletType);
}
public void setCooldown(int i) {
MAX_COOLDOWN = i;
}
}

View File

@ -0,0 +1,59 @@
package MAndApps.apps.spacewars.shop;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
public class Shop {
private final int ON = 17, OFF = 64, BOX_WIDTH = 500, BOX_HEIGHT = 200, BOX_Y_OFFSET = 50, BOX_Y_MULTIPLIER = 250, MAX_ANIMATION_TIME = BOX_WIDTH;
private int state = OFF, selection = 0;
private double animationTime = 0;
public void render(Graphics g, final int WIDTH){
g.setColor(selection == 0 ? Color.CYAN : Color.BLUE);
g.fillRect((int)animationTime-BOX_WIDTH, BOX_Y_OFFSET, BOX_WIDTH, BOX_HEIGHT);
g.setColor(selection == 2 ? Color.CYAN : Color.BLUE);
g.fillRect((int)animationTime-BOX_WIDTH, BOX_Y_OFFSET+BOX_Y_MULTIPLIER, BOX_WIDTH, BOX_HEIGHT);
g.setColor(selection == 1 ? Color.CYAN : Color.BLUE);
g.fillRect(WIDTH - (int)animationTime, BOX_Y_OFFSET, BOX_WIDTH, BOX_HEIGHT);
g.setColor(selection == 3 ? Color.CYAN : Color.BLUE);
g.fillRect(WIDTH - (int)animationTime, BOX_Y_OFFSET+BOX_Y_MULTIPLIER, BOX_WIDTH, BOX_HEIGHT);
}
public void tick(){
if(state == ON && !(animationTime > BOX_WIDTH)){
animationTime+=(double)(MAX_ANIMATION_TIME-animationTime)/6;
}else if(state == OFF && !(animationTime < 0)){
animationTime+=(double)(0-animationTime)/6;
}
if(animationTime < 0.49d){
selection = 0;
}
}
public void toggleState(){
if(state == ON){
state = OFF;
}else if(state == OFF){
state = ON;
}
}
public void keyReleased(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_W){
selection += 2;
selection %= 4;
}else if(e.getKeyCode() == KeyEvent.VK_D){
selection += 1;
if(selection == 2) selection = 0;
else if(selection == 4) selection = 2;
}else if(e.getKeyCode() == KeyEvent.VK_A){
selection -= 1;
if(selection == -1) selection = 1;
else if(selection == 1) selection = 3;
}else if(e.getKeyCode() == KeyEvent.VK_S){
selection -= 2;
if(selection < 0) selection += 4;
}
}
}

View File

@ -0,0 +1,9 @@
package MAndApps.apps.spacewars.tools;
import java.awt.Graphics;
public abstract class BasicTickAndRender {
public abstract int tick();
public abstract void render(Graphics g);
}

View File

@ -0,0 +1,81 @@
package MAndApps.apps.spacewars.tools;
import java.awt.Graphics;
import java.util.Random;
import java.util.Stack;
public class BulletExplosion {
private Stack<CollisionParticle> bits = new Stack<CollisionParticle>();
private Random rand = new Random();
private final double SPEED, DECAY;
private final int r, g, b, variant;
private final boolean singleVariant;
private final int damage;
public BulletExplosion(double speed, double decay, int r, int g, int b, int variant, boolean singleVariant, int damage){
SPEED = speed;
DECAY = decay;
this.r = r;
this.g = g;
this.b = b;
this.variant = variant;
this.singleVariant = singleVariant;
this.damage = damage;
}
public void tick() {
for(int i = 0; i < bits.size(); i++)
bits.elementAt(i).tick();
int i = 0;
while(i < bits.size()){
if(!bits.elementAt(i).getAlive()){
bits.remove(i);
}else{
i++;
}
}
}
public void render(Graphics g) {
for(int i = 0; i < bits.size(); i++)
bits.elementAt(i).render(g);
//g.setColor(Color.WHITE);
//g.drawString("particles: " + bits.size(), 920 - (int)(Math.floor((double)line/20) * 100), 15 + ((line%20)*12));
}
public void reset() {
bits.clear();
}
public void goBoom(double x, double y, int size, boolean bubble, int sizeOfParticles) {
for(int i = 0; i < size; i++){
bits.push(
new CollisionParticle(
rand.nextInt(360),
(rand.nextDouble()*1000)%SPEED,
rand.nextInt(100),
rand.nextInt(50) + 100,
(int)x,
(int)y,
DECAY,
r,
g,
b,
variant,
singleVariant,
bubble,
sizeOfParticles,
damage
)
);
}
}
public boolean getAlive(){
boolean alive = false;
for(int i = 0; i < bits.size(); i++)
if(bits.elementAt(i).getAlive())
alive = true;
return alive;
}
}

View File

@ -0,0 +1,116 @@
package MAndApps.apps.spacewars.tools;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.Random;
import MAndApps.apps.spacewars.SpaceWars;
public class CollisionParticle extends Entity {
private double x, y, life, speed;
private final int angleDeg, moveLife, renderLife, size;
private final double DECAY;
private boolean alive = false, bubble;
private Random rand = new Random();
private Color color;
private final int damage;
private boolean active = true;
public CollisionParticle(int angle, double speed, int movelife,
int renderlife, int x, int y, double speedDecay, int r, int g,
int b, int variant, boolean singleVariant, boolean bubble,
int sizeOfParticles, int damage) {
super(0, 0, 1, 1);
renderLife = renderlife;
this.speed = speed;
angleDeg = angle;
this.x = x;
moveLife = movelife;
this.y = y;
alive = true;
size = rand.nextInt(sizeOfParticles);
DECAY = speedDecay;
int i = 0;
this.bubble = bubble;
if (!bubble) {
if (!singleVariant) {
while (i < 10) {
try {
color = new Color(r + rand.nextInt(variant * 2)
- variant, g + rand.nextInt(variant * 2)
- variant, b + rand.nextInt(variant * 2)
- variant);
i = 10;
} catch (IllegalArgumentException e) {
i++;
if (i >= 10) {
color = new Color(r, g, b);
}
}
}
} else {
while (i < 10) {
try {
int tempVar = rand.nextInt(variant * 2) - variant;
color = new Color(r + tempVar, g + tempVar, b + tempVar);
i = 10;
} catch (IllegalArgumentException e) {
i++;
if (i >= 10) {
color = new Color(r, g, b);
}
}
}
}
} else {
color = new Color(rand(0, 256), rand(0, 256), rand(0, 256));
}
this.damage = damage;
}
public int tick() {
if (life < moveLife) {
x += Math.cos(((double) angleDeg * Math.PI) / 180d) * speed;
y += Math.sin(((double) angleDeg * Math.PI) / 180d) * speed;
}
speed /= DECAY;
if (life > renderLife)
alive = false;
if(life > moveLife){
active = false;
}
if (x > SpaceWars.getWIDTH() || x < 0 - size
|| y > SpaceWars.getHEIGHT() || y < 0 - size) {
alive = false;
}
life++;
if(active){
Rectangle r = getBoundingBox();
for (int i = 0; i < SpaceWars.getEnemies().size(); i++) {
if (r.intersects(SpaceWars.getEnemies().elementAt(i).getBoundingBox())) {
SpaceWars.getEnemies().elementAt(i).damage(damage);
//active = false;
i = SpaceWars.getEnemies().size();
}
}
}
updateBoundingBox((int) x, (int) y, size, size);
return 0;
}
public void render(Graphics g) {
if (alive) {
g.setColor(color);
if (bubble)
g.drawOval((int) x, (int) y, size, size);
else
g.fillRect((int) x, (int) y, size, size);
}
}
public boolean getAlive() {
return alive;
}
}

View File

@ -0,0 +1,12 @@
package MAndApps.apps.spacewars.tools;
public class Direction {
private final int direction;
public static final int UP = 0, DOWN = 1, LEFT = 2, RIGHT = 3;
public Direction(int i){
direction = i;
}
public int getDirection() {
return direction;
}
}

View File

@ -0,0 +1,32 @@
package MAndApps.apps.spacewars.tools;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.util.Random;
public abstract class Entity extends BasicTickAndRender{
private Rectangle boundingBox;
private Random r = new Random();
public Entity(int x, int y, int width, int height){
boundingBox = new Rectangle(x, y, width, height);
}
public void updateBoundingBox(int x, int y, int width, int height){
boundingBox.setBounds(x, y, width, height);
}
public void keyPressed(KeyEvent e){}
public void keyReleased(KeyEvent e){}
public final double getX(){
return boundingBox.getX();
}
public final double getY(){
return boundingBox.getY();
}
public int rand(int i, int j){
return r.nextInt(j-i) + i;
}
public Rectangle getBoundingBox(){
return boundingBox;
}
}

View File

@ -0,0 +1,79 @@
package MAndApps.apps.spacewars.tools;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import java.util.Stack;
public class Explosion {
private Stack<Particle> bits = new Stack<Particle>();
private Random rand = new Random();
private final double SPEED, DECAY;
private final int r, g, b, variant;
private final boolean singleVariant;
public Explosion(double speed, double decay, int r, int g, int b, int variant, boolean singleVariant){
SPEED = speed;
DECAY = decay;
this.r = r;
this.g = g;
this.b = b;
this.variant = variant;
this.singleVariant = singleVariant;
}
public void tick() {
for(int i = 0; i < bits.size(); i++)
bits.elementAt(i).tick();
int i = 0;
while(i < bits.size()){
if(!bits.elementAt(i).getAlive()){
bits.remove(i);
}else{
i++;
}
}
}
public void render(Graphics g, int line) {
for(int i = 0; i < bits.size(); i++)
bits.elementAt(i).render(g);
g.setColor(Color.WHITE);
g.drawString("particles: " + bits.size(), 920 - (int)(Math.floor((double)line/20) * 100), 15 + ((line%20)*12));
}
public void reset() {
bits.clear();
}
public void goBoom(double x, double y, int size, boolean bubble, int sizeOfParticles) {
for(int i = 0; i < size; i++){
bits.push(
new Particle(
rand.nextInt(360),
(rand.nextDouble()*1000)%SPEED,
rand.nextInt(100),
rand.nextInt(50) + 100,
(int)x,
(int)y,
DECAY,
r,
g,
b,
variant,
singleVariant,
bubble,
sizeOfParticles
)
);
}
}
public boolean getAlive(){
boolean alive = false;
for(int i = 0; i < bits.size(); i++)
if(bits.elementAt(i).getAlive())
alive = true;
return alive;
}
}

View File

@ -0,0 +1,101 @@
package MAndApps.apps.spacewars.tools;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import MAndApps.apps.spacewars.SpaceWars;
public class Particle extends Entity{
private double x, y, life, speed;
private final int angleDeg, moveLife, renderLife, size;
private final double DECAY;
private boolean alive = false, bubble;
private Random rand = new Random();
private Color color;
public Particle(int angle, double speed, int movelife, int renderlife,
int x, int y, double speedDecay, int r, int g, int b, int variant,
boolean singleVariant, boolean bubble, int sizeOfParticles) {
super(0, 0, 1, 1);
renderLife = renderlife;
this.speed = speed;
angleDeg = angle;
this.x = x;
moveLife = movelife;
this.y = y;
alive = true;
size = rand.nextInt(sizeOfParticles);
DECAY = speedDecay;
int i = 0;
this.bubble = bubble;
if (!bubble) {
if (!singleVariant) {
while (i < 10) {
try {
color = new Color(r + rand.nextInt(variant * 2)
- variant, g + rand.nextInt(variant * 2)
- variant, b + rand.nextInt(variant * 2)
- variant);
i = 10;
} catch (IllegalArgumentException e) {
i++;
if (i >= 10) {
color = new Color(r, g, b);
}
}
}
} else {
while (i < 10) {
try {
int tempVar = rand.nextInt(variant * 2) - variant;
color = new Color(r + tempVar, g + tempVar, b + tempVar);
i = 10;
} catch (IllegalArgumentException e) {
i++;
if (i >= 10) {
color = new Color(r, g, b);
}
}
}
}
} else {
color = new Color(rand(0, 256), rand(0, 256), rand(0, 256));
}
updateBoundingBox((int)x, (int)y, size , size);
}
private static final double PHI = 1.618033988749894848204586;
public int tick() {
if (life < moveLife) {
x += Math.cos(((double) angleDeg * Math.PI) / 180d) * speed;
y += Math.sin(((double) angleDeg * Math.PI) / 180d) * speed;
}
speed /= PHI;
if (life > renderLife)
alive = false;
if (x > SpaceWars.getWIDTH() || x < 0 - size
|| y > SpaceWars.getHEIGHT() || y < 0 - size) {
alive = false;
}
life++;
return 0;
}
public void render(Graphics g) {
if (alive) {
g.setColor(color);
if(bubble) g.drawOval((int) x, (int) y, size, size);
else g.fillRect((int) x, (int) y, size, size);
}
}
public boolean getAlive() {
return alive;
}
}

11
src/Main.java 100644
View File

@ -0,0 +1,11 @@
import MAndEngine.Engine;
public class Main {
public static void main(String[] args) {
Engine engine = new Engine(new String[] {"MAndApps.apps.SpaceWars"}, false);
engine.run();
}
}