⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aims.java

📁 超经典飞机射击游戏
💻 JAVA
📖 第 1 页 / 共 5 页
字号:


//******************************************************************************	
//																																								
//	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 + -