/*
 * 功能:小型坦克游戏代码,组建一个可以移动的坦克和三个敌方的坦克
 */package mytankgame;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Vector;public class tankgame extends JFrame{ /**
 * @param args
 */
MyPanel mp=null;
public static void main(String[] args) {
// TODO Auto-generated method stub tankgame tkg=new tankgame();
} //构造函数
public tankgame(){
mp=new MyPanel();
this.add(mp);
this.addKeyListener(mp);

this.setSize(400,320);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}//我的面板,画画专用
class MyPanel extends JPanel implements KeyListener{//mypanel类继承了JPanel类,并实现KeyListener接口

//定义一台新的坦克
Hero hero=null;
//定义敌方的坦克
Vector<tankdi> tkd=new Vector<tankdi>();
int tkdSize=3;

//构造函数
public MyPanel(){
hero=new Hero(100,100);//我们坦克出来的位置
//初始敌方的坦克
for(int i=0;i<tkdSize;i++){

tankdi tk=new tankdi((i+1)*50,0);//建立
tk.setColor(0);
tkd.add(tk);//加入

}
}


//重写paint,并开始画画
public void paint(Graphics g){
super.paint(g);
g.fillRect(0, 0, 500, 400);//设置背景为黑色
this.drawTank(hero.getX(), hero.getY(), g, this.hero.direct, 1);//根据参数不同,可以画不同色的坦克
//画出敌方的坦克
for(int i=0;i<tkd.size();i++){
this.drawTank(hero.getX(), hero.getY(), g, this.hero.direct, 0);
}

}
//画出坦克的函数
public void drawTank(int x,int y,Graphics g,int direct,int type){
//判断是那种坦克
switch(type){
case 0:
g.setColor(Color.cyan);break;

case 1:
g.setColor(Color.GREEN);break;

}
//判断方向
switch(direct){
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);
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+30, 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+30);
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, y+10);

}
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyCode()==KeyEvent.VK_W){
//坦克方向,向上
this.hero.setDirect(0);
this.hero.moveUp();
}else if(e.getKeyCode()==KeyEvent.VK_D){
//坦克方向,向右
this.hero.setDirect(1);
this.hero.moveRight();
}else if(e.getKeyCode()==KeyEvent.VK_S){
//坦克方向,向下
this.hero.setDirect(2);
this.hero.moveDowd();
}else if(e.getKeyCode()==KeyEvent.VK_A){
//坦克方向,向左
this.hero.setDirect(3);
this.hero.moveLift();
}
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub

}

}package mytankgame;//这个是坦克的父类
class Tank{

//坦克的坐标
int x=0;
int y=0;

//下面是表示坦克的方向,0->上,1->右,2->下,3->左,构建后再包起来
int direct=0;
int speed=4;//这个是坦克的移动速度
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
public int getDirect() {
return direct;
}
public void setDirect(int direct) {
this.direct = direct;
}
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 Tank(int x,int y){
this.x=x;
this.y=y;
}
}//坦克子类,继承父类的属性__我方坦克
class Hero extends Tank{
public Hero(int x,int y){
super(x,y);
}
//坦克的一个方向移动速度
public void moveUp(){
y-=speed;//向上
}
public void moveRight(){
x+=speed;//向右
}
public void moveDowd(){
y+=speed;//向下
}
public void moveLift(){
x-=speed;//向左
}


}//敌方的坦克,继承父类属性
class tankdi extends Tank{

public tankdi(int x,int y){
super(x,y);
} public void setColor(int i) {
// TODO Auto-generated method stub

}
}