📄 rpgcanvas.java
字号:
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 + -