package com.lijiapeng.tank;
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.Random;/**
 * 这个类的作用是 显示游戏的主界面
 * @author liajiapeng
 * date 2011/5/8
 */public final class TankClient extends Frame {

private static Random r=new Random();
Blood b;
Map map;
List<Wall> wall;
Tank myTank;
List<Missile> missiles;
List<Explode> explodes;
List<Tank> tanks;
TankClient(){
 b=new Blood(this);
 map=new Map(this);
 wall=new ArrayList<Wall>();
 myTank=new Tank(20,500,true,Direction.STOP,this);
 missiles=new ArrayList<Missile>();
 explodes=new ArrayList<Explode>();
 tanks=new ArrayList<Tank>();
}
public static final int GAME_WIDTH=800;
public static final int GAME_HEIGHT=600;
public static int count=0;
public static int H;
public int sum=0;
public int pc=3;
public boolean continues=true;

Image offScreenImage=null; public void lauchFrame(){
H=Integer.parseInt(ProperMg.getProperty("initTankCount"));
for(int i=0;i<H;i++){
tanks.add(new Tank(r.nextInt(800),r.nextInt(600),false,Direction.D,this));
}
this.setTitle("最后的战役                  author  lijiapeng date 201158");
this.setLocation(300, 80);
this.setSize(GAME_WIDTH,GAME_HEIGHT);
this.setResizable(false);
this.setBackground(Color.GREEN);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
continues=false;
System.exit(0);
}
});
this.addKeyListener(new KeyMonitor());
this.setVisible(true);
new Thread(new PaintThread()).start();
}
public static void main(String[] args) {
TankClient c=new TankClient();
c.lauchFrame();
}

public void paint(Graphics g){
Color c=g.getColor();
g.setColor(Color.WHITE);
g.drawString("子弹数量  "+missiles.size(), 10,50);
g.drawString("坦克爆炸数  "+explodes.size(), 10,70);
g.drawString("当前坦克数量  "+tanks.size(), 10,90);
g.drawString("死亡数量  "+count, 10,110);
g.drawString("下一局坦克的数量是  "+(H+5), 10,130);
g.drawString("你还有  "+pc+"个生命", 10,150);
g.drawString("←↖↑↗→↘↓↙ 控制方向  ", 10,520);
g.drawString("空格 发弾  ", 10,540);
g.drawString("A 八方弾  ", 10,560);
g.drawString("F2 重生  ", 10,580);
g.setColor(c);
if(tanks.size()<=0){
sum=r.nextInt(5);
if(H<25){
H+=5;
}
for(int i=0;i<H;i++){
tanks.add(new Tank(r.nextInt(800),r.nextInt(600),false,Direction.D,this));
}
}
myTank.draw(g);
myTank.eat(b);
for(int i=0; i<missiles.size(); i++) {
Missile m = missiles.get(i);
m.hitTanks(tanks);
m.hitTank(myTank);
List l=map.list.get(sum);
for(int j=0;j<l.size();j++){
Wall w=(Wall)l.get(j);
m.hitWall(w);
}
m.draw(g);
}
for(int i=0;i<explodes.size();i++){
Explode e=explodes.get(i);
e.draw(g);
}
List l=map.list.get(sum);
for(int i=0;i<tanks.size();i++){
Tank t=tanks.get(i);
for(int j=0;j<l.size();j++){
Wall w=(Wall)l.get(j);
t.collidesWithWall(w);
}
t.collidesWithTanks(tanks);
t.draw(g);
}
for(int i=0;i<wall.size();i++){
wall.get(i).draw(g);
}
for(int j=0;j<l.size();j++){
Wall w=(Wall)l.get(j);
w.draw(g);
}
b.draw(g);
}
public void update(Graphics g) {
if(offScreenImage == null){
offScreenImage = this.createImage(800,600);
}
Graphics gOffScreen=offScreenImage.getGraphics();
Color c=gOffScreen.getColor();
gOffScreen.setColor(Color.BLACK);
gOffScreen.fillRect(0, 0, 800, 600);
gOffScreen.setColor(c);
paint(gOffScreen);
g.drawImage(offScreenImage, 0, 0, null);
}
private class PaintThread implements Runnable{
public void run() {
while(continues){
repaint();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}

}
}

private class KeyMonitor extends KeyAdapter{
public void keyPressed(KeyEvent e) {
myTank.KeyPressed(e);
}
public void keyReleased(KeyEvent e) {
myTank.keyReleased(e);
}

}


}