/**
* @(#)SI.java
*
* SI Applet application
*
* @author
* @version 1.00 2007/5/29
*/
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class SI extends Applet implements Runnable, KeyListener
{
int width, height;
int shooter_x = 375; // initial x position of the shooter
int shooter_y = 725; // initial y position of the shooter
int bullet_x;
int bullet_y;
int barrier_y = 600; // y value of all barriers
boolean[] segmentLives1 = {true, true, true, true, true, true, true}; // sets all segments of the barrier to alive
boolean[] segmentLives2 = {true, true, true, true, true, true, true}; // sets all segments of the barrier to alive
boolean[] segmentLives3 = {true, true, true, true, true, true, true}; // sets all segments of the barrier to alive
boolean[] segmentLives4 = {true, true, true, true, true, true, true}; // sets all segments of the barrier to alive
int barrier1_x = 20; // x position of barrier 1
int barrier2_x = 245; // x position of barrier 2
int barrier3_x = 470; // x position of barrier 3
int barrier4_x = 695; // x position of barrier 4
Barrier barrier1 = new Barrier (barrier1_x, barrier_y, segmentLives1); // sets barrier 1 as a part of Barrier class
Barrier barrier2 = new Barrier (barrier2_x, barrier_y, segmentLives2); // sets barrier 2 as a part of Barrier class
Barrier barrier3 = new Barrier (barrier3_x, barrier_y, segmentLives3); // sets barrier 3 as a part of Barrier class
Barrier barrier4 = new Barrier (barrier4_x, barrier_y, segmentLives4); // sets barrier 4 as a part of Barrier class
boolean move_right = false; // boolean used to track shooter movement right
boolean move_left = false; // boolean used to track shooter movement left
boolean shooting = false; // boolean used to track if shoot button is pressed
boolean bullet_go = false; // boolean used to keep the bullet independent from the shoot button
private Image dbImage; // from site
private Graphics dbg; // from site
Monster[] monster = new Monster[40];
public void init ()
{
width = getSize ().width;
height = getSize ().height;
setBackground (Color.white);
}
public void start ()
{
Thread begin = new Thread (this);
begin.start ();
}
public void keyPressed (KeyEvent e)
{
int key = e.getKeyCode ();
if (key == 37)
{
move_left = true; // indicates that the shooter is moving to the left if the left arrow pad is pressed
}
if (key == 39)
{
move_right = true; // indicates that the shooter is moving to the right if the right arrow pad is pressed
}
if (key == 32)
{
shooting = true; // indicates that the shoot button has been pressed when the space button has been pressed
}
}
public void keyReleased (KeyEvent e)
{
int key = e.getKeyCode ();
if (key == 37)
{
move_left = false; // indicates that the shooter should stop moving left because the left arrow pad has been released
}
if (key == 39)
{
move_right = false; // indicates that the shooter should stop moving right because the right arrow pad has been released
}
if (key == 32)
{
shooting = false; // indicates that the shoot button has been released
}
}
public void keyTyped (KeyEvent e)
{
}
public void movement ()
{
if (move_left == true)
{
shooter_x -= 3; // moves the shooter a certain speed left when the left arrow pad has been pressed
}
if (move_left == true && shooter_x <= 0)
{
shooter_x += 3; // counterbalances the movement speed left when it reaches the far left wall by moving the opposite way at the same speed
}
if (move_right == true)
{
shooter_x += 3; // moves the shooter a certain speed right when the right arrow pad has been pressed
}
if (move_right == true && shooter_x >= 750)
{
shooter_x -= 3; // counterbalances the movement speed right when it reaches the far right wall by moving the opposite way at the same speed
}
}
public void shoot ()
{
if (shooting == true && bullet_go == false)
{
bullet_go = true; // sets bullet go to false when the spacebar has been pressed. This keeps the bullet independent from the shoot button
bullet_x = shooter_x + 20; // sets the initial x position of the bullet
bullet_y = shooter_y; // sets the initial y position of the bullet
}
if (bullet_go == true)
{
bullet_y -= 5; // sets the speed at which the bullet moves
}
if (bullet_y + 25 <= 0)
{
bullet_go = false; // resets bullet_go when it has reached the top of the screen
}
}
public void hitBarrier (Barrier b)
{
if (b.checkHit (bullet_go) == true) // indicates whether we have hit a barrier part
{
bullet_go = false; // resets bullet go when a barrier part has been hit
shooting = false; // resets shooting when a barrier part has been hit
}
}
public void drawMonsters(Graphics g, Monster m){
}
public void drawBarrier (Graphics g, Barrier b)
{
if (b.checkAlive () [0] == true)
{
g.fillRect (b.getx (), b.gety (), 30, 30); // draws the top left box of the barrier if it is still alive
}
if (b.checkAlive () [1] == true)
{
g.fillRect (b.getx () + 30, b.gety (), 30, 30); // draws the top middle box of the barrier if it is still alive
}
if (b.checkAlive () [2] == true)
{
g.fillRect (b.getx () + 60, b.gety (), 30, 30); // draws the top right box of the barrier if it is still alive
}
if (b.checkAlive () [3] == true)
{
g.fillRect (b.getx (), b.gety () + 30, 30, 30); // draws the middle left box of the barrier if it is still alive
}
if (b.checkAlive () [4] == true)
{
g.fillRect (b.getx () + 60, b.gety () + 30, 30, 30); // draws the middle right box of the barrier if it is still alive
}
if (b.checkAlive () [5] == true)
{
g.fillRect (b.getx (), b.gety () + 60, 30, 30); // draws the bottom left box of the barrier if it is still alive
}
if (b.checkAlive () [6] == true)
{
g.fillRect (b.getx () + 60, b.gety () + 60, 30, 30); // draws the bottom right box of the barrier if it is still alive
}
}
public void run ()
{
// lower ThreadPriority
Thread.currentThread ().setPriority (Thread.MIN_PRIORITY);
// run a long while (true) this means in our case "always"
addKeyListener (this);
while (true)
{
movement ();
repaint ();
hitBarrier(barrier1);
hitBarrier(barrier2);
hitBarrier(barrier3);
hitBarrier(barrier4);
barrier1.breakBarrier (barrier1_x, barrier_y, bullet_x, bullet_y, segmentLives1,bullet_go);
barrier2.breakBarrier (barrier2_x, barrier_y, bullet_x, bullet_y, segmentLives2,bullet_go);
barrier3.breakBarrier (barrier3_x, barrier_y, bullet_x, bullet_y, segmentLives3,bullet_go);
barrier4.breakBarrier (barrier4_x, barrier_y, bullet_x, bullet_y, segmentLives4,bullet_go);
shoot ();
try
{
// Stop thread for 20 milliseconds
Thread.sleep (20);
}
catch (InterruptedException ex)
{
// do nothing
}
// set ThreadPriority to maximum value
Thread.currentThread ().setPriority (Thread.MAX_PRIORITY);
}
}
public void paint (Graphics g)
{
g.setColor (Color.black);
drawBarrier (g, barrier1); // draws barrier 1
drawBarrier (g, barrier2); // draws barrier 2
drawBarrier (g, barrier3); // draws barrier 3
drawBarrier (g, barrier4); // draws barrier 4
g.fillRect (shooter_x, shooter_y, 50, 50); // draws the shooter
if (bullet_go == true)
{
g.fillRect (bullet_x, bullet_y, 10, 25); // draws the bullet only if the shoot button has been pressed
}
}
// from javaboutique
public void update (Graphics g)
{
// initialize buffer
if (dbImage == null)
{
dbImage = createImage (this.getSize ().width, this.getSize ().height);
dbg = dbImage.getGraphics ();
}
// clear screen in background
dbg.setColor (getBackground ());
dbg.fillRect (0, 0, this.getSize ().width, this.getSize ().height);
// draw elements in background
dbg.setColor (getForeground ());
paint (dbg);
// draw image on the screen
g.drawImage (dbImage, 0, 0, this);
}
}