📄 bnb_game.java
字号:
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.TiledLayer;
/*******************************************************************************
* 类名:BnB_Game 功能:游戏逻辑处理 和 游戏流程处理
*/
public final class BnB_Game extends GameCanvas implements Runnable
{
public static final int W = 128;//屏幕宽。
public static final int H = 160;//屏幕高。
public static final byte OFFSET = 32;//屏幕偏移量
public static final byte width = 16;//地图Tile的宽度
public static final byte rest = 100;//线程休眠时间
public static final int GRAPHICS_TL = (Graphics.TOP | Graphics.LEFT);
public static final int GRAPHICS_TR = (Graphics.TOP | Graphics.RIGHT);
private static boolean isStart;//游戏逻辑状态
private static boolean isPause;//游戏逻辑状态
public static final byte UI_LOGO = 1;//LOGO界面
public static final byte UI_MENU = 2;//主菜单界面
public static final byte UI_GAME = 3;//游戏界面
public static final byte UI_HELP = 4;//帮助界面
public static final byte UI_SCORE = 5;//排行榜界面
public static final byte UI_SETUP = 6;//设置音乐截面
public static final byte UI_EXIT = 7;//退出界面
public static final byte UI_PUASE = 8;//暂停界面
public static final byte UI_PASS = 9;//过关界面
public static final byte UI_ENDING = 10;//游戏胜利结束界面
public static final byte UI_OVER = 11;//游戏失败结束界面
public static final byte UI_SETNAME = 12;//设置名字截面
public static byte stage;//游戏状态
public static final Font FONT1 = Font.getFont(64, 1, 16);
public static final Font FONT2 = Font.getFont(64, 0, 0);
public static final Font FONT3 = Font.getFont(64, 0, 8);
public static boolean isOK = true;
public static byte menupage;
public static byte pausepage;
public static int pausetime;
public static boolean isMusic;
public static Record rms;
public static byte pass = 1;// 关卡
public static int cols;
public static int[] rows = new int[4];
public static StringBuffer name;
// /////////////////////////////////////////////////////////
// 游戏中的对象
public static BnB_Player player, npc;
public static TiledLayer map, box;
public static long time;
public static long totalizescore;
public static Graphics g;
public BnB_Game()
{
super(false);
setFullScreenMode(true);
rms = new Record("BnB_Game", 5);
menupage = 1;
isStart = true;
isPause = false;
stage = UI_LOGO;
pausepage = 2;
pausetime = 0;
g = getGraphics();
(new Thread(this)).start();
}
public static final void clear(Graphics cg)
{
cg.setColor(255, 255, 255);
cg.fillRect(0, 0, W, H);
}
public final void run()
{
long st = 0;
long et = 0;
while (isStart)
{
st = System.currentTimeMillis();
while (isPause)
{
mypaint();
flushGraphics(0, 0, W, H);
try
{
Thread.sleep(100);
}
catch (Exception e)
{
e.printStackTrace();
}
}
mypaint();
et = System.currentTimeMillis() - st;
if (et < rest)
{
try
{
Thread.sleep(rest - et);
}
catch (Exception e)
{
}
}
flushGraphics(0, 0, W, H);
}
}
protected void keyPressed(int key)
{
switch (stage)
{
case UI_LOGO:
break;
case UI_MENU:
switch (getGameAction(key))
{
case LEFT:
menupage--;
if (menupage < 1)
{
menupage = 5;
}
break;
case RIGHT:
menupage++;
if (menupage > 5)
{
menupage = 1;
}
break;
}
if (key == -6)
{
switch (menupage)
{
case 1:
if (!isOK)
{
isOK = true;
stage = UI_SETNAME;
Tools.releaseMenu();
}
break;
case 2:
if (!isOK)
{
isOK = true;
stage = UI_HELP;
Tools.releaseMenu();
}
break;
case 3:
isMusic = !isMusic;
break;
case 4:
if (!isOK)
{
isOK = true;
stage = UI_SCORE;
Tools.releaseMenu();
}
break;
case 5:
if (!isOK)
{
isOK = true;
stage = UI_EXIT;
Tools.releaseMenu();
}
break;
}
}
break;
case UI_SETNAME:
switch (key)
{
case -3:// 左
case 52:
cols--;
if (cols < 0)
{
cols = 0;
}
break;
case -4:// 右
case 54:
cols++;
if (cols > 3)
{
cols = 3;
}
break;
case -1:// 上
case 50:
switch (cols)
{
case 0:
rows[0]--;
if (rows[0] < 0)
{
rows[0] = 0;
}
break;
case 1:
rows[1]--;
if (rows[1] < 0)
{
rows[1] = 0;
}
break;
case 2:
rows[2]--;
if (rows[2] < 0)
{
rows[2] = 0;
}
break;
case 3:
rows[3]--;
if (rows[3] < 0)
{
rows[3] = 0;
}
break;
}
break;
case -2:// 下
case 56:
switch (cols)
{
case 0:
rows[0]++;
if (rows[0] > 25)
{
rows[0] = 25;
}
break;
case 1:
rows[1]++;
if (rows[1] > 25)
{
rows[1] = 25;
}
break;
case 2:
rows[2]++;
if (rows[2] > 25)
{
rows[2] = 25;
}
break;
case 3:
rows[3]++;
if (rows[3] > 25)
{
rows[3] = 25;
}
break;
}
break;
case -6:// 确定
name = new StringBuffer("");
name.append((char) (rows[0] + 65));
name.append((char) (rows[1] + 65));
name.append((char) (rows[2] + 65));
name.append((char) (rows[3] + 65));
BnB_Game.stage = BnB_Game.UI_GAME;
BnB_Game.isOK = true;
Tools.releaseSetName();
cols = 0;
rows[0] = 0;
rows[1] = 0;
rows[2] = 0;
rows[3] = 0;
break;
case -7:// 返回
if (!isOK)
{
isOK = true;
stage = UI_MENU;
Tools.releaseSetName();
cols = 0;
rows[0] = 0;
rows[1] = 0;
rows[2] = 0;
rows[3] = 0;
}
}
break;
case UI_SETUP:
break;
case UI_HELP:
if (key == -7)
{
if (!isOK)
{
isOK = true;
Tools.releaseBackGround();
stage = UI_MENU;
}
}
break;
case UI_SCORE:
if (key == -7)
{
if (!isOK)
{
try
{
rms.closeRecordStore();
}
catch (Exception e)
{
e.printStackTrace();
}
isOK = true;
Tools.releaseBackGround();
stage = UI_MENU;
}
}
break;
case UI_EXIT:
if (key == -6)
{
if (!isOK)
{
isOK = true;
Tools.releaseBackGround();
Tools.releaseGame();
BnB_MIDlet.midlet.notifyDestroyed();
}
}
if (key == -7)
{
if (!isOK)
{
isOK = true;
Tools.releaseBackGround();
stage = UI_MENU;
}
}
break;
case UI_PUASE:
switch (getGameAction(key))
{
case UP:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -