抽空寫的一個坦克大戰(其中的坦克部分)

學完Java就開始躍躍欲試了,便寫了個極其簡陋的坦克,/捂臉

首先是主函數部分:

package game;

public class Main {
	public static void main(String[] args) {
  		new GameInterface();
	}
}

接下來是坦克本身部分:

package game;

import java.awt.Color;

public class Tank {
 	private int tank_x;   //坦克x軸座標
 	private int tank_y;   //坦克y軸座標
 	private int tank_radius; //坦克半徑
 	private int speed = 5;

	public GameInterface game;

	public boolean dir_up = false;
 	public boolean dir_down = false;
 	public boolean dir_left = false;
 	public boolean dir_right = false;

	public Tank( GameInterface game,int tank_x, int tank_y, int tank_radius) {
  		this.game = game;
  		this.tank_x = tank_x;
 	 	this.tank_y = tank_y;
  		this.tank_radius = tank_radius;
 	}

	//畫坦克
 	public void drawTank(Graphics g) {
  		g.setColor(Color.BLACK);         					//顏色爲黑色
  		g.drawOval(tank_x, tank_y, tank_radius*2, tank_radius*2); //畫出一個圓
  		g.fillOval(tank_x, tank_y, tank_radius*2, tank_radius*2); 	//內部顏色填充

		//畫炮筒
  		if(dir_up){
   			g.drawRect(tank_x+tank_radius-2, tank_y-tank_radius, 4, 50);
   			g.fillRect(tank_x+tank_radius-2, tank_y-tank_radius, 4, 50);
  		}else if(dir_down) {
   			g.drawRect(tank_x+tank_radius-2, tank_y+tank_radius, 4, 50);
   			g.fillRect(tank_x+tank_radius-2, tank_y+tank_radius, 4, 50);
  		}else if(dir_left) {
   			g.drawRect(tank_x-tank_radius, tank_y+tank_radius-2, 50, 4);
   			g.fillRect(tank_x-tank_radius, tank_y+tank_radius-2, 50, 4);
  		}else if(dir_right) {
   			g.drawRect(tank_x+tank_radius, tank_y+tank_radius-2, 50, 4);
   			g.fillRect(tank_x+tank_radius, tank_y+tank_radius-2, 50, 4);
  		}else {
   			g.drawRect(tank_x+tank_radius, tank_y+tank_radius-2, 50, 4);
   			g.fillRect(tank_x+tank_radius, tank_y+tank_radius-2, 50, 4);
  		}
  	}

	//坦克的移動
 	public void move() {
  		if(dir_up){
   			this.tank_y-=speed; 	//編程中y軸正方向朝下
  		}else if(dir_down) {
   			this.tank_y+=speed;
  		}else if(dir_left) {
   			this.tank_x-=speed;
  		}else if(dir_right) {
   			this.tank_x+=speed;
  		}
 	}

	//坦克發射子彈
 	public void shootBullets() {
  		if(dir_up){
   			addBullets("UP");
  		}else if(dir_down) {
   			addBullets("DOWN");
  		}else if(dir_left) {
   			addBullets("LEFT");
  		}else if(dir_right) {
   			addBullets("RIGHT");
  		}else {
   			addBullets("RIGHT");
  		}
 	}

	//坦克增加子彈
 	public void addBullets(String dir) {
  		if(dir.equals("UP")) {
   			Bullets bullet = new Bullets(dir, tank_x+tank_radius-5/2, tank_y, 5);
   			this.game.bullets.add(bullet);
  		}else if(dir.equals("DOWN")) {
   			Bullets bullet = new Bullets(dir, tank_x+tank_radius-5/2, tank_y, 5);
   			this.game.bullets.add(bullet);
  		}else if(dir.equals("LEFT")) {
   			Bullets bullet = new Bullets(dir, tank_x, tank_y+tank_radius-5/2, 5);
   			this.game.bullets.add(bullet);
  		}else if(dir.equals("RIGHT")) {
   			Bullets bullet = new Bullets(dir, tank_x, tank_y+tank_radius-5/2, 5);
   			this.game.bullets.add(bullet);
  		}
 	}
 }

坦克控制部分:

package game;

import java.awt.event.KeyAdapter;

public class ListerTank extends KeyAdapter{
 
 	public GameInterface game;
 
 	public ListerTank(GameInterface game) {
  		this.game = game;
 	}

	@Override
 	public void keyPressed(KeyEvent e) {
  		//若是按下↑,↓,←,→,空格鍵
  		if(e.getKeyCode() == KeyEvent.VK_UP) {
   			this.game.tank.dir_up = true;
  		}else if(e.getKeyCode() == KeyEvent.VK_DOWN) {
   			this.game.tank.dir_down = true;
  		}else if(e.getKeyCode() == KeyEvent.VK_LEFT) {
   			this.game.tank.dir_left = true;
  		}else if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
   			this.game.tank.dir_right = true;
  		}else if(e.getKeyCode() == KeyEvent.VK_SPACE){
   			this.game.tank.shootBullets();
  		}
 	}

	@Override
 	public void keyReleased(KeyEvent e) {
  		//若是鬆開↑,↓,←,→,空格鍵
  		if(e.getKeyCode() == KeyEvent.VK_UP) {
   			this.game.tank.dir_up = false;
  		}else if(e.getKeyCode() == KeyEvent.VK_DOWN) {
   			this.game.tank.dir_down = false;
  		}else if(e.getKeyCode() == KeyEvent.VK_LEFT) {
   			this.game.tank.dir_left = false;
  		}else if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
   			this.game.tank.dir_right = false;
  		}
 	}
}

子彈部分:

package game;

import java.awt.Color;

public class Bullets {
	
	private int bullet_x;
 	private int bullet_y;
 	private int bullet_radius;
 	private String bullet_dir;
 	private int speed = 1;

	public Bullets(String bullet_dir, int bullet_x, int bullet_y, int bullet_radius) {
  		this.bullet_dir = bullet_dir;
  		this.bullet_x = bullet_x;
  		this.bullet_y = bullet_y;
  		this.bullet_radius = bullet_radius;
 	}

	//畫子彈
 	public void drawBullets(Graphics g) {
  		g.setColor(Color.GREEN);
  		if(bullet_dir.equals("UP")) {
   			g.drawOval(bullet_x, bullet_y-=speed, bullet_radius*2, bullet_radius*2);
   			g.fillOval(bullet_x, bullet_y-=speed, bullet_radius*2, bullet_radius*2);
  		}else if(bullet_dir.equals("DOWN")) {
   			g.drawOval(bullet_x, bullet_y+=speed, bullet_radius*2, bullet_radius*2);
   			g.fillOval(bullet_x, bullet_y+=speed, bullet_radius*2, bullet_radius*2);
  		}else if(bullet_dir.equals("LEFT")) {
   			g.drawOval(bullet_x-=speed, bullet_y, bullet_radius*2, bullet_radius*2);
   			g.fillOval(bullet_x-=speed, bullet_y, bullet_radius*2, bullet_radius*2);
  		}else if(bullet_dir.equals("RIGHT")) {
   			g.drawOval(bullet_x+=speed, bullet_y, bullet_radius*2, bullet_radius*2);
   			g.fillOval(bullet_x+=speed, bullet_y, bullet_radius*2, bullet_radius*2);
  		}
 	}
}

界面顯示:

package game;

import javax.swing.JPanel;

public class GameInterface extends JPanel{
	public JFrame game_jfram;
 	public Tank tank;
 	public ArrayList<Bullets> bullets;

	public GameInterface() {
		tank = new Tank(this,100, 100, 25);
  		game_jfram = new JFrame("坦克大戰");
  		bullets = new ArrayList<>();
  		game_jfram.setSize(800,600);
  		game_jfram.setLayout(null);
  		game_jfram.setLocationRelativeTo(null); //居中
  		game_jfram.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//關閉時釋放資源

		game_jfram.setResizable(false);
  
  		ListerTank listertank = new ListerTank(this);
  		game_jfram.addKeyListener(listertank);
  
  		this.setSize(800,600);   //創建一個長800寬600的面板
  		this.setLayout(null);
  		this.setBackground(Color.GRAY); //設置背景色
  
  		game_jfram.add(this);
  		game_jfram.setVisible(true);

		//匿名線程
  		new Thread() {
   			public void run() {
    				while(true) {
     					try {
      						tank.move();
      						sleep(20);
     					}catch(Exception e) {
     					
     					}
    				}
   			}
  		}.start();
  	}

	public void paint(Graphics g) {
  		super.paint(g);
  		tank.drawTank(g); //畫坦克
  		//畫子彈
  		for( int i=0; i<bullets.size(); i++) {
   			Bullets bullet = bullets.get(i);
   			bullet.drawBullets(g);
  		}
  		repaint();
 	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章