netenemysprite.java
来自「j2me的坦克大战 元代码 单机版和蓝牙联网版」· Java 代码 · 共 416 行 · 第 1/2 页
JAVA
416 行
public void setLifes(int lifes){//初始化生命数,在EnemyManager类设置 this.lifes = lifes; } public boolean canRestart(){ return (lifes>0); } public void restart(int birthPlace){//重置位置,HP值,方向 if(HP >0 || !canRestart()) return;//生命数为0或还活着,就无法restart() //出生前判断出生位置有没有坦克 //遍历所有玩家坦克 for(int i=0;i<us.length;i++){ if(us[i].getHP()>0){ switch(birthPlace){//坦克出生3个位置之一 case(1):if(us[i].getRefPixelX()<X1+13 && us[i].getRefPixelY()<Y1+13 ){return;} else setRefPixelPosition(X1,Y1);break; case(2):if(us[i].getRefPixelX()>X2-13 && us[i].getRefPixelX()<X2+13 && us[i].getRefPixelY()<Y2+13 )return; else setRefPixelPosition(X2,Y2);break; case(3):if(us[i].getRefPixelX()>X3-13 && us[i].getRefPixelY()<Y3+13 )return; else setRefPixelPosition(X3,Y3);break; } } } //遍历所有除自己以外的敌人坦克 for(int i=0;i<es.length;i++){ if(es[i].getHP()>0 && this != es[i]) switch(birthPlace){//坦克出生3个位置之一 case(1):if(es[i].getRefPixelX()<X1+13 && es[i].getRefPixelY()<Y1+13 )return; else setRefPixelPosition(X1,Y1);break; case(2):if(es[i].getRefPixelX()>X2-13 && es[i].getRefPixelX()<X2+13 ||es[i].getRefPixelY()<Y2+13 )return; else setRefPixelPosition(X2,Y2);break; case(3):if(es[i].getRefPixelX()>X3-13 && es[i].getRefPixelY()<Y3+13 )return; else setRefPixelPosition(X3,Y3);break; } } //如:指定位置是3,判断,然后可以出生则出生,不可则return了 // System.out.println("2个for完了"); this.setTransform(Sprite.TRANS_NONE); curDirection=Canvas.DOWN; nextDirection=Canvas.DOWN; //isNew = true; lifes--; //添加到画布管理器 setVisible(true); layerManager.insert(this,0); //HP>0,让run if(type==1 || type==3)HP=100;//普通坦克 红色坦克 HP=100 else if(type==2)HP=200;//绿色坦克 HP=200 } public void run(){ while(!gameover){ if(!interrupt){ if(HP>0) go(); } int t; if(type==1 || type==2) t=50;//普通 绿色 else t=35;//红色 try { Thread.sleep(t); } catch (InterruptedException ex) { ex.printStackTrace(); } } } private void go(){//坦克自由行走,走一步, switch(nextDirection){ case GameCanvas.DOWN: //如果跟现在方向一样,不转 //如果跟现在方向不一样,转 if(nextDirection != curDirection){ this.setTransform(Sprite.TRANS_NONE); curDirection = GameCanvas.DOWN; } //行走一步 this.move(0, SPEED); //若碰撞,改变nextDirection if (this.collides() == 2){//普通碰撞 this.move(0, -SPEED); try{Thread.sleep(300);} catch(InterruptedException e){e.printStackTrace();} this.nextDirection = GameCanvas.LEFT; } break; case GameCanvas.UP: //如果跟现在方向一样,不转 //如果跟现在方向不一样,转 if(nextDirection != curDirection){ this.setTransform(Sprite.TRANS_ROT180); curDirection = GameCanvas.UP; } //行走一步 this.move(0, -SPEED);{ if (this.collides() == 2){//普通碰撞 this.move(0, SPEED); try{Thread.sleep(400);} catch(InterruptedException e){e.printStackTrace();} this.nextDirection = GameCanvas.RIGHT; } }break; case GameCanvas.LEFT: //如果跟现在方向一样,不转 //如果跟现在方向不一样,转 if(nextDirection != curDirection){ this.setTransform(Sprite.TRANS_ROT90); curDirection = GameCanvas.LEFT; } //行走一步 this.move(-SPEED, 0);{ if (this.collides() == 2){//普通碰撞 this.move(SPEED,0); try{Thread.sleep(500);} catch(InterruptedException e){e.printStackTrace();} this.nextDirection = GameCanvas.UP; } }break; case GameCanvas.RIGHT: //如果跟现在方向一样,不转 //如果跟现在方向不一样,转 if(nextDirection != curDirection){ this.setTransform(Sprite.TRANS_ROT270); curDirection = GameCanvas.RIGHT; } //行走一步 this.move(SPEED, 0);{ if (this.collides() == 2){//普通碰撞 this.move(-SPEED,0); try{Thread.sleep(600);} catch(InterruptedException e){e.printStackTrace();} this.nextDirection = GameCanvas.DOWN; } }break; }//switch }//线程,偶尔改变一下坦克方向// private class ChangeDirectionThread extends Thread {//// public ChangeDirectionThread() {// }// public void run() {// //修改nextDirection不可以跟curDirection相同(或者用同步)// while(!gameover){// try {// r.setSeed(System.currentTimeMillis());// int n = Math.abs((int)(r.nextInt(1000)+this.hashCode()));// Thread.sleep(n%3*2000+1000);//睡1至7秒// } catch (InterruptedException e) {// //System.out.println("change线程睡眠中被打断,结束run");// } // if(!interrupt&&!gameover){// if(HP>0){//如果HP>0 改变方向// int newDirection=curDirection;// int n = Math.abs((int)(r.nextInt(1000)+System.currentTimeMillis()));// switch(n%4){// case 0:newDirection=Canvas.UP;break;// case 1:newDirection=Canvas.DOWN;break;// case 2:newDirection=Canvas.LEFT;break;// case 3:newDirection=Canvas.RIGHT;break;// }////System.out.println(this.getName()+" r="+ n%4);// NetEnemySprite.this.nextDirection=newDirection; // }// }//if// // }//while// // }//// }//线程,偶尔发射一下炸弹// private class ShootThread extends Thread {//// public ShootThread() {// }// public void run() {// while(!gameover){// try {// r.setSeed(System.currentTimeMillis());// int n = Math.abs((int)(r.nextInt(1000)+this.hashCode()));// //System.out.println(this.getName()+" r="+ n);// Thread.sleep(n%5*2000+5000);//睡5至15秒// }catch (InterruptedException e) {// e.printStackTrace();// } // if(!interrupt&&!gameover){// if(HP>0)fire();// }// }// // }//// } }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?