📄 tankwar.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 + -