zoukankan      html  css  js  c++  java
  • Java 坦克大战

    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
    }

    }

  • 相关阅读:
    MyBatis 知识点梳理
    SSH无密码登录的原理及配置
    Maven学习笔记
    阿里Java开发电话面试经历惨败
    Java生成验证码(二)
    Java生成验证码(一)
    Hibernate 知识点梳理
    数据结构线性表顺序表示 (二)
    replace tabs with the proper number of blanks
    数据结构线性表顺序表示 (三)
  • 原文地址:https://www.cnblogs.com/sunxun/p/3842012.html
Copyright © 2011-2022 走看看