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

📄 jcanvas.java

📁 RPG游戏
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
import java.io.IOException;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

/**
 * @author 陈利昌
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
/**
 * 游戏还存在着碰撞检测的bug。
 */
public class jCanvas extends Canvas implements Runnable{
	//所有创建的对象
	jiaomidlet midlet;
	protected Thread t;	
	protected Jilu jilu;
	protected Shenyin shenyin;
	protected NPC Nshiwei;
	protected NPC Nshiwei1;
	protected NPC Nqingnian;
	protected NPC Nfunv;
	protected NPC Nguowang;
	protected NPC Nshangdian;
	protected NPC Ndachen;
	protected NPC npc;
	protected Zhuangtaikuang zhuangtai;
	protected daoju wupin;
	//所有图片 Image
	protected Image logo;
	protected Image ditu;
	protected Image zhujiao;
	protected Image penquan;
	protected Image daditu;
	protected Image shangdian;
	protected Image shiwei;
	protected Image qingnian;
	protected Image guowang;
	protected Image funv;
	protected Image shilaimu;
	protected Image daoguai;
	protected Image sheguai;
	//各类变量

	int time = 0;
	int mapImage = 1;
	int logox = 88;
	int logoy = 79;
	boolean anjianpanduan=false;
	boolean yanshipanduan=false;
	protected int yudile=0;
	protected int xianshidiren=0;
	protected boolean Bxianshidiren=true;
	protected int xianshizhujue=0;
	protected int row,col;								//主角的方向
	protected int move=0,move1=0;						//键盘按键变量
	protected int NPCmove=0;							//NPC的方向
	protected int hang=5*24;							//主角的行
	protected int lian=7*24-6;							//主角的列
	protected int renx=120;								//主角所在屏幕的X坐标
	protected int reny=144;								//主角所在屏幕的Y坐标
	protected int gao=320;								//游戏得到的屏幕高度
	protected int kuan=240;								//游戏得到的屏幕宽度
	protected int buchang;								//主角的步长
	protected int penquanx;								//NPC碰撞时的X坐标
	protected int penquany;								//NPC碰撞时的Y坐标
	protected int penhuan;								//喷泉的图片变换
	protected int haihuan;								//海的图片变换
	protected int mapqiehuan = 10;							//所有关卡
	protected int qiehuan;								//防止进出关卡时主角卡住
	protected int bianliang;							//数值判断
	protected int su=0;									//数值判断
	protected int bu=0;									//数值判断
	//所有NPC以及商店的X和Y坐标
	protected int shiweix=18*24,shiweiy=18*24-6;		//侍卫甲的X、Y
	protected int shiwei1x=20*24,shiwei1y=18*24-6;		//侍卫乙的X、Y
	protected int guowangx=10*24,guowangy=11*24-6;		//国王的X、Y
	protected int dachenx=11*24,dacheny=12*24-6;		//大臣的X、Y
	protected int qingnianx=23*24,qingniany=19*24-6;	//青年的X、Y
	protected int funvx=12*24,funvy=13*24-6;			//妇女的X、Y
	protected int daojudianx=40*24,daojudiany=25*24-6;	//道具店老板的X、Y
	protected int wuqidianx=19*24,wuqidiany=21*24-6;	//武器店老板的X、Y
	protected int fangjudianx=31*24,fangjudiany=21*24-6;//防具店老板的X、Y
	protected int lvdianx=33*24,lvdiany=32*24-6;		//旅店老板的X、Y
	protected int NPCcol;								//NPC的图片变换
	protected int NPCrow;								//NPC青年的方向
	protected int NPCrow1;								//NPC妇女的方向
	protected int huanrow=1;							//数值判断
	protected int shiweirow=1;							//NPC侍卫甲的方向
	protected int shiwei1row=1;							//NPC侍卫乙的方向
	protected int NPCbuchang;							//NPC的步长
	protected int NPCjisuan;							//计算NPC的随机数
	protected int ss;									//数值判断
	protected int pengx=24*24;							//NPC坐标
	protected int pengy=20*24-6;						//NPC坐标
	protected int penghuan=0;							//NPC数值判断
	protected int pengnvx=12*24;						//NPC数值判断
	protected int pengnvy=13*24-6;						//NPC数值判断
	protected int xx=hang;								//主角数值判断
	protected int yy=lian;								//主角数值判断
	protected int kuangx=16+6,kuangy=6;					//对话框的坐标
	protected int kuangxx=112+6,kuangyy=86;				//对话框的坐标
	protected int biaox=30,biaoy=14;					//光标的X与Y坐标
	protected int biaoxx,biaoyy;						//储存光标坐标
	protected int duihuakuang=0;						//对话框选择
	protected int huan;									//数值判断
	protected int xuanze;								//数值判断
	protected int duihuajixu=0;							//对话更换
	protected int zhandoujixu=0;
	protected int zhandouduihua=100;
	protected int jishuqi=0;							//数值判断
	protected int xuanzekuangx=88,xuanzekuangy=80;;		//菜单选择框
	//所有地图
	protected short huanggongmap[][]=Huanggongmap.map;
	protected short huanggongmap1[][]=Huanggongmap.map1;
	protected short chengwaimap[][]=Chengwaimap.map[0];
	protected short chengwaimap1[][]=Chengwaimap.map[1];
	protected short chengneimap[][]=Chengneimap.map;
	protected short map[][]=Huanggongmap.map1;

	public jCanvas(jiaomidlet midlet){
		setFullScreenMode(true);
		this.midlet = midlet;
		jilu = new 	Jilu(this);
		shenyin = new Shenyin(this);
		wupin=new daoju();
		zhuangtai=new Zhuangtaikuang(this);
		Nshiwei=new NPC("/images/shiwei.png");
		Nshiwei1=new NPC("/images/shiwei.png");
		Nqingnian=new NPC("/images/qingnian.png");
		Nfunv=new NPC("/images/funv.png");
		Nguowang=new NPC("/images/guowang.png");
		Ndachen=new NPC("/images/guowang.png");
		Nshangdian=new NPC("/images/shangdian.png");
		npc=new NPC("/images/shiwei.png");
		t = new Thread(this);
		t.start();
		try {
			logo = Image.createImage("/images/logo.png");
			shilaimu=Image.createImage("/images/shilaimu.png");
			daoguai=Image.createImage("/images/daoguai.png");
			sheguai=Image.createImage("/images/sheguai.png");
			shangdian=Image.createImage("/images/shangdian.png");
			zhujiao=Image.createImage("/images/zhujue.png");
			ditu = Image.createImage("/images/chengnei.png");
			penquan=Image.createImage("/images/pengquan.png");
			daditu=Image.createImage("/images/chengwai.png");
		} catch (IOException e) {
			e.printStackTrace();
		}	
	}
	protected void ShowNotify(){
		
	}
	protected void hideNotify(){
		
	}
	/**
	 * @param b
	 */
	//重绘黑屏
	protected void chonghui(Graphics g)
	{
		g.setClip(0,0,getWidth(),getHeight());
		g.setColor(0,0,0);
		g.fillRect(0,0,getWidth(),getHeight());	
	} 
	//重绘白屏
	protected void chonghui1(Graphics g)
	{
		g.setColor(255,255,255);
		g.fillRect(0,0,getWidth(),getHeight());	
	}
	//绘制蓝天
	protected void lantian(Graphics g)
	{
		g.setColor(63,191,255);
		g.fillRect(0,0,getWidth(),getHeight());
	
	} 
	//绘制城内地图
	protected void chengnei(Graphics g){
		for(int i=hang/24;i<hang/24+11;i++){
    		for(int j=lian/24;j<lian/24+14;j++){  	
    			g.setClip(i*24-hang,j*24-lian,24,24);
				g.drawImage(ditu,(i-(map[j][i]-1)%9)*24-hang,(j-(map[j][i]-1)/9)*24-lian,Graphics.TOP|Graphics.LEFT);
    		}
    	}		
	}
	//绘制城外地图
	protected void chengwai(Graphics g){
		haihuan++;
		if(haihuan%2==0){
			map=chengwaimap;
		}
		else{
			map=chengwaimap1;
		}
		if(haihuan==100){haihuan=0;}
		for(int i=hang/24;i<hang/24+11;i++){
	    	for(int j=lian/24;j<lian/24+14;j++){  	
	    		g.setClip(i*24-hang,j*24-lian,24,24);
	    		g.drawImage(daditu,(i-(map[j][i]-1)%7)*24-hang,(j-(map[j][i]-1)/7)*24-lian,Graphics.TOP|Graphics.LEFT);
	    	}
		}
	}
	//绘制喷泉
	protected void penquan(Graphics g){
				g.setClip(576-hang,858-lian,24,24);
				g.drawImage(penquan,(576-hang)-penquanx*24,(858-lian)-penquany*24,Graphics.TOP|Graphics.LEFT);
				penhuan++;
				if(penhuan%3==0){penquanx++;}
				if(penquanx==3){penquany++;penquanx=0;}
				if(penquany==3){penquany=0;penhuan=0;}
	}
	//绘制主角
	protected void zhujiao(Graphics g){
		g.setClip(renx,reny,24,24);
		g.drawImage(zhujiao,renx-col*24,reny-row*24,Graphics.TOP|Graphics.LEFT);
	}
	protected void Logo(Graphics g){
		g.setClip(0, 0, kuan, gao);
		g.drawImage(logo, 0, 0, Graphics.TOP | Graphics.LEFT);
		g.setColor(255, 0, 0);
		g.drawRect(logox, logoy, 76, 25);
	}

	/**
	 * 绘制进度条界面
	 * @param g
	 */
	protected void Time(Graphics g){
		time += 5;
		g.setColor(0, 0, 0);
		g.fillRect(0,0,getWidth(),getHeight());
		g.setColor(255, 255, 255);
		g.setFont(Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_PLAIN,Font.SIZE_MEDIUM));
		g.drawString("正在读取资料中"+ time +"%", 20, 120, Graphics.TOP | Graphics.LEFT);
		g.fillRect(22,140,time+48,5);
		if(time >= 100){
			if(mapqiehuan == 10){
				time = 0;
				mapqiehuan = 6;
				shenyin.logo(1);
			}
			if(mapqiehuan == 11){
				time = 0;
				mapqiehuan = 2;
 				shenyin.logo(1);
			}
			if(mapqiehuan == 12){
				time = 0;
				jilu.Duqu();
				MapImage();
				shenyin.logo(1);
			}
		}
	}
	protected void paint(Graphics g) {
		chonghui(g);
//		g.setColor(0xff0000);
//		g.drawString("游戏占用内存 = "+String.valueOf((Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory()) / 1000)+"	K",0,0,0);
		/**
		 * 主菜单
		 */
		if(mapqiehuan==0){
			Logo(g);
		}
		/**
		 * 绘制游戏开始的对话界面
		 */
		if(mapqiehuan == 6){
			zhuangtai.logoy -= 1;
			zhuangtai.logo(g, logo, gao, kuan);
			if(zhuangtai.logoy < - 320){
				mapqiehuan = 0;
				zhuangtai.logoy = 120;
			}
		}
		/**
		 * 绘制游戏的设置界面
		 */
		if(mapqiehuan == 7){
			zhuangtai.setshengyin(g, biaox, biaoy);
		}
		/**
		 * 绘制游戏的帮助界面
		 */
		if(mapqiehuan == 8){
			zhuangtai.bangzhu(g);
		}
		/**
		 * 绘制游戏的进度条画面
		 */
		if(mapqiehuan == 10 || mapqiehuan == 11 || mapqiehuan == 12){
			Time(g);
		}
		//城内皇宫下层
		if(mapqiehuan==1){
			chengnei(g);
			Nshiwei.drawNPC(g,hang,lian,col,shiweirow,shiweix,shiweiy);
			Nshiwei1.drawNPC(g,hang,lian,col,shiwei1row,shiwei1x,shiwei1y);
			Nqingnian.drawNPC(g,hang,lian,col,NPCrow,qingnianx,qingniany);
			Nfunv.drawNPC(g,hang,lian,col,NPCrow1,funvx,funvy);
			zhujiao(g);
		}
		//城内皇宫上层
		if(mapqiehuan==2){		
			chengnei(g);
			Nguowang.drawNPC(g,hang,lian,col,0,guowangx,guowangy);
			Ndachen.drawNPC(g,hang,lian,col,shiwei1row,dachenx,dacheny);
			zhujiao(g);	
		}
		//城内地图
		if(mapqiehuan==3){
			chengnei(g);
			penquan(g);
			Nshangdian.drawNPC(g,hang,lian,col,2,daojudianx,daojudiany);
			Nshangdian.drawNPC(g,hang,lian,col,1,fangjudianx,fangjudiany);
			Nshangdian.drawNPC(g,hang,lian,col,2,wuqidianx,wuqidiany);
			Nshangdian.drawNPC(g,hang,lian,col,1,lvdianx,lvdiany);
			Nqingnian.drawNPC(g,hang,lian,col,NPCrow,qingnianx,qingniany);
			Nfunv.drawNPC(g,hang,lian,col,NPCrow1,funvx,funvy);
			zhujiao(g);	
		}
		//城外地图
		if(mapqiehuan==4){
			chengwai(g);
			zhujiao(g);	
			/**
			 * 游戏中主角遇敌的动画场面
			 */
			if(yudile==1){
				if(zhuangtai.duizhan_yudibianhuan(g,gao,kuan)==3){
					yudile=0;
					mapqiehuan=5;
					biaox=12+10;
					biaoy=8*24+8;
					duihuajixu=0;
				}	
			}
			/**
			 * 游戏中主角结束战斗的动画场面
			 */
			if(yudile==2){
				if(zhuangtai.duizhan_yudibianhuan(g,gao,kuan)==1){
					zhuangtai.heipin = false;
					Bxianshidiren=true;
					duihuakuang=0;
					duihuajixu=0;
					yudile=0;
				}
			}
		}
		if(mapqiehuan==5){
			duizhanhuamian(g);
		}
		//对话:前方没有任何人
		if(duihuakuang==100){
			zhuangtai.shiwei(g,huan,duihuajixu);
		}
		//显示对话框
		if(duihuakuang==1){
			zhuangtai.duihuakuang(g,kuangx,kuangy,kuangxx,kuangyy,biaox,biaoy);
		}
		//显示与所有NPC对话
		if(duihuakuang>=2&&duihuakuang<=13){
			zhuangtai.shiwei(g,duihuakuang-1,duihuajixu);
			shangdianpanduan(g);
			if(duihuajixu==4||duihuajixu==8){
				zhuangtai.panduankuang(g,144,48,72,72,biaox,biaoy,1);				
			}
			huan=0;
		}
		//显示人物状态
		if(duihuakuang==20){
			if(duihuajixu==0){
				zhuangtai.zhuangtailan(g,1*24+12,1*24+12,4*24,5*24,1);
				zhuangtai.zhuangbeilan(g,1*24+12,6*24+12,4*24,4*24,0,0,1);
			}
			if(duihuajixu==1){
				zhuangtai.zhuangtailan(g,5*24+12,1*24+12,4*24,8*24-10,2);
			}
		}
		//显示人物道具
		if(duihuakuang==21){
			if(duihuajixu==0){
				zhuangtai.daojulan(g,5*24+12,12,4*24+5,6*24,biaox,biaoy,1);
			}
			if(duihuajixu==1){
				zhuangtai.daojulan(g,5*24+12,4*24+12,3*24+5,4*24,biaox,biaoy,2);
			}
			if(duihuajixu>=2&&duihuajixu<=8){
				zhuangtai.shiwei(g,duihuajixu+14,duihuajixu);
			}
			if(duihuajixu==10){
				zhuangtai.shiwei(g,15,duihuajixu);
			}
		}
		//显示调查结果
		if(duihuakuang==22){
			zhuangtai.shiwei(g,14,duihuajixu);
		}
		//显示开门结果
		if(duihuakuang==23){
			zhuangtai.shiwei(g,13,duihuajixu);
		}
		if(duihuakuang == 24){
			zhuangtai.system(g, 6*24 - 12, 1*24, 4*24 + 12, 5*24, biaox, biaoy, 1);
		}
		if(duihuakuang == 25){
			zhuangtai.shiwei(g,31, 0);
		}
	}
	
	
	
	 protected void keyPressed(int keyCode){
	 	int k=this.getGameAction(keyCode);
		 	if((((lian+6)%24==0&&hang%24==0)&&yudile==0) || (mapqiehuan == 5 && yudile==0)){
			 	switch(k){
					 	case Canvas.UP:
							if(mapqiehuan == 0){
								if(logoy > 79){
						 			logoy -= 35;
								}
					 			break;
					 		}
							if(duihuakuang==0 && mapqiehuan != 5){
					 			buchang=1;		 	
						 		move=1;
					 		}				 		
					 		guangbiaopanduan(1);
					 		break;
					 	case Canvas.DOWN:	
					 		if(mapqiehuan == 0){
					 			if(logoy < 219){
						 			logoy += 35; 
					 			}
					 			break;
					 		}
					 		if(duihuakuang==0 && mapqiehuan != 5){
						 		buchang=1;
						 		move=2;
					 		}
					 		guangbiaopanduan(2);
					 		break;
					 	case Canvas.LEFT:
							/**
					 		 * 调节音量
					 		 */
					 		if(mapqiehuan == 7){
					 			if(biaoy == 50){
						 			if(zhuangtai.setshengyin > 0){
						 				Shenyin.yinliang -= 33;
						 				zhuangtai.setshengyin -= 1;
						 				shenyin.logo(2);
						 				break;
						 			}
					 			}
					 		}
					 		if(mapqiehuan == 0){
					 			break;
					 		}
					 		if(duihuakuang==0 && mapqiehuan != 5){
						 		buchang=1;
						 		move=3;
					 		}
					 		guangbiaopanduan(3);
					 		break;
					 	case Canvas.RIGHT:
					 		/**
					 		 * 调节音量
					 		 */
					 		if(mapqiehuan == 7){
					 			if(biaoy == 50){
						 			if(zhuangtai.setshengyin < 3){
						 				Shenyin.yinliang += 33;
						 				zhuangtai.setshengyin += 1;
						 				shenyin.logo(2);
						 				break;
						 			}
					 			}
					 		}
					 		if(mapqiehuan == 0){
					 			break;
					 		}
					 		if(duihuakuang==0 && mapqiehuan != 5){
						 		buchang=1;
						 		move=4; 
					 		}
					 		guangbiaopanduan(4);
					 		break;	 		
					 	case Canvas.FIRE:
					 		if( zhuangtai.heipin ){
					 			break;
					 		}
					 		if(mapqiehuan == 10 || mapqiehuan == 11){
					 			break;
					 		}
					 		if(mapqiehuan == 6){
					 			mapqiehuan = 0;
					 			shenyin.over();
					 			shenyin.logo(1);
					 			break;
					 		}
					 		if(mapqiehuan == 7){
					 			if(biaoy == 80){
					 				logoy = 79;
					 				mapqiehuan = 0;
					 				shenyin.over();
					 				shenyin.logo(1);

⌨️ 快捷键说明

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