/*

  *     *
   *   *
  *******
 ** *** **
***********
* ******* *
* *     * *
   ** **

*/ import java.awt.*; import java.awt.image.*; import java.applet.AudioClip; public class Invaders extends MISApplet { private int[][] invaderRawData = { {0,0,1,0,0,0,0,0,1,0,0}, {0,0,0,1,0,0,0,1,0,0,0}, {0,0,1,1,1,1,1,1,1,0,0}, {0,1,1,0,1,1,1,0,1,1,0}, {1,1,1,1,1,1,1,1,1,1,1}, {1,0,1,1,1,1,1,1,1,0,1}, {1,0,1,0,0,0,0,0,1,0,1}, {0,0,0,1,1,0,1,1,0,0,0} }; //to be generated from above private int[][] invaderData; //sprite rectangle for the space invader private int invaderX, invaderY, invaderW, invaderH; private int[] bgColor = {0, 255, 0}; private int[] invColor = {255, 255, 255}; AudioClip sound; public void initialize() { invaderX = 0; invaderY = 20; scaleInvader(8); sound = getAudioClip(getCodeBase(), "ship.wav"); sound.play(); } public void initFrame(double time) { invaderX = (int)(W/2 * Math.sin(0.5 * Math.PI * time)) + W/2; invaderY = (int)(2*time * invaderH/2) - invaderH; invaderX -= invaderW/2; //center a bit better invaderY %= H + invaderH * 2; } public void setPixel(int x, int y, int rgb[]) { int ix, iy; //coords relative to invader //check bounds if ((x < invaderX || x >= invaderX + invaderW) || (y < invaderY || y >= invaderY + invaderH)) { rgb[0] = bgColor[0]; rgb[1] = bgColor[1]; rgb[2] = bgColor[2]; return; } ix = x - invaderX; iy = y - invaderY; //skip empty pixels if (invaderData[iy][ix] == 0) { rgb[0] = bgColor[0]; rgb[1] = bgColor[1]; rgb[2] = bgColor[2]; return; } rgb[0] = invColor[0]; rgb[1] = invColor[1]; rgb[2] = invColor[2]; } private void scaleInvader(int scaleFactor) { int w = invaderRawData[0].length; int h = invaderRawData.length; invaderData = new int[scaleFactor*h][scaleFactor*w]; for(int y = 0; y < h; y++) for(int x = 0; x < w; x++) { for (int i=0; i