📄 enemysprite.java
字号:
//this.bullet.alive = true; }//发射导航弹 } 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); EnemySprite.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%3*2000+1000);//睡2至12秒 }catch (InterruptedException e) { e.printStackTrace(); } if(!interrupt&&!gameover){ if(HP>0)fire(); } } } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -