?? main.java
字號:
/*
* Created on 2005-02-10
*
*
*
*/
//package com.nano.KangooJumper;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.rms.*;
//import com.nokia.mid.ui.*;
import java.io.*;
import javax.microedition.lcdui.game.*;
/**
* @author plumkawka
*
*
*/
public class Main extends GameCanvas implements Runnable
{
public int PosX;
public int PosY;
private boolean pressedONE = false;
public int MenuIndex;
private int nHelpIndex;
private int nImageState = 0;
private int SOFTKEY1 = -6;
private int SOFTKEY2 = -7;
public Display display;
private Thread thread;
static MIDlet midlet;
public KeyBuffer keys;
static public boolean bRender;
public static boolean bStop;
public int nGameState = -1;
public int nLastGameState = -1;
public long nCurrentTime;
public long nStartTime = 0;
public boolean bGamePaused;
private boolean bDelayInput = false;
private long nDelayStartTime = 0;
public int nPlayerPoints;
public int nPlayerLevelPoints;
public int nPlayerLifes;
public int nPlayerLevel;
//public long nPlayerTime;
//public int nPlayerEnergy;
//public long nPlayerStartTime;
public long nPlayerExtraTime;
public long nPlayerBonus;
public long nPlayerBonusTime;
public long nPlayerBonusTimeMs;
public boolean keyDown, keyUp, keyLeft, keyRight;
public boolean keyFire, keyPound;
public boolean keyDownLeft, keyDownRight, keyUpLeft, keyUpRight;
public boolean keySoftLeft, keySoftRight;
public boolean key1, key2, key3, key4, key5, key6, key7, key8, key9, key0;
private boolean bAnyKeyReleased;
private boolean bFireKeyReleased;
public static GameMain GamePlay;
private boolean bPauseTimer;
private long nPauseTimerTimeLeap;
private long nPauseTimerTime;
private long nPauseTimerStart;
private boolean bPauseApp;
private boolean bYesNo;
private boolean doResume;
private Font fntMedium = Font.getFont(Font.FACE_SYSTEM , Font.STYLE_PLAIN, Font.SIZE_MEDIUM);
public FontWriter writer;
public FontWriter writerDisabled;
public FontWriter writerCopyright;
private MenuList MenuOptions;
/*private TextWriter mPage;*/
public CodeGen codegen;
public boolean bSound = true;
public String sErrorMsg, sLeftSoftKey = "SELECT", sRightSoftKey = "";
private String[] g_options = null;
private MenuList m_PosList;
private MenuList m_NickList;
private MenuList m_LevelList;
private MenuList m_ScoreList;
private final static int STR_NO = 0;
private final static int STR_NICK = 1;
private final static int STR_LEVEL = 2;
private final static int STR_SCORE = 3;
private char[] cNick;
private char[] cCode;
private int nSelectedChar;
private boolean bCodeEntered;
private int progressPercent = 0;
private int progressCount = 0;
private int startlevel = 0;
private int testlevel = 0;
public Image iTitle, iLogos, iBackg, iPolar, islogon,irecom, ipowerby,
ibox, iabout, menubox, arrowLeft,arrowRight, iselect, iok,
iback, ichange,iscore,iname,ilevel,iNO, arrow003,iup,idown;
public Image imgMain[] = new Image[7];
public SoundManager6600 snd;
public int SNDID_MENU, SNDID_GAMEOVER, SNDID_BONUS1, SNDID_BONUS2,SNDID_BONUS3, SNDID_SPLASH, SNDID_COLLIDE;
/**
*
*/
public Main(Display d, MIDlet m)
{
//super();
super(false);
this.setFullScreenMode(true);
//setFullScreenMode(true);
PosX = 35;
PosY = 90;
MenuIndex = 1;
nHelpIndex=0;
codegen = new CodeGen(Config.CODES_RECORD_NAME, (Config.GAME_MAX_LEVEL + 1) / 5);
keys = new KeyBuffer();
keyReset();
display = d;
midlet = m;
thread = new Thread(this);
thread.start();
cNick = new char[Config.SCORES_MAX_CHARS];
//snd = new SoundManager();
snd = new SoundManager6600();
//snd = new SoundManagerEmpty();
// handle sound options
loadOptions();
if (!bSound)
snd.disableSound();
checkRecords();
bGamePaused = false;
bYesNo = false;
bRender = true;
}
public static int pauseStartTime = 0;
public static int pauseEndTime = 0;
public static int pauseDuration = 0;
protected void showNotify() {
if(nGameState == Config.APP_STATE_MENU && bSound == true)
{
snd.enableSound();
snd.playSound(SNDID_MENU, -1);
}
}
protected void hideNotify()
{
{
if(nGameState == Config.APP_STATE_MENU && bSound == true)
{
snd.enableSound();
snd.playSound(SNDID_MENU, -1);
}
}
// if (nGameState == Config.APP_STATE_GAME)
if (nGameState == Config.APP_STATE_GAME && GamePlay.bDisplaySubMenu == false)
{
if (!isPaused())
pauseTimer();
bGamePaused = true;
keyReset();
pauseStartTime = Utils.getTime();
}
}
public void setState(int state)
{
if (state == nGameState)
return;
bRender = false;
keyReset();
if (keys != null)
keys.clear();
//Utils.Log("setState - "+state+" ("+nGameState+")");
nLastGameState = nGameState;
nGameState = state;
switch (nGameState)
{
case Config.APP_STATE_NONE:
iLogos = Utils.LoadImage(FileIds.NANOLOGO_PNG);
iTitle = Utils.LoadImage(FileIds.TITLE_PNG);
iPolar = Utils.LoadImage(FileIds.POLARLOGO_PNG);
try{
islogon = Image.createImage("/slogan.png");
ibox = Image.createImage("/bbox50.png");
iabout = Image.createImage("/about.png");
}
catch(Exception e)
{
}
// font writer
writer = new FontWriter(FontWriter.NORMAL_OUTLINE, FileIds.FONT_NO_PNG);
writer.kerning = 1;
writerDisabled = new FontWriter(FontWriter.NORMAL_OUTLINE, FileIds.FONT_NO_PNG, FileIds.FONT_DISABLED_PAL);
writerCopyright = new FontWriter(FontWriter.NORMAL_OUTLINE, FileIds.FONT_NO_PNG, Config.PAL_INVERS);
writerCopyright.kerning = 1;
/*if (GamePlay == null)
{
GamePlay = new GameMain(this);
GamePlay.init(0);
}*/
setState(Config.APP_STATE_LOGOS);
break;
case Config.APP_STATE_COPYRIGHT:
/*mPage = null;
mPage = new TextWriter(Utils.readUTFStrings("/copyright.utf8")[0], writerCopyright,
(Config.SCREEN_WIDTH - Config.WRITER_WIDTH) / 2,
Config.SCREEN_HEIGHT - Config.WRITER_HEIGHT - writer.getHeight(),
Config.WRITER_WIDTH, Config.WRITER_HEIGHT, null, 0);*/
break;
case Config.APP_STATE_GAMEOVER:
keyReset();
keys.clear();
case Config.APP_STATE_ADD_NICK:
try{
iok = Image.createImage("/ok.png");
}
catch(Exception e)
{
}
//snd.playSound(SNDID_GAME_OVER, 1);
for (int i = 0; i < Config.SCORES_MAX_CHARS; i++)
cNick[i] = 'A';
nSelectedChar = 0;
break;
case Config.APP_STATE_ENTER_CODE:
for (int i = 0; i < Config.CODES_MAX_CHARS; i++)
cCode[i] = 'A';
nSelectedChar = 0;
bCodeEntered = false;
break;
case Config.APP_STATE_SCORES2:
case Config.APP_STATE_SCORES:
try{
iNO = Image.createImage("/No.png");
iname = Image.createImage("/nick.png");
ilevel = Image.createImage("/Level.png");
iscore = Image.createImage("/score.png");
}
catch(Exception e)
{
}
String[] strs = Utils.readUTFStrings("/showhs.utf8");
int width = 4 * Config.SCORES_MAX_CHARS * writer.getWidest() + 3 * Config.SCORES_SPACE_BETWEEN_COLUMNS;
int colWidth = width / 4;
int colHeight = writer.getHeight() * 8;
int height = colHeight;
int colX = (Config.SCREEN_WIDTH - width) / 2;
int colY = (Config.SCREEN_HEIGHT - height) / 2;
// load highscores
String[] nick = new String[Config.SCORES_ENTRIES];
int[] score = new int[Config.SCORES_ENTRIES];
int[] level = new int[Config.SCORES_ENTRIES];
readHighScores(nick, score, level);
//
// position column
//
String[] tmpTab = new String[Config.SCORES_ENTRIES + 2];
tmpTab[0] = ""; //***** ***************//***** ***************
tmpTab[1] = "";
for (int lp = 0; lp < Config.SCORES_ENTRIES; lp++)
tmpTab[lp + 2] = Integer.toString(lp + 1) + '.';
m_PosList = new MenuList(writer, null, tmpTab, colX, colY, colWidth, colHeight, 0);
colX += colWidth;
//
// nick column
//
tmpTab = new String[Config.SCORES_ENTRIES + 2];
tmpTab[0] = ""; //***** ***************//***** ***************
tmpTab[1] = "";
for (int lp = 0; lp < Config.SCORES_ENTRIES; lp++)
tmpTab[lp + 2] = nick[lp];
m_NickList = new MenuList(writer, null, tmpTab, colX, colY, colWidth, colHeight, 0);
colX += colWidth;
//
// level column
//
tmpTab = new String[Config.SCORES_ENTRIES + 2];
tmpTab[0] = "";//***** ***************//***** ***************
tmpTab[1] = "";
for (int lp = 0; lp < Config.SCORES_ENTRIES; lp++)
tmpTab[lp + 2] = Integer.toString(level[lp]);
m_LevelList = new MenuList(writer, null, tmpTab, colX, colY, colWidth, colHeight, 0);
colX += colWidth;
//
// score column
//
tmpTab = new String[Config.SCORES_ENTRIES + 2];
tmpTab[0] = "";//***** ***************//***** ***************
tmpTab[1] = "";
for (int lp = 0; lp < Config.SCORES_ENTRIES; lp++)
tmpTab[lp + 2] = Integer.toString(score[lp]);
m_ScoreList = new MenuList(writer, null, tmpTab, colX, colY, colWidth, colHeight, 0);
break;
case Config.APP_STATE_ABOUT:
try{
irecom = Image.createImage("/recom.png");
}
catch(Exception e)
{
}
//iLogos = null;
//iLogos = Utils.LoadImage(FileIds.LOGOS_PNG);
/*mPage = null;
mPage = new TextWriter(Utils.readUTFStrings("/about.utf8")[0], writer,
(Config.SCREEN_WIDTH - Config.WRITER_WIDTH) / 2, Config.SCREEN_HEIGHT - Config.WRITER_HEIGHT - writer.getHeight(),
Config.WRITER_WIDTH, Config.WRITER_HEIGHT, iLogos, 2);
*/
break;
case Config.APP_STATE_RECOM:
//snd.stopSound();
/* if(pressedONE == true && bSound == true)
{
snd.enableSound();
snd.playSound(SNDID_MENU, -1);
pressedONE = false;
} */
break;
case Config.APP_STATE_HELP:
//iLogos = null;
//iLogos = Utils.LoadImage(FileIds.GFX_PNG);
/*mPage = null;
mPage = new TextWriter(Utils.readUTFStrings("/help.utf8")[0], writer,
(Config.SCREEN_WIDTH - Config.WRITER_WIDTH) / 2, Config.SCREEN_HEIGHT - Config.WRITER_HEIGHT - writer.getHeight(),
Config.WRITER_WIDTH, Config.WRITER_HEIGHT, iLogos, 25);
*/
break;
case Config.APP_STATE_MENU:
//bSound = true;
if(bSound == true)
{
snd.enableSound();
snd.playSound(SNDID_MENU, -1);
}
try{
ichange = Image.createImage("/change.png");
iselect = Image.createImage("/select.png");
iback = Image.createImage("/back.png");
menubox = Image.createImage("/001.png");
arrowLeft = Image.createImage("/l1.png");
arrowRight = Image.createImage("/r1.png");
imgMain[0] = Image.createImage("/main1.png");
imgMain[1] = Image.createImage("/main2.png");
imgMain[2] = Image.createImage("/main3.png");
imgMain[3] = Image.createImage("/main4.png");
imgMain[4] = Image.createImage("/main5.png");
imgMain[5] = Image.createImage("/main6.png");
imgMain[6] = Image.createImage("/main7.png");
iup = Image.createImage("/up.png");
idown = Image.createImage("/down.png");
ipowerby = Image.createImage("/powerby.png");
}
catch(Exception e)
{
}
/*if ((nLastGameState == Config.APP_STATE_GAME) || (nLastGameState == Config.APP_STATE_SCORES2)
|| (nLastGameState == Config.APP_STATE_LOADING) //|| (nLastGameState == Config.APP_STATE_ASK_FOR_SOUND)
|| (nLastGameState == Config.APP_STATE_GAMEOVER))
{
snd.playSound(SNDID_MENU, -1);
}*/
// enable continue if a save game exists
/*if (MenuOptions != null)
{
if (!saveGameExists())
MenuOptions.disableLine(0);
else
MenuOptions.enableLine(0);
}*/
break;
case Config.APP_STATE_GAME:
snd.stopSound();
//SNDID_BONUS3 = snd.loadSound(FileIds.BONUS3_MID, Config.SNDTIME_BONUS3, 0);
//GamePlay.resetMenuIndex();
if (GamePlay != null)
{
//if (nLastGameState != Config.APP_STATE_RESUME)
{
nPlayerPoints = 0;
nPlayerLevelPoints = 0;
nPlayerLifes = Config.GAME_LIFES;
// TODO change this for final !!!!
nPlayerLevel = startlevel;
///nPlayerLevel = testlevel;
//nPlayerEnergy = 100;
//nPlayerTime = nPlayerStartTime = Config.GAME_TIME_LEVEL;
nPlayerBonus = 0;
nPlayerExtraTime = 0;
}
//nStartTime = getTime();
//GamePlay.bTrainingMode = false;
//for (int a=0; a<Config.GAME_MAX_LEVEL; a++)
//GamePlay.startLevel(a);
GamePlay.startLevel(nPlayerLevel);
}
break;
case Config.APP_STATE_EXIT:
stopGame();
break;
}
bRender = true;
}
public void run()
{
/*long x = 1;
for (int a = 0; a < 20000; a++)
{
x = x + (x / 3) + a;
long t = x * x;
}*/
//if (bGamePaused)
if (bGamePaused && GamePlay.bDisplaySubMenu == false)
{
if (keySoftLeft == true)
{
keyReset();
if (isPaused())
pauseTimer();
bGamePaused = false;
if (nGameState == Config.APP_STATE_GAME) {
pauseEndTime = Utils.getTime();
pauseDuration = pauseEndTime - pauseStartTime;
}
}
repaint();
display.callSerially(this);
return;
}
//try { Thread.sleep(20); } catch (InterruptedException e) { }
//if (bRender == false) return;
if (bStop == false)
{
switch (nGameState)
{
case Config.APP_STATE_ERROR:
if (keyAnyReleased())
setState(Config.APP_STATE_EXIT);
break;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -