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

📄 xianjiancanvas.java

📁 < 仙剑奇侠传>>的J2ME手机游戏源代码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
import java.util.Vector;
import javax.microedition.lcdui.*;
import javax.microedition.media.MediaException;

/**
 * @游戏名称: 仙剑奇侠传
 * @作者:张卫国
 * @Email: weiguo2000@hotmail.com
 * @创建于:2006/7/18--2006/8/3  by Weiguo
 */

public class XianJianCanvas extends Canvas {
	private boolean 	start	  	 = true;	
	private Board 		board 	  	 = null;
	private Character 	player 	  	 = null;	//主角
	private int 		keystate  	 = 0;	
	private int 		xtmp,ytmp;
	private Menu 		menu	  	 = null;	//菜单	
	private Vector 		npc 	  	 = null; 	//npc
	private Vector 		enemy 	  	 = null;	//怪物
	private int 		enemymove 	 = 0;	
	private int 		messID    	 = 0; 		//对话id
	private String[] 	dlgM 	  	 = null;	//对话内容
	private int[]		talk		 = null;
	private boolean 	bMess 	  	 = false;
	private int 		eventID   	 = 1; 		//事件id
	private boolean 	bEvent 	  	 = false;
	private String		taskMess	 = null;	//当前任务提示
	public boolean		bAttle		 = false;
	private boolean 	gameshow  	 = true; 
	private int 		canvasWidth;
	private int 		canvasHeight;
	private Image 		bufferImage  = null;	//屏幕图象缓冲
	private Graphics 	bufferGraphics;			//屏幕图象缓冲句柄
	private Battle		batt 		 = null;
	
	public XianJianCanvas() {		
		this.setFullScreenMode(true);		
		try {
			XianJianImage.music1.start();
		} catch (MediaException e) {
			e.printStackTrace();
		}	
		canvasWidth  = 180;
		canvasHeight = 196;
		bufferImage = Image.createImage(canvasWidth,canvasHeight);
		bufferGraphics = bufferImage.getGraphics();
		enemy = new Vector();
		npc   = new Vector();		
		board = new Board();
		menu  = new Menu();
		board.createMap(1);			
		player = new Character("李逍遥");
		board.putCharacter(player);		
		player.setPosition(12,34);
		xtmp = 66;
		ytmp = 50;
		NpcRole npctmp = new NpcRole("李大娘",211);
		npctmp.changeDir(3);
		npctmp.setPosition(36,46);		
		npc.addElement(npctmp);			
		
		Item item1 = new Item(1001);
		player.addGoods(item1);		
		player.addGoods(item1);
		
		for(int i=1001;i<1008;i++){
			item1 = new Item(i);
			player.addGoods(item1);
		}		
		for(int i=2201;i<2205;i++){
			item1 = new Item(i);
			player.addGoods(item1);
		}
		for(int i=2001;i<2003;i++){
			item1 = new Item(i);
			player.addGoods(item1);
		}
		for(int i=2101;i<2103;i++){
			item1 = new Item(i);
			player.addGoods(item1);
		}
		for(int i=2301;i<2304;i++){
			item1 = new Item(i);
			player.addGoods(item1);
		}
		batt = new Battle(this,player);
		new KeyTh().start();		
    }

	protected void paint(Graphics g) {
		if(!bAttle){
			bufferGraphics.setClip(0,0,canvasWidth,canvasHeight);
			bufferGraphics.setColor(0x111111);
			bufferGraphics.fillRect(0, 0,canvasWidth,canvasHeight);	
			
			if(gameshow){
				board.draw( xtmp, ytmp, bufferGraphics );			
				for(int i=0;i<npc.size();i++){				
					if (npc.elementAt(i) instanceof NpcRole) {	
						NpcRole npctmp = (NpcRole) npc.elementAt(i);
						npctmp.draw(xtmp,ytmp,bufferGraphics);
					}			 
				}
				for(int i=0;i<enemy.size();i++){
					if (enemy.elementAt(i) instanceof Animal) {	
						Animal enemytmp = (Animal) enemy.elementAt(i);
						enemytmp.x+=(enemymove-1)*3;
						enemytmp.draw(xtmp,ytmp,bufferGraphics);
					}				
				}			
				if(menu.onMenu!=-1){
					menu.drawMenu(bufferGraphics);
				}else{
					bufferGraphics.setColor(0x000000);
					bufferGraphics.fillRect(0, canvasHeight-20, canvasWidth, canvasHeight);
					bufferGraphics.setColor(0xffffff);
					bufferGraphics.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_LARGE));
					bufferGraphics.drawString("菜单",0,canvasHeight,Graphics.LEFT|Graphics.BOTTOM);			
				}
				if(bMess){
					bufferGraphics.setColor(0xffff00);			
					message(eventID,bufferGraphics);
				}
			}
		}else if(bAttle){
			batt.paint(bufferGraphics);
		}
		g.drawImage(bufferImage,0,0,Graphics.LEFT|Graphics.TOP);
	}
	
	protected void keyPressed(int code) {
		int key=this.getGameAction(code); 
		if(!bAttle){
			int [] cell=board.getCell(player.x,player.y);
			if(board.map.walk[cell[1]][cell[0]] == -1){
				switch(code){
				case KEY_STAR:				
					if(menu.onMenu == -1){
						menu.onMenu = 11;
					}
					break;
				}
			}
			
			if((!bMess)&&(!bEvent)){
				switch(code){
				case -7:			
					menu.back();
					break;
				case -6:				
					menu.select();
					if(menu.onMenu == -1){
						menu.onMenu = 0;
					}
					break;
				}
			}
			if((!bMess)&&(!bEvent)&&menu.onMenu==-1){			
				switch(key){
				case UP:
					keystate|=1;
					break;
				case RIGHT:
					keystate|=2;
					break;
				case DOWN:
					keystate|=4;
					break;
				case LEFT:			
					keystate|=8;
					break;			
				}
			}		
			if(bMess){
				switch(key){					
				case FIRE:
					messID++;				
					break;
				}
			}
			if(menu.onMenu!=-1){
				switch(key){
				case UP:
					menu.up();
					break;			
				case DOWN:
					menu.down();
					break;			
				}
			}
		}else if(bAttle){
			switch(code){
			case -7:
				batt.back();				
				break;			
			}
			if(!batt.isEnd&&!batt.fail){	
				switch(key){
				case UP:
					batt.up();
					break;
				case DOWN:
					batt.down();
					break;
				case FIRE:
					batt.select();					
					break;					
				}
				repaint();
			}else{
				switch(key){
				case FIRE:
					batt.endi++;
					batt.faili++;
					
					break;
				}
				repaint();
			}
		}
		
	}
	
	protected void keyReleased(int code) {
		int key=this.getGameAction(code); 
		switch(key){
		case UP:
			keystate&=~1;
			break;
		case RIGHT:
			keystate&=~2;
			break;
		case DOWN:
			keystate&=~4;
			break;
		case LEFT:
			keystate&=~8;
			break;		
		}
	}
	
	/**
	 * 主角移动
	 */
	public void movePlayer(){
			if(keystate==1){	//up
				if(player.getDir()!=0)
				player.changeDir(0);
				player.move();	
			}					
			if(keystate ==2){	//right
				if(player.getDir()!=1)
				player.changeDir(1);
				player.move();
			}
			if(keystate ==4){	//down
				if(player.getDir()!=2)
				player.changeDir(2);
				player.move();
			}
			if(keystate==8){	//left
				if(player.getDir()!=3)
				player.changeDir(3);
				player.move();
			}
	}
	
	/**
	 * 对话
	 */
	public void message(int ii,Graphics g)
	{		
		dlgM=null;		
		switch(ii)
		{
			case 1: 
				dlgM=new String[4];
				talk=new int[]{0,0,1,1};
				dlgM[0]="李逍遥:罗刹鬼婆哪里逃!";
				dlgM[1]="啊...好疼!";
				dlgM[2]="李大娘:大白天,做什么梦!";	
				dlgM[3]="有客人来了还不快去帮忙!";							
				break;
			case 2:
				dlgM=new String[2];
				talk=new int[]{0,0};
				dlgM[0]="李逍遥:真没意思...一大清早";
				dlgM[1]="就要做那个做这个的!";	
				break;
			case 3:
				dlgM=new String[3];
				talk=new int[]{1,1,1};
				dlgM[0]="李大娘:逍遥,招呼客人歇歇脚,";
				dlgM[1]="我到厨房准备酒菜,待会你进";
				dlgM[2]="来端!";
				break;
			case 4:
				dlgM=new String[6];
				talk=new int[]{2,2,2,0,0,0};
				dlgM[0]="苗人头领:这间客栈我们包了,";
				dlgM[1]="除了老板和伙计,不许闲杂人";
				dlgM[2]="进来,这是给你的赏银。";
				dlgM[3]="得到500文钱";
				dlgM[4]="李逍遥:谢大爷的赏,小的一";
				dlgM[5]="定听候吩咐!";
				break;
			case 6:
				dlgM=new String[1];
				talk=new int[]{0};
				dlgM[0]="嘿!遇上财神爷了!";
			break;
			case 7:
				dlgM=new String[4];
				talk=new int[]{1,1,0,0};
				dlgM[0]="李大娘:快把桌上的酒菜给客人";
				dlgM[1]="送到楼上去。";
				dlgM[2]="李逍遥:是!";
				dlgM[3]="得到酒菜";
				break;			
			case 8:
				dlgM=new String[8];
				talk=new int[]{0,2,2,0,0,0,2,0};
				dlgM[0]="李逍遥:大爷,酒菜来了!";
				dlgM[1]="苗人喽罗:恩~什么酒呀?一点味";
				dlgM[2]="道也没有!";				
				dlgM[3]="李逍遥:哦!大爷您有所不知,";
				dlgM[4]="此酒乃本地的名产~桂花酒,清香";
				dlgM[5]="甘醇无比。";
				dlgM[6]="苗人喽罗:拿走!拿走!";
				dlgM[7]="得到桂花酒";
			break;		
			case 9:
				dlgM=new String[8];
				talk=new int[]{1,0,3,0,3,0,3,3,1,0};
				dlgM[0]="李大娘:门口有个要饭的,快去把他赶走,免得影响我们做生意!";
				dlgM[1]="李逍遥:你快走吧,我们也很穷,没有钱给你!";
				dlgM[2]="醉道士:酒...求求...你...一口...喝一口...就好...";
				dlgM[3]="李逍遥:好吧,让你喝一口,只能喝一口咯";
				dlgM[4]="咕嘟...咕嘟...";
				dlgM[5]="李逍遥:呀,一壶酒全喝光了!赔我!";
				dlgM[6]="醉道士:呵呵~你不是很想学剑吗?看在酒的份上贫道破例指点你几招,那就三天后三更十里坡'山神庙',不见不散!";
				dlgM[7]="醉道士说完话一溜烟地就不见了...";
				dlgM[8]="李大娘:你要是有空的话到码头买两条鱼回来,要新鲜的。";
				dlgM[9]="得到50文钱";
			break;
			default:
				break;
			
		}
		if(messID>dlgM.length-1){
			bMess=false;
			eventID++;
			messID=0;
		}
		else{
			switch(talk[messID]){
			case 0:
				g.drawImage(XianJianImage.Role,26,canvasHeight-40,Graphics.BOTTOM | Graphics.HCENTER);
				break;
			case 1:
				g.drawImage(XianJianImage.NPC1,26,canvasHeight-40,Graphics.BOTTOM | Graphics.HCENTER);
				break;
			case 2:
				g.drawImage(XianJianImage.NPC2,26,canvasHeight-40,Graphics.BOTTOM | Graphics.HCENTER);
				break;
			default:
				break;	
			}
			
			g.setColor(0x2d2d40);
			g.fillRoundRect(0,canvasHeight-41,canvasWidth-1,40,8,8);		
			g.setColor(0x1e2d64);
			g.drawRoundRect(0,canvasHeight-41,canvasWidth-1,40,8,8);
			g.drawImage(XianJianImage.kuang,0,canvasHeight-41,Graphics.LEFT|Graphics.TOP);
			g.setColor(0xffffff);
			g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD|Font.STYLE_ITALIC,Font.SIZE_MEDIUM));
			g.drawString(dlgM[messID],5,canvasHeight-25,Graphics.LEFT|Graphics.TOP);
		}
	}	
	
	
	public void displayTask(int id,Graphics g){
		taskMess=null;		
		switch(id)
		{
			case 3:
				taskMess = "去楼下";
				break;
			case 7:
				taskMess = "去左上房间找李大娘";
				break;
			case 8:
				taskMess = "去楼上房间找苗人";
				break;
			default:
				taskMess = "";
				break;
		}
		g.setColor(0x2d2d40);
		g.fillRoundRect(0,40,179,100,8,8);			
		g.setColor(0x1e2d64);
		g.drawRoundRect(0,40,179,100,8,8);
		g.setColor(0xFFFFFF);
		g.drawImage(XianJianImage.kuang,0,40,Graphics.LEFT|Graphics.TOP);
		g.drawImage(XianJianImage.roletask,(canvasWidth-XianJianImage.rolestate.getWidth())/2,40,Graphics.LEFT|Graphics.TOP);
		g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_LARGE));
		
		g.drawString(taskMess,15,65,Graphics.LEFT|Graphics.TOP);		
		
		g.setColor(0x000000);
		g.fillRect(0, canvasHeight-20, canvasWidth, canvasHeight);
		
		g.setColor(0xffffff);
		g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_LARGE));
		g.drawString("返回",canvasWidth,canvasHeight,Graphics.RIGHT|Graphics.BOTTOM);
		
	}

	
	/**
	 * 地图切换
	 */
	public void changeMap(){
		int [] cell=board.getCell(player.x,player.y);
		if(board.map.walk[cell[1]][cell[0]] == -99){
			player.moveback();
		}
		
		if((-board.map.walk[cell[1]][cell[0]])%1000/100 == 1){
			enemy.removeAllElements();
			npc.removeAllElements();
			switch(board.map.walk[cell[1]][cell[0]]){
			case -112:
				board.createMap((-board.map.walk[cell[1]][cell[0]])%10);
				player.setPosition(196,108);
				xtmp=-118;
				ytmp=-21;				
				break;
			case -121:
				board.createMap((-board.map.walk[cell[1]][cell[0]])%10);						
				player.setPosition(-20,82);
				xtmp=98;
				ytmp=7;
				break;
			case -123:
				board.createMap((-board.map.walk[cell[1]][cell[0]])%10);						
				player.setPosition(60,72);
				xtmp=20;
				ytmp=14;
				break;
			case -132:
				board.createMap((-board.map.walk[cell[1]][cell[0]])%10);						
				player.setPosition(10,41);
				xtmp=72;
				ytmp=46;
				break;
			case -134:
				board.createMap((-board.map.walk[cell[1]][cell[0]])%10);						
				player.setPosition(22,151);
				xtmp=56;
				ytmp=-64;
				NpcRole npc3=new NpcRole("商人",13);
				npc3.changeDir(2);
				npc3.setPosition(60,160);
				npc.addElement(npc3);
				break;
			case -143:
				board.createMap((-board.map.walk[cell[1]][cell[0]])%10);						
				player.setPosition(-30,155);
				xtmp=110;
				ytmp=-65;
				break;
			case -145:
				board.createMap((-board.map.walk[cell[1]][cell[0]])%10);						
				player.setPosition(76,72);
				xtmp=4;
				ytmp=18;				
				Animal enemy1 = new Animal(0);
				enemy1.setPosition(0,130);
				Animal enemy2 = new Animal(0);
				enemy2.setPosition(76,108);
				Animal enemy3 = new Animal(0);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -