这是我学习JAVA一个多月以来,首次做的一个小项目,由于之前学过别的语言,所以做起来并不觉得困难。通过这个小项目,让我更深的了解了面向对象,同时也更深入的了解了一些新的知识点,稍作总结:
对象能够移动的本质是:改变对象的坐标,再对对象重画。由于重画的速度很快,我们的肉眼无法察觉,因此就以为是移动了。根据坦克的起始坐标,根据坦克的方向设一个变量相应的改变坦克的起始坐标。然后在通过重画,就达到了运动的效果。
其次在不断的重画的过程中,由于刷新的频率大于重画的频率,导致会闪烁,可以通过加入一个线程不断的刷新来消除闪烁问题,具体实现方法:
private class PaintThread implements Runnable{
public void run() {
while(true){
repaint();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
到网上一查,发现还有其他方法,这个待研究。
还有通过构造子弹以及坦克,初步了解了List、ArrayList等的用法,当然此个项目也有一些不足之处,比如说我军子弹和敌军子弹、以及我军坦克和敌军坦克没有分开控制,这样子导致无法完成我军子弹碰到敌军子弹可以爆炸等问题。
知道怎么通过按键监听来实现按键控制操作,如使坦克和炮弹按八个方向跑,可以参看Tank.java和Missile.java里的内容。
···
总的来说,这个项目使我对JAVA的兴趣又增添几分,因为每做出一步,都会让我有点小成就感,然后是到最终完成,又想去做它的升级版···
效果如图:
下面贴出代码:
CSDN下载地址:http://download.csdn.net/detail/yanghai0321/3766202
说明:我军战死后按“F2”键可以重生一辆,按“Ctrl”键发射炮弹,按“A”键发射超级炮弹(可以向八个方向同时发射)!
主窗口:TankClient.java
package com.yanghai.tankwar;
import java.awt.*;
import java.awt.event.*;
import java.util.List;
import java.util.ArrayList;
/**
* 这个类的作用是坦克游戏的主窗口
* @author Yanghai
*
*/
public class TankClient extends Frame{
public static final int GAME_WIDTH=800;
public static final int GAME_HEIGHT=600;
Tank myTank=new Tank(750,550,true,Tank.Direction.STOP,this);
Wall w1=new Wall(250,200,20,150,this);
Wall w2=new Wall(500,300,150,20,this);
Blood b=new Blood();
int level=1;
int init=10;
List<Missile> missiles=new ArrayList<Missile>();
List<Explode> explodes=new ArrayList<Explode>();
List<Tank> tanks=new ArrayList<Tank>();
Image offScreenImage =null;//设置一张背后的图片
public void paint(Graphics g) {
g.drawString("missiles count:"+missiles.size(), 8, 45);
g.drawString("explodes count:"+explodes.size(), 8, 65);
g.drawString("tanks count:"+tanks.size(), 8, 85);
g.drawString("myTank's life:"+myTank.getLife(), 8, 105);
g.drawString("Fighting level:"+level, 700, 65);
if(tanks.size()<=0){
init++;
for(int i=0;i<init;i++){
tanks.add(new Tank(30*(i+1),3*(i+20)+5,false,Tank.Direction.D,this));
}
level++;
myTank.setLife(myTank.HP);
}
for(int i=0;i<missiles.size();i++){
Missile m=missiles.get(i);
m.h