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

📄 rpgcanvas.java

📁 J2ME rpg游戏《游戏的故事》设计文档以及详细讲解。对于学习j2me rpg游戏编程的初学者十分珍贵
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			case 11:	// 	SETPASS//				System.out.println ("SETPASS");				d1=scr[p++]&0xff;				d2=scr[p++]&0xff;				d3=scr[p++]&0xff;				pass[d2*mapW+d1]=(d3==0?true:false);				break;			case 12:	// 	CHGMAP//				System.out.println ("CHGMAP");				//	todo:	change map				d1=scr[p++]&0xff;				d2=scr[p++]&0xff;				d3=scr[p++]&0xff;				theGame.playerX=d2;				theGame.playerY=d3;				theGame.curMap=(String)text.elementAt(d1);				loadMap(theGame.curMap);				return;			case 13:	//	FLUSH//				System.out.println ("FLUSH");				render();				break;			case 14:	//	WAIT//				System.out.println ("WAIT");				d1=scr[p++]&0xff;				pause(d1*50);				break;			case 255:	//	END//				System.out.println ("END");				break;			case 15:	//	IFNOT				if(scr[p]!=0&&theGame.flags[scr[p]&0xff]){					p+=1;					p=findNext(scr,255,p)+1;//					System.out.println ("IFNOT(true)");				}else { p++;/*System.out.println ("IFNOT(false)");*/}				break;			case 16:	//	BRK				return;			case 17:	//	BATTLE				d1=scr[p++]&0xff;				d2=scr[p++]&0xff;				Display.getDisplay(parent).setCurrent(battle);				if(battle.startBattle(d1)==0) theGame.flags[d2]=true;				else theGame.flags[d2]=false;				Display.getDisplay(parent).setCurrent(this);				break;			case 18:	//	ADDENEMY				d1=scr[p++]&0xff;				theGame.enemy.addElement(new Integer(d1));				break;			case 19:	//	CHOOSE				d1=scr[p++]&0xff;				doChoose(d1);				break;			case 20:	//	GAMEOVER				endGame();				parent.setState(parent.STATE_MENU);				bExit=true;				return;			case 21:	//	SHOP				shop();				break;			case 22:	//	ADD				d1=scr[p++]&0xff;				d2=scr[p++]&0xff;				switch(d1){				case 1:	theGame.money+=d2;	break;				case 2: theGame.HP+=d2; if(theGame.HP>theGame.MaxHP) theGame.HP=theGame.MaxHP;	break;				case 3:	theGame.ATK+=d2;	break;				case 4: theGame.DEF+=d2;	break;				case 5: theGame.EXP+=d2; 	if(theGame.checkUP()) drawText(null,"Hero擻椡岦忋偟偨!");	break;				case 6: theGame.AGI+=d2;	break;				case 7:	theGame.item[0]+=d2;	break;				case 8: theGame.item[1]+=d2;	break;				case 9: theGame.item[2]+=d2;	break;				}				break;			default://				System.out.println ("Undefined command!");				break;			}		}	}	protected int findNext(byte[] b, int val, int nStart) {		byte v=(byte)(val&0xff);		while(nStart<b.length){			if(b[nStart]==v) return nStart;			nStart++;		}		return 0xffff;	}	public void pause(long nMillis) {		try{			Thread.currentThread().sleep(nMillis);		}catch(InterruptedException ie){//			System.out.println (ie.getMessage());		}	}//	private void testScript(){//		int i,j;//		for(i=0;i<2;i++){//			for(j=0;j<script[i].size();j++){//				System.out.print(((byte[])(script[i].elementAt(j))).length+" ");//			}//			System.out.print("\n");//		}//	}	private void drawText(String chr, String t) {		dlgbox.setPosition(0,scrH-56);		Font font=Font.getDefaultFont();		int p=0,j;		int l=t.length();		for(j=0;j<56;j+=5){			dlgbox.setPosition(0,scrH-j);			dlgbox.paint(g);			flushGraphics();		}		if(chr==null){			g.setColor(0);			while(p<l){				dlgbox.paint(g);				j=1;				while(p+j<l&&font.substringWidth(t,p,j)<scrW-12) j++;				if(p+j>l){					g.drawString(t.substring(p,l-1),5,scrH-3-font.getHeight()*2,Graphics.TOP|Graphics.LEFT);					p=l;				}else{					g.drawString(t.substring(p,p+j),5,scrH-3-font.getHeight()*2,Graphics.TOP|Graphics.LEFT);					p+=j;				}				j=1;				while(p+j<l&&font.substringWidth(t,p,j)<scrW-12) j++;				if(p!=l){					if(p+j>l){						g.drawString(t.substring(p,l-1),5,scrH-2-font.getHeight()*1,Graphics.TOP|Graphics.LEFT);						p=l;					}else{						g.drawString(t.substring(p,p+j),5,scrH-2-font.getHeight()*1,Graphics.TOP|Graphics.LEFT);						p+=j;					}				}				flushGraphics();				waitKeyRelease(FIRE_PRESSED);			}		}else{			while(p<l){				dlgbox.paint(g);				g.setColor(0xff0000);				g.drawString(chr,6,scrH-2-font.getHeight()*3,Graphics.TOP|Graphics.LEFT);				g.setColor(0);				j=1;				while(p+j<l&&font.substringWidth(t,p,j)<scrW-12) j++;				if(p+j>l){					g.drawString(t.substring(p,l-1),5,scrH-3-font.getHeight()*2,Graphics.TOP|Graphics.LEFT);					p=l;				}else{					g.drawString(t.substring(p,p+j),5,scrH-3-font.getHeight()*2,Graphics.TOP|Graphics.LEFT);					p+=j;				}				j=1;				while(p+j<l&&font.substringWidth(t,p,j)<scrW-12) j++;				if(p!=l){					if(p+j>l){						g.drawString(t.substring(p,l-1),5,scrH-2-font.getHeight()*1,Graphics.TOP|Graphics.LEFT);						p=l;					}else{						g.drawString(t.substring(p,p+j),5,scrH-2-font.getHeight()*1,Graphics.TOP|Graphics.LEFT);						p+=j;					}				}				flushGraphics();				waitKeyRelease(FIRE_PRESSED);			}		}		for(j=56;j>0;j-=16){			dlgbox.setPosition(0,scrH-j);			g.setColor(0);			g.fillRect(0,0,scrW,scrH);			map.paint(g,0,0);			dlgbox.paint(g);			flushGraphics();		}	}	private int waitKeyRelease(int keyCode) {		int ok,ck;		while((ok=getKeyStates()&keyCode)!=0);		while((ok=getKeyStates()&keyCode)==0);		while(true){			ck=getKeyStates()&keyCode;			if(ck<ok) break;		}		return ok;	}		private void drawStatus(){		for(int i=0;i<=scrW/2;i+=12){//			map.paint(g,0,0);			g.setClip(scrW/2-i,0,i,scrH);			menuBack.setPosition(scrW/2-i,0);			menuBack.paint(g);			g.setClip(scrW/2,0,i,scrH);			menuBack.setPosition(i-scrW/2,0);			menuBack.paint(g);			flushGraphics(scrW/2-i,0,i*2,scrH);//			pause(2);		}		g.setClip(0,0,scrW,scrH);		mainChr.setPosition(21,15);	dir=2;		mainChr.setFrameSequence(walkSeq[2]);		mainChr.paint(g);		g.setColor(64,12,128);		g.drawString("Hero",15,43,Graphics.TOP|Graphics.LEFT);		g.drawString("HP",100,20,Graphics.TOP|Graphics.LEFT);		g.drawString("Exp",100,40,Graphics.TOP|Graphics.LEFT);		g.drawString("Next",100,60,Graphics.TOP|Graphics.LEFT);		g.drawString("Atk",15,90,Graphics.TOP|Graphics.LEFT);		g.drawString("Def",80,90,Graphics.TOP|Graphics.LEFT);		g.drawString("Agi",145,90,Graphics.TOP|Graphics.LEFT);		g.drawString("僷儞",15,135,Graphics.TOP|Graphics.LEFT);		g.drawString("栻",90,135,Graphics.TOP|Graphics.LEFT);		g.drawString("悈",15,155,Graphics.TOP|Graphics.LEFT);		if(theGame.flags[4]&&!theGame.flags[6]) g.drawString("拑",15,175,Graphics.TOP|Graphics.LEFT);		if(theGame.flags[7]) g.drawString("恄寱偺杮",90,155,Graphics.TOP|Graphics.LEFT);		if(theGame.flags[17]&&!theGame.flags[19]) g.drawString("壿暔柧嵶",90,175,Graphics.TOP|Graphics.LEFT);		if(theGame.flags[17]&&theGame.flags[19]&&!theGame.flags[18]) g.drawString("?暔",15,195,Graphics.TOP|Graphics.LEFT);		if(theGame.flags[23]) g.drawString("帿彂",90,195,Graphics.TOP|Graphics.LEFT);		if(theGame.flags[25]) g.drawString("掁傝偺偊偝",15,215,Graphics.TOP|Graphics.LEFT);		if(theGame.flags[34]) g.drawString("敋栻",90,215,Graphics.TOP|Graphics.LEFT);		g.setColor(0x00ff00);		g.drawString(""+theGame.HP,140,20,Graphics.TOP|Graphics.LEFT);		g.drawString(""+theGame.EXP,140,40,Graphics.TOP|Graphics.LEFT);		g.drawString(""+(theGame.expNext-theGame.EXP),140,60,Graphics.TOP|Graphics.LEFT);		g.drawString(""+theGame.ATK,45,90,Graphics.TOP|Graphics.LEFT);		g.drawString(""+theGame.DEF,110,90,Graphics.TOP|Graphics.LEFT);		g.drawString(""+theGame.AGI,175,90,Graphics.TOP|Graphics.LEFT);		g.drawString(""+theGame.item[0],50,135,Graphics.TOP|Graphics.LEFT);		g.drawString(""+theGame.item[1],125,135,Graphics.TOP|Graphics.LEFT);		g.drawString(""+theGame.item[2],50,155,Graphics.TOP|Graphics.LEFT);				g.setColor(0);		g.drawString("/ "+theGame.MaxHP,180,20,Graphics.TOP|Graphics.LEFT);		g.drawString("LV "+theGame.LV,12,60,Graphics.TOP|Graphics.LEFT);		g.drawLine(10,120,160,120);		flushGraphics();		waitKeyRelease(FIRE_PRESSED);	}	private void doChoose(int nFlag){		int k,t=0;		while(nFlag==999){			dlgbox.setPosition(0,scrH-56);			dlgbox.paint(g);			g.setColor(64,12,128);			g.drawString("杮摉偵僎乕儉傪戅弌偡傞?",35,scrH-45,Graphics.TOP|Graphics.LEFT);			g.drawString("偄偄偊",40,scrH-25,Graphics.TOP|Graphics.LEFT);			g.drawString("偼偄",scrW/2+40,scrH-25,Graphics.TOP|Graphics.LEFT);			g.setColor(0xff00000);			g.drawString("*",scrW/2*t+20,scrH-25,Graphics.TOP|Graphics.LEFT);			flushGraphics();			k=waitKeyRelease(LEFT_PRESSED|RIGHT_PRESSED|FIRE_PRESSED);			if((k&LEFT_PRESSED)!=0||(k&RIGHT_PRESSED)!=0) t=1-t;			else if((k&FIRE_PRESSED)!=0){				bExit=(t==0?false:true);				if(bExit) parent.setState(parent.STATE_MENU);				return;			}		}		while(true){			dlgbox.setPosition(0,scrH-56);			dlgbox.paint(g);			g.setColor(64,12,128);			g.drawString("偼偄",40,scrH-45,Graphics.TOP|Graphics.LEFT);			g.drawString("偄偄偊",scrW/2+40,scrH-45,Graphics.TOP|Graphics.LEFT);			g.setColor(0xff00000);			g.drawString("*",scrW/2*t+20,scrH-45,Graphics.TOP|Graphics.LEFT);			flushGraphics();			k=waitKeyRelease(LEFT_PRESSED|RIGHT_PRESSED|FIRE_PRESSED);			if((k&LEFT_PRESSED)!=0||(k&RIGHT_PRESSED)!=0) t=1-t;			else if((k&FIRE_PRESSED)!=0){				theGame.flags[nFlag]=(t==0?true:false);				return;			}		}	}	private void endGame(){		drawText("桪婓","偙傟偱廔傢傝偱偡偐?");	}	private void drawMonster(){		for(int i=0;i<=scrW/2;i+=12){//			map.paint(g,0,0);			g.setClip(scrW/2-i,0,i,scrH);			menuBack.setPosition(scrW/2-i,0);			menuBack.paint(g);			g.setClip(scrW/2,0,i,scrH);			menuBack.setPosition(i-scrW/2,0);			menuBack.paint(g);			flushGraphics(scrW/2-i,0,i*2,scrH);//			pause(2);		}		g.setClip(0,0,scrW,scrH);		menuBack.setPosition(0,0);		int sel=0,k,i;		while(true){			menuBack.paint(g);			g.setColor(0);			g.drawString("夦暔僲乕僪",scrW/2-30,20,Graphics.TOP|Graphics.LEFT);			g.setColor(0xff0f0f);			g.fillRect(15,42,scrW-30,2);			g.setClip(20,70,200,120);			i=0;			for(int j=sel-2;j<sel+3;j++){				if(j<0) k=theGame.nMonsterCount+j;				else if(j>=theGame.nMonsterCount) k=j-theGame.nMonsterCount;				else k=j;				if(theGame.monsters[k]){					battle.enemy.setPosition(25,60+i*30);					battle.enemy.setFrame(battle.enemyData[k][0]);					battle.enemy.paint(g);					g.setColor(0);					g.drawString("Name:"+battle.name[k],60,68+i*30,Graphics.TOP|Graphics.LEFT);				}else{					g.setColor(0);					g.drawRect(25,60+i*30,16,24);					//g.drawString("?"+k,30,72+i*26,Graphics.TOP|Graphics.LEFT);					g.drawString("Name:  ???",60,68+i*30,Graphics.TOP|Graphics.LEFT);				}				i++;			}			g.setClip(0,0,scrW,scrH);			dlgbox.setPosition(0,scrH-56);			dlgbox.paint(g);			g.setColor(0xff0000);			g.drawRect(24,59+2*30,190,26);			if(theGame.monsters[sel]){				g.setColor(0);				g.drawString("HP",25,scrH-50,Graphics.TOP|Graphics.LEFT);				g.drawString("Agi",125,scrH-50,Graphics.TOP|Graphics.LEFT);				g.drawString("Atk",25,scrH-28,Graphics.TOP|Graphics.LEFT);				g.drawString("Def",125,scrH-28,Graphics.TOP|Graphics.LEFT);				g.setColor(64,12,128);				g.drawString(""+battle.enemyData[sel][1],70,scrH-50,Graphics.TOP|Graphics.LEFT);				g.drawString(""+battle.enemyData[sel][5],170,scrH-50,Graphics.TOP|Graphics.LEFT);				g.drawString(""+battle.enemyData[sel][2],70,scrH-28,Graphics.TOP|Graphics.LEFT);				g.drawString(""+battle.enemyData[sel][3],170,scrH-28,Graphics.TOP|Graphics.LEFT);			}else{				g.setColor(0);				g.drawString("HP",25,scrH-50,Graphics.TOP|Graphics.LEFT);				g.drawString("Agi",125,scrH-50,Graphics.TOP|Graphics.LEFT);				g.drawString("Atk",25,scrH-28,Graphics.TOP|Graphics.LEFT);				g.drawString("Def",125,scrH-28,Graphics.TOP|Graphics.LEFT);				g.setColor(64,12,128);				g.drawString("???",70,scrH-50,Graphics.TOP|Graphics.LEFT);				g.drawString("???",170,scrH-50,Graphics.TOP|Graphics.LEFT);				g.drawString("???",70,scrH-28,Graphics.TOP|Graphics.LEFT);				g.drawString("???",170,scrH-28,Graphics.TOP|Graphics.LEFT);			}			flushGraphics();			k=waitKeyRelease(FIRE_PRESSED|UP_PRESSED|DOWN_PRESSED);			if((k&UP_PRESSED)!=0){				if(sel==0) sel=theGame.nMonsterCount-1;				else sel-=1;			}else if((k&DOWN_PRESSED)!=0){				if(sel==theGame.nMonsterCount-1) sel=0;				else sel+=1;			}else if((k&FIRE_PRESSED)!=0){				break;			}		}	}	private void shop(){		drawText("彜揦","壗傪攦偄偨偄偱偡偐?");		int sel=0,k;		while(true){			dlgbox.setPosition(0,scrH-56);			dlgbox.paint(g);			g.setColor(64,12,128);			g.drawString("僷儞  30G",40,scrH-45,Graphics.TOP|Graphics.LEFT);			g.drawString("栻  100G",scrW/2+40,scrH-45,Graphics.TOP|Graphics.LEFT);			g.drawString("悈  200G",40,scrH-25,Graphics.TOP|Graphics.LEFT);			g.drawString("庢徚偟",scrW/2+40,scrH-25,Graphics.TOP|Graphics.LEFT);			g.setColor(0xff00000);			g.drawString("*",(sel+1)/2==sel/2?20:scrW/2+20,sel<2?scrH-45:scrH-25,Graphics.TOP|Graphics.LEFT);			flushGraphics();			k=waitKeyRelease(LEFT_PRESSED|RIGHT_PRESSED|FIRE_PRESSED);			if((k&LEFT_PRESSED)!=0){				if(sel!=0) sel-=1;			}else if((k&RIGHT_PRESSED)!=0){				if(sel!=3) sel+=1;			}else if((k&FIRE_PRESSED)!=0){				if(sel==0&&theGame.money>=30){					drawText("Hero","僷儞傪攦偄傑偟傚偆.");					theGame.item[0]+=1;					theGame.money-=30;				}else if(sel==1&&theGame.money>=100){					drawText("Hero","栻傪攦偄偨偄.");					theGame.item[1]+=1;					theGame.money-=100;				}else if(sel==2&&theGame.money>=200){					drawText("Hero","偙傟偑傎偟偄偺偩.");					theGame.item[2]+=1;					theGame.money-=200;				}else if(sel==3){					drawText("Hero","攦傢側偄偵偟傛偆.");					return;				}else{					drawText("Hero","偦傟傪攦偊側偄.");				}				return;			}		}	}	private void drawMenu(){		int sel=0,k;		for(int i=0;i<=scrW/2;i+=12){//			map.paint(g,0,0);			g.setClip(scrW/2-i,0,i,scrH);			menuBack.setPosition(scrW/2-i,0);			menuBack.paint(g);			g.setClip(scrW/2,0,i,scrH);			menuBack.setPosition(i-scrW/2,0);			menuBack.paint(g);			flushGraphics(scrW/2-i,0,i*2,scrH);//			pause(2);		}		g.setClip(0,0,scrW,scrH);		menuBack.setPosition(0,0);		while(true){			menuBack.paint(g);			g.setColor(0);			g.drawString("PAUSE",scrW/2-30,20,Graphics.TOP|Graphics.LEFT);			g.setColor(0xff0f0f);			g.fillRect(15,42,scrW-30,2);			g.setColor(64,12,128);			g.drawString("僎乕儉偵栠偡",scrW/2-40,70,Graphics.TOP|Graphics.LEFT);			g.drawString("恑搙曐懚",scrW/2-40,90,Graphics.TOP|Graphics.LEFT);			g.drawString("壒惡"+(theGame.sound?"暵傔傞":"奐偔"),scrW/2-40,110,Graphics.TOP|Graphics.LEFT);			g.drawString("Menu偵栠偡",scrW/2-40,130,Graphics.TOP|Graphics.LEFT);			g.setColor(0xff0000);			g.drawString("*",scrW/2-60,70+sel*20,Graphics.TOP|Graphics.LEFT);			flushGraphics();			k=waitKeyRelease(UP_PRESSED|DOWN_PRESSED|FIRE_PRESSED);			if((k&UP_PRESSED)!=0){				if(sel!=0) sel-=1;			}else if((k&DOWN_PRESSED)!=0){				if(sel!=3) sel+=1;			}else if((k&FIRE_PRESSED)!=0){				switch(sel){				case 0:					return;				case 1:					if(theGame.saveData())					drawText(null,"曐懚廔傢傝!");					else drawText(null,"Failed!");					return;				case 2:					theGame.sound=!theGame.sound;					sp.setEnable(theGame.sound);					break;				case 3:					doChoose(999);					return;				}			}		}	}}

⌨️ 快捷键说明

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