对于完整的带项目配置文件的java源码,按步骤操作即可:
File ->Import -> General
选择Existing Projects into Workspace,选择要导入的文件,点击“finish",OK。
package com.bjsxt.tankimport 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.io.IOException
import java.util.ArrayList
import java.util.List
import java.util.Properties
/**
* 这个类的作用是坦克游戏的主窗口
* @author mashibing
*
*/
public class TankClient extends Frame {
/**
* 整个坦克游戏的宽度
*/
public static final int GAME_WIDTH = 800
public static final int GAME_HEIGHT = 600
Tank myTank = new Tank(50, 50, true, Direction.STOP, this)
Wall w1 = new Wall(100, 200, 20, 150, this), w2 = new Wall(300, 100, 300, 20, this)
List<Explode>explodes = new ArrayList<Explode>()
List<Missile>missiles = new ArrayList<Missile>()
List<Tank>tanks = new ArrayList<Tank>()
Image offScreenImage = null
Blood b = new Blood()
public void paint(Graphics g) {
/*
* 指明子弹-爆炸-坦克的数量
* 以及坦克的生命值
*/
g.drawString("missiles count:" + missiles.size(), 10, 50)
g.drawString("explodes count:" + explodes.size(), 10, 70)
g.drawString("tankscount:" + tanks.size(), 10, 90)
g.drawString("tanks life:" + myTank.getLife(), 10, 110)
if(tanks.size() <= 0) {
for(int i=0i<Integer.parseInt(PropertyMgr.getProperty("reProduceTankCount"))i++) {
tanks.add(new Tank(50 + 40*(i+1), 50, false, Direction.D, this))
}
}
for(int i=0i<missiles.size()i++) {
Missile m = missiles.get(i)
m.hitTanks(tanks)
m.hitTank(myTank)
m.hitWall(w1)
m.hitWall(w2)
m.draw(g)
//if(!m.isLive()) missiles.remove(m)
//else m.draw(g)
}
for(int i=0i<explodes.size()i++) {
Explode e = explodes.get(i)
e.draw(g)
}
for(int i=0i<tanks.size()i++) {
Tank t = tanks.get(i)
t.collidesWithWall(w1)
t.collidesWithWall(w2)
t.collidesWithTanks(tanks)
t.draw(g)
}
myTank.draw(g)
myTank.eat(b)
w1.draw(g)
w2.draw(g)
b.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.BLACK)
gOffScreen.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT)
gOffScreen.setColor(c)
paint(gOffScreen)
g.drawImage(offScreenImage, 0, 0, null)
}
/**
* 本方法显示坦克主窗口
*
*/
public void lauchFrame() {
int initTankCount = Integer.parseInt(PropertyMgr.getProperty("initTankCount"))
for(int i=0i<initTankCounti++) {
tanks.add(new Tank(50 + 40*(i+1), 50, false, Direction.D, this))
}
//this.setLocation(400, 300)
this.setSize(GAME_WIDTH, GAME_HEIGHT)
this.setTitle("TankWar")
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)
}
}
}