?? rpg_demo.java
字號:
package rpg_demo_P;
import java.io.IOException;
import java.io.InputStream;
import java.util.Random;
import java.util.Vector;
//import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.lcdui.game.TiledLayer;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;
public class Rpg_DEMO extends GameCanvas implements Runnable
{ ///*******
///*** 下面為主要狀態
private final static int MAIN_STATE_LOGO=-1; //游戲處在logo狀態下
private final static int MAIN_STATE_MENU=0; //游戲處在Menu狀態下
private final static int MAIN_STATE_GAMERUNNING=1; //游戲處在運行狀態下
private final static int MAIN_STATE_GAMEOVER=2; //游戲處在游戲結束狀態下
private final static int MAIN_STATE_ABOUT=3; //游戲處在ABOUT界面狀態下
////*** 下面為主要狀態下的次要狀態
private final static int CHILD_STATE_GAMELOADING=1; //游戲處在Loading界面狀態下
private final static int CHILD_STATE_MAPS=2; //游戲處在地圖界面狀態下
private final static int CHILD_STATE_CHANGEMAP=3; //游戲處在換圖界面狀態下
////*** 下面為游戲處于地圖界面狀態下的一些狀態
private final static int MAP_STATE_NOMORE=0; //地圖普通狀態
private final static int MAP_STATE_TACKING=1; //地圖對話狀態
private final static int MAP_STATE_CHANGE=2; //交易狀態
private final static int MAP_STATE_DIED=3; //地圖下的死亡狀態
//****各章地圖
private static final int MAP_CUNZI=1;//村子地圖
private static final int MAP_SENLIN=2;//森林地圖
private static final int MAP_SHAMO=3;//沙漠地圖
private static final int MAP_YANSHI=4;//巖石地圖
private static final int MAP_QIULIN=5;//丘陵地圖
////****
public Command back; //設置一個軟鍵---返回鍵
public RpgMIDletTest controller; //游戲運行狀態的控制者
public Graphics g; //游戲畫筆
private static int SCREEN_WIDTH; //屏幕的寬
private static int SCREEN_HEIGHT; //屏幕的高
private int state_Main=-1; //主要狀態屬性的值
private int state_Child=-1; //次要狀態屬性的值
private int state_Map=0; //在地圖下的狀態
private int menu_Selected=0; //玩家在主菜單選項選中的項
private int gamemenu_Selected=0; //玩家在游戲運行時叫出菜單的時候選中的項
private int tacking_Selected=0; //對話時需要顯示的對話項
private int tacking_name_Selected=0; //對話是的對象名
private int mapindex=1; //所處的地圖,用于地圖間的切換
private int To_mapindex=0; //要傳到的地圖
private int keyCode;
long startTime,endTime;//線程開始,結束時間
///****
public boolean if_pause=false; //觀察游戲是否暫停了,也就是有電話接入的時候
public StringBuffer buffer=new StringBuffer("");
public static int jineng=0 ; //技能狀態與普通狀態的切換
//***set Font
Font mini=Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_SMALL); //小型字體
Font medium=Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM);//中型字體
static final Font lowFont=Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_PLAIN,Font.SIZE_MEDIUM);
static final Font highFont=Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_BOLD,Font.SIZE_LARGE);
//***set Color
static final int lowColor=0x00ff00ff;
static final int highColor=0x00ffffff;
static final int highBGColor=0x00dddddd ;
static int width; //菜單界面是的寬
static int height;//菜單界面時的高
static int startHeight;
static final int spacing=highFont.getHeight();
static final String[] mainMenu={"開始游戲","載入游戲","游戲幫助","離開游戲"};
static final String[] gameMenu={"角色狀態","保存游戲","返回游戲","回主菜單"};
static String npc_Name_king="鎮長";
static String npc_Name_tiejiang="鐵匠";
static String npc_Name_shangdian="雜貨商";
static final String[] npc_king_tacking={" 鎮長:我的小鎮真的是個好地方,是吧少年?",
"鎮長:勇敢的年輕人,南方出現了一只兇猛的巨熊,你能幫助鎮上的人么?",
"東邊的沙漠上出現了一只蝎子怪,很多過往的人們受到了傷害,真希望有人能幫助那些無辜的旅人。",
"....."
};
static final String[] npc_tiejiang_tacking=
{
"小伙子,有什么需要幫忙的嗎?",
"想合點什么東西?",
"把東西拿來瞧瞧。",
"....."
};
static final int N72_W=176;
static final int N72_H=208;
static int duibai_pd=1;
int about_level=0; //給ABOUT界面的滾動條用的,用于屏幕上顯示的第一行到底是第幾行
int about_maxlevel=0; //給ABOUT界面使用的,表示最大可以下移的行數
static Thread menuThread;
////***
Image logo_Image; //logo圖片
Image menu_Image;//主菜單圖片
Image sprite_hero_Image;//主角精靈圖片
Image map_cunzi_Image;//村子地圖圖片
Image touxiang_Image;//人物頭像
Image guaiwu_qiulin_Image;//丘陵怪物圖片
Image guaiwu_senlin_Image;//森林怪物圖片
Image guaiwu_yanshi_Image;//巖石怪物圖片
Image npc_shangdian_Image;//商店npc圖片
Image npc_tiejiang_Image;//鐵匠npc圖片
Image npc_king_Image;//國王npc圖片
Image gameover_Image;//死亡狀態圖
Image red_Image,blue_Image;//紅,藍藥圖
Image shuxing_Image;//屬性圖片
Image boss_Image;//boss圖片
Image jn_Image;//技能圖片--普通攻擊
LayerManager lm;//圖層管理者
Map_cuizi cunzi;//村子類對象
Map_shamo shamo;//沙漠類對象
Map_senlin senlin;//森林類對象
Map_yanshi yanshi;//半巖石類對象
TiledLayer tl_BG;//背景層
TiledLayer tl_PZ;//碰撞層
int[][] bg,pz;//背景和碰撞數組
static int String_Move=5;//移動字符串移動速度
//static int String_X=SCREEN_WIDTH;//移動字符串的X坐標
Player_RPG Hero;//主角精靈
Npc npc_shangdian,npc_tiejiang,npc_king;//npc精靈
int PlayerState; //精靈的動作狀態
Vector vec;//用一個動態數組Vector來存儲怪物
Random rand;//用一個隨機數在存放怪物出來的位置
static public final int HERO_MOVE_FX_UP=0;
static public final int HERO_MOVE_FX_DOWN=1;
static public final int HERO_MOVE_FX_LEFT=2;
static public final int HERO_MOVE_FX_RIGHT=3;
////***下面的是一些動作索引
/////***主角的索引
int[] moveleft = {18,19,20,21,22,23}; //向左動作的圖片索引
int[] moveright = {6,7,8,9,10,11}; //向右動作的圖片索引
int[] movedown ={12,13,14,15,16,17}; //向下的動作圖片索引
int[] moveup = {0,1,2,3,4,5}; //向上的動作圖片索引
int getfx; //獲取當前精靈的方向(狀態)
int[] action1 = {24,25,26,27,28,29}; //動作圖片索引1---向下攻擊
int[] action2 = {30,31,32,33,34,35}; //動作圖片索引2---向右攻擊
int[] action3 = {36,37,38,39,40,41}; //動作圖片索引3---向左攻擊
int[] action4 = {42,43,44,45,46,47}; //動作圖片索引4---向上攻擊
//int[] action5 = {36,37,38}; //主角死亡動作
/////****怪物的索引
int[] guai_up={0,1,2};
int[] guai_down={3,4,5};
int[] guai_left={6,7,8};
int[] guai_right={9,10,11};
int[] guai_stop={0};
int[] guai_hurt_up={12,13,14};
int[] guai_hurt_down={15,16,17};
int[] guai_hurt_left={18,19,20};
int[] guai_hurt_right={21,22,23};
int[] guai_walk={6,7,8,9,10,11};
int viewWindowX=100,viewWindowY=150; //視窗的位置
/////***
Player player; //音樂播放器
InputStream is; //創建音樂流所要用到的輸入流
public Rpg_DEMO(boolean arg0,RpgMIDletTest rpg_midlet)
{
super(arg0);
back=new Command("返回",Command.BACK,1);
controller=rpg_midlet;
g=this.getGraphics();
SCREEN_WIDTH=getWidth();//屏幕的寬
SCREEN_HEIGHT=getHeight();//屏幕的高
width=getWidth();
height=getHeight();
vec=new Vector();
rand=new Random();
//System.out.println(SCREEN_WIDTH);
//System.out.println(SCREEN_HEIGHT);
startHeight=(highFont.getHeight()*mainMenu.length)+((mainMenu.length-1)*spacing);
startHeight=(height-startHeight)/2;
//this.setCommandListener(this);
setFullScreenMode(true); //設置當前顯示模式為全屏模式
// System.out.println(SCREEN_WIDTH);
// System.out.println(SCREEN_HEIGHT);
try
{
logo_Image=Image.createImage("/logo2.png");
//menu_Image=Image.createImage("/hero1.png"); //在DrawMenu里面有這個
map_cunzi_Image=Image.createImage("/map_cun zi yan shi.png");
//sprite_hero_Image=Image.createImage("/所有組合.png");
touxiang_Image=Image.createImage("/touxiang.png");
red_Image=Image.createImage("/red2.png");
blue_Image=Image.createImage("/blue2.png");
jn_Image=Image.createImage("/jian.png");
shuxing_Image=Image.createImage("/shuxing.png");
}catch(IOException e)
{
e.printStackTrace();
System.out.println("this here !");
}
}
public void run()
{
// TODO 自動生成方法存根
while(!if_pause)
{
startTime=System.currentTimeMillis();//得到線程一個循環的開始時間
switch(state_Main)
{
case MAIN_STATE_LOGO:
DrawLogo();
logo_Image=null;
//System.out.println("run here_LOGO");
state_Main=MAIN_STATE_MENU; //draw了Logo以后切換到菜單界面
try
{
is=getClass().getResourceAsStream("/background.mid"); //創建播放器
player=Manager.createPlayer(is,"audio/midi");
player.realize();
player.setLoopCount(-1); //開始播放MENU菜單的音樂
player.start();
}
catch (MediaException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
break;
case MAIN_STATE_MENU:
DrawMenu();
/*menu_Image=null;
System.out.println("run here_MENU");*/
// flushGraphics();
break;
case MAIN_STATE_GAMERUNNING:
///run s
switch(state_Child)
{
case CHILD_STATE_GAMELOADING:
DrawLoading();
state_Child=CHILD_STATE_MAPS;
state_Map=MAP_STATE_NOMORE;//游戲讀取完畢的后轉到地圖界面狀態
try
{
player.stop();
player.close();
is=getClass().getResourceAsStream("/map1.mid");
player=Manager.createPlayer(is,"audio/midi");
player.realize();
player.setLoopCount(-1);
player.start();
}catch (MediaException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
break;
case CHILD_STATE_MAPS:
switch(state_Map)
{
case MAP_STATE_NOMORE:
render();
hero_Judge();
npc_Judge();
guai_Judge();
/*System.out.println("++++"+Hero.px);
System.out.println("----"+Hero.py);*/
break;
case MAP_STATE_TACKING:
//System.out.println("start tacking!");
switch(tacking_name_Selected)
{
case 1:
DrawTacking(npc_king_tacking);
if(tacking_Selected==npc_king_tacking.length-1)
{
tacking_Selected=0;
state_Map=MAP_STATE_NOMORE;
}
break;
case 2:
DrawTacking(npc_tiejiang_tacking);
if(tacking_Selected==npc_tiejiang_tacking.length-1)
{
tacking_Selected=0;
state_Map=MAP_STATE_NOMORE;
}
break;
}
break;
case MAP_STATE_CHANGE:
DrawGameMenu();
break;
case MAP_STATE_DIED:
state_Main=MAIN_STATE_GAMEOVER;
break;
}
break;
case CHILD_STATE_CHANGEMAP:
//System.out.println("!!!!!!!!!!!!!change map!");
switch(mapindex)
{
case MAP_CUNZI:
chang_Map(MAP_CUNZI,To_mapindex);
break;
case MAP_SENLIN:
chang_Map(MAP_SENLIN,To_mapindex);
break;
case MAP_SHAMO:
chang_Map(MAP_SHAMO,To_mapindex);
case MAP_YANSHI:
chang_Map(MAP_YANSHI,To_mapindex);
break;
}
//DrawLoading(); //還要把畫面轉到地圖讀取狀態
state_Child=CHILD_STATE_MAPS;
state_Map=MAP_STATE_NOMORE;
break;
}//end child_state
break;
case MAIN_STATE_GAMEOVER:
drawGameover();
try
{
player.stop();
player.close();
is=getClass().getResourceAsStream("/background.mid"); //創建播放器
player=Manager.createPlayer(is,"audio/midi");
player.realize();
player.setLoopCount(-1); //開始播放MENU菜單的音樂
player.start();
}
catch (MediaException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
state_Main=MAIN_STATE_MENU;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -