⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tankwar.java

📁 坦克大战 有关卡 有显示 有大招 等等 功能
💻 JAVA
字号:
package leo.tank;

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;
import java.util.ArrayList;
import java.util.List;


/**
 * 这个类构建坦克大战的游戏主窗口
 * @author 黄思志 030402129
 *
 */

public class TankWar extends Frame {


	private static final long serialVersionUID = 2L;

	public static final int vx = 800,vy = 600;
	private boolean flag = true;

	Wall w1 = new Wall(100,200,20,150,this);
	Wall w2 = new Wall(300,200,200,20,this);
	Tank myTank = new Tank(vx-100, vy-100, true, Direction.STOP, this);
	List<Explode> ep = new ArrayList<Explode>();
	List<Tank> emTk = new ArrayList<Tank>();  //  @jve:decl-index=0:
	List<Missile> m = new ArrayList<Missile>();
	Image offScreenImage = null;

	Blood b = new Blood(this);
	SuperMissile sm = new SuperMissile(this);
	boolean gameOver = false;
	int gameLevel = -1;int gameThrough = 0;
	//int timeCount = 0;
	//static Random r = new Random();
	int score = 0;
	@Override
	public void paint(Graphics g) {
		// TODO Auto-generated method stub
		Color c = g.getColor();
		g.setColor(Color.white);
		g.drawString("生命值:" + myTank.getLife(), 10, 50);
		g.drawString("剩余复活数:" + myTank.getLiveCount(), 10, 70);
		g.drawString("天女散花剩余:" + myTank.getSuperMCount(), 10, 90);
		g.drawString("得分:" + score, 10, 110);
		g.drawString("级别:" + gameLevel, 10, 130);
		g.drawString("通关次数:" + gameThrough, 10, 150);
		g.drawString("敌方坦克数量:" + emTk.size(), 10, 170);
		//g.drawString("子弹数量:" + m.size(), 10, 150);
		//g.drawString("爆炸数量:" + ep.size(), 10, 170);
		if(gameOver) {
			//Font f = g.getFont();
			//g.setFont(new java.awt.Font("隶书", Font.CENTER_BASELINE, 24));
			g.drawString("游戏结束!!  " + "你的最后得分是:" + score, vx/2-100, vy/2);
			//g.setFont(f);
			flag = false;
		}
		g.setColor(c);

		if(emTk.size() == 0){
			gameLevel ++;
			if(gameLevel ==16){
				gameLevel = 0;
				gameThrough ++;
			}
			for(int i=0;i<16;i++){
				emTk.add(new Tank(0 + 50*i, 50, false, Direction.D, this));
				
			}
			int l = 1;
			for(int i=0;i<gameLevel;i+=2) {				
				if(i == 7 )l++;
				for (int j=0;j<l;j++) {
					emTk.add(new Tank(0 + 50*i, 50 + 50*(j+1), false, Direction.D, this));
					emTk.add(new Tank(0 + 50*(i+1), 50 + 50*(j+1), false, Direction.D, this));
					}
			}
		}

		
		for(int i=0;i<m.size();i++) {
			Missile mi = m.get(i);
			mi.draw(g);
		}
		
		for(int i=0;i<ep.size();i++) {
			Explode e = ep.get(i);
			e.draw(g);
		}
		
		for(int i=0;i<emTk.size();i++) {
			Tank t = emTk.get(i);
			t.draw(g);
		}
		w1.draw(g);
		w2.draw(g);
		b.draw(g);
		sm.draw(g);
		myTank.draw(g);


		//e.draw(g);
		//y+=5;

	}
	

	/**
	 * 重写update
	 * 设置双缓冲
	 */
	@Override
	public void update(Graphics g) {
		// TODO Auto-generated method stub
		if(offScreenImage == null) {
			offScreenImage = this.createImage(vx, vy);
		}
		Graphics gOffScreen = offScreenImage.getGraphics();
		Color c = gOffScreen.getColor();
		gOffScreen.setColor(Color.black);
		gOffScreen.fillRect(0, 0, vx, vy);
		gOffScreen.setColor(c);
		paint(gOffScreen);
		g.drawImage(offScreenImage, 0, 0, null);
	}
	
	/**
	 * 显示主窗口
	 *
	 */
	public void launchFrame() {
	
		this.setLocation(100, 100);
		setSize(vx,vy);
		this.setTitle("坦克大战");
		this.addWindowListener(new WindowAdapter() {

			@Override
			public void windowClosing(WindowEvent arg0) {
				// TODO Auto-generated method stub
				flag = false;
				System.exit(0);
			}
			
		});
		this.setResizable(false);
		this.setBackground(Color.black);
		this.addKeyListener(new KeyMonitor());
		this.setVisible(true);
		new Thread(new PaintThread()).start();
	}

	public class KeyMonitor extends KeyAdapter {
		@Override
		public void keyReleased(KeyEvent e) {
			// TODO Auto-generated method stub
			myTank.keyReleased(e);
		}

		@Override
		public void keyPressed(KeyEvent e) {
			// TODO Auto-generated method stub
			myTank.keyPressed(e);			
			//m.keyPressed(e);
		}
	}
	

	/**
	 * main函数
	 * @param args	传入参数,本程序无需传入
	 */
	public static void main(String[] args) {

		TankWar tc = new TankWar();
		tc.launchFrame();
		
	}
	
	/**
	 * 用来构建重绘的线程
	 * 每隔一个时间重绘
	 * @author 黄思志 030402129
	 *
	 */
	private class PaintThread implements Runnable {

		public void run() {
			// TODO Auto-generated method stub
			while(flag) {
				repaint();
				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}			
			
		}
		
	}

}  //  @jve:decl-index=0:visual-constraint="10,10"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -