求助 坦克大战项目的问题

青麦麦先森 2014-03-23 05:38:57
我是一个初学者 想通过写一个小项目复习J2SE的知识 就选了马士兵的坦克大战项目 但是写到一半的时候出了问题 问题就是
坦克在走的时候子弹打不出来 就是不能边打边走 坦克STOP的时候却可以打出子弹 谢谢
...全文
167 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
青麦麦先森 2014-03-23
  • 打赏
  • 举报
回复
引用 4 楼 RunZhi1989 的回复:
擦,我专门下载了jre和eclipse帮你调试。 哈哈哈!(原谅我笑了)。 你这代码没有问题,你说的问题是因为Tank和Missile的速度一样,同时移动时,Missile被Tank挡住了,你改一下Missile的速度就好了。
55555555555555555555555 原谅我错了一天 哭都哭不出来 这种问题
LoopJump 2014-03-23
  • 打赏
  • 举报
回复
你这个问题就那么几种情况: 键盘事件没有响应, 键盘事件响应了,但是fire()函数有问题, fire没有问题,那就是paint函数的问题。 一层层查,就好了。
LoopJump 2014-03-23
  • 打赏
  • 举报
回复
擦,我专门下载了jre和eclipse帮你调试。 哈哈哈!(原谅我笑了)。 你这代码没有问题,你说的问题是因为Tank和Missile的速度一样,同时移动时,Missile被Tank挡住了,你改一下Missile的速度就好了。
青麦麦先森 2014-03-23
  • 打赏
  • 举报
回复
package com.google.www;

import java.awt.*;

import com.google.www.Tank.direction;

public class Missile {
	
	int x,y;
	Tank.direction dir;
	
	public static final int XSPEED = 5;
	public static final int YSPEED = 5;
	
	public static final int WIGHT = 10;
	public static final int HIGHT = 10;
	
	
  public Missile(int x, int y, direction dir) {
		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,WIGHT, HIGHT);
	 g.setColor(c);
	 move(); 
  }
  private void move() {
		switch( dir){
		case U:
			y -=YSPEED;break;
		case RU:
			y -= YSPEED;
			x += XSPEED;
			break;
		case R:
			x += XSPEED;
			break;
		case RD:
			y += YSPEED;
			x += XSPEED;
			break;
		case D:
			y += YSPEED;
			break;
		case LD:
			y += YSPEED;
			x -= XSPEED;
			break;
		case L:
			x -= XSPEED;
			break;
		case LU:
			y -= YSPEED;
			x -= XSPEED;
			break;
      }

  }
}
青麦麦先森 2014-03-23
  • 打赏
  • 举报
回复
package com.google.www;

import java.awt.*;
import java.awt.event.KeyEvent;

public class Tank {
	private int x,y;
	
	private static final int XSPEED = 5;
	private static final int YSPEED = 5;
	private static final int WIGHT = 40;
	private static final int HIGHT = 40;
	
	enum direction {U,RU,R,RD,D,LD,L,LU,STOP};
    private boolean bU = false,bD = false, bL = false, bR = false;	
   
    direction dir = direction.STOP;
    direction ptdir = direction.D;
	TankClient tc;
	
	
	public Tank(int x, int y) {
		this.x = x;
		this.y = y;
	}
    
	public Tank(int x, int y, TankClient tc) {
        this(x,y);
		this.tc = tc;
	}
	public void draw(Graphics g){
		Color c = g.getColor();
		g.setColor(Color.RED);
		g.fillOval(x, y, WIGHT, HIGHT);
		g.setColor(c);
		
		switch( ptdir){
		case U:
			g.drawLine(x +Tank.WIGHT/2, y+Tank.HIGHT/2, x +Tank.WIGHT/2, y);
			break;
		case RU:
			g.drawLine(x +Tank.HIGHT/2, y+Tank.WIGHT/2, x +WIGHT, y);
			break;
		case R:
			g.drawLine(x +Tank.HIGHT/2, y+Tank.WIGHT/2, x + Tank.WIGHT, y + Tank.HIGHT/2);
			break;
		case RD:
			g.drawLine(x +Tank.HIGHT/2, y+Tank.WIGHT/2, x +Tank.WIGHT, y + Tank.HIGHT);
			break;
		case D:
			g.drawLine(x +Tank.HIGHT/2, y+Tank.WIGHT/2, x +Tank.WIGHT/2, y+Tank.HIGHT);
			break;
		case LD:
			g.drawLine(x +Tank.HIGHT/2, y+Tank.WIGHT/2, x , y + Tank.HIGHT);
			break;
		case L:
			g.drawLine(x +Tank.HIGHT/2, y+Tank.WIGHT/2, x , y+Tank.HIGHT/2);
			break;
		case LU:
			g.drawLine(x +Tank.HIGHT/2, y+Tank.WIGHT/2, x , y);
			break;
		}
		
		move();
	
	}
    
	void move () {
		switch( dir){
		case U:
			y -=YSPEED;break;
		case RU:
			y -= YSPEED;
			x += XSPEED;
			break;
		case R:
			x += XSPEED;
			break;
		case RD:
			y += YSPEED;
			x += XSPEED;
			break;
		case D:
			y += YSPEED;
			break;
		case LD:
			y += YSPEED;
			x -= XSPEED;
			break;
		case L:
			x -= XSPEED;
			break;
		case LU:
			y -= YSPEED;
			x -= XSPEED;
			break;
		case STOP:
			break;
		}
		if(this.dir !=direction.STOP) {
			this.ptdir = this.dir;
		}                                   
	}
	public void keyPressed(KeyEvent e) {
		int key = e.getKeyCode();
		   switch(key) {
		   case KeyEvent.VK_LEFT:
			   bL = true; break;
		   case KeyEvent.VK_RIGHT:
			   bR = true; break;
		   case KeyEvent.VK_UP:
			   bU = true; break;
		   case KeyEvent.VK_DOWN:
			   bD = true; break;
	
		   }
		   Direction();
	}
     
	
	public void Direction() {
		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 void keyReleased(KeyEvent e) {
		  
		int key = e.getKeyCode();
		   switch(key) {
		   case KeyEvent.VK_CONTROL:
			   fire();	 break;
		   case KeyEvent.VK_LEFT:
			   bL = false; break;
		   case KeyEvent.VK_RIGHT:
			   bR = false; break;
		   case KeyEvent.VK_UP:
			   bU = false; break;
		   case KeyEvent.VK_DOWN:
			   bD = false; break;
		   }
		   Direction();
	}

    public Missile fire() {
    	int x = this.x + Tank.WIGHT/2 - Missile.WIGHT/2;
    	int y = this.y + Tank.HIGHT/2 - Missile.HIGHT /2;
		Missile m = new Missile(x, y, ptdir);
		tc.Missiles.add(m);

		return m;
    }
}












青麦麦先森 2014-03-23
  • 打赏
  • 举报
回复
package com.google.www;

import java.awt.*;
import java.awt.event.*;
import java.util.List;
import java.util.ArrayList;

public class TankClient extends Frame {
	public static final int GAME_WIDTH = 800;
	public static final int GAME_HEIGHT = 600;
	
	int x = 50, y = 50;
	
	Image offScreenImage = null;
	Tank myTank = new Tank(50, 50, this);
   
    
    List<Missile> Missiles = new ArrayList<Missile>();
    
	
	public void paint(Graphics g) {
		g.drawString("missiles count:" + Missiles.size(), 10, 50);
		
		for(int i=0;i<Missiles.size();i++) {
           Missile m = Missiles.get(i);
           m.draw(g);		   
        }
		myTank.draw(g);
	}
	
	public void update(Graphics g) {
		if(offScreenImage == null) {
			offScreenImage = this.createImage(GAME_WIDTH, GAME_HEIGHT);
		}
		Graphics gOffScreen = offScreenImage.getGraphics();
		Color c = gOffScreen.getColor();
		gOffScreen.setColor(Color.GREEN);
		gOffScreen.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT);
		gOffScreen.setColor(c);
		paint(gOffScreen);
		g.drawImage(offScreenImage, 0, 0, null);
	}

	public void lauchFrame() {
		//this.setLocation(400, 300);
		this.setSize(GAME_WIDTH, GAME_HEIGHT);
		this.setTitle("TankWar (By:麦麦)");
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		this.setResizable(false);
		this.setBackground(Color.GREEN);
		this.addKeyListener(new KeyMonitor());
		setVisible(true);
		
		new Thread(new PaintThread()).start();
	}

	public static void main(String[] args) {
		TankClient tc = new TankClient();
		tc.lauchFrame();
	}
	
	private class PaintThread implements Runnable {

		public void run() {
			while(true) {
				repaint();
				try {
					Thread.sleep(50);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}
    
	private class KeyMonitor extends KeyAdapter {
		public void keyReleased(KeyEvent e) {
		     myTank.keyReleased(e);
		}

		public void keyPressed(KeyEvent e) {
              myTank.keyPressed(e);
		}
	}
}

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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