Space Invaders Applet
<< TileGridApplet | FinalProjectsTrailIndex | Astronomy >>
SpaceInvaderApplet.java
you will need the gif files from SpaceInvaderGame and tilegrid.jar library installed
import sfhs.cct.tilegrid.*; import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import javax.swing.Timer; import sfhs.cct.tilegrid.*; public class SpaceInvaderApplet extends TileGridApplet { private Player player; private Ship ship; private Color skyBlue=new Color(0,100,155); private final int LEFT =37; private final int UP=38; private final int RIGHT=39; private final int DOWN=40; private Timer timeToMove; private int speed=150; public void init(){ super.init(); grid=new TileGrid(10,10); grid.setShowLines(false); grid.setBGColor(skyBlue); this.requestFocus(); timeToMove = new Timer(speed, this); } public void newRound(){ resetTimer(); startTimer(); timeToMove.start(); grid= new TileGrid(10, 10 ); grid.setShowLines(false); grid.setBGColor(skyBlue); player = new Player(); grid.add(player, 9, 5); ship = new Ship(player); ship.setProbability(.4); grid.add(ship, 0, 0); } public void gameOver(){ stopTimer(); timeToMove.stop(); setMessage(getMessage()+"Click Start to begin a New Round"); } public void paint(Graphics g) { // We draw using the object methods of // the graphics buffer, not what is // currently on the screen virtualMem = createImage(getWidth(),getHeight()); Graphics gBuffer = virtualMem.getGraphics(); gBuffer.setColor(Color.white); gBuffer.fillRect(0,0,getWidth(),getHeight()); gBuffer.setColor(Color.black); grid.draw(gBuffer, getWidth()/12, getHeight()/12, getWidth()/12); gBuffer.drawString("Time: "+getTime(), 20,20); gBuffer.drawString(getMessage(), 20, getHeight()-20); //Now we send the result to the screen g.drawImage(virtualMem,0,0,this); } //implement the ActionListener public void actionPerformed(ActionEvent e) { if ( isTimerEvent(e)) { setTime(getTime()+1); }else if (e.getSource()==timeToMove){ //ship moves, and bombs fall if (player.getGrid()==null){ int r=player.getRow(); int c=player.getCol(); Tile splat=new Tile(Color.RED); grid.add(splat, r, c); setMessage("You died"); gameOver(); } grid.activate(); }else{ //restart button pressed if (isTimerRunning()) { gameOver(); }else{ newRound(); setMessage("Use Arrows to Avoid Bombs"); } } this.requestFocus(); repaint(); } //KeyListener Methods public void keyPressed(KeyEvent e) { int keyCode=e.getKeyCode(); if(player.getGrid()!=null){ int col=player.getCol(); if (keyCode==LEFT && col>0){ col--; }else if (keyCode==RIGHT && col<9){ col++; } if (grid.isEmpty(9, col)){ grid.move(player, 9, col); } else { player.removeSelfFromGrid(); } repaint(); }else{ stopTimer(); timeToMove.stop(); setMessage("You died"); } } public void mouseReleased(MouseEvent e) { this.requestFocus(); } }
Bomb.java
import java.awt.image.*; import java.io.*; import javax.imageio.*; import sfhs.cct.tilegrid.*; public class Bomb extends Tile { private Tile target; public Bomb(Tile target){ super(); this.target=target; File f=new File("Bomb.gif"); try { BufferedImage pic = ImageIO.read(f); setImg(pic); } catch (IOException err) { err.printStackTrace(); } } public void act(){ if (grid!=null){ int row=this.getRow(); int col=this.getCol(); if (row<9){ row++; } if (grid.isEmpty(row, col)){ grid.move(this, row, col); }else if (grid.get(row, col)==target){ target.removeSelfFromGrid(); } if (row==9){ removeSelfFromGrid(); } } } }
Player.java
import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import sfhs.cct.tilegrid.Tile; public class Player extends Tile { public Player(){ super(); File f=new File("Player.gif"); try { BufferedImage pic = ImageIO.read(f); setImg(pic); } catch (IOException err) { err.printStackTrace(); } } }
Ship.java
import java.awt.image.*; import java.io.*; import javax.imageio.*; import sfhs.cct.tilegrid.*; public class Ship extends Tile { private int direction=1; private double probability=.8; private Tile target; public Ship(Tile target){ super(); this.target=target; File f=new File("Ship.gif"); try { BufferedImage pic = ImageIO.read(f); setImg(pic); } catch (IOException err) { err.printStackTrace(); } } public void setProbability(double p){ this.probability=p; } public double getProbability(){ return probability; } public void act(){ int col=getCol(); int row=getRow(); if (!grid.isValid(0, col+direction)) direction*=-1; grid.move(this, row, col+direction); if (Math.random()<probability){ Bomb b=new Bomb(target); grid.add(b, row+1, col); } } }