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

求JAVA大神帮忙解决下这个有关问题

2012-04-24 
求JAVA大神帮忙解决下这个问题鄙人做了个坦克大战的小游戏,相信很多大神们都做过,但是鄙人的炮筒就是显示

求JAVA大神帮忙解决下这个问题
鄙人做了个坦克大战的小游戏,相信很多大神们都做过,但是鄙人的炮筒就是显示不出来...求好心人指点,本人学生新手,就这点分了,全拿出来了。
1,目前共三个class文件,分别为TankClient,Tank,Missile....
2,疑问所在:我的drawLine()画不出直线。。。
3,疑问来源:case D:  
System.out.println("炮筒方向开始调用--下!");
  g.drawLine(x+Tank.TKLENGTH/2, y+Tank.TKWIDTH/2, x+Tank.TKLENGTH/2,y+Tank.TKWIDTH ); //就是画不出来! 
System.out.println("炮筒方向调用结束--下!");
3.11简要说明:dir坦克当前方向。PTdir炮筒当前方向。fire()开火,setlocation()调整当前方向。命名做到见名知意。

4,原先的3个文件的代码:
 ①TankClient类:
import java.awt.*;
import java.awt.event.*;

public class TankClient extends Frame {

Tank mytank=new Tank(50,50,this);
Missile mis=null;

public void paint(Graphics g) {
mytank.drawTank(g);
if(mis!=null) mis.drawMissile(g);

}

public void launchFrame(){
this.setLocation(40, 30);
this.setSize(800, 600);
this.setVisible(true);
this.setResizable(false);
this.setBackground(Color.green);
this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
this.addKeyListener(new KeyMoniter());
new Thread(new PaintThread()).start();

}

public static void main(String[] args) {
TankClient tc =new TankClient();
tc.launchFrame();  
 

}
private class PaintThread implements Runnable{

public void run() {

while(true){
repaint();
try {
Thread.sleep(35);
} catch (InterruptedException e) {

e.printStackTrace();
}
}
}

}  

private class KeyMoniter extends KeyAdapter{


public void keyPressed(KeyEvent e) {
mytank.keyPressed(e);
  //mis.keyPressed(e);
}

public void keyReleased(KeyEvent e) {
mytank.keyReleased(e);
}
  }


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


public class Tank {
  private int x,y;
  public static final int XSPEED=5,YSPEED=5;
  public static final int TKLENGTH=30,TKWIDTH=30;
  private boolean BL,BR,BU,BD;
  TankClient tc;
   
  enum Direction{U,D,L,R,LU,RU,RD,LD,STOP};  

private Direction dir=Direction.STOP;
Direction PTdir=Direction.D;
   
  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.tc=tc;
  }
  
  Missile fire(){
int x=this.x+Tank.TKLENGTH/2;
int y=this.y+Tank.TKWIDTH/2;
Missile mis=new Missile(x,y,PTdir);
return mis;

}

  public void drawTank(Graphics g){

Color c=g.getColor();
g.setColor(Color.red);
g.fillOval(x, y, TKLENGTH, TKWIDTH);
g.setColor(c);

//System.out.println("炮筒方向开始调用");
g.drawLine(x+Tank.TKLENGTH/2,y+Tank.TKWIDTH/2,x+Tank.TKLENGTH/2,y+Tank.TKWIDTH );
//g.setColor(Color.black);
switch(PTdir){  
case U:
g.drawLine(x+Tank.TKLENGTH/2,y+Tank.TKWIDTH/2,x+Tank.TKLENGTH/2,y);
System.out.println("炮筒方向开始调用--上!");  
break;
case D:  
System.out.println("炮筒方向开始调用--下!");
g.setColor(Color.black);
  g.drawLine(x+Tank.TKLENGTH/2, y+Tank.TKWIDTH/2, x+Tank.TKLENGTH/2,y+Tank.TKWIDTH );
   
System.out.println("炮筒方向调用结束--下!");  
break;
case L:  
g.drawLine(x+Tank.TKLENGTH/2, y+Tank.TKWIDTH/2, x,y+Tank.TKWIDTH/2 );
 
break;


case R:  
g.drawLine(x+Tank.TKLENGTH/2, y+Tank.TKWIDTH/2, x+Tank.TKLENGTH,y+Tank.TKWIDTH/2 );
 
break;
case LU: 
g.drawLine(x+Tank.TKLENGTH/2, y+Tank.TKWIDTH/2, x,y);
break;
case RU: 
g.drawLine(x+Tank.TKLENGTH/2, y+Tank.TKWIDTH/2, x+Tank.TKLENGTH,y );
break;
case RD:  
g.drawLine(x+Tank.TKLENGTH/2, y+Tank.TKWIDTH/2, x+Tank.TKLENGTH,y+Tank.TKWIDTH );
break;
case LD: 
g.drawLine(x+Tank.TKLENGTH/2, y+Tank.TKWIDTH/2, x,y+Tank.TKWIDTH);  
break;  
}
move();

  }

void move(){
 
switch(dir){  
 
case U: y-=XSPEED;
break;
case D: y+=XSPEED;
break;
case L: x-=XSPEED;
break;
case R: x+=XSPEED;
break;
case LU: x-=XSPEED;
y-=XSPEED;
break;
case RU: x+=XSPEED;
y-=XSPEED;
break;
case RD: x+=XSPEED;
y+=XSPEED;
break;
case LD: x-=XSPEED;
y+=XSPEED;  
break;  
case STOP:
break;
 
}
if(this.PTdir!=Direction.STOP) {
this.PTdir=this.dir;
System.out.println("坦克移动方向为子弹射出方向!");
}
}

public void keyPressed(KeyEvent e) {
int key=e.getKeyCode();
switch(key){
case KeyEvent.VK_RIGHT:
BR=true;
break;
 
case KeyEvent.VK_LEFT:
BL=true;
break;
 
case KeyEvent.VK_UP:
BU=true;
break;
 
case KeyEvent.VK_DOWN:
BD=true;
break;
case KeyEvent.VK_SPACE:
tc.mis=fire();
break;
}
setLocation();
//System.out.println(".........KeyPressed()");
}

public void keyReleased(KeyEvent e) {
int key=e.getKeyCode();
if(key==KeyEvent.VK_RIGHT){
BR=false;
}
if(key==KeyEvent.VK_LEFT){
BL=false;
}
if(key==KeyEvent.VK_UP){
BU=false;
}
if(key==KeyEvent.VK_DOWN){
BD=false;
}
 
setLocation();
}

void setLocation(){
if(!BL && !BR && !BU && !BD) dir=Direction.STOP;
else if( BL && !BR && !BU && !BD) dir=Direction.L;
else if(!BL && BR && !BU && !BD) dir=Direction.R;
else if(!BL && !BR && BU && !BD) dir=Direction.U;
else if(!BL && !BR && !BU && BD) dir=Direction.D;
else if(BL && !BR && BU && !BD) dir=Direction.LU;
else if(BL && !BR && !BU && BD) dir=Direction.LD;
else if(!BL && BR && BU && !BD) dir=Direction.RU;
else if(!BL && BR && !BU && BD) dir=Direction.RD;
//System.out.println("setLocation() 可用"); 
}



}

③Missile类:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;


public class Missile {
  int x,y; Tank.Direction dir;
  private static final int XSPEED=10;
  private static final int YSPEED=10;
  public static final int LENGTH=10;
public static final int WIDTH=10;

public Missile(int x,int y,Tank.Direction dir) {
this.x=x; this.y=y;this.dir=dir;
}
public void drawMissile(Graphics g){
//System.out.println("子弹drawMissile()开始调用!");
Color c=g.getColor();
g.setColor(Color.black);
g.fillOval(x, y, LENGTH, WIDTH);
g.setColor(c);
move();
//System.out.println("子弹drawMissile()调用结束!");


}

void move(){
//System.out.println("子弹move()开始调用!");
switch(dir){  
 
case U: y-=XSPEED;
//System.out.println("子弹移动开始调用--上!");
break;
case D: y+=XSPEED;
break;
case L: x-=XSPEED;
break;
case R: x+=XSPEED;
break;
case LU: x-=XSPEED;
y-=XSPEED;
break;
case RU: x+=XSPEED;
y-=XSPEED;
break;
case RD: x+=XSPEED;
y+=XSPEED;
break;
case LD: x-=XSPEED;
y+=XSPEED;  
break;

}
//System.out.println("子弹move()调用结束!"); 
}  

}

[解决办法]
//if(this.PTdir!=Direction.STOP) {
if(this.dir!=Direction.STOP) {
this.PTdir=this.dir;
System.out.println("坦克移动方向为子弹射出方向!");
}

热点排行