📄 aims.java
字号:
//******************************************************************************
//
// 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
public static Thread th;
static final int MIN_MILLIS=5;
static boolean pause;
static int sbombx,sbomby,sbombh;
public static final int SCROLLSPEED=1000;
static int scrollspeed=SCROLLSPEED;
static Font font;
static final int MISSILE_LIFE=50;
static int missile_life=MISSILE_LIFE;
static int l_zonex=0,l_zoney=0;
static boolean l_zone=false;
static Random rand;
static int clipping,desired_mode,clipping_var;
static Vector hnames,hpoints;
static StringBuffer namebuf;
static String[] langs;
RecordStore records;
static byte player_power=1,player_missiles,player_sbombs;
//byte choosed_language;
/*###################################################################### */
public GameScreen(AIMS mymidlet)
{
//#if _MIDP20_
//# setFullScreenMode(true);
//#endif
hnames=new Vector();
hpoints=new Vector();
namebuf=new StringBuffer("AAAAAAAA");
InitGFX();
//init TILEBUFFER
Tilebuffer=Image.createImage(screenX+tiledimension,screenY+tiledimension);
TilebufferP=Tilebuffer.getGraphics();
//#if _NOKIA_
TilebufferDG = DirectUtils.getDirectGraphics(TilebufferP);
//#endif
font=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_SMALL);
TilebufferP.setFont(font);
// number of max objects in the game
ObjectDB = new int[anzahlobjekte][14];
playerBulletsDB=new int[anzahlobjekte-anzahlobjekte/4][14];
bulletsDB=new int[anzahlobjekte][14];
// ObjectDB [x][0] = status | 0 = EMPTY, 1 = ON, 2 = OFF
// ObjectDB [x][1] = xPos of Object relativ to the playfield
// ObjectDB [x][2] = yPos of Object relativ to the playfield
// ObjectDB [x][3] = animnummer of the object regarding to the image array
// ObjectDB [x][4] = animwaiter for this object
// ObjectDB [x][5] = direction - for different direction values
// ObjectDB [x][6] = anker (f.e. Graphics.TOP|Graphics.LEFT)
// ObjectDB [x][7] = objecttyp - is a value that descripes the TYP of object for different things
// ObjectDB [x][8] = OBJDATA 1
// ObjectDB [x][9] = OBJDATA 2
// ObjectDB [x][10] = OBJDATA 3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -