home *** CD-ROM | disk | FTP | other *** search
- package LockemUp;
-
- import com.siemens.mp.game.GraphicObjectManager;
- import com.siemens.mp.game.Melody;
- import com.siemens.mp.game.MelodyComposer;
- import com.siemens.mp.game.Sprite;
- import com.siemens.mp.game.Vibrator;
-
- public class GameBoard {
- private static final int GAME_MAP_WIDTH = 11;
- private static final int GAME_MAP_HEIGHT = 11;
- private static final int GAME_TILE_WIDTH = 8;
- private static final int GAME_TILE_HEIGHT = 7;
- private static final int LINE_LEN = 77;
- private GraphicObjectManager gfxManager;
- private byte[] back;
- private byte[] map;
- private byte[] state;
- private byte[] info;
- private byte goodExit;
- private int numOfSwitches;
- private byte[] numOfActors = new byte[]{0, 0, 0};
- private Switch[] switches;
- private Animal[] animals;
- private Sprite[][] actors = new Sprite[3][];
- private byte[] arrowLocs;
- private Melody melody;
- private byte[] mapData;
- private boolean onSound;
- private boolean onVibrate;
-
- public GameBoard(GraphicObjectManager var1, byte[] var2, byte[] var3, byte[] var4, int var5) {
- this.gfxManager = var1;
- this.back = new byte[847];
- this.map = new byte[121];
- this.state = new byte[121];
- this.info = new byte[121];
- this.animals = new Animal[4];
- this.mapData = var2;
- this.dealWithMap(var2, var3, var4, true, var5);
- }
-
- public void reInit(int var1) {
- this.dealWithMap(this.mapData, (byte[])null, (byte[])null, false, var1);
- }
-
- public void Dispose() {
- this.back = null;
- this.map = null;
- this.state = null;
- this.info = null;
- this.gfxManager = null;
- this.switches = null;
- this.mapData = null;
- }
-
- public byte[] getBackground() {
- return this.back;
- }
-
- public void setOnSound(boolean var1) {
- this.onSound = var1;
- }
-
- public void setOnVibrate(boolean var1) {
- this.onVibrate = var1;
- }
-
- public void turnArrow(int var1) {
- if (var1 < this.numOfActors[2] && var1 >= 0) {
- byte var2 = this.arrowLocs[var1];
- int var4 = var2 % 11;
- int var5 = var2 / 11;
- byte var3 = this.state[var2];
-
- do {
- var3 = (byte)((var3 + 1) % 4);
- } while(!this.isTurnable(var4, var5, var3));
-
- this.state[var2] = var3;
- this.actors[2][var1].setFrame(var3);
- if (this.onSound) {
- Melody.stop();
- this.melody = null;
- this.melody = this.createMelody(1);
- this.melody.play();
- }
- }
-
- }
-
- public int manageMoves() {
- boolean var3 = true;
- boolean var4 = false;
-
- for(int var1 = 0; var1 < 4; ++var1) {
- var3 &= this.animals[var1].bDestroyed;
- if (!this.animals[var1].bDestroyed) {
- this.moveAnimal(var1);
- }
-
- if (!this.animals[var1].bImmune) {
- int var2 = this.animals[var1].gridy * 11 + this.animals[var1].gridx;
- if (this.map[var2] == 7 && this.state[var2] > 0) {
- var4 = true;
- break;
- }
- }
- }
-
- for(int var5 = 0; var5 < 3; ++var5) {
- if (!this.animals[var5].bDestroyed && !var4) {
- for(int var6 = var5 + 1; var6 < 4; ++var6) {
- if (!this.animals[var6].bDestroyed && !var4) {
- var4 = this.animals[var5].sprite.isCollidingWith(this.animals[var6].sprite);
- }
- }
- }
- }
-
- if (var3) {
- return 3;
- } else if (var4) {
- if (this.onVibrate) {
- Vibrator.triggerVibrator(500);
- }
-
- return 4;
- } else {
- return 0;
- }
- }
-
- private void moveAnimal(int var1) {
- Animal var2 = this.animals[var1];
- int var14 = -1;
- int var3 = var2.x + var2.vx;
- int var4 = var2.y + var2.vy;
- byte var6;
- if (var2.vx > 0) {
- var6 = 7;
- } else {
- var6 = 0;
- }
-
- byte var7;
- if (var2.vy > 0) {
- var7 = 6;
- } else {
- var7 = 0;
- }
-
- if (var3 >= 0) {
- var6 = ((var3 >> 8) + var6) / 8;
- } else {
- var6 = -1;
- }
-
- if (var4 >= 0) {
- var7 = ((var4 >> 8) + var7) / 7;
- } else {
- var7 = -1;
- }
-
- int var8 = var2.vx > 0 ? 1 : (var2.vx < 0 ? -1 : 0);
- int var9 = var2.vy > 0 ? 1 : (var2.vy < 0 ? -1 : 0);
- int var10 = ((var6 - var8) * 8 << 8) - var3;
- int var11 = ((var7 - var9) * 7 << 8) - var4;
- int var13 = var2.gridy * 11 + var2.gridx;
- if (var2.gridx != var6 || var2.gridy != var7) {
- if (var2.map == 6 && !var2.bImmune) {
- this.state[var13] = (byte)((this.state[var13] + 1) % 2);
- this.switches[this.info[var13]].sprite.setFrame(this.state[var13]);
-
- for(int var12 = 0; var12 < this.switches[this.info[var13]].nblinks; ++var12) {
- byte var5 = this.switches[this.info[var13]].links[var12];
- this.state[var5] = (byte)((this.state[var5] + 1) % 2);
- switch (this.map[var5]) {
- case 4:
- this.actors[1][this.info[var5]].setFrame(this.state[var5]);
- break;
- case 7:
- this.actors[0][this.info[var5]].setFrame(this.state[var5]);
- }
- }
- }
-
- if (var2.bImmune) {
- var2.bImmune = false;
- }
-
- if (var2.map == 5 && var2.state == var1) {
- ++this.goodExit;
- var2.setPosition(var2.gridx * 8 << 8, var2.gridy * 7 << 8);
- if (this.onSound && this.goodExit < 4) {
- Melody.stop();
- this.melody = null;
- this.melody = this.createMelody(0);
- this.melody.play();
- }
-
- var2.setDestroyed();
- return;
- }
-
- if (var2.map == 8) {
- if (this.onSound) {
- Melody.stop();
- this.melody = null;
- this.melody = this.createMelody(2);
- this.melody.play();
- }
-
- var2.bImmune = true;
- }
-
- boolean var15 = false;
- if (var2.map == 2) {
- var15 = true;
- switch (var2.state) {
- case 0:
- if (this.isBlocked(var2.gridx - 1, var2.gridy, var1)) {
- var15 = false;
- }
- break;
- case 1:
- if (this.isBlocked(var2.gridx, var2.gridy - 1, var1)) {
- var15 = false;
- }
- break;
- case 2:
- if (this.isBlocked(var2.gridx + 1, var2.gridy, var1)) {
- var15 = false;
- }
- break;
- case 3:
- if (this.isBlocked(var2.gridx, var2.gridy + 1, var1)) {
- var15 = false;
- }
- }
-
- byte var16 = -1;
- if (var15) {
- if (var2.vx < 0) {
- var16 = 0;
- } else if (var2.vx > 0) {
- var16 = 2;
- } else if (var2.vy < 0) {
- var16 = 1;
- } else {
- var16 = 3;
- }
-
- var14 = (5 - var16 + var2.state) % 4;
- }
- }
-
- if (!var15 && (this.isBlocked(var6, var7, var1) && !var2.bImmune || this.isOutScreen(var6, var7))) {
- if (!this.isBlocked(var2.gridx - var9, var2.gridy + var8, var1)) {
- var14 = 2;
- } else if (!this.isBlocked(var2.gridx + var9, var2.gridy - var8, var1)) {
- var14 = 0;
- } else {
- var14 = 3;
- }
- }
-
- switch (var14) {
- case 0:
- int var19 = var2.vx;
- var2.vx = var2.vy;
- var2.vy = -var19;
- var3 += var10 - var11;
- var4 += var11 + var10;
- case 1:
- default:
- break;
- case 2:
- int var18 = var2.vx;
- var2.vx = -var2.vy;
- var2.vy = var18;
- var3 += var10 + var11;
- var4 += var11 - var10;
- break;
- case 3:
- var2.vx = -var2.vx;
- var2.vy = -var2.vy;
- var3 += 2 * var10;
- var4 += 2 * var11;
- }
- }
-
- var2.setPosition(var3, var4);
- if (var2.vx > 0) {
- var6 = 7;
- } else {
- var6 = 0;
- }
-
- if (var2.vy > 0) {
- var7 = 6;
- } else {
- var7 = 0;
- }
-
- var2.gridx = ((var3 >> 8) + var6) / 8;
- var2.gridy = ((var4 >> 8) + var7) / 7;
- if (var14 < 0) {
- int var24 = var2.gridy * 11 + var2.gridx;
- var2.map = this.map[var24];
- var2.state = this.state[var24];
- var2.info = this.info[var24];
- } else {
- var2.map = 0;
- var2.state = 0;
- var2.info = 0;
- }
-
- }
-
- private boolean isOutScreen(int var1, int var2) {
- return var1 < 0 || var1 >= 11 || var2 < 0 || var2 >= 11;
- }
-
- private boolean isBlocked(int var1, int var2, int var3) {
- if (this.isOutScreen(var1, var2)) {
- return true;
- } else {
- int var4 = var2 * 11 + var1;
- if (this.map[var4] == 1) {
- return true;
- } else if (this.map[var4] == 4 && this.state[var4] == 0) {
- return true;
- } else {
- return this.map[var4] == 5 && this.state[var4] != var3;
- }
- }
- }
-
- private boolean isTurnable(int var1, int var2, int var3) {
- if (var3 % 2 == 0) {
- if (this.isOutScreen(var1 + var3 - 1, var2)) {
- return false;
- } else {
- return this.map[var2 * 11 + (var1 + var3 - 1)] != 1;
- }
- } else if (this.isOutScreen(var1, var2 + var3 - 2)) {
- return false;
- } else {
- return this.map[(var2 + var3 - 2) * 11 + var1] != 1;
- }
- }
-
- private void dealWithMap(byte[] var1, byte[] var2, byte[] var3, boolean var4, int var5) {
- int var11 = 0;
- byte[] var15 = new byte[]{0, 0, 0};
- this.goodExit = (byte)(3 - var5);
- this.numOfSwitches = var1[var11];
- ++var11;
- if (var4) {
- this.switches = new Switch[this.numOfSwitches];
- }
-
- for(int var6 = 0; var6 < this.numOfSwitches; ++var6) {
- if (var4) {
- this.switches[var6] = new Switch();
- this.switches[var6].nblinks = var1[var11];
- }
-
- ++var11;
- if (var4) {
- this.switches[var6].links = new byte[this.switches[var6].nblinks];
- }
-
- for(int var7 = 0; var7 < this.switches[var6].nblinks; ++var7) {
- if (var4) {
- this.switches[var6].links[var7] = var1[var11];
- }
-
- ++var11;
- }
-
- if (var4) {
- byte[] var13 = new byte[16];
- System.arraycopy(var3, 128, var13, 0, 16);
- Sprite var12 = new Sprite(var13, 0, 8, 8, (byte[])null, 0, 2);
- this.switches[var6].sprite = var12;
- this.gfxManager.addObject(var12);
- }
- }
-
- for(int var16 = 0; var16 < 4; ++var16) {
- byte var10 = var1[var11];
- ++var11;
- if (var4) {
- byte[] var37 = new byte[16];
- System.arraycopy(var3, var16 * 32, var37, 0, 16);
- byte[] var14 = new byte[16];
- System.arraycopy(var3, var16 * 32 + 16, var14, 0, 16);
- Sprite var34 = new Sprite(var37, 0, 8, 8, var14, 0, 2);
- this.animals[var16] = new Animal(var34);
- }
-
- this.animals[var16].initAnimal((byte)var10, var1[var11], var16);
- if (var16 > var5) {
- this.animals[var16].bDestroyed = true;
- this.animals[var16].sprite.setVisible(false);
- }
-
- ++var11;
- }
-
- if (var4) {
- int var27 = var11;
-
- for(int var17 = 0; var17 < 121; ++var17) {
- if (var1[var27] < 100) {
- if (var1[var27] >= 65) {
- ++this.numOfActors[0];
- } else if (var1[var27] < 60) {
- if (var1[var27] >= 55) {
- ++this.numOfActors[1];
- } else if (var1[var27] >= 10) {
- ++this.numOfActors[2];
- }
- }
- }
-
- ++var27;
- }
-
- for(int var18 = 0; var18 < 2; ++var18) {
- this.actors[var18] = new Sprite[this.numOfActors[var18]];
-
- for(int var22 = 0; var22 < this.numOfActors[var18]; ++var22) {
- byte[] var38 = new byte[16];
- System.arraycopy(var3, 144 + var18 * 16, var38, 0, 16);
- Sprite var35 = new Sprite(var38, 0, 8, 8, var38, 0, 2);
- this.actors[var18][var22] = var35;
- this.gfxManager.addObject(var35);
- }
- }
-
- this.actors[2] = new Sprite[this.numOfActors[2]];
- this.arrowLocs = new byte[this.numOfActors[2]];
-
- for(int var19 = 0; var19 < this.numOfActors[2]; ++var19) {
- byte[] var39 = new byte[32];
- System.arraycopy(var3, 176 + var19 * 32, var39, 0, 32);
- Sprite var36 = new Sprite(var39, 0, 8, 8, var39, 0, 4);
- this.actors[2][var19] = var36;
- this.gfxManager.addObject(var36);
- }
- }
-
- for(int var20 = 0; var20 < 11; ++var20) {
- for(int var23 = 0; var23 < 11; ++var23) {
- if (var1[var11] >= 100) {
- int var30 = var1[var11] - 100;
- this.map[var20 * 11 + var23] = 6;
- this.state[var20 * 11 + var23] = (byte)(var30 % 2);
- this.info[var20 * 11 + var23] = (byte)(var30 / 2);
- var30 /= 2;
- this.switches[var30].sprite.setPosition(8 * var23, 7 * var20);
- this.switches[var30].sprite.setFrame(this.state[var20 * 11 + var23]);
- } else if (var1[var11] >= 65) {
- this.map[var20 * 11 + var23] = 7;
- this.state[var20 * 11 + var23] = (byte)((var1[var11] - 65) % 2);
- this.info[var20 * 11 + var23] = var15[0];
- this.actors[0][var15[0]].setPosition(8 * var23, 7 * var20);
- this.actors[0][var15[0]].setFrame(this.state[var20 * 11 + var23]);
- ++var15[0];
- } else if (var1[var11] >= 60) {
- byte var29 = (byte)((var1[var11] - 60) % 4);
- this.state[var20 * 11 + var23] = (byte)var29;
- this.map[var20 * 11 + var23] = 5;
- if (var4) {
- for(int var26 = 0; var26 < 7; ++var26) {
- this.back[77 * var20 + var23 + var26 * 11] = var2[var26 + (var29 + 1) * 7];
- }
- }
- } else if (var1[var11] >= 55) {
- this.map[var20 * 11 + var23] = 4;
- this.state[var20 * 11 + var23] = (byte)((var1[var11] - 55) % 2);
- this.info[var20 * 11 + var23] = var15[1];
- this.actors[1][var15[1]].setPosition(8 * var23, 7 * var20);
- this.actors[1][var15[1]].setFrame(this.state[var20 * 11 + var23]);
- ++var15[1];
- } else if (var1[var11] >= 10) {
- int var28 = var1[var11] - 10;
- int var25 = var28 / 10;
- byte var9 = var15[2]++;
- this.arrowLocs[var9] = (byte)(var20 * 11 + var23);
- this.state[var20 * 11 + var23] = (byte)var25;
- this.actors[2][var9].setPosition(8 * var23, 7 * var20);
- this.info[var20 * 11 + var23] = (byte)var9;
- this.actors[2][var9].setFrame(var25);
- this.map[var20 * 11 + var23] = 2;
- } else if (var1[var11] >= 2) {
- if (var4) {
- for(int var24 = 0; var24 < 7; ++var24) {
- this.back[77 * var20 + var23 + var24 * 11] = var2[var24 + 35];
- }
- }
-
- this.map[var20 * 11 + var23] = 8;
- } else if (var1[var11] != 1) {
- this.map[var20 * 11 + var23] = 0;
- } else {
- if (var4) {
- for(int var8 = 0; var8 < 7; ++var8) {
- this.back[77 * var20 + var23 + var8 * 11] = var2[var8];
- }
- }
-
- this.map[var20 * 11 + var23] = 1;
- }
-
- ++var11;
- }
- }
-
- if (var4) {
- for(int var21 = 0; var21 < 4; ++var21) {
- this.gfxManager.addObject(this.animals[var21].sprite);
- }
- }
-
- }
-
- private Melody createMelody(int var1) {
- try {
- MelodyComposer var2 = new MelodyComposer();
- var2.setBPM(132);
- switch (var1) {
- case 0:
- var2.appendNote(19, 6);
- var2.appendNote(18, 6);
- var2.appendNote(17, 6);
- var2.appendNote(16, 6);
- var2.appendNote(15, 6);
- var2.appendNote(28, 6);
- var2.appendNote(29, 6);
- var2.appendNote(30, 6);
- var2.appendNote(31, 6);
- var2.appendNote(32, 6);
- var2.appendNote(33, 6);
- var2.appendNote(34, 6);
- var2.appendNote(24, 6);
- var2.appendNote(36, 6);
- break;
- case 1:
- var2.appendNote(49, 6);
- var2.appendNote(37, 6);
- break;
- case 2:
- var2.appendNote(24, 6);
- var2.appendNote(28, 6);
- var2.appendNote(31, 6);
- var2.appendNote(33, 6);
- var2.appendNote(24, 6);
- var2.appendNote(36, 6);
- var2.appendNote(58, 3);
- var2.appendNote(58, 5);
- var2.appendNote(41, 6);
- var2.appendNote(43, 6);
- var2.appendNote(45, 6);
- var2.appendNote(36, 6);
- var2.appendNote(48, 6);
- }
-
- return var2.getMelody();
- } catch (Exception var3) {
- System.out.println("Exception: " + var3);
- return null;
- }
- }
- }
-