两个小问题,高手帮忙指点一下!

cdlgz 2005-05-01 08:30:13
对话框程序
1.鼠标左键点击标题栏移动时,怎么使它的子窗口(一个非模式对话框)一起移动?
2.打印,比较特殊,相当于纸从出纸口放入.因而,本应该打印在左上角的点却打在了右下角,旋转了180度.
实际上是做某个产品,用到了打印机机芯,但设计没对,弄错了方向.改硬件当然简单,打印机转180度安装就行了.问题是某些人认为改软件更容易.郁闷!
我现在要做的就是,纸从出纸口放入,该打印在左上角的点,仍然要打在左上角,从哪里入手,高手帮忙指点一下?今天去书城看了一天书,还是没有头绪.
...全文
178 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
luogucai 2005-05-02
  • 打赏
  • 举报
回复
鼠标左键点击标题栏移动时,实在OnNcLButtongDownz中处理的,一旦进入,其会使用SetCapture函数,及自己的消息循环处理鼠标移动消息,所以你无法在mousemove消息响应中处理,不过,窗口位置变化时,OnWindowPosChanged会响应,你可以在这个消息响应函数中处理非模态对话框的位置变动.

打印这个方面没有理解你的问题,无法帮忙了.
cdlgz 2005-05-02
  • 打赏
  • 举报
回复
是啊,不一起移动
你用IE的查找对话框试试
release版没有报告内存泄漏,可以将就用吧?:)
cdlgz 2005-05-02
  • 打赏
  • 举报
回复
我把wm_move看成是wm_mousemove了
我直接到onmove()中用子窗口的指针调用movewindow(),居然检测到内存泄漏,郁闷
不过程序还是能运行,确实可以做到同时移动,非常感谢
42252343 2005-05-02
  • 打赏
  • 举报
回复
1.鼠标左键点击标题栏移动时,怎么使它的子窗口(一个非模式对话框)一起移动?

你移动父窗口的时候子窗口难道不跟着移动?
pomelowu 2005-05-01
  • 打赏
  • 举报
回复
呵呵,主要是打印做得不多,都是些最简单的……
WM_MOVING就是鼠标拖动的消息啊。
移动时不刷新可以在OnMoving的时候不做MoveWindow,而是在屏幕上画那个Modeless对话框的外框,在OnMove中再MoveWindow
myhaocat 2005-05-01
  • 打赏
  • 举报
回复
学习
laogong 2005-05-01
  • 打赏
  • 举报
回复
两个都不会,呵呵
不过帮你顶一下,顺便学习!
cdlgz 2005-05-01
  • 打赏
  • 举报
回复
移动时不是实时刷新,怎么解决
不行我就LButtonDown时先隐藏,Up时显示新的位置,这样不太理想
我还想了一种办法,设了个定时器,刷新,鼠标down时settimer,up时kill,最小1ms,没有用到mousemove,还是不理想:)
高手指点一下吧,我学编程还不到一年半,水平有限啊
cdlgz 2005-05-01
  • 打赏
  • 举报
回复
关键要打印的东西就是很多幅小的位图,不能打印背景
所以我是直接向打印机画每一幅小图的,难道我把它们合成到一张整的上,再旋转?不太理想
或者先将它们进行坐标变换,再绘图?对图片的位置和大小要能随意进行调整后打印,未免太难了吧
:)
cdlgz 2005-05-01
  • 打赏
  • 举报
回复
鼠标要按住不放,才跟随鼠标同时移动
怎么做啊,楼上说的可否详细点
2颗星都说帮不上忙,不是判我死型了吗,没那么严重吧?
forover 2005-05-01
  • 打赏
  • 举报
回复
第一个问题很好解决啊,主窗口MOVE时将对应的子对话框MOVEWINDOW就可以了
第二个问题没想出来,可以参考2楼的
howtotell 2005-05-01
  • 打赏
  • 举报
回复
把要打印的东西输出到位图,然后旋转、打印。位图旋转是很简单的。
pomelowu 2005-05-01
  • 打赏
  • 举报
回复
1 响应WM_MOVING,对子窗口MoveWindow

2 帮不上忙
import javax.microedition.lcdui.*; import java.io.*; import java.lang.*; import java.util.Timer; import popup.*; import java.util.Random; import java.util.Vector; import javax.microedition.media.*; public class SwordCanvas extends Canvas implements PopupListener { static int life,energy,skillpoint,x,y,maxlife,maxenergy; static int level; static int experience; static int gold; static int direction; static int basicPower; int totalPower; int[] skillArray,tn; int addMagic,addPower; int stealB; int addPdP; int curNPC; int speed=4; int count; int[] weapon; int curKey; boolean isUpdated; static int[] startX,startY; int curweapon; int curEl; boolean isTask,isTask2; boolean hasBoat; boolean isHiding; boolean isGameOver; boolean tran; boolean isWalking; boolean[] dlg; String[] dlgMenu; boolean isWin,isDie; String strTip; String strDlg; String strPro; String[] attackMenu=new String[]{ "落日","乱电", "残风", "召狼", "召熊", "召龙", "隐身","遁走", "附身", "回血", "补气", "攻击"}; int offY,offX; int dlgn; int dlgMenuChoose; static Image imgHero; static int w,h; static int x0,y0,sl=0,i,j; int killCount; static int[] W,H; int[] mapArray; int[] spriteNum; static int[] screenStart=new int[]{16,29,33,47,68,77,83}; int sx,sy; int sn; Sprite[] SPI; Sprite[] NPC; int attackNumber; int nn; boolean isProMenu,isAttMenu,isTranMenu; boolean isFighting; boolean isTalking; boolean isChange; boolean isGameMenu; int step; static boolean running; String[] dlgM; static Image screenPic; static Image imgNPC; static Image imgProBG,imgState; InputStream is; Vector winString=new Vector(0,1); //static Image[] p; static Image[] screen; static Image[] spic; static Image atpic,imgAttackBG; static Image spic0; Image imgDlg; static Image[] sword; String[] mapName=new String[]{"牛家村","冰火岛 ","大智岛","襄阳城","蓬莱岛","竞技场"}; boolean updateMan; static Graphics g1; Random rand; Player mapPlayer,attPlayer; boolean isWeather; int offsetY=36; Timer timer; int[][] snow=new int[30][30]; TimerTask moveTask,attackTask,attackControlTask,changeMapTask,weatherTask; protected Popup popup; protected String helpStr = "游戏背景:"+ "\n\n" + "高手是寂寞的;而磨砺自身成为高手的过程,则是孤独的。"+ "\n\n" + "操作方法:"+ "\n\n" + "游戏中用方向键和2、4、6、8键控制主角移动以及进行菜单选择,5键或OK键选定,3键调出/关闭属性菜单,左软键调出操作菜单,可查看帮助信息,保存游戏或回到主菜单。"+ "\n\n" + "关键提示:"+ "\n\n" + "玩家每次升级将得到一点技能属性用来学习技能,每项技能所能修炼的最高等级受主角等级限制,技能等级越高,效果越显著。使用“召狼”等技能时,召唤出的宠物将被优先攻击。使用技能会消耗主角的“气力”,“回气”技能将耗费一定数量的金钱。主角战死会损失一定比例的经验及金钱。"+ "\n\n" + "在战斗过程中菜单选项将不会响应。"+ "\n\n" + "招式详解:"+ "\n\n" + "落日:用内力聚成一个落日,对单个敌人造成极大伤害。"+ "\n\n" + "乱电:在天空中形成流星般的巨石,砸向全部敌人。"+ "\n\n" + "残风:耗费自身的血和气来形成一股飓风,对全部敌人造成较大伤害。"+ "\n\n" + "召狼:召唤精灵狼来辅助战斗,生命力较弱但攻击力很强。"+ "\n\n" + "召熊:召唤精灵熊来辅助战斗,攻击力很弱但生命力较强,可以用作战斗中的护盾。"+ "\n\n" + "召龙:召唤神龙来辅助战斗,可以反弹敌人部分攻击并反伤敌人。"+ "\n\n" + "隐身:在数回合内主角将不受攻击,但使用附身或攻击敌人则会失效。"+ "\n\n" + "遁走:从战斗中直接逃走,技能等级高则逃走成功率大。"+ "\n\n" + "附身:召唤影子与主角并肩作战,使主角生命力和攻击力按比例上升。"+ "\n\n" + "回血:恢复主角一定比例的生命力。"+ "\n\n" + "回气:恢复主角一定比例的气力,但要耗费一定量的金钱。"; public SwordCanvas() { setFullScreenMode(true); running=true; w = getWidth(); h= getHeight()-offsetY; } void init() { isGameOver = false; i=0; level=1; experience=0; skillpoint=0; basicPower=7; gold=0; maxlife=71; life=71; energy=40; maxenergy=40; direction=6; addMagic=0; addPower=0; stealB=0; addPdP=0; curweapon=9; totalPower=basicPower+addPower+addPdP*basicPower/100; weapon=new int[]{9,9,9,9,9,9}; skillArray=new int[]{0,0,0,0,0,0,0,0,0,1,0}; spriteNum=new int[]{60,28,153,76,16,2,0}; startX=new int[]{464,144,32,192,32,128,16}; startY=new int[]{448,432,224,320,144,176,112}; dlg=new boolean[]{false,false,false,false,false,false,false}; tn=new int[]{0,0,0,0,0}; W=new int[]{32,32,32,24,24,16,16}; H=new int[]{32,32,32,24,24,18,18}; if(sl==0) { if(dlg[0]) { x=startX[0]; y=startY[0]; message(2); } else { x=384; y=304; } } else { x=startX[sl]; y=startY[sl]; } if(x>=w/2) { if(x<=W[sl]*16-w/2) x0=x-w/2; else x0=W[sl]*16-w; } else x0=0; if(y>=h/2) { if(y<=H[sl]*16-h/2) y0=y-h/2; else y0=H[sl]*16-h; } else y0=0; isTask=false; isTask2=false; hasBoat=false; isDie=false; isWin=false; isWalking=false; isHiding=false; tran=false; isProMenu=false; isAttMenu=false; isFighting=false; isChange=false; isGameMenu=false; isTalking=false; strTip=null; strDlg=null; SPI=new Sprite[8]; timer=new Timer(); rand=new Random(1000); changeMapTask=null; is=getClass().getResourceAsStream("/Screen"+toString(sl)+".dat"); readMap(is); if(spriteNum[sl]!=0) { is=getClass().getResourceAsStream("/sprite"+toString(sl)+".dat"); readSprite(is); } if(sl==0&&!dlg[0]) message(2); weatherTask=new TimerTask(this,-2); timer.schedule(weatherTask,0,400); } void readSprite(InputStream s) { int i,c,temp; i=0; c=0; temp=0; NPC=null; NPC=new Sprite[spriteNum[sl]]; try { while((c=s.read())!=-1) { switch(c) { case ',': NPC[i++]=new Sprite( temp/10000, temp%10000/100, temp%100); temp=0; break; default: temp=10*temp+c-48; break; } } } catch(java.io.IOException ioe) { } is=null; } void readMap(InputStream s) { int x,y,c,temp; x=0; y=0; temp=0; mapArray=null; mapArray=new int[W[sl]*H[sl]]; int i = 0; try { while((c=s.read())!=-1) { switch(c) { case '\n': y++; x=0; temp=0; break; case ',': mapArray[y*W[sl]+x++]=temp; temp=0; break; default: temp=10*temp+c-48; break; } } } catch(java.io.IOException ioe) { } if(sl==3) { x=getRandom(96)+72; if(mapArray[x]/100==1) { mapArray[x]=mapArray[x]%100+9800; { if(mapArray[x+1]/100==1) mapArray[x+1]=mapArray[x+1]%100+1800; if(mapArray[x-1]/100==1) mapArray[x-1]=mapArray[x-1]%100+1900; if(mapArray[x-24]/100==1) mapArray[x-24]=mapArray[x-24]%100+1600; if(mapArray[x+24]/100==1) mapArray[x+24]=mapArray[x+24]%100+1700; } } x=getRandom(96)+264; if(mapArray[x]/100==1) { mapArray[x]=mapArray[x]%100+9800; { if(mapArray[x+1]/100==1) mapArray[x+1]=mapArray[x+1]%100+1800; if(mapArray[x-1]/100==1) mapArray[x-1]=mapArray[x-1]%100+1900; if(mapArray[x-24]/100==1) mapArray[x-24]=mapArray[x-24]%100+1600; if(mapArray[x+24]/100==1) mapArray[x+24]=mapArray[x+24]%100+1700; } } } else if(sl==6) { for(int ii=0;ii<256;ii++) { if(mapArray[ii]/100==1) mapArray[ii]=mapArray[ii]%100+(getRandom(100)<70?(getRandom(3)+16)*100:100); } } is=null; } public void keyRepeated(int keyCode) { int action=getGameAction(keyCode); if(action==Canvas.UP||action==Canvas.DOWN||action==Canvas.LEFT||action==Canvas.RIGHT) keyPressed(keyCode); } public void keyPressed(int keyCode) { int action=getGameAction(keyCode); if (popup!=null&&popup.isActive()) { popup.keyPressed(keyCode, action); repaint(); return; } if(keyCode==35) MenuCanvas.midlet.exit(); curKey=keyCode; if(!isChange) { switch(action) { case GAME_B: if(!isWin&&!isDie&&!isChange&&!isTranMenu&&!isTalking&&!isGameMenu&&moveTask==null) { isProMenu=!isProMenu; offY=0; offX=0; i=0; j=0; repaint(); } break; case UP: if(isGameMenu) { i=i-1>=0?i-1:0; repaint(); } else if(!isProMenu&&!isTranMenu&&!isWin&&!isDie&&!isTalking&&strTip==null&&!isFighting) { if(moveTask==null) { if(direction/3!=2) { direction=6; repaint(); } else setMoveTask(); } } else if(isProMenu) { strPro=null; offY=0; j=0; i=i-1>=0?i-1:3; repaint(); } else if(isTranMenu) { if(dlg[2]) i=i-1>=0?i-1:5; else if(isTask) i=i-1>=0?i-1:4; else i=i-1>=0?i-1:3; repaint(0,0,128,128); } else if(isAttMenu) { i=i-4>=0?i-4:i+8; repaint(); } else if(isTalking&&strTip==null)//对对话菜单的操作 { if(curNPC==6||curNPC==4||curNPC==5) dlgMenuChoose=dlgMenuChoose-1>=0?dlgMenuChoose-1:dlgMenu.length-1; repaint(); } break; case DOWN://下键 if(isGameMenu) { i=i+1<=4?i+1:4; repaint(); } else if(!isProMenu&&!isFighting&&!isTranMenu&&!isWin&&!isDie&&!isTalking&&strTip==null) { if(moveTask==null) { if(direction/3!=1) { direction=3; repaint(); } else setMoveTask(); } } else if(isProMenu) { strPro=null; offY=0; i=i+1<4?i+1:0; j=0; repaint(); } else if(isTranMenu) { if(dlg[2]) i=i+1<6?i+1:0; else if(isTask) i=i+1<5?i+1:0; else i=i+1<4?i+1:0; repaint(); } else if(isAttMenu) { i=i+4<12?i+4:i-8; repaint(); } else if(isTalking&&strTip==null)//对话时候的菜单选项 { if(curNPC==6||curNPC==4||curNPC==5) dlgMenuChoose=dlgMenuChoose+1<=dlgMenu.length-1?dlgMenuChoose+1:0; repaint(); } break; case LEFT://左键 if(isProMenu) { if(i==2) j=j-1>=0?j-1:10; else if(i==1&&j>0) for(int ii=j-1;ii>=0;ii--) { if(weapon[ii]!=9) { offY=0; j=ii; break; } } repaint(); } else if(!isProMenu&&!isFighting&&!isTranMenu&&!isWin&&!isDie&&!isTalking&&strTip==null&&!isGameMenu) { if(moveTask==null) { if(direction/3!=0) { direction=0; repaint(); } else setMoveTask(); } } else if(isAttMenu) { i=i-1>=0?i-1:11; repaint(); } else if(isTalking&&strTip==null) { if(curNPC==6||curNPC==4||curNPC==5) i=i-1>=0?i-1:0; repaint(); } break; case RIGHT://右键 if(isProMenu) { if(i==2) { j=j+1<11?j+1:0; repaint(); } else if(i==1) { for(int ii=j+1;ii<6;ii++) { if(weapon[ii]!=9) { offY=0; j=ii; break; } } repaint(); } } else if(!isProMenu&&!isTranMenu&&!isFighting&&!isWin&&!isDie&&!isTalking&&strTip==null&&!isGameMenu) { if(moveTask==null) { if(direction/3!=3) { direction=9; repaint(); } else setMoveTask(); } } else if(isAttMenu) { i=i+1<=11?i+1:0; repaint(); } else if(isTalking&&strTip==null)//对话时候的菜单选项 { if(curNPC==6||curNPC==4) i=i+1<=1?i+1:0; else if(curNPC==5) { switch(sn) { case 1: i=i+1<=2?i+1:0; break; case 2: i=i+1<=1?i+1:0; break; default: break; } } repaint(); } break; case FIRE: FIRE(); break; default: switch(keyCode) { case KEY_NUM1://1键取消 // if(isAttMenu&&!isProMenu) // { // isAttMenu=false; // attackNumber=4; // repaint(); // } // else if(isProMenu&&i==2) { gold+=(weapon[j]%3+1)*(weapon[j]%3+1)*100; if(curweapon==weapon[j]) curweapon=9; weapon[j]=9; addPower=0; addMagic=0; addPdP=0; totalPower=basicPower; repaint(0,0,240,309); } break; case -6: FIRE(); break; default: break; } break; } } } public void FIRE() { if(isGameOver){ MenuCanvas.loadResource(); SwordMIDlet.show(SwordMIDlet.menuCanvas); MenuCanvas.se.stopSound(mapPlayer); } if(isGameMenu) { if(i==4) { isGameMenu=!isGameMenu; repaint(); } else if(i==3) { SwordStore store=new SwordStore(); store.save(); store=null; isGameMenu=false; screen=null; MenuCanvas.loadResource(); SwordMIDlet.show(SwordMIDlet.menuCanvas); MenuCanvas.se.stopSound(mapPlayer); } else if(i==0) {if(popup == null)popup = new Popup(); showPopup(helpStr.toCharArray(), Popup.ALT_OK, 0, 0, 0); } else if(i==2) { MenuCanvas.isAudioOn=!MenuCanvas.isAudioOn; if(MenuCanvas.isAudioOn) MenuCanvas.se.playSound(mapPlayer); else MenuCanvas.se.pauseSound(mapPlayer); isGameMenu=false; repaint(); } else { SwordStore store=new SwordStore(); store.save(); store=null; isGameMenu=false; repaint(); } } else if(isProMenu) { if(i==2&&skillpoint>0&&skillArray[j]<10) { if(skillArray[j]==0||level>=3*skillArray[j]) { if(j==9||j==10||j==7) { if(skillArray[j]<5) { skillArray[j]++; skillpoint--; } } else { skillArray[j]++; skillpoint--; } } repaint(0,0,160,128); } else if(i==3) { if(weapon[j]!=9) { curweapon=weapon[j]; addMagic=0; addPower=0; addPdP=0; switch(curweapon) { case 0: addPower=5; stealB=10; break; case 1: addPower=10; stealB=25; break; case 2: addPower=15; stealB=45; break; case 3: addMagic=10; break; case 4: addMagic=20; break; case 5: addMagic=30; break; case 6: addPdP=15; break; case 7: addPdP=25; break; case 8: addPdP=35; break; default: break; } totalPower=basicPower+addPower+addPdP*basicPower/100; if(isFighting) SPI[0].basicPower=totalPower; repaint(); } } } else if(isTranMenu) { if(sl!=i) { if(sl!=0) { if(gold>=100) { gold-=100; changeMap(i); } else { strTip="银两不够"; isTranMenu=false; repaint(); } } else changeMap(i); } else { isTranMenu=false; repaint(); } } else if(isAttMenu) { if((i<11&&skillArray[i]>0)||i==11) setAttack(i); } else if(strTip!=null) { strTip=null; strDlg=null; imgDlg=null; repaint(); } else if(isTalking) { if(curNPC<2) { if(sn==dlgM.length-1) { isTalking=false; dlg[curNPC]=true; imgDlg=null; } else { sn++; createDialogImage(dlgM[sn]); } repaint(); } else switch(curNPC) { case 2: if(sn==2) { dlg[curNPC]=true; imgDlg=null; isTalking=false; changeMap(5); } else { sn++; createDialogImage(dlgM[sn]); repaint(); } break; case 3: if(sn==5) { gold+=10000; isTask2=true; sn++; } else if(sn==6||sn==7) { //removeCommand(con); isTalking=false; dlg[curNPC]=true; imgDlg=null; } else { sn++; createDialogImage(dlgM[sn]); } repaint(); break; case 6://船工 if(dlgMenuChoose==0) { if(hasBoat) { strTip="你已经有船了"; isTalking=false; } else if(gold>=600) { gold-=600; hasBoat=true; isTalking=false; strTip="买卖成功"; } else { strTip="银两不够"; isTalking=false; } } else { isTalking=false; imgDlg=null; } repaint(); break; case 5://洪七公 switch(sn) { case 0: if(dlgMenuChoose==0) { sn=1; dlgMenu=new String[2]; dlgMenu[0]="现在分配"; dlgMenu[1]="以后再说"; } else if(dlgMenuChoose==1) { dlgMenu=null; isTask=true; sn=2; } else { isTalking=false; imgDlg=null; return; } createDialogImage(dlgM[sn]); repaint(); break; case 2: { isTalking=false; imgDlg=null; //removeCommand(con); } repaint(); break; case 1: if(dlgMenuChoose==0) { if(gold>=10000) { gold-=10000; for(int ii=0;ii<11;ii++) { while(skillArray[ii]>0) { skillArray[ii]--; skillpoint++; } } isTalking=false; imgDlg=null; //removeCommand(con); } else { strTip="银两不够"; isTalking=false; } } else { isTalking=false; imgDlg=null; } repaint(); break; default: break; } break; case 4://竞技官 if(dlgMenuChoose==0) { if(gold>=350) { gold-=350; isTalking=false; imgDlg=null; changeMap(6);//进入竞技场 killCount=0; } else { strTip="银两不够"; isTalking=false; } } else { isTalking=false; imgDlg=null; } repaint(); break; default: break; } } else if(isWin) { if(sl!=6) { isWin=false; updateMan=false; winString=new Vector(0,1); repaint(); } else { isWin=false; if(killCount==10) { gold+=10000; changeMap(3); } else repaint(); } } else if(isDie)//死亡后重生 { isDie=false; isFighting=false; life=maxlife; energy=maxenergy; experience-=(experience-getExperience(level))*20/100; gold=gold*70/100; changeMap(0); } else if(curKey==-6) { isGameMenu=true; repaint(); } } public void keyReleased(int keyCode) { int action = getGameAction(keyCode); if(action==Canvas.UP||action==Canvas.DOWN||action==Canvas.LEFT||action==Canvas.RIGHT) { isWalking=false; } } public void drawGameMenu(Graphics g) { g.setColor(0,0,100); g.fillRoundRect(71,73,86,118,30,30); g.setColor(getRandom(255),getRandom(255),getRandom(255)); g.drawRoundRect(71,73,86,118,30,30); g.setColor(0); g.drawRoundRect(70,72,88,120,30,30); g.setColor(getRandom(255),getRandom(255),getRandom(255)); g.drawRoundRect(69,71,90,122,30,30); String[] text=new String[]{"帮助说明","保存游戏",MenuCanvas.isAudioOn?"关闭音效":"打开音效","回主菜单","继续游戏"}; for(int ii=0;ii<5;ii++) { if(i==ii) MenuCanvas.ge.drawStringShadow(g,0x00ff00,0x00ff00,0,text[ii],113,ii*20+80,g.HCENTER|g.TOP); else MenuCanvas.ge.drawStringShadow(g,0,0,-1,text[ii],113,ii*20+80,g.HCENTER|g.TOP); } } public int getRandom(int n) { int r =rand.nextInt(); if(r<0) r=-r; r=r%n; return r; } public void drawWeather(Graphics g1) { switch(weatherTask.s) { case 0://雨天 int energy=-10; if(isWeather) energy=-10+getRandom(5); g1.setColor(-1); for(int j=0;j<14;j++) for(int i=energy+j;i<270;i+=30) { if(getRandom(100)<80) g1.drawLine(i,j*20,i+6,j*20+6); } break; case 1: g1.setColor(-1); if(isWeather) { for(int i=snow.length-1;i>0;i--) { for(int j=0;j=0) snow[0][j]=snow[0][j]*100+getRandom(120); else snow[0][j]=snow[0][j]*100-getRandom(120); } } /*画雪*/ for(int i=0;i=getExperience(level+1)) { level++; skillpoint++; out=true; energy=20*level+20; maxenergy=energy; maxlife=level*level+10*level+60; life=maxlife; basicPower=5*level+2; totalPower=basicPower+addPdP*basicPower/100+addPower; } else break; } experience+=sn; if(out) string.addElement((String)("人物等级提升到第"+String.valueOf(level)+"级"));//更新等级 for(int iii=0;iii<6;iii++) { if(weapon[iii]==9) { int ii=getRandom(100); switch(curEl) { case 2: if(ii<=2&&ii>=0&&!hasWeapon(0)) { weapon[iii]=0; temp="承影剑"; } else if(ii<=6&&ii>=3&&!hasWeapon(3)) { weapon[iii]=3; temp="干将莫邪剑"; } break; case 3: if(ii<=5&&ii>=0&&!hasWeapon(0)) { weapon[iii]=0; temp="承影剑"; } else if(ii<=10&&ii>=6&&!hasWeapon(3)) { weapon[iii]=3; temp="干将莫邪剑"; } else if(ii<=14&&ii>=11&&!hasWeapon(6)) { weapon[iii]=6; temp="赤霄剑"; } break; case 4: if(ii<=7&&ii>=0&&!hasWeapon(0)) { weapon[iii]=0; temp="承影剑"; } else if(ii<=11&&ii>=8&&!hasWeapon(1)) { weapon[iii]=1; temp="纯钧剑"; } else if(ii<=18&&ii>=12&&!hasWeapon(3)) { weapon[iii]=3; temp="干将莫邪剑"; } else if(ii<=25&&ii>=19&&!hasWeapon(6)) { weapon[iii]=6; temp="赤霄剑"; } break; case 5: if(ii<=5&&ii>=0&&!hasWeapon(1)) { weapon[iii]=1; temp="纯钧剑"; } else if(ii<=15&&ii>=6&&!hasWeapon(3)) { weapon[iii]=3; temp="干将莫邪剑"; } else if(ii<=18&&ii>=16&&!hasWeapon(4)) { weapon[iii]=4; temp="龙渊剑"; } else if(ii<=27&&ii>=19&&!hasWeapon(6)) { weapon[iii]=6; temp="赤霄剑"; } break; case 6: if(ii<=8&&ii>=0&&!hasWeapon(1)) { weapon[iii]=1; temp="纯钧剑"; } else if(ii<=14&&ii>=9&&!hasWeapon(4)) { weapon[iii]=4; temp="龙渊剑"; } else if(ii<=17&&ii>=15&&!hasWeapon(7)) { weapon[iii]=7; temp="湛泸剑"; } break; case 7: if(ii<=10&&ii>=0&&!hasWeapon(1)) { weapon[iii]=1; temp="纯钧剑"; } else if(ii<=18&&ii>=11&&!hasWeapon(4)) { weapon[iii]=4; temp="龙渊剑"; } else if(ii<=23&&ii>=19&&!hasWeapon(7)) { weapon[iii]=7; temp="湛泸剑"; } break; case 8: if(ii<=3&&ii>=0&&!hasWeapon(2)) { weapon[iii]=2; temp="鱼肠剑"; } else if(ii<=13&&ii>=4&&!hasWeapon(4)) { weapon[iii]=4; temp="龙渊剑"; } else if(ii<=19&&ii>=14&&!hasWeapon(7)) { weapon[iii]=7; temp="湛泸剑"; } break; case 9: if(ii<=5&&ii>=0&&!hasWeapon(2)) { weapon[iii]=2; temp="鱼肠剑"; } else if(ii<=8&&ii>=6&&!hasWeapon(5)) { weapon[iii]=5; temp="泰阿剑"; } else if(ii<=15&&ii>=12&&!hasWeapon(8)) { weapon[iii]=8; temp="轩辕剑"; } break; case 10: if(ii<=7&&ii>=0&&!hasWeapon(2)) { weapon[iii]=2; temp="鱼肠剑"; } else if(ii<=13&&ii>=8&&!hasWeapon(5)) { weapon[iii]=5; temp="泰阿剑"; } else if(ii<=19&&ii>=14&&!hasWeapon(8)) { weapon[iii]=8; temp="轩辕剑"; } break; default: break; } break; } } if(temp!=null) { string.addElement((String)("获得武器:"+temp)); } if(isTask&&sl!=6&&temp==null) { temp=null; int ii; ii=getRandom(100); if(ii<30) { switch(curEl) { case 4://豺 if(tn[0]<10) { tn[0]++; temp="九花玉露丸"; } break; case 5://狼 if(tn[1]<5) { tn[1]++; temp="通天草"; } break; case 6://虎 if(tn[4]<20&&isTask2) { tn[4]++; temp="虎皮"; } break; case 9://僵尸将军 if(tn[2]<10) { tn[2]++; temp="千年人参"; } break; case 10://Boss if(tn[3]<5) { tn[3]++; temp="灵芝"; } break; default: break; } } if(temp!=null) { string.addElement((String)("获得任务物品:"+temp)); } } temp=null; if(sl==6&&killCount!=10) { string.addElement((String)("还须进行"+toString(10-killCount)+"场战斗")); } if(sl==6&&killCount==10) { string.addElement((String)("获得银子10000两")); } } else { isGameOver = true; } } public void createDialogImage(String s) { strDlg=s; dlgn=10; imgDlg=null; int dw = dlgn*15; int dh = ((s.length()-1)/dlgn+1)*20+3; if(dlgMenu!=null) dh = ((s.length()-1)/dlgn+1)*20+20; imgDlg=Image.createImage(dw,dh); if(dlgMenu!=null)//显示对话菜单 imgDlg=Image.createImage(dw,dh); g1=imgDlg.getGraphics(); g1.setFont(MenuCanvas.mFont); g1.setColor(0x9B7319); g1.fillRect(0,0,dw,dh); g1.setColor(0xffffff); g1.drawRect(0,0,dw-1,dh-1); g1=null; } public void drawDialog(Graphics g) { g.setColor(0xffffff); g.drawImage(imgDlg,w/2-imgDlg.getWidth()/2,h/2-imgDlg.getHeight()/2,0); for(int i=0;i=w/2) { if(x<=W[sl]*16-w/2) x0=x-w/2; else x0=W[sl]*16-w; } else x0=0; if(y>=h/2) { if(y<=H[sl]*16-h/2) y0=y-h/2; else y0=H[sl]*16-h; } else y0=0; is=getClass().getResourceAsStream("/Screen"+toString(sl)+".dat"); readMap(is); if(sl!=6) { is=getClass().getResourceAsStream("/sprite"+toString(sl)+".dat"); readSprite(is); } changeMapTask=null; changeMapTask=new TimerTask(this,13); timer.schedule(changeMapTask,0,200); isChange=true; } public void cancelMove() { moveTask.cancel(); moveTask=null; } public void cancelAttackTask() { attackTask.cancel(); while(attackTask.cancel()) { } attackTask=null; } public void move() { if(direction%3==0&&step==0)//||direction%3==0) { if(getMapMark()>1&&getMapMark()<10)//对话NPC出现的Tile { if(getMapMark()==4) { if(tn[0]==10&&tn[1]==5&&tn[2]==10&&tn[3]==5) message(4); } else message(getMapMark()); cancelMove(); direction=direction/3*3; repaint(); } else if(getMapMark()==99)//场景出入口 { if(hasBoat) { isTranMenu=true; i=0; } else strTip="请去找船工买船"; cancelMove(); direction=direction/3*3; repaint(); } else if(getMapMark()==97) { cancelMove(); if(tn[0]==10&&tn[1]==5&&tn[2]==10&&tn[3]==5&&tn[4]==20) setAttack(1,15); else { isTranMenu=true; direction=direction/3*3; repaint(); } } else if(getMapMark()==98) { cancelMove(); int ii=getRandom(2*sl+1)*10; gold+=ii*(2*sl+1); strTip=ii>0?"获得"+toString(ii*(2*sl+1))+"两银子":"一无所获"; switch(direction/3) { case 1: if(y10&&getMapMark()<21) { setAttack(getEnemyNum(),getMapMark()-10); if(!isFighting) { if(direction%3==0&&step==0) { direction+=1; step=1; } if(direction%3==0&&step==1) { direction+=2; step=0; } if(direction%3==1||direction%3==2) direction=direction/3*3; switch(direction) { case 7://向上1 y-=speed; if(y0>0&&y-y0<=h/2) y0-=speed; repaint(); break; case 4://向下1 y+=speed; if(y0<(H[sl]-(h+15)/16)*16&&y-y0>=h/2) y0+=speed; repaint(); break; case 1://向左1 x-=speed; if(x0>0&&x-x0<=w/2) x0-=speed; repaint(); break; case 10://向右1 x+=speed; if(x0<(W[sl]-w/16)*16&&x-x0>=w/2) x0+=speed; repaint(); break; default://静止状态 repaint(); break; } } else { switch(direction/3) { case 0://向左 x-=16; break; case 1://向下 y+=16; break; case 2://向上 y-=16; break; case 3://向右 x+=16; break; } if(x>=w/2) { if(x<=W[sl]*16-w/2) x0=x-w/2; else x0=W[sl]*16-w; } else x0=0; if(y>=64) { if(y<=H[sl]*16-h/2) y0=y-h/2; else y0=H[sl]*16-h; } else y0=0; } cancelMove(); } else if(getMapMark()==1) { if(direction%3==0&&step==0) { direction+=1; step=1; } else if(direction%3==0&&step==1) { direction+=2; step=0; } else if(direction%3==1||direction%3==2) direction=direction/3*3; switch(direction) { case 7://向上1 y-=speed; if(y0>0&&y-y0<=h/2) y0-=speed; repaint(); break; case 4://向下1 y+=speed; if(y0<(H[sl]-(h+15)/16)*16&&y-y0>=h/2) y0+=speed; repaint(); break; case 1://向左1 x-=speed; if(x0>0&&x-x0<=w/2) x0-=speed; repaint(); break; case 10://向右1 x+=speed; if(x0<(W[sl]-w/16)*16&&x-x0>=w/2) x0+=speed; repaint(); break; default://静止状态 repaint(); break; } } else { moveTask.cancel(); moveTask=null; direction=direction/3*3; repaint(); } } else { if(direction%3==0&&step==0) { direction+=1; step=1; } else if(direction%3==0&&step==1) { direction+=2; step=0; } else if(direction%3==1||direction%3==2) direction=direction/3*3; switch(direction) { case 6: if(step==1)//向上2 { y-=speed; if(y0>0&&y-y0<=h/2) y0-=speed; repaint(); } if(step==0)//向上4 { y-=speed; if(y0>0&&y-y0<=h/2) y0-=speed; if(!isWalking) cancelMove(); repaint(); } break; case 7://向上1 y-=speed; if(y0>0&&y-y0<=h/2) y0-=speed; repaint(); break; case 8://向上3 y-=speed; if(y0>0&&y-y0<=h/2) y0-=speed; repaint(); break; case 3: if(step==1) { y+=speed; if(y0<(H[sl]-(h+15)/16)*16&&y-y0>=h/2) y0+=speed; repaint(); } if(step==0) { y+=speed; if(y0<(H[sl]-(h+15)/16)*16&&y-y0>=h/2) y0+=speed; repaint(); if(!isWalking) cancelMove(); } break; case 4://向下1 y+=speed; if(y0<(H[sl]-(h+15)/16)*16&&y-y0>=h/2) y0+=speed; repaint(); break; case 5://向下2 y+=speed; if(y0<(H[sl]-(h+15)/16)*16&&y-y0>=h/2) y0+=speed; repaint(); break; case 0: if(step==1) { x-=speed; if(x0>0&&x-x0<=w/2) x0-=speed; repaint(); } if(step==0) { x-=speed; if(x0>0&&x-x0<=w/2) x0-=speed; repaint(); if(!isWalking) cancelMove(); } break; case 1://向左1 x-=speed; if(x0>0&&x-x0<=w/2) x0-=speed; repaint(); break; case 2://向左2 x-=speed; if(x0>0&&x-x0<=w/2) x0-=speed; repaint(); break; case 9: if(step==1) { x+=speed; if(x0<(W[sl]-w/16)*16&&x-x0>=w/2) x0+=speed; repaint(); } if(step==0) { x+=speed; if(x0<(W[sl]-w/16)*16&&x-x0>=w/2) x0+=speed; repaint(); if(!isWalking) cancelMove(); } break; case 10://向右1 x+=speed; if(x0<(W[sl]-w/16)*16&&x-x0>=w/2) x0+=speed; repaint(); break; case 11://向右2 x+=speed; if(x0<(W[sl]-w/16)*16&&x-x0>=w/2) x0+=speed; repaint(); break; default://静止状态 repaint(); break; } } } public void setAttack(int k) { attackTask=null; switch(k) { case 0: if(energy>=10*skillArray[0]) { attackTask=new TimerTask(this,4); energy-=10*skillArray[0]; isAttMenu=false; if(isHiding) { isHiding=!isHiding; SPI[0].p=130; } } break; case 1: if(energy>=10*skillArray[1]) { attackTask=new TimerTask(this,5); energy-=10*skillArray[1]; isAttMenu=false; if(isHiding) { isHiding=!isHiding; SPI[0].p=130; } } break; case 2: if(energy>=20*skillArray[2]&&life>=4*skillArray[2]*maxlife/100) { attackTask=new TimerTask(this,6); energy-=20*skillArray[2]; life-=4*skillArray[2]*maxlife/100; SPI[0].life=life; isAttMenu=false; if(isHiding) { isHiding=!isHiding; SPI[0].p=130; } } break; case 3: if(energy>=(20*skillArray[3])) { SPI[1]=new Sprite(8*skillArray[3]*skillArray[3]+40,4*skillArray[3]*skillArray[3]+10); SPI[1].p=120; SPI[1].x=36; SPI[1].y=112+32+40; energy-=20*skillArray[3]; isAttMenu=false; attackNumber=4; repaint(); } break; case 4://召熊 if(energy>=(30*skillArray[4])) { SPI[2]=new Sprite(20*skillArray[4]*skillArray[4]+60,skillArray[4]*skillArray[4]+7); SPI[2].p=100; SPI[2].x=36; SPI[2].y=64+32+40; energy-=30*skillArray[4]; isAttMenu=false; attackNumber=4; repaint(); } break; case 5: if(energy>=30*skillArray[5]) { SPI[3]=new Sprite(10*skillArray[5]*skillArray[5]+40,0); SPI[3].p=110; SPI[3].x=36; SPI[3].y=32+32+40; energy-=30*skillArray[5]; isAttMenu=false; attackNumber=4; repaint(); } break; case 6: if(energy>=5*skillArray[6]) { SPI[0].p=140; if(tran) { tran=!tran; maxlife=level*level+10*level+60; life=life-life*10*skillArray[8]/(100+10*skillArray[8])>maxlife?maxlife:(life-life*10*skillArray[8]/(100+10*skillArray[8])); SPI[0].life=life; basicPower=5*level+2; totalPower=basicPower+addPower+addPdP*basicPower/100; SPI[0].basicPower=totalPower; } isHiding=true; energy-=5*skillArray[6]; count=0; isAttMenu=false; attackNumber=4; repaint(); } break; case 7://遁走 if(energy>=10*skillArray[7]*skillArray[7]) { energy-=10*skillArray[7]*skillArray[7]; if(getRandom(100)<20*skillArray[7]) { isFighting=false; repaint(); attackControlTask.cancel(); attackControlTask=null; for(int ii=0;ii<8;ii++) SPI[ii]=null; if(tran) { tran=!tran; maxlife=20*level+60; life=life-life*10*skillArray[8]/(100+10*skillArray[8])>maxlife?maxlife:(life-life*10*skillArray[8]/(100+10*skillArray[8])); basicPower=3*level+2; totalPower=basicPower+basicPower*addPdP/100+addPower; } repaint(); } else { isAttMenu=false; attackNumber=4; repaint(); } } break; case 8://附身 if(energy>=30+3*skillArray[8]*skillArray[8]&&!tran) { energy-=30+3*skillArray[8]*skillArray[8]; tran=true; if(isHiding) isHiding=!isHiding; SPI[0].p=150; maxlife+=maxlife*10*skillArray[8]/100; life+=life*10*skillArray[8]/100; SPI[0].life=life; basicPower+=basicPower*20*skillArray[8]/100; totalPower=basicPower+addPdP*basicPower/100+addPower; SPI[0].basicPower=totalPower; count=0; isAttMenu=false; attackNumber=4; repaint(); } break; case 9: if(energy>=3*skillArray[9]*skillArray[9]) { energy-=3*skillArray[9]*skillArray[9]; attackTask=new TimerTask(this,10); isAttMenu=false; } break; case 10: if(gold>=20*skillArray[10]*maxenergy/100) { gold-=20*skillArray[10]*maxenergy/100; attackTask=new TimerTask(this,11); isAttMenu=false; } break; case 11: attackTask=new TimerTask(this,0); if(isHiding) isHiding=!isHiding; isAttMenu=false; attackNumber=0; break; case 12: attackTask=new TimerTask(this,9); attackTask.j=attackNumber; break; case 22: attackTask=new TimerTask(this,2); break; case 21: attackTask=new TimerTask(this,1); break; } if(attackTask!=null) { if(attackTask.type==4) timer.schedule(attackTask,0,200); else timer.schedule(attackTask,0,250); } } /*判断怪物掉出的宝是否角色已经拥有*/ boolean hasWeapon(int s) { boolean temp=false; for(int ii=0;ii<6;ii++) { if(weapon[ii]==s) { temp=true; break; } } return(temp); } public void setAttack(int n,int lvl) { if(n!=0) { try { imgAttackBG=Image.createImage("/attackBg"+String.valueOf(getRandom(9))+".png"); } catch(Exception e) { } if(MenuCanvas.isAudioOn) { MenuCanvas.se.closeSound(mapPlayer); attPlayer=MenuCanvas.se.createPlayer("/attack.mid",1000); MenuCanvas.se.playSound(attPlayer); } for(int i=0;i(strPro.length()-1)/8*18) offY=0; g.setClip(0,0,240,309); } public void drawTranMenu(Graphics g) { g.setColor(0,0,100); g.fillRoundRect(71,73,86,120,30,30); g.setColor(getRandom(255),getRandom(255),getRandom(255)); g.drawRoundRect(71,73,86,120,30,30); g.setColor(0); g.drawRoundRect(70,72,88,122,30,30); g.setColor(getRandom(255),getRandom(255),getRandom(255)); g.drawRoundRect(69,71,90,124,30,30); MenuCanvas.ge.drawStringShadow(g,0xff0000,0x00ff00,0x00ff00,"当前所在地:"+mapName[sl],116,48,g.HCENTER|g.TOP); MenuCanvas.ge.drawStringShadow(g,0,0x0000ff,0x00ff00,"请选择你要前往的地方",116,211,g.HCENTER|g.TOP); for(int k=0;k<6;k++) { if(!isTask&&k==4) continue; if(!dlg[2]&&k==5) continue; if(k==i) MenuCanvas.ge.drawStringShadow(g,0,0x0000ff,0x00ff00,mapName[k],113,k*20+90,g.HCENTER|g.TOP); else MenuCanvas.ge.drawStringShadow(g,0x00ff00,0,-1,mapName[k],113,k*20+90,g.HCENTER|g.TOP); } } public void drawProMenu(Graphics g) { g.drawImage(imgProBG,0,0,0); switch(i) { case 0://状态显示 MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"血:"+toString(life)+"/"+toString(maxlife),100,20,0); MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"气:"+toString(energy)+"/"+toString(maxenergy),100,38,0); MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"经验:"+toString(experience)+" / "+toString(getExperience(level+1)),100,56,0); MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"银两:"+toString(gold),100,74,0); MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"攻击力:"+toString(basicPower)+"+"+toString(addPower+basicPower*addPdP/100),100,92,0); MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"等级:"+toString(level),100,110,0); MenuCanvas.ge.drawStringShadow(g,0xffff00,0xffff00,0xff0000,"你可以在这里查看",100,214,0); MenuCanvas.ge.drawStringShadow(g,0xffff00,0xffff00,0xff0000,"尹风的各项属性",100,230,0); break; case 1: String temp=new String(); switch(weapon[j]) { case 0: temp="承影剑"; break; case 1: temp="纯钧剑"; break; case 2: temp="鱼肠剑"; break; case 3: temp="干将莫邪剑"; break; case 4: temp="龙渊剑"; break; case 5: temp="泰阿剑"; break; case 6: temp="赤霄剑"; break; case 7: temp="湛泸剑"; break; case 8: temp="轩辕剑"; break; } if(weapon[j]!=9) { if(curweapon!=weapon[j]) MenuCanvas.ge.drawStringShadow(g,0xff0000,0xff0000,-1,temp,139,16,0); else MenuCanvas.ge.drawStringShadow(g,0x00ff00,0x00ff00,-1,temp,139,16,0); g.setColor(97,66,31); g.fillRect(100,36,112,112); g.setColor(0); g.drawRect(100,36,112,112); g.setColor(-1); g.drawRect(99,35,114,114); g.setColor(0); g.drawRect(98,34,116,116); MenuCanvas.ge.drawClipImage(g,MenuCanvas.imgArrow,105-offX,90,5,10,0,0); MenuCanvas.ge.drawClipImage(g,MenuCanvas.imgArrow,200+offX,90,5,10,5,0); offX+=2; if(offX==4) offX=0; g.drawImage(sword[weapon[j]],110,40,0); } MenuCanvas.ge.drawStringShadow(g,0,0,-1,"绿色为当前装备",94,150,0); MenuCanvas.ge.drawStringShadow(g,-1,-1,0,"可以按"1"卖掉",94,168,0); if(weapon[j]!=9) { g.setColor(255,255,255); switch(weapon[j]) { case 0: strPro="有影无形的长剑,双手合握之中是一截剑柄,只有剑柄不见长剑剑身,见于《列子-汤问》。物理攻击力加5,吸血10%"; break; case 1: strPro="铸剑之时,雷公打铁,雨娘淋水,蛟龙捧炉,天帝装炭。千年赤堇山山破而出锡,万载若耶江江水干涸而出铜。铸剑大师欧冶子承天之命呕心沥血与众神铸磨十载此剑方成。剑成之后,众神归天,赤堇山闭合如初,若耶江波涛再起,欧冶子也力尽神竭而亡,见于《越绝书》。。物理攻击力加10,吸血25%"; break; case 2: strPro="夫专诸之刺王僚,飞鹰击殿,见于司马迁《史记-刺客列传》。物理攻击力加15,吸血45%"; break; case 3: strPro="传干将、莫邪是两把剑,但是没有人能分开它们。干将、莫邪是两个人,同样,也没有人能将他(她)们分开。干将、莫邪是干将、莫邪铸的两把剑。干将是雄剑,莫邪是雌剑。干将是丈夫,莫邪是妻子。技能攻击力加10%"; break; case 4: strPro="欧冶子和干将为铸此剑,凿开茨山,放出山中溪水,引至铸剑炉旁成北斗七星环列的七个池中,是名“七星”。渔丈人自刎于伍子胥示高洁,事见于《吴越春秋》。技能攻击力加20%"; break; case 5: strPro="欧冶子和干将两大剑师联手所铸。晋攻楚三载,楚王此剑退敌,见于《越绝书》。技能攻击力加30%"; break; case 6: strPro="刘邦斩蛇起义之物。饰有七彩珠、九华玉的寒光逼人、刃如霜雪的宝剑,剑身上清晰镌刻着两个篆字:赤霄。基础攻击力加15%"; break; case 7: strPro="湛泸是一把剑,更是一只眼睛。湛泸:湛湛然而黑色也。五金之英,太阳之精,出之有神,服之有威。一把无坚不摧而又不带丝毫杀气的兵器。基础攻击力加25%"; break; case 8: strPro="众神采首山之铜为黄帝所铸,后传与夏禹。剑身一面刻日月星辰,一面刻山川草木。剑柄一面书农耕畜养之术,一面书四海一统之策。基础攻击力加35%"; break; } drawScrollPro(g); } temp=null; break; case 2://技能显示 if(strPro==null) strPro="你可以在这里升级尹风的技能,尹风的技能分召唤系,元素系,特质系和辅助系共四大系十一种,每种技能的效果以及需要的气值都会随着技能等级的提高而提高,同时升级的时候要注意,每种技能在升级后都必须隔3个人物等级才能继续升级"; if(j<4) { MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"落日:"+(skillArray[0]>0?"等级"+toString(skillArray[0]):"未修炼"),100,20,0); MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"乱电:"+(skillArray[1]>0?"等级"+toString(skillArray[1]):"未修炼"),100,45,0); MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"残风:"+(skillArray[2]>0?"等级"+toString(skillArray[2]):"未修炼"),100,70,0); MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"召狼:"+(skillArray[3]>0?"等级"+toString(skillArray[3]):"未修炼"),100,95,0); } else if(j<8) { MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"召熊:"+(skillArray[4]>0?"等级"+toString(skillArray[4]):"未修炼"),100,20,0); MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"召龙:"+(skillArray[5]>0?"等级"+toString(skillArray[5]):"未修炼"),100,45,0); MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"隐身:"+(skillArray[6]>0?"等级"+toString(skillArray[6]):"未修炼"),100,70,0); MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"遁走:"+(skillArray[7]>0?"等级"+toString(skillArray[7]):"未修炼"),100,95,0); } else { MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"附身:"+(skillArray[8]>0?"等级"+toString(skillArray[8]):"未修炼"),100,20,0); MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"治疗:"+(skillArray[9]>0?"等级"+toString(skillArray[9]):"未修炼"),100,45,0); MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"回气:"+(skillArray[10]>0?"等级"+toString(skillArray[10]):"未修炼"),100,70,0); } MenuCanvas.ge.drawStringShadow(g,0,0,-1,"剩余技能点:"+toString(skillpoint),100,120,0); g.setColor(0); g.drawRect(98,20+j%4*25,80,20); g.setColor(-1); g.drawRect(97,19+j%4*25,82,22); g.setColor(0); g.drawRect(96,18+j%4*25,84,24); drawScrollPro(g); break; case 3://任务显示 if(strPro==null) strPro="这里显示的是尹风需要完成的任务,当任务还没有接到时不会在这里显示,接到任务后会显示其完成情况。"; if(isTask) { MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"收集物品",100,13,0); MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"九花玉露丸:"+(tn[0]==10?"完成":toString(tn[0])),100,31,0); MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"通天草:"+(tn[1]==5?"完成":toString(tn[1])),100,49,0); MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"千年人参:"+(tn[2]==10?"完成":toString(tn[2])),100,67,0); MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"灵芝:"+(tn[3]==5?"完成":toString(tn[3])),100,85,0); if(isTask2) MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"虎皮: "+(tn[4]==20?"完成":toString(tn[4])),100,103,0); } drawScrollPro(g); break; } g.setColor(getRandom(255),getRandom(255),getRandom(255)); g.drawRect(14,49+i*58,44,26); g.setColor(getRandom(255),getRandom(255),getRandom(255)); g.drawRect(13,48+i*58,46,28); } public void drawGameOver(Graphics g) { try{ Image img = Image.createImage("/loadBg.png"); g.drawImage(img,0,0,g.TOP|g.LEFT); img = null; }catch(IOException e){} String strOver = "襄樊之战是元朝统治者消灭"+ "南宋统一中国的一次重要战役,是中国历史上宋"+ "元封建王朝更迭的关键一战在尹风的帮助下,郭"+ "大侠从南宋淳三年固守襄阳历时六年,"+ ",到咸淳九年,最后终因孤城无援,"+ "以南宋襄樊失陷而告结束。尹风和晶晶姑娘"+ "退守江南,协助郭靖和丐帮继续抗蒙大业。"+ "敬请等待后续故事。"; int page=1+(strOver.length()-1)/15; for(int iii=0;iii0)||i==11) MenuCanvas.ge.drawStringShadow(g,0x0000ff,0x0000ff,-1,attackMenu[iii],30-i*40+iii*40,21,0); } g.setClip(0,0,240,309); MenuCanvas.ge.drawClipImage(g,MenuCanvas.imgArrow,12-offX,25,5,10,0,0); MenuCanvas.ge.drawClipImage(g,MenuCanvas.imgArrow,224+offX,25,5,10,5,0); offX+=3; if(offX==9) offX=0; } public void drawWin(Graphics g,Vector string) { int h=(string.size()+1)*30; g.setColor(0,0,100); g.fillRoundRect(48,90,156,h,30,30); g.setColor(getRandom(255),getRandom(255),getRandom(255)); g.drawRoundRect(48,90,156,h,30,30); g.setColor(0); g.drawRoundRect(47,89,158,h+2,30,30); g.setColor(getRandom(255),getRandom(255),getRandom(255)); g.drawRoundRect(46,88,160,h+2,30,30); g.setColor(0xffff00); MenuCanvas.ge.drawStringShadow(g,0,0,-1,"战斗胜利",126,96,g.HCENTER|g.TOP); g.setColor(-1); for(int ii=0;ii3) { if(SPI[i].level<4||SPI[i].level>6) { if(SPI[i].level!=15) { g.setClip(SPI[i].x,SPI[i].y,16,32); g.drawImage(atpic,SPI[i].x-SPI[i].p%10*16,SPI[i].y-SPI[i].p/10*32,0); } else { g.setClip(SPI[i].x,SPI[i].y,32,32); g.drawImage(atpic,SPI[i].x,SPI[i].y-SPI[i].p/10*32-SPI[i].p%10*32,0); } } else { g.setClip(SPI[i].x,SPI[i].y,32,16); g.drawImage(atpic,SPI[i].x,SPI[i].y-SPI[i].p/10*32-SPI[i].p%10*16,0); } } else if(i==1) { g.setClip(SPI[1].x,SPI[1].y,32,16); g.drawImage(atpic,SPI[1].x,SPI[1].y-SPI[1].p/10*32-SPI[1].p%10*16,0); } else { g.setClip(SPI[i].x,SPI[i].y,16,32); g.drawImage(atpic,SPI[i].x-SPI[i].p%10*16,SPI[i].y-SPI[i].p/10*32,0); } g.setClip(0,0,240,309); g.setColor(0,0,0); if(i<4&&i!=0) g.drawRect(26,(3-i)*32+15+64+64,5,16); else if(i>=4&&i!=0) g.drawRect(190,(i-4)*32+15+64+108,5,16); g.setColor(255,0,0); if(i>=4) g.fillRect(191,(i-3)*32-16*SPI[i].life/(SPI[i].level*SPI[i].level*15+10)+64+108,4,16*SPI[i].life/(SPI[i].level*SPI[i].level*15+10)-1); else switch(i) { case 1://狼 g.fillRect(27,96-16*SPI[1].life/(8*skillArray[3]*skillArray[3]+40)+64+64,4,16*SPI[1].life/(8*skillArray[3]*skillArray[3]+40)-1); break; case 2://熊 g.fillRect(27,64-16*SPI[2].life/(20*skillArray[4]*skillArray[4]+60)+64+64,4,16*SPI[2].life/(20*skillArray[4]*skillArray[4]+60)-1); break; case 3://龙 g.fillRect(27,32-16*SPI[3].life/(10*skillArray[5]*skillArray[5]+40)+64+64,4,16*SPI[3].life/(10*skillArray[5]*skillArray[5]+40)-1); break; } } } if(spic0!=null) g.drawImage(spic0,sx,sy,0); if(attackTask!=null) { if(attackTask.type==5)//乱电效果 { switch(attackTask.s) { case 2: for(int ii=0;ii<5;ii++) { g.drawImage(spic[1],getRandom(60)+160,0,0); g.drawImage(spic[1],getRandom(60)+160,32,0); } break; case 3: for(int ii=0;ii<5;ii++) { g.drawImage(spic[1],getRandom(60)+160,0,0); g.drawImage(spic[1],getRandom(60)+160,32,0); g.drawImage(spic[1],getRandom(60)+160,64,0); g.drawImage(spic[1],getRandom(60)+160,96,0); } break; case 4: for(int ii=0;ii<5;ii++) { g.drawImage(spic[1],getRandom(60)+160,0,0); g.drawImage(spic[1],getRandom(60)+160,32,0); g.drawImage(spic[1],getRandom(60)+160,64,0); g.drawImage(spic[1],getRandom(60)+160,96,0); g.drawImage(spic[1],getRandom(60)+160,128,0); g.drawImage(spic[1],getRandom(60)+160,160,0); } break; case 5: for(int ii=0;ii<5;ii++) { g.drawImage(spic[1],getRandom(60)+160,0,0); g.drawImage(spic[1],getRandom(60)+160,32,0); g.drawImage(spic[1],getRandom(60)+160,64,0); g.drawImage(spic[1],getRandom(60)+160,96,0); g.drawImage(spic[1],getRandom(60)+160,128,0); g.drawImage(spic[1],getRandom(60)+160,160,0); g.drawImage(spic[1],getRandom(60)+160,192,0); } for(int i=0;i<4;i++) { if(SPI[i+4]!=null) { if(SPI[i+4].level!=15) SPI[i+4].life-=(2*skillArray[1]*skillArray[1]+10)*(100+addMagic)/100; } } break; case 6: for(int i=0;i<4;i++) { if(SPI[i+4]!=null) { if(SPI[i+4].life<=0) { sn+=100*SPI[i+4].level*SPI[i+4].level/level; nn+=4*SPI[i+4].level*SPI[i+4].level; SPI[i+4]=null; } } } break; case 7: attackNumber=4; cancelAttackTask(); repaint(); break; default: break; } } else if(attackTask.type==6)//残风效果 { switch(attackTask.s) { case 2: for(int ii=0;ii<6;ii++) { g.drawImage(spic[2],50,getRandom(128),0); g.drawImage(spic[2],82,getRandom(128),0); } break; case 3: for(int ii=0;ii<6;ii++) { g.drawImage(spic[2],50,getRandom(128),0); g.drawImage(spic[2],82,getRandom(128),0); g.drawImage(spic[2],114,g
更多项目进度详情分享:智能小车开源项目文章汇总 我们为什么要做这件事? 困境:“跪求指点”的菜鸟一年比一年多,有空搭理菜鸟的大神一年比一年少。 原因:很多时候不是大神不肯帮忙,而是各种零散、离奇、重复的问题,浇灭了他们“扶弱济贫”的心。 对策:电路城团队深谙两方的急迫和苦衷,作为一个技术交流平台应有的责任,于是有了《来实战》的栏目构想,即每期选定一个富有启发性和趣味性的开源项目,由硬件设计大神带队,引领一批自愿报名加入的同道爱好者,从项目分析、思路梳理开始,逐步完成动手实践、项目调试,直到最后的完美再现和更进一步的功能升级。我们期望,今天的新手菜鸟,能用自己的勤勉好学,得到大神更多的关注和指导,更快加入硬件高手的行列;我们也期望,受益于这个项目的人们,也将更愿意帮助那些陷入迷茫的曾经的自己。 支持:电路城的美国兄弟工程师交流平台hackaday(www.hackaday.com)和摩尔吧视频平台(https://www.moore8.com/)... 关于开源项目,我们计划这样来操作: 1.对标摩尔吧中的中相关主题智能小车项目(基于恩智浦平台智能汽车),我们这次用基于意法半导体的STM32平台来打造多功能智能小车,最终实物性能如何?基于意法半导体平台的智能小车PK恩智浦智能小车,谁更胜一筹?电路城开源项目组现在开始就通过逐步实操并最终打造出来,最后实物演示操作对比。此外,我们将预留资源,增加创意点的功能:红外或者超声波避障、摄像头、激光测距、舵机等等(到时根据实际进度会有一定取舍调整)。 2.项目更新进度:每两天在《来实战》栏目上更新设计进度内容,在工程没有实质性进度的时候也可以在论坛发帖分享进行实施困难点、设计技术难点和原理讲解及器件分析等。 3.建立对应项目讨论群。利用现有已建立的技术Q群资源,我们在做每一个不同主题方向的项目时,为方便讨论同时活跃Q群用户,欢迎更多志同道合的小伙伴加进来参加开源项目讨论或给我们提供建议。 4.采购设计工具 工具:电焊台(刀头、尖头)、焊锡丝、吸锡器、助焊膏、烙铁架子带夹子、松香、热熔胶枪、螺丝刀、万用表、剪钳、镊子、钳子、海绵、美工刀、元器件收纳盒、手持钻孔机等等,以后可以慢慢完善。示波器以及信号源、多功能电源。 元器件及材料:采购电子元器件以及打板。 5.我们会定期举办开源项目直播交流,或制作一些项目设计过程中的小视频,在项目交流群中与大家分享,感兴趣的小伙伴马上加入我们吧。 6.建立开源项目贡献者名单荣誉榜,不定期在本开源项目页面更新。项目结束后,对该开源项目贡献突出的小伙伴,我们评选出“开源之星”给予神秘大奖奖励。开源项目贡献者名单会被注明在最终的开源项目方案中。 7.期待更多的志同道合的技术大咖加入我们“开源项目智囊团”,出谋划策,为开源贡献自己应有的力量。 8.这是一个开源项目,项目最终会被分享上传到“电路城-电路方案”频道,供大家免费下载。 智能小车开源项目开发周期 计划2020.3.5~2020.4.30内完成。 项目主要有以下几个阶段(每个阶段我们还会就开发过程中遇到的一些有价值的开发难点或经验教训,以直播的形式在摩尔吧开播,具体主题和时间后期持续更新,感兴趣的小伙伴可以关注下哈~): 第一阶段:设计的要求及技术指标 -硬件系统(确定硬件设计思路,出总体框图,完成主要器件选型及相关资料查找); -软件系统(确定程序流程框图,查看相关示例程序,一般传感器、相关模块会给示例程序); -设计方案介绍(整体设计方案的介绍,以及相关方案的对比); -工作原理介绍及说明(介绍功能参数、方案原理、相关科普); 第二阶段:硬件系统设计 -硬件系统各模块功能介绍(所用到的功能模块、传感器、少见器件学习以及出文章介绍); -原理图、PCB图或仿真图绘制(完成原理图设计,需制作实物还需进行PCB设计); -元器件选型与BOM表(跟据原理图设计同步确定元器件选型,给出具体BOM表); 第三阶段:软件系统设计 -使用单片机资源情况(单片使用资源介绍,完成一些基础的讲解,还有相关芯片器件); -软件系统各模块功能介绍(各功能模块程序设计流程图,程序实现原理); -程序编写及清单(进行总的程序编写,以及初步调试); 第四阶段:实物制作 -焊接(待元器件集齐,打板完成,进行焊接以及相关结构制作,模型安装等); -软件调试; -硬件调试(结合软硬件调试,完成程序修改,确保功能实现,验证硬件部分没有问题); -设计结果分析(测试功能、验证相关参数,有什么不足以及改正,对做的不好的地方留时间补救); -测试过程(完整测试的发表,实测); 第五阶段:项目总结 -完成知识总结等收尾工作; -整理打包完整的开源方案所有资料; -开源项目突出贡献者名单公布及颁发奖品。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧