package com.sunzhiyan04;
import java.awt.*;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import javax.swing.*;
import java.util.*;
public class Tank_1 extends JFrame{Mypanel_1 jp1 = null;
private static final long serialVersionUID = 1L; public static void main(String[] args) { // TODO Auto-generated method stub Tank_1 tank = new Tank_1(); } public Tank_1() { // TODO Auto-generated constructor stub jp1 = new Mypanel_1(); this.add(jp1); this.addKeyListener(jp1); this.setTitle("Tank_1"); this.setSize(300,300); this.setLocation(200,200); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setVisible(true); }}
class Mypanel_1 extends JPanel implements KeyListener{ //实例化一个我的坦克 Hero hero = null; Vector<EnemtyTank> ets = new Vector<>(); int ensize = 3; public Mypanel_1(){ hero = new Hero(10,10); for(int i=0;i<ensize;i++ ){ EnemtyTank et = new EnemtyTank((i+1)*50,0); ets.add(et); } //this.addKeyListener(this); } public void paint(Graphics g){ super.paint(g); //设置背景为一块黑色的矩形运动 g.fillRect(0, 0, 400, 300); //调用画坦克的方法 this.drawTank(hero.getX(), hero.getY(), g, hero.direct, hero.type); //画子弹 if(hero.shot !=null){ g.draw3DRect(hero.getX(), hero.getY(), 10, 10, false); } for(int i=0;i<ets.size();i++){ this.drawTank(ets.get(i).getX(), ets.get(i).getY(), g, ets.get(i).direct, ets.get(i).type); } } 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.BLUE); break; } switch(direct) { case 0: case 2: //画出我的坦克(届时封装成成一个画坦克的方法) //1.左边的矩形 g.fill3DRect(x,y, 5, 30, false); //2.右边的矩形 g.fill3DRect(x+15,y, 5, 30, false); //2.中间的矩形 g.fill3DRect(x+5,y+5, 10, 20, false); //3.画出圆形 g.fillOval(x+5,y+10, 10, 10); if(direct == 0){ //3.画出线 g.drawLine(x+10,y+15, x+10, y); }else if(direct == 2){ //3.画出线 g.drawLine(x+10,y+15, x+10, y+30); } break; case 1: case 3: //画出我的坦克(届时封装成成一个画坦克的方法) //1.左边的矩形 g.fill3DRect(x,y,30, 5, false); //2.右边的矩形 g.fill3DRect(x,y+15, 30, 5, false); //2.中间的矩形 g.fill3DRect(x+5,y+5, 20, 10, false); //3.画出圆形 g.fillOval(x+10,y+5, 10, 10); if(direct == 1){ //3.画出线 g.drawLine(x+15,y+10, x+30, y+10); }else if(direct == 3){ //3.画出线 g.drawLine(x+15,y+10, x, y+10); } break; } }@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.direct = 0; this.hero.moveUP(); }else if(e.getKeyCode() == KeyEvent.VK_D){ this.hero.direct = 1; this.hero.moveRIGHT(); //右 }else if(e.getKeyCode() == KeyEvent.VK_S){ //下 this.hero.direct = 2; this.hero.moveDOWN(); }else if(e.getKeyCode() == KeyEvent.VK_A){ //左 this.hero.direct = 3; this.hero.moveLEFT(); } if(e.getKeyCode() == KeyEvent.VK_J){ //判断玩家是否按下J键 this.hero.shotEnemy(); } this.repaint();}@Override
public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub} }
//子弹类class Shot implements Runnable{ int x ; int y; int direct; public Shot(int x,int y){ this.x = x; this.y = y; } public void run(){ }}//坦克类class Tank{ int x; int y; int direct; int type; int speed = 2; public int getDirect() { return direct; } public void setDirect(int direct) { this.direct = direct; } public int getType() { return type; } public void setType(int type) { this.type = type; }
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 void moveUP(){ this.y -= this.speed; } public void moveRIGHT(){ this.x += this.speed; } public void moveDOWN(){ this.y += this.speed; } public void moveLEFT(){ this.x -= this.speed; }public Tank(int x,int y){
this.x = x; this.y = y; }}//定义我的坦克
class Hero extends Tank{ //子弹是坦克的一个属性 Shot shot = null; public Hero(int x, int y) { super(x, y); // TODO Auto-generated constructor stub } //子弹发射方法 public void shotEnemy(){ switch(this.direct){ case 0: shot = new Shot(this.x+10,this.y); break; case 1: shot = new Shot(this.x+30,this.y+10); break; case 2: shot = new Shot(this.x+10,this.y+30); break; case 3: shot = new Shot(this.x,this.y+10); break; } }}//定义我的坦克class EnemtyTank extends Tank{public EnemtyTank(int x, int y) {
super(x, y); // TODO Auto-generated constructor stub }}