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

📄 rpg_demo.java

📁 这是本人及团队成员用j2me开发的手机游戏《骑士荣耀》
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
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 + -