首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

在做马士兵的坦克大战,做到第十一个版本了。坦克不发炮弹,空指针错误,望指导

2012-09-15 
在做马士兵的坦克大战,做到第十一个版本了。坦克不发炮弹,空指针异常,望指导在做马士兵的坦克大战,做到第十

在做马士兵的坦克大战,做到第十一个版本了。坦克不发炮弹,空指针异常,望指导
在做马士兵的坦克大战,做到第十一个版本了。坦克不发炮弹,空指针异常,望指导 

我看了一个钟头也没看出哪里空指针异常。各位帮我瞅瞅。 

[code=Java][/code]

TankClient类: 
import java.awt.Color; 
import java.awt.Frame; 
import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 

class TankClient extends Frame  

public static final int GAME_WIDTH=800; 
public static final int GAME_HIGHT=600; 

Tank tank=new Tank(50, 50,this); 
Misssile misssile=null; 
Image offscreenImage =null; 



public void paint(Graphics g) { 
tank.draw(g); 
if(misssile!=null) 
misssile.draw(g); 

}  

public void update(Graphics g) { 
if(offscreenImage==null) 

offscreenImage=this.createImage(GAME_WIDTH,GAME_HIGHT); 

Graphics gofferScreen=offscreenImage.getGraphics(); 
Color c=gofferScreen.getColor(); 
gofferScreen.setColor(Color.GREEN); 
gofferScreen.fillRect(0, 0, GAME_WIDTH, GAME_HIGHT); 
paint(gofferScreen); 
g.drawImage(offscreenImage, 0, 0, null); 

TankClient () 

setBounds(10,10,GAME_WIDTH,GAME_HIGHT); 
setVisible(true); 
setTitle( "TankWar "); 
setResizable(false); 
setBackground(Color.GREEN); 
this.addKeyListener(new KeyMonitor()); 
this.addWindowListener(new WindowAdapter() { 
public void windowClosing(WindowEvent e) { 
System.exit(0); 

}); 
new Thread(new paintThread()).start(); 


public static void main(String[] args)  

TankClient frame=new TankClient(); 


private class paintThread implements Runnable 

public void run() { 
while(true) 

repaint(); 
System.out.println( "现车不停重画 "); 
try { 
Thread.sleep(10); 
} catch (InterruptedException e) { 
e.printStackTrace(); 








private class KeyMonitor extends KeyAdapter 


public void keyReleased(KeyEvent e) { 
tank.keyReleased(e); 


public void keyPressed(KeyEvent e) { 
tank.keyPressed(e); 







Tank类: 
import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.event.KeyEvent; 


public class Tank {
public static final int XSPEED=5; 
public static final int YSPEED=5; 

TankClient client=null; 
private int x,y; 

private boolean bL=false,bU=false,bR =false,bD=false; 
enum Direction {L,LU,U,RU,R,RD,D,LD,STOP}; 

private Direction dir=Direction.STOP;

public Tank(int x, int y)  

this.x = x; 
this.y = y; 

public Tank(int x, int y,TankClient tc)  

this.x = x; 
this.y = y; 
this.client=client; 

public void draw(Graphics g) 

Color c=g.getColor(); 
g.setColor(Color.RED); 
g.fillOval(x, y, 30, 30); 


g.setColor(c); 
move(); 


public void move () 

switch(dir) 

case L: 
x -= XSPEED; 
break; 
case LU: 
x -= XSPEED; 
y -= YSPEED; 
break; 
case U: 
y -= YSPEED; 
break; 
case RU: 
x += XSPEED; 
y -= YSPEED; 
break; 
case R: 
x += XSPEED; 
break; 
case RD: 
x += XSPEED; 
y += YSPEED; 
break; 
case D: 
y += YSPEED; 
break; 
case LD: 
x -= XSPEED; 
y += YSPEED; 
break; 
case STOP: 
break; 




public void keyPressed(KeyEvent e) { 
int key = e.getKeyCode(); 
switch(key) { 
case KeyEvent.VK_SPACE: 
client.misssile = fire(); 
break; 
case KeyEvent.VK_LEFT : 
bL = true; 
break; 
case KeyEvent.VK_UP : 
bU = true; 
break; 
case KeyEvent.VK_RIGHT : 
bR = true; 
break; 
case KeyEvent.VK_DOWN : 
bD = true; 
break; 

locateDirection(); 

public void keyReleased(KeyEvent e) { 
// TODO Auto-generated method stub 
int key = e.getKeyCode(); 
switch(key) { 
case KeyEvent.VK_LEFT : 
bL = false; 
break; 
case KeyEvent.VK_UP : 
bU = false; 
break; 
case KeyEvent.VK_RIGHT : 
bR = false; 
break; 
case KeyEvent.VK_DOWN : 
bD = false; 
break; 


locateDirection(); 



void locateDirection() { 
if(bL && !bU && !bR && !bD) dir = Direction.L; 
else if(bL && bU && !bR && !bD) dir = Direction.LU; 
else if(!bL && bU && !bR && !bD) dir = Direction.U; 
else if(!bL && bU && bR && !bD) dir = Direction.RU; 
else if(!bL && !bU && bR && !bD) dir = Direction.R; 
else if(!bL && !bU && bR && bD) dir = Direction.RD; 
else if(!bL && !bU && !bR && bD) dir = Direction.D; 
else if(bL && !bU && !bR && bD) dir = Direction.LD; 
else if(!bL && !bU && !bR && !bD) dir = Direction.STOP; 

public Misssile fire() { 

Misssile m = new Misssile(x, y, dir); 
return m; 




Misssile类: 

import java.awt.Color; 
import java.awt.Graphics; 


public class Misssile { 

public static final int XSPEED=10; 
public static final int YSPEED=10; 
private int x,y; 
Tank.Direction dir; 
public Misssile(int x, int y,Tank.Direction dir) { 
super(); 
this.x = x; 
this.y = y; 
this.dir = dir; 

public void draw (Graphics g) 

Color c =g.getColor(); 
g.setColor(Color.BLACK); 
g.fillOval(x, y, 10, 10); 
g.setColor(c); 


move(); 


public void move () 

switch(dir) 

case L: 
x -= XSPEED; 
break; 
case LU: 
x -= XSPEED; 
y -= YSPEED; 
break; 
case U: 
y -= YSPEED; 
break; 
case RU: 
x += XSPEED; 
y -= YSPEED; 
break; 
case R: 
x += XSPEED; 
break; 
case RD: 
x += XSPEED; 
y += YSPEED; 
break; 
case D: 
y += YSPEED; 
break; 
case LD: 
x -= XSPEED; 
y += YSPEED; 
break; 






谢谢




[解决办法]
楼上真相了
[解决办法]
8楼真相

热点排行