📄 worldcanvas.java
字号:
package mid;
import tool.*;
import behavior.*;
import java.io.IOException;
import java.io.InputStream;
import java.util.Random;
import javax.microedition.lcdui.*;
import damage.*;
import game.*;
public class WorldCanvas extends Canvas implements Runnable{
protected GameMidlet Gmid=null;
public WorldCanvas(GameMidlet _mid){
Gmid=_mid;
perpare_Engine();
}
protected void perpare_Engine(){
perpare_Key();
perpare_Res();
perpare_Ren();
}
protected void paint(Graphics g){
flushGraphics(g);
}
protected void keyPressed(int arg){
Press_Key(getGameAction(arg));
}
protected void keyReleased(int arg){
Release_Key(getGameAction(arg));
}
protected void showNotify(){
if(GameMidlet.ProgramState==GameMidlet.STOP){
GameMidlet.ProgramState=GameMidlet.RUN;
}
else if(GameMidlet.ProgramState==GameMidlet.RUN){
pressed_Button(7,0);
}
}
protected void hideNotify(){
pressed_Button(6,0);
}
public void run(){
run_Engine();
System.gc();
Gmid.notifyDestroyed();
}
//Engine
protected int State_Engine=S_Setting;
protected void run_Engine(){
while(State_Engine!=S_Stop){
probegin=System.currentTimeMillis();
clear_Ren();
perform_Button();
answer_Engine();
perform_Engine();
proend=System.currentTimeMillis();
usedtime=(int)(proend-probegin);
if(usedtime<delay){
try {
Thread.sleep(delay-usedtime);
} catch (InterruptedException e) {
}
}
}
}
protected void perform_Engine(){
perform_Key();
switch(State_Engine){
case S_Setting:
perform_EngineSetting();
break;
case S_Game:
control_Game();
perform_Game();
break;
case S_Cushion:
break;
}
useRandom();
clockRun();
repaint_Ren();
}
protected final static int S_Stop=0;
protected final static int S_Game=3;
protected final static int S_Setting=4;
protected final static int S_Cushion=7;
//TODO request
protected static int request[]=new int[20];
protected static int setquest=0;
public static void request(int type,int r){
request[setquest++]=type;
request[setquest++]=r;
}
protected void M_Engine(int i){//1
switch(i){
case 1://打开控制
enableControl=true;
break;
case 2://关闭控制
enableControl=false;
break;
case 3://退出游戏
State_Engine=S_Stop;
break;
case 4://进入游戏
State_Engine=S_Game;
break;
case 5:
break;
case 6:
break;
}
}
protected void M_Key(int i){//2
switch(i){
case 1://单击
KeyModule=SIGNLE;
break;
case 2://连击
KeyModule=MULT;
break;
case 3:
break;
case 4:
break;
}
}
protected void M_Resourse(int i){//3
switch(i){
case 1://读取LOGO图
loadImage_Logo();
break;
case 2://释放LOGO图
release_Logo();
break;
case 3://读取MENU图
loadImage_Menu();
break;
case 4://释放MENU图
release_Menu();
break;
case 5://释放游戏资源
releaseGameRes();
break;
case 6:
break;
case 7:
break;
case 8:
break;
case 9:
break;
case 10:
break;
}
}
protected void M_Render(int i){//4
switch(i){
case 1:
break;
case 2:
break;
case 3:
}
}
protected void M_Sound(int i){//5
switch(i){
case 1://关闭声音
enable_Sound=false;
break;
case 2://打开声音
enable_Sound=true;
case 3:
break;
case 4:
break;
}
}
protected void M_Game(int i){//6
switch(i){
case 1://进入游戏界面
State_Game=MineMenu_Game;
break;
case 2://读取游戏
perpare_Load();
break;
case 3://开始游戏
init_Game();
break;
case 4://释放游戏数据
release_Game();
break;
case 5://pause
Pause();
break;
case 6://恢复
resume();
break;
case 7://系统菜单
GSenter();
break;
case 8://系统菜单到游戏
GSresume();
break;
}
}
protected void answer_Engine(){
for(int i=0;i<setquest-1;i+=2){
switch(request[i]){
case 1://Engine
M_Engine(request[i+1]);
break;
case 2://Key
M_Key(request[i+1]);
break;
case 3://Resourse
M_Resourse(request[i+1]);
break;
case 4://Render
M_Sound(request[i+1]);
break;
case 5://Sound
M_Render(request[i+1]);
break;
case 6://Game
M_Game(request[i+1]);
break;
}
}
setquest=0;
}
// TODO SysButton
protected int id_Button;
protected int wt_Button;
protected int ct_Button;
public void pressed_Button(int i,int w){
if(id_Button==0){
id_Button=i;
wt_Button=w;
}
}
protected void perform_Button(){
if(id_Button!=0){
ct_Button+=getdelay();
if(ct_Button>=wt_Button){
switch(id_Button){
case 1://关闭声音开始游戏
request(5,2);
request(3,1);
request(3,1);
request(1,4);
break;
case 2://打开声音开始游戏
request(5,1);
request(3,1);
request(3,1);
request(1,4);
break;
case 3://结束LOGO
request(3,2);
request(3,3);
request(6,1);
break;
case 4://LOAD游戏
request(6,2);
request(3,4);
break;
case 5://进入游戏
request(2,2);
request(6,3);
System.gc();
break;
case 6://系统暂停
request(1,2);
request(2,1);
request(6,5);
break;
case 7://系统恢复
request(1,1);
break;
case 8://暂停后继续游戏
request(6,6);
break;
case 9://退出游戏
request(1,3);
break;
case 10://进入系统菜单
request(6,7);
request(2,1);
break;
case 11://系统菜单返回游戏
request(6,8);
request(2,2);
break;
case 12://重新开始
request(6,4);
request(6,2);
break;
case 13://返回菜单
request(6,4);
request(3,5);
request(3,3);
request(2,1);
request(6,1);
}
id_Button=0;
wt_Button=0;
ct_Button=0;
}
}
}
// TODO Time&FPS&Random
public static int getdelay(){
return delay+4;
}
protected static int fps=40;
protected static int delay=(1000/fps);
protected long probegin;
protected long proend;
protected int usedtime;
protected static int hour;
protected static int min;
protected static int sec;
protected static int mill;
protected void clockRun(){
mill+=getdelay();
if(mill>=1000){
mill-=1000;
sec+=1;
if(sec>=60){
sec-=60;
min+=1;
if(min>=60){
min-=60;
hour+=1;
if(hour>=60){
hour=0;
}
}
}
}
}
//random
protected static Random rn=new Random();
protected static int rnum=0;//0--100
protected static int rbuff=0;
protected static int rRange=100;
protected void useRandom(){
rn.nextInt();
}
public static int getRandom(){
rbuff=rnum;
rn.nextInt();
rnum=(rn.nextInt()>>>1)%rRange;
return rbuff;
}
//TODO Font
protected Font BF=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_LARGE);
protected Font MF=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_MEDIUM);
protected Font SF=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_SMALL);
protected void Font_big(Graphics gra,int r,int g,int b){
gra.setFont(BF);
gra.setColor(r,g,b);
}
protected void Font_small(Graphics gra,int r,int g,int b){
gra.setFont(SF);
gra.setColor(r,g,b);
}
protected void Font_middle(Graphics gra,int r,int g,int b){
gra.setFont(MF);
gra.setColor(r,g,b);
}
//TODO key
public final static int UP_G=1<<0;
public final static int DOWN_G=1<<1;
public final static int LEFT_G=1<<2;
public final static int RIGHT_G=1<<3;
public final static int FIRE_G=1<<4;
public final static int JUMP_G=1<<5;
public final static int SPELL_G=1<<6;
public final static int LSB_G=1<<7;
public final static int RSB_G=1<<8;
protected static int keyTotal=4;
protected static int[] keys;
protected static int keyNum;
protected static int keyset;
protected static int keyget;
protected static byte buffup;
protected static byte buffdown;
protected static byte buffleft;
protected static byte buffright;
protected static byte bufffire;
protected static byte buffjump;
protected static byte buffspell;
protected static int key;
protected static int KeyModule;
protected final static int SIGNLE=0;
protected final static int MULT=1;
public static int get_Key(){
if(keyNum!=0){
key=keys[keyget];
keys[keyget]=0;
--keyNum;
++keyget;
if(keyget>=4){
keyget=0;
}
return key;
}
return 0;
}
protected void set_Key(int i){
keys[keyset]|=i;
++keyNum;
++keyset;
if(keyset>=4){
keyset=0;
}
}
public boolean keyIs(int _key,int mark){
if((_key&mark)!=0){
return true;
}
return false;
}
protected void Press_Key(int _key){
if(KeyModule==SIGNLE){
switch(_key){
case KUP: set_Key(UP_G);break;
case KDOWN: set_Key(DOWN_G);break;
case KLEFT: set_Key(LEFT_G);break;
case KRIGHT: set_Key(RIGHT_G);break;
case KFIRE: set_Key(FIRE_G);break;
case KJUMP: set_Key(JUMP_G);break;
case KSPELL: set_Key(SPELL_G);break;
default:break;
}
}
else if(KeyModule==MULT){
switch(_key){
case KUP: buffup|=UP_G;break;
case KDOWN: buffdown|=DOWN_G;break;
case KLEFT: buffleft|=LEFT_G;break;
case KRIGHT: buffright|=RIGHT_G;break;
case KFIRE: bufffire|=FIRE_G;break;
case KJUMP: buffjump|=JUMP_G;break;
case KSPELL: buffspell|=SPELL_G;break;
default:break;
}
}
}
protected static void Release_Key(int _key){
if(KeyModule==SIGNLE){
switch(_key){
case KUP: buffup=0;break;
case KDOWN: buffdown=0;break;
case KLEFT: buffleft=0;break;
case KRIGHT: buffright=0;break;
case KFIRE: bufffire=0;break;
case KJUMP: buffjump=0;break;
case KSPELL: buffspell=0;break;
default:break;
}
}
else if(KeyModule==MULT){
switch(_key){
case KUP: buffup=0;break;
case KDOWN: buffdown=0;break;
case KLEFT: buffleft=0;break;
case KRIGHT: buffright=0;break;
case KFIRE: bufffire=0;break;
case KJUMP: buffjump=0;break;
case KSPELL: buffspell=0;break;
default:break;
}
}
}
protected void save_Key(){
if(KeyModule==SIGNLE){
}
else if(KeyModule==MULT){
if(keyNum<keyTotal&&((buffup!=0)||(buffdown!=0)||(buffleft!=0)||(buffright!=0)||(bufffire!=0)||(buffjump!=0)||(buffspell!=0))){
keys[keyset]|=buffup;
keys[keyset]|=buffdown;
keys[keyset]|=buffleft;
keys[keyset]|=buffright;
keys[keyset]|=bufffire;
keys[keyset]|=buffjump;
keys[keyset]|=buffspell;
++keyNum;
++keyset;
if(keyset>=4){
keyset=0;
}
}
}
}
protected void perpare_Key(){
keys=new int[keyTotal];
}
protected void perform_Key(){
save_Key();
}
protected final static int KUP=Canvas.UP;
protected final static int KDOWN=Canvas.DOWN;
protected final static int KLEFT=Canvas.LEFT;
protected final static int KRIGHT=Canvas.RIGHT;
protected final static int KFIRE=Canvas.FIRE;
protected final static int KJUMP=Canvas.GAME_A;
protected final static int KSPELL=Canvas.GAME_B;
//TODO Res
protected static String pngpath="/pic/";
protected static Image logo1;
protected static Image logo2;
protected static Image menu;
protected static Image background;
protected void loadImage_Logo(){
if(logo1==null||logo2==null){
try {
logo1=Image.createImage(pngpath+"Logo"+".png");
logo2=Image.createImage(pngpath+"Mbox"+".png");
} catch (IOException e) {
e.printStackTrace();
}
}
}
protected void release_Logo(){
logo1=null;
logo2=null;
}
protected void loadImage_Menu(){
try {
menu=Image.createImage(pngpath+"menu"+".png");
} catch (IOException e) {
e.printStackTrace();
}
}
protected void release_Menu(){
menu=null;
}
//gameres
public static int CreatureImages=1;
public static int GroundImages=1<<1;
public static int Actions=1<<2;
protected int resstate=0;
protected static AVLTree GameRes;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -