Alexanders Final Project
<< Shooter Game by Josh and Chris | OldProjectsTrailIndex | Alexi's Final Project >>
Click here for a working demonstration
SOLDIER_WAR GAME:
GRAPHICS
SoldierWar.java
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.Timer;
public class SoldierWar extends Applet implements KeyListener
{
public static final int amount = 20;
private static final Graphics g = null;
private Soldier soldier;
private ArrayList<Projectile> bullets = new ArrayList<Projectile>();
private String BULLET_LEFT_FILENAME = "Bad_Ass_Bullet_Left.gif";
private String BULLET_RIGHT_FILENAME = "Bad_Ass_Bullet_Right.gif";
private String STANDING_SOLDIER_FILENAME = "Soldier_Standing_Default.gif"; // right
private String CROUCHING_SOLDIER_FILENAME = "Soldier_Crouching_Default.gif"; // right
private String STANDING_LEFT= "Soldier_Standing_Left.gif";
private String CROUCHING_LEFT= "Soldier_Crouching_Left.gif";
private final int SCREEN_WIDTH = 1200;
private final int SCREEN_HEIGHT = 800;
private final int VERT_PADDING = 100;
private final int HORIZ_PADDING = 100;
private Soldier evilSoldier;
public void init()
{
resize(SCREEN_WIDTH, SCREEN_HEIGHT);
this.addKeyListener(this);
soldier = new Soldier(STANDING_SOLDIER_FILENAME, CROUCHING_SOLDIER_FILENAME, HORIZ_PADDING + 30, 585);
evilSoldier = new Soldier(STANDING_LEFT, CROUCHING_LEFT, SCREEN_WIDTH - HORIZ_PADDING - 130, 585);
final int DELAY = 5; // 10 ms between movements of bullet
ActionListener fireTask = new ActionListener()
{
private final int DELTA_X = 20; // number pixels it moves in 10 ms
public void actionPerformed(ActionEvent evt)
{
for(Projectile p : bullets)
{
if (p.isGoingRight()) {
p.setX(p.getX() + DELTA_X);
} else {
p.setX(p.getX() - DELTA_X);
}
}
repaint();
}
};
Timer fireTimer = new Timer(DELAY, fireTask);
fireTimer.setRepeats(true);
fireTimer.start();
}
public void paint(Graphics g)
{
Background sky = new Background("Sky.gif",100, 75);
Background grass = new Background("Grass.gif", 100, 675);
Background HorizontalBoundaryUP = new Background("Horizontal_Boundary.gif", 100, 50);
Background HorizontalBoundaryDOWN = new Background("Horizontal_Boundary.gif", 100, 725);
Background VerticalBoundaryLEFT = new Background("Vertical_Boundary.gif", 75, 75);
Background VerticalBoundaryRIGHT = new Background("Vertical_Boundary.gif", 1100, 75);
Background CornerUpLeft = new Background("Corner_Boundary.gif", 75, 50);
Background CornerDownLeft = new Background("Corner_Boundary.gif", 75, 725);
Background CornerUpRight = new Background("Corner_Boundary.gif", 1100, 50);
Background CornerDownRight = new Background("Corner_Boundary.gif", 1100, 725);
// Background soldierStanding = new Background("Soldier_Standing.gif", 100, 585);
// Background soldierCrouching = new Background("Soldier_Crouching.gif", 100, 585);
// Soldier SoldierStanding = new Soldier("Soldier_Standing.gif", 0, 575);
// Soldier SoldierCrouching = new Soldier("Soldier_Crouching.gif", 0, 575);
sky.draw(g);
grass.draw(g);
HorizontalBoundaryUP.draw(g);
HorizontalBoundaryDOWN.draw(g);
VerticalBoundaryLEFT.draw(g);
VerticalBoundaryRIGHT.draw(g);
CornerUpLeft.draw(g);
CornerDownLeft.draw(g);
CornerUpRight.draw(g);
CornerDownRight.draw(g);
// soldierStanding.draw(g);
// soldierCrouching.draw(g);
// SoldierStanding.draw(g);
// SoldierCrouching.draw(g);
soldier.draw(g);
evilSoldier.draw(g);
Iterator<Projectile> itr = bullets.iterator();
while (itr.hasNext())
{
Projectile p = itr.next();
if(!isInScreen(p)) {
itr.remove(); // get rid of the bullet if it exits the screen
System.out.println("BULLET DISAPPEARED");
}
else
{
p.draw(g);
System.out.println("FIRE");
}
}
}
public void keyPressed(KeyEvent e)
{
char keyCode = e.getKeyChar();
if(keyCode == 'w') // JUMP
{
jump(soldier);
}
else if (keyCode == 's') // CROUCH
{
crouch(soldier);
}
else if (keyCode == 'a') // LEFT
{
moveLeft(soldier);
}
else if (keyCode == 'd') // RIGHT
{
moveRight(soldier);
}
else if (keyCode == 'f') // FIRE PROJECTILE [IE - BULLET]
{
int FACTOR = 13; // drop bullet this many pixels from top of soldier image
Projectile bullet = new Projectile(BULLET_RIGHT_FILENAME, soldier.getX() + soldier.getGraphicWidth(), soldier.getY() + FACTOR, true);
bullets.add(bullet);
// set up jump using a timer
}
if(keyCode == 'i') // JUMP
{
jump(evilSoldier);
}
else if (keyCode == 'k') // CROUCH
{
crouch(evilSoldier);
}
else if (keyCode == 'j') // LEFT
{
moveLeft(evilSoldier);
}
else if (keyCode == 'l') // RIGHT
{
moveRight(evilSoldier);
}
else if (keyCode == 'h') // FIRE PROJECTILE [IE - BULLET]
{
int FACTOR = 13; // drop bullet this many pixels from top of soldier image
Projectile bullet = new Projectile(BULLET_LEFT_FILENAME, evilSoldier.getX(), evilSoldier.getY() + FACTOR, false);
bullets.add(bullet);
// set up jump using a timer
}
repaint();
}
public void moveRight(final Soldier p) {
if (isOnFarLeft(p) || !isOnFarRight(p)) {
p.setX(p.getX() + amount);
}
}
public void moveLeft(final Soldier p) {
if (isOnFarRight(p) || !isOnFarLeft(p)) {
p.setX(p.getX() - amount);
}
}
public void crouch (final Soldier p) {
// set up jump using a timer
int delay = 100; //milliseconds
ActionListener task = new ActionListener()
{
boolean done = false;
public void actionPerformed(ActionEvent evt)
{
if (!p.isCrouched() && !done)
{
System.out.println("crouching");
p.crouch();
repaint();
}
else if (!done)
{
System.out.println("standing");
p.stand();
repaint();
done = true;
}
else
{
// do nothing
}
}
};
p.setCrouchTimer(new Timer(delay, task));
p.getCrouchTimer().setRepeats(true);
p.getCrouchTimer().start();
}
public void jump (final Soldier p) {
// set up jump using a timer
int delay = 100; //milliseconds
ActionListener task = new ActionListener()
{
private boolean jumped = false;
boolean jumpActionDone = false;
public void actionPerformed(ActionEvent evt)
{
if (!jumped && !jumpActionDone)
{
p.setY(p.getY() + Soldier.JUMP_UP);
jumped = true;
repaint();
System.out.println("JUMP UP");
}
else if (jumped && !jumpActionDone)
{
p.setY(p.getY() + Soldier.FALL_DOWN);
repaint();
jumpActionDone = true;
System.out.println("FALL DOWN");
}
else
{
// do nothing
}
}
};
p.setJumpTimer(new Timer(delay, task));
p.getJumpTimer().setRepeats(true);
p.getJumpTimer().start();
}
// returns true if the object is in the screen, false otherwise
public boolean isInScreen(GraphicCartesian p) {
if(p.getX() > (SCREEN_WIDTH - HORIZ_PADDING - p.getGraphicWidth()) || p.getX() < (HORIZ_PADDING)) {
return false;
}
return true;
}
public boolean isOnFarLeft(GraphicCartesian p) {
if(p.getX() < (HORIZ_PADDING)) {
return true;
}
return false;
}
public boolean isOnFarRight(GraphicCartesian p) {
if(p.getX() > (SCREEN_WIDTH - HORIZ_PADDING - p.getGraphicWidth())) {
return true;
}
return false;
}
public void keyReleased(KeyEvent e)
{
}
public void keyTyped(KeyEvent e)
{
}
}
Background.java:
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Background
{
private int x;
private int y;
private BufferedImage img;
public Background(String graphicFileName, int x, int y)
{
this.x=x;
this.y=y;
this.img = null;
try
{
img = ImageIO.read(new File(graphicFileName));
}
catch (IOException e)
{
}
}
public void setX(int x)
{
this.x = x;
}
public void setY(int y)
{
this.y = y;
}
public void draw(Graphics g)
{
g.drawImage(img, x, y, null);
}
}
Soldier.java:
import java.awt.Graphics;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.Timer;
public class Soldier implements GraphicCartesian
{
private int x;
private int y;
private BufferedImage img;
private BufferedImage crouched_img;
public static final int JUMP_UP = -200;
public static final int FALL_DOWN = 200;
private boolean isCrouched = false;
private Timer jumpTimer;
private Timer crouchTimer;
public Soldier(String graphicFileName, String crouchedFilename, int x, int y)
{
this.x = x;
this.y = y;
this.img = null;
try
{
img = ImageIO.read(new File(graphicFileName));
crouched_img = ImageIO.read(new File(crouchedFilename));
}
catch (IOException e)
{
System.out.println("Whoops, file IO error.");
}
}
public int getGraphicWidth()
{
return img.getWidth();
}
public int getGraphicHeight()
{
return img.getHeight();
}
public boolean isCrouched()
{
return isCrouched;
}
public void crouch()
{
isCrouched = true;
}
public void stand()
{
isCrouched = false;
}
public void draw(Graphics g)
{
if (!isCrouched())
{
g.drawImage(img, x, y, null);
}
else
{
g.drawImage(crouched_img, x, y, null);
}
}
public int getX()
{
return x;
}
public int getY()
{
return y;
}
public void setX(int x)
{
this.x = x;
}
public void setY(int y)
{
this.y = y;
}
public void setJumpTimer(Timer jumpTimer) {
this.jumpTimer = jumpTimer;
}
public Timer getJumpTimer() {
return jumpTimer;
}
public void setCrouchTimer(Timer crouchTimer) {
this.crouchTimer = crouchTimer;
}
public Timer getCrouchTimer() {
return crouchTimer;
}
}
Projectile.java:
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Projectile implements GraphicCartesian
{
private int x;
private int y;
private BufferedImage img;
private boolean goingRight;
public Projectile(String graphicFileName, int x, int y, boolean right)
{
goingRight = right;
this.x = x;
this.y = y;
this.img = null;
try
{
img = ImageIO.read(new File(graphicFileName));
}
catch (IOException e)
{
System.out.println("Whoops, file IO error.");
}
}
public boolean isGoingRight() {
return goingRight;
}
public int getGraphicWidth()
{
return img.getWidth();
}
public int getGraphicHeight()
{
return img.getHeight();
}
public void draw(Graphics g)
{
g.drawImage(img, x, y, null);
}
public int getX()
{
return x;
}
public int getY()
{
return y;
}
public void setX(int x)
{
this.x = x;
}
public void setY(int y)
{
this.y = y;
}
}
GraphicCartesian.java
public interface GraphicCartesian
{
public int getX();
public int getY();
public int getGraphicWidth();
public int getGraphicHeight();
}
