package first;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.awt.*;
import com.golden.gamedev.*;
import com.golden.gamedev.object.*;
import com.golden.gamedev.object.background.*;
import com.golden.gamedev.object.collision.BasicCollisionGroup;
import com.golden.gamedev.object.sprite.VolatileSprite;
public class FirstGame extends Game
{
private PlayField playfield;
private Background bg;
private Sprite ship;
private SpriteGroup bulletGroup;
private SpriteGroup enemyGroup;
private SpriteGroup explosionGroup;
private SpriteGroup enemyBulletGroup;
private SpriteGroup shipGroup;
private BufferedImage[] explosionImages;
private int level;
private int health;
private boolean gameOver;
{
//for spash do true
distribute = true;
}
@Override
public void initResources()
{
playfield = new PlayField();
// bg = new ColorBackground(Color.BLUE);
Background bg = new ImageBackground(
getImage("resources/good.jpg"));
playfield.setBackground(bg);
ship = new Sprite(getImage("resources/ship.png"), 320, 400);
shipGroup = new SpriteGroup("SHIPGROUP");
shipGroup.add(ship);
playfield.addGroup(shipGroup);
// playfield.add(ship);
bulletGroup = new SpriteGroup("BULLETGROUP");
playfield.addGroup(bulletGroup);
enemyGroup = new SpriteGroup("ENEMYGROUP");
playfield.addGroup(enemyGroup);
explosionGroup = new SpriteGroup("EXPLOSIONGROUP");
playfield.addGroup(explosionGroup);
enemyBulletGroup = new SpriteGroup("ENEMYBULLETGROUP");
playfield.addGroup(enemyBulletGroup);
level = 1;
health = 100;
gameOver = false;
createWaveOfEnemies();
playMusic("resources/song.mid");
explosionImages = new BufferedImage[25];
for (int i = 0; i < 25; i++)
{
int filenum = 1 + i;
String filename = "resources/explosion/00";
if (filenum < 10)
{
filename += "0";
}
filename += filenum + ".png";
explosionImages[i] = getImage(filename);
}
playfield.addCollisionGroup(bulletGroup, enemyGroup,
new BasicCollisionGroup()
{
public void collided(Sprite s1, Sprite s2)
{
BulletSprite bs = (BulletSprite) s1;
EnemySprite es = (EnemySprite) s2;
VolatileSprite vs = new VolatileSprite(explosionImages,
es.getX(), es.getY());
explosionGroup.add(vs);
bs.setActive(false);
es.setActive(false);
}
});
// // //
// // //
playfield.addCollisionGroup(enemyBulletGroup, shipGroup,
new BasicCollisionGroup()
{
public void collided(Sprite s1, Sprite s2)
{
BulletSprite bs = (BulletSprite) s1;
Sprite ship = s2;
VolatileSprite vs = new VolatileSprite(explosionImages,
ship.getX() + 5, ship.getY());
explosionGroup.add(vs);
bs.setActive(false);
health = health - 10;
}
});
}
@Override
public void update(long elapsedTime)
{
playfield.update(elapsedTime);
if (health < 1)
{
enemyGroup.clear();
bulletGroup.clear();
shipGroup.clear();
enemyBulletGroup.clear();
gameOver = true;
}
if (gameOver == false)
{
if (enemyGroup.getActiveSprite() == null)
{
enemyGroup.clear();
createWaveOfEnemies();
level++;
}
if (keyPressed(KeyEvent.VK_ESCAPE) == true)
{
// exit the game!
finish();
}
double hSpeed = 0.0;
if (keyDown(KeyEvent.VK_LEFT) == true)
{
if (ship.getX() > 0)
{
hSpeed = -0.2;
}
else
{
ship.setX(0);
}
}
if (keyDown(KeyEvent.VK_RIGHT) == true)
{
if (ship.getX() < 640 - ship.getWidth())
{
hSpeed = 0.2;
}
else
{
ship.setX(640 - ship.getWidth());
}
}
ship.setHorizontalSpeed(hSpeed);
double vSpeed = 0.0;
if (keyDown(KeyEvent.VK_UP) == true)
{
if (ship.getY() > 0)
{
vSpeed = -0.2;
}
else
{
ship.setY(0);
}
}
if (keyDown(KeyEvent.VK_DOWN) == true)
{
if (ship.getY() < 480 - ship.getHeight())
{
vSpeed = 0.2;
}
else
{
ship.setY(480 - ship.getHeight());
}
}
ship.setVerticalSpeed(vSpeed);
if (keyPressed(KeyEvent.VK_SPACE))
{
BulletSprite bs = new BulletSprite(
getImage("resources/bullet.png"), ship.getX() + 18,
ship.getY(), false);
bulletGroup.add(bs);
}
}
else //game is over, check for mouse click
{
if(click() == true)
{
health = 100;
level = 1;
gameOver = false;
ship = new Sprite(getImage("resources/ship.png"), 320, 400);
shipGroup.add(ship);
createWaveOfEnemies();
}
}
}
@Override
public void render(Graphics2D g)
{
playfield.render(g);
if (gameOver == false)
{
g.setColor(Color.cyan);
g.drawString((int) ship.getX() + ":" + (int) ship.getY(),
(int) ship.getX() + 10, (int) ship.getY() + 40);
g.setColor(Color.white);
g.drawString("Level: " + level, 10, 10);
g.drawString("Health: " + health, 10, 20);
}
else
{
g.setColor(Color.MAGENTA);
g.drawString("Game over - Click for new game", 200, 200);
}
}
public void createWaveOfEnemies()
{
for (int x = 0; x < 6; x++)
{
for (int y = 0; y < 3; y++)
{
EnemySprite e = new EnemySprite(
getImage("resources/enemy1.png"), x * 80, y * 80 + 20,
this);
enemyGroup.add(e);
}
}
}
public void addEnemyBulletToGroup(int x, int y)
{
BulletSprite bs = new BulletSprite(getImage("resources/bullet.png"), x,
y, true);
enemyBulletGroup.add(bs);
}
public static void main(String[] args)
{
GameLoader game = new GameLoader();
FirstGame fg = new FirstGame();
game.setup(fg, new Dimension(640, 480), false);
game.start();
}
}