思路:添加Tank父类,EnemyTank和MyTank子类,Panel类(画图),主类,主类需要继承JFrame来建立框架,其中Panel和
Main都需要用构造函数,打开程序时即自启
1.Tank类:
public class Tank {
int x;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getDir() {
return dir;
}
public void setDir(int dir) {
this.dir = dir;
}
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
int y;
int dir;
int speed;
boolean life=true;
int type;
Tank(int x,int y)
{
this.x=x;
this.y=y;
}
}
2.MyTank类
public class MyTank extends Tank {
MyTank(int x,int y)
{
super(x,y);
}
}
3.EnemyTank类
public class EnemyTank extends Tank {
EnemyTank(int x,int y)
{
super(x,y);
}
}
4.MyPanel类
import java.awt.*;
import java.util.Vector;
public class MyPanel extends Panel {
MyTank myTank =null;
Vector<EnemyTank> enemyTanks = new Vector<EnemyTank>();//集合类
int enemynum=12;//坦克数量
MyPanel()
{
myTank =new MyTank(120,220);//初始化我的坦克的初始坐标
for(int i=0;i<enemynum/2;i++)
{
EnemyTank enemyTank=new EnemyTank(i*(230+5),0);//给上面的enemyTank初始化坐标
enemyTanks.add(enemyTank);//向集合里面添加enemyTank
}
for(int i=6;i<enemynum;i++)
{
EnemyTank enemyTank =new EnemyTank((12-i-1)*(230+5),930);//给下面的enemyTank初始化坐标
enemyTanks.add(enemyTank);
}
}
public void paint(Graphics g) //重写paint方法
{
g.setColor(Color.black);//画笔着色
g.fillRect(0,0,1200,1000);//面板
if(myTank.life)
{
drawTank(myTank.getX(),myTank.getY(),myTank.getDir(),g,0);//画我方坦克
}
for(int i=0;i<enemyTanks.size();i++)
{
EnemyTank enemyTank =enemyTanks.get(i);
drawTank(enemyTank.getX(),enemyTank.getY(),enemyTank.getDir(),g,1);//画敌方坦克
}
}
public void drawTank(int x,int y,int dir,Graphics g,int type)//画坦克
{
//System.out.println(dir);
switch (type)
{
case 0://我方
g.setColor(Color.red);
break;
case 1://敌方
g.setColor(Color.green);
break;
}
switch (dir)
{
case 0://上
g.fill3DRect(x,y,5,30,false);//左腿
g.fill3DRect(x+15,y,5,30,false);//右腿
g.fill3DRect(x+5,y+5,10,20,false);//中间
g.fillOval(x+5,y+10,10,10);//圆形
g.drawLine(x+10,y+15,x+10,y-3);//炮管
break;
case 1://左
g.fill3DRect(x,y,30,5,false);
g.fill3DRect(x,y+15,30,5,false);
g.fill3DRect(x+5,y+5,20,10,false);
g.fillOval(x+10,y+5,10,10);
g.drawLine(x+15,y+10,x-3,y+10);
break;
case 2://下
g.fill3DRect(x,y,5,30,false);
g.fill3DRect(x+15,y,5,30,false);
g.fill3DRect(x+5,y+5,10,20,false);
g.fillOval(x+5,y+10,10,10);
g.drawLine(x+10,y+15,x+10,y+33);
break;
case 3://右
g.fill3DRect(x,y,30,5,false);
g.fill3DRect(x,y+15,30,5,false);
g.fill3DRect(x+5,y+5,20,10,false);
g.fillOval(x+10,y+5,10,10);
g.drawLine(x+15,y+10,x+33,y+10);
break;
}
}
}
5.Main类
import javax.swing.*;
public class Main extends JFrame {
MyPanel myPanel= new MyPanel();
Main()
{
this.add(myPanel);
this.setSize(1200,1000);
this.setLocation(200,10);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String agrs[])
{
Main main =new Main();
}
}
