//******************************************************************************
//
// AIMS v1.0 ENGLISH
// (C) IECOM 2004
// DEVELOPED BY Krzysztof Osmulski <clyde@o2.pl>
//******************************************************************************
/* TipS AND ISSUES
*-For All s60 implements use a runtime PRepared flipped image because of some bug
*when try to use image clipping and flipping (from NOKIA UI API) at the same time
*/
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.*;
import java.io.*;
import java.lang.Math.*;
import javax.microedition.rms.*;
//#if _NOKIA_ _S60_
import com.nokia.mid.ui.*;
//#if !_MMAPI_
import com.nokia.mid.sound.Sound;
//#endif
//#endif
//#if _MIDP20_
//# import javax.microedition.lcdui.game.*;
//#endif
//#if _MMAPI_
//# import javax.microedition.media.*;
//# import javax.microedition.media.control.*;
//#endif
//------------------------------------------------------------------------------
public class AIMS extends MIDlet {
private Display display;
private GameScreen screen;
public boolean started = false;
public AIMS() {
screen = new GameScreen(this);
}
public void startApp() throws MIDletStateChangeException {
if(display == null)
display = Display.getDisplay(this);
display.setCurrent(screen);
//start the SHOW
screen.th=new Thread(screen);
screen.th.start();
}
public void pauseApp() {
screen.menumode=1;
screen.gamemode=10;
notifyPaused();
}
public void destroyApp(boolean unconditional) {
screen.th=null;
screen.saveRMS();
notifyDestroyed();
}
public void hideNotify(){
}
public void showNotify() {
display.setCurrent(screen);
}
public void exitRequested() {
destroyApp(false);
}
}
//------------------------------------------------------------------------------
//#if _NOKIA_ _S60_
class GameScreen extends FullCanvas implements Runnable
//#else
//# class GameScreen extends Canvas implements Runnable
//#endif
{
//#if _NOKIA_ _S60_
static final int LSOFTKEY=-6,RSOFTKEY=-7;
//#elif _V_
//# static final int LSOFTKEY=21,RSOFTKEY=22;
//#elif _V220_ _E398_ _V980_
//# static final int LSOFTKEY=-21,RSOFTKEY=-22;
//#elif _SIEM_
//# static final int LSOFTKEY=-1,RSOFTKEY=-4;
//#elif _SE_ _SAGEM_
//# static final int LSOFTKEY=-6,RSOFTKEY=-7;
//#endif
static Image[] bobgfx;
static Image Tiles;
static Image myFont;
static Image Tilebuffer;
static Graphics TilebufferP;
//#if _NOKIA_
static DirectGraphics TilebufferDG;
//#endif
//static Image Backbuffer;
//static Graphics BackbufferP;
//static DirectGraphics BackbufferDG;
static int keypressed, game_keypressed;
//#if _S40_
//# //15 just for intro normal 10 changed in the end of intro (but not for s40MIDP20)
//# static int FPS=15;
//# final static int anzahlobjekte=30;
//# final static int screenX=128;
//# final static int screenY=128;
//# final static int LZONE_SLOWER=7;
//#if _MMAPI_
//# final static int PAUSE_Y=screenY-screenY/4-3;
//#else
//# final static int PAUSE_Y=screenY/2;
//#endif
//# final static int MENU_Y=screenY-screenY/6-1;
//#elif _S45_
//# //15 just for intro normal 10 changed in the end of intro (but not for s40MIDP20)
//# static int FPS=15;
//# final static int anzahlobjekte=35;
//# final static int screenX=128;
//# final static int screenY=160;
//# final static int LZONE_SLOWER=5;
//# final static int MENU_Y=screenY-screenY/6-7;
//# final static int PAUSE_Y=MENU_Y-18;
//#elif _S60_
static int FPS=18;
final static int anzahlobjekte=40;
final static int screenX=176;
final static int screenY=208;
final static int LZONE_SLOWER=4;
final static int MENU_Y=screenY-screenY/6-10;
final static int PAUSE_Y=MENU_Y-20;
//because of some API problems with clipping and flipping at the same time we need a second Tiles image
Image Tiles_f;
//#elif _V_ _E398_
//# static int FPS=15;
//# final static int anzahlobjekte=40;
//# final static int screenX=176;
//# final static int screenY=204;
//# final static int LZONE_SLOWER=4;
//# final static int MENU_Y=screenY-screenY/6-12;
//# final static int PAUSE_Y=MENU_Y-20;
//#elif _V220_
//# static int FPS=12;
//# final static int anzahlobjekte=30;
//# final static int screenX=128;
//# final static int screenY=116;
//# final static int LZONE_SLOWER=7;
//# final static int MENU_Y=screenY-screenY/6-5;
//# final static int PAUSE_Y=MENU_Y-18;
//#elif _65_
//# static int FPS=12;
//# final static int anzahlobjekte=37;
//# final static int screenX=132;
//# final static int screenY=176;
//# final static int LZONE_SLOWER=5;
//# final static int MENU_Y=screenY-screenY/6-10;
//# final static int PAUSE_Y=MENU_Y-20;
//#elif _C65_
//# static int FPS=12;
//# final static int anzahlobjekte=30;
//# final static int screenX=130;
//# final static int screenY=130;
//# final static int LZONE_SLOWER=7;
//# final static int PAUSE_Y=screenY-screenY/4-5;
//# final static int MENU_Y=screenY-screenY/6-3;
//#elif _FKZ500_
//# static int FPS=15;
//# final static int anzahlobjekte=35;
//# final static int screenX=128;
//# final static int screenY=160;
//# final static int LZONE_SLOWER=5;
//# final static int MENU_Y=screenY-screenY/6-10;
//# final static int PAUSE_Y=MENU_Y-18;
//#elif _S700_
//# static int FPS=18;
//# final static int anzahlobjekte=50;
//# final static int screenX=240;
//# final static int screenY=266;
//# final static int LZONE_SLOWER=3;
//# final static int MENU_Y=screenY-screenY/6-23;
//# final static int PAUSE_Y=MENU_Y-20;
//#elif _Z1010_ _V980_
//# static int FPS=18;
//# final static int anzahlobjekte=45;
//# final static int screenX=176;
//# final static int screenY=220;
//# final static int LZONE_SLOWER=4;
//# final static int MENU_Y=screenY-screenY/6-12;
//# final static int PAUSE_Y=MENU_Y-20;
//# //SAGEM
//#elif _V65_
//# static int FPS=13;
//# final static int anzahlobjekte=30;
//# final static int screenX=128;
//# final static int screenY=128;
//# final static int LZONE_SLOWER=7;
//# final static int PAUSE_Y=screenY-screenY/4-3;
//# final static int MENU_Y=screenY-screenY/6-1;
//#endif
final static int tiledimension=16; // CONST for TILEWIDTH
final static int tilesPerX=screenX/tiledimension+1;
final static int tilesPerY=screenY/tiledimension+1;
static AIMS midlet;
//static Timer animTimer;
//final static int animperiod = 35;
static int i=0;
static int player;
static int schussdelay = 3;
static int temp1,temp2,temp3,temp4,temp5;
public static int gamemode=0;
public static int menumode=0;
static int ai=0;
static int score=0;
static int lifes=-1;
static int[][] ObjectDB,playerBulletsDB,bulletsDB;
static byte[] leveldata,maskdata;
static int levelbreite=0; // levelwidth in tiles
static int levelhoehe=0; // levelhight in tiles
static int level=0;
// SCROLL VARS
static int levelXPos=0; // LevelPosition in Tiles
static int levelypos=0; // LevelPosition in Tiles
static int lastlevelxpos=0; // actual LevelXposition in Tiles
static int lastlevelypos=0; // actual LevelYPosition in Tiles
static int scrollxpos; // scrollxpos/tiledimension = levelxpos
static int scrollypos; // scrollypos/tiledimension = levelypos
static int softscrollx; // softscroll x (0-15)
static int softscrolly; // softscroll y (0-15)
// vars for target calculation of the bullets
static int targetXoffset=0;
static int targetYoffset=0;
static int targetquadrant=0;
static int zielerfassungswinkel=0;
static int teilquadrantwinkel=0;
static int devicewaiter=3; // WAITER
static boolean musicopt=true; // music yes=1 / no=0
static boolean soundopt=true; // sound yes=1 / no=0
static int waiter=0; // a waiter var
static int explowaiter=2; // waiter for all explosions
//static int flamewaiter=2; // waiter for flameanimation when enemey was hit
(出处:http://www.knowsky.com)