JavaStudy5(坦克大战)—B站韩顺平

JavaStudy5(坦克大战01)—B站韩顺平

跳转坦克大战02:
跳转坦克大战03:

1. 坦克大战

1.1坦克大战游戏演示

1.1.1游戏演示

在这里插入图片描述

1.1.2 为什么写这个项目

在这里插入图片描述

1.1.3 写项目前的提醒

在这里插入图片描述

1.2 java 绘图坐标体系

1.2.1 坐标体系-介绍

在这里插入图片描述

1.2.2 坐标体系-像素

在这里插入图片描述

1.2.3 介绍-快速入门

在这里插入图片描述

代码演示:

public class DrawCircle extends JFrame{//JFrame 对应窗口,可以理解成是一个画框
    //定义一个面板
    private MyPanel mp = null;
    public static void main(String[] args) {
        new DrawCircle();
        System.out.println("退出程序~");
    }

    public DrawCircle() {//构造器
        //初始化面板
        mp = new MyPanel();
        //把面板放入画框
        this.add(mp);
        //设置窗口的大小
        this.setSize(400,300);
        //当点击窗口的小×,程序完全退出
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); //setDefaultCloseOperation:设置默认关闭操作
        this.setVisible(true);//可以显示
    }
}
//1. 先定义一个MyPanel, 继承 JPanel 类, 画图形,就在面板上画
class MyPanel extends JPanel {
    //说明:
    //1.MyPanel 对象 在现实中就是一个画板
    //2. Graphics g 把 g 理解成一个画笔
    //3. Graphics 提供了很多绘图的方法
    @Override
    public void paint(Graphics g) {//绘图的方法
        super.paint(g); //调用父类的方法,完成初始化
        g.drawOval(10,10,100,100);
        System.out.println("paint被调用");
    }

}

在这里插入图片描述

1.2.4 绘图原理

在这里插入图片描述

1.2.5 Graphics 类

在这里插入图片描述

代码演示:

/**
 * @ClassName DrawCircle
 * @Author :BLWY-1124
 * @Date :2022/3/26 20:31
 * @Description:演示如何再面板上输出圆形
 * @Version: 1.0
 */
public class DrawCircle extends JFrame{//JFrame 对应窗口,可以理解成是一个画框
    //定义一个面板
    private MyPanel mp = null;
    public static void main(String[] args) {
        new DrawCircle();
        System.out.println("退出程序~");
    }

    public DrawCircle() {//构造器
        //初始化面板
        mp = new MyPanel();
        //把面板放入画框
        this.add(mp);
        //设置窗口的大小
        this.setSize(400,300);
        //当点击窗口的小×,程序完全退出
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); //setDefaultCloseOperation:设置默认关闭操作
        this.setVisible(true);//可以显示
    }
}

//1. 先定义一个MyPanel, 继承 JPanel 类, 画图形,就在面板上画
class MyPanel extends JPanel {
    //说明:
    //1.MyPanel 对象 在现实中就是一个画板
    //2. Graphics g 把 g 理解成一个画笔
    //3. Graphics 提供了很多绘图的方法
    @Override
    public void paint(Graphics g) {//绘图的方法
        super.paint(g); //调用父类的方法,完成初始化
        g.drawOval(10,10,100,100);
        System.out.println("paint被调用");

        //演示绘制不同的图形..
        //画直线 drawLine(int x1,int y1,int x2,int y2)
        g.drawLine(10,10,100,100);
        //画矩形边框 drawRect(int x, int y, int width, int height)
        g.drawRect(10,10,100,100);
        //设置画笔的颜色
        g.setColor(Color.blue);
        //填充矩形 fillRect(int x, int y, int width, int height)
        g.fillRect(100,100,100,100);
        //填充椭圆 fillOval(int x, int y, int width, int height)
        g.setColor(Color.red);
        g.fillOval(200,200,30,50);

        //画图片 drawImage(Image img, int x, int y, ..)
        //1. 获取图片资源, /bg.png 表示在该项目的根目录去获取 bg.png 图片资源
        Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bg.png"));
        g.drawImage(image,10,10,175,225,this);
        //画字符串 drawString(String str, int x, int y)// 写字
        //  给画笔设置颜色和字体
        g.setColor(Color.red);
        g.setFont(new Font("隶书",Font.BOLD,30));
        //这里设置的 100, 100, 是 "北京你好"这个字体的位置左下角
        g.drawString("北京你好",10,10);
        //设置画笔的字体 setFont(Font font)
        //设置画笔的颜色 setColor(Color c)
    }
}

在这里插入图片描述

1.2.6 绘出坦克

在这里插入图片描述在这里插入图片描述

代码演示:

画框类

public class HspTankGame01 extends JFrame {
    //定义一个面板
    private MyPanel mp = null;

    public static void main(String[] args) {
        new HspTankGame01();
        System.out.println("程序开始");
    }

    public HspTankGame01() {//构造器
        //初始化面板
        mp = new MyPanel();
        //把面板放入到窗口(画框)
        this.add(mp);
        //设置窗口的大小
        this.setSize(1000, 750);
        //当点击窗口的小×,程序完全退出.
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);//可以显示

    }
}
/**
 * @ClassName MyPanel
 * @Author :BLWY-1124
 * @Date :2022/3/27 12:14
 * @Description: 坦克大战的绘图区
 * @Version: 1.0
 */
public class MyPanel extends JPanel {
    //定义我的坦克
    MyTank myTank = null;

    public MyPanel() {
        myTank = new MyTank(100, 100);//初始化自己坦克
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        //填充矩形,默认黑色
        g.fillRect(0, 0, 1000, 750);
        //画出坦克-封装方法
        drawTank(myTank.getX(),myTank.getY(),g,0,0);

    }
    //编写方法,画出坦克

    /**
     * @param x      坦克的左上角 x 坐标
     * @param y      坦克的左上角 y 坐标
     * @param g      画笔
     * @param direct 坦克方向(上下左右)
     * @param 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.yellow);
                break;
        }
        //根据坦克方向,来绘制坦克
        switch (direct){
            case 0:
                g.fill3DRect(x,y,10,60,false);
                g.fill3DRect(x + 30, y, 10, 60, false);//画出坦克右边轮子
                g.fill3DRect(x + 10, y + 10, 20, 40, false);//画出坦克盖子
                g.fillOval(x + 10, y + 20, 20, 20);//画出圆形盖子
                g.drawLine(x + 20, y + 30, x + 20, y);//画出炮筒
                break;
            default:
                System.out.println("暂时没有处理");
        }
    }
}
/**
 * @ClassName MyTank
 * @Author :BLWY-1124
 * @Date :2022/3/27 12:29
 * @Description:自己的坦克
 * @Version: 1.0
 */
public class MyTank extends Tank{

    public MyTank(int x, int y) {
        super(x, y);
    }
}
/**
 * @ClassName Tank
 * @Author :BLWY-1124
 * @Date :2022/3/27 12:29
 * @Description: 父类坦克模板
 * @Version: 1.0
 */
public class Tank {
    private int x;//坦克的横坐标
    private int y;//坦克的纵坐标

    public Tank(int x, int y) {
        this.x = x;
        this.y = y;
    }

    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;
    }
}

1.3 java 事件处理机制

1.3.1 事件处理机制-看个问题

在这里插入图片描述

代码演示:

/**
 * @ClassName BallMove
 * @Author :BLWY-1124
 * @Date :2022/3/27 15:55
 * @Description:演示小球通过键盘控制上下左右的移动-> 讲解 Java 的事件控制
 * @Version: 1.0
 */
public class BallMove extends JFrame { //窗口面板
    private MyPanel mp = null;
    public static void main(String[] args) {
        BallMove ballMove = new BallMove();

    }
    //构造器
    public BallMove(){
        mp = new MyPanel();
        this.add(mp);
        this.setSize(400,300);
        //窗口 JFrame 对象可以监听键盘事件, 即可以监听到面板发生的键盘事件
        this.addKeyListener(mp);
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        this.setVisible(true);
    }
}
//面板,可以画出小球
//KeyListener 是监听器, 可以监听键盘事件
class MyPanel  extends JPanel implements KeyListener {
    int x = 10;
    int y = 10;
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.fillOval(x,y,20,20); //默认黑色
    }

有字符输出时,该方法就会触发
    @Override
    public void keyTyped(KeyEvent e) {

    }
    //当某个键按下,该方法会触发
    @Override
    public void keyPressed(KeyEvent e) {

    }
    //当某个键释放(松开),该方法会触发
    @Override
    public void keyReleased(KeyEvent e) {
        //System.out.println((char)e.getKeyCode() + "被按下..");
        //根据用户按下的不同键,来处理小球的移动 (上下左右的键)
        // 在 java 中,会给每一个键,分配一个值(int)
        if (e.getKeyCode() == KeyEvent.VK_DOWN){//KeyEvent.VK_DOWN 就是向下的箭头对应的 code
            y +=2;
        }else if (e.getKeyCode() == KeyEvent.VK_UP){
            y -=2;
        }else if (e.getKeyCode() == KeyEvent.VK_LEFT){
            x -=2;
        }else if(e.getKeyCode() == KeyEvent.VK_RIGHT){
            x +=2;
        }
        //让面板重绘
        this.repaint();
    }
}
1.3.2 基本说明

在这里插入图片描述

1.3.3 请大家看一个示意图

在这里插入图片描述

1.3.4 机制分析

在这里插入图片描述

1.3.5 事件处理机制深入理解

在这里插入图片描述

在这里插入图片描述

1.4 坦克大战游戏

1.4.1 让你的坦克动起来

在这里插入图片描述

//为了监听 键盘事件, 实现 KeyListener
public class HspTankGame02 extends JFrame {
    //定义一个面板
    private MyPanel mp = null;

    public static void main(String[] args) {
        HspTankGame02 hspTankGame02 = new HspTankGame02();
        System.out.println("程序开始");
    }

    public HspTankGame02() {//构造器
        //初始化面板
        mp = new MyPanel();
        //把面板放入到窗口(画框)
        this.add(mp);
        //设置窗口的大小
        this.setSize(1000, 750);
        this.addKeyListener(mp);//让JFrame 监听mp的事件
        //当点击窗口的小×,程序完全退出.
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);//可以显示

    }
}
/**
 * @ClassName MyPanel
 * @Author :BLWY-1124
 * @Date :2022/3/27 12:14
 * @Description: 坦克大战的绘图区
 * @Version: 1.0
 */
public class MyPanel extends JPanel implements KeyListener {
    //定义我的坦克
    MyTank myTank = null;


    public MyPanel() {
        myTank = new MyTank(100, 100);//初始化自己坦克
        myTank.setSpeed(6);
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        //填充矩形,默认黑色
        g.fillRect(0, 0, 1000, 750);
        //画出坦克-封装方法
        drawTank(myTank.getX(), myTank.getY(), g, myTank.getDirect(), 1);


    }
    //编写方法,画出坦克

    /**
     * @param x      坦克的左上角 x 坐标
     * @param y      坦克的左上角 y 坐标
     * @param g      画笔
     * @param direct 坦克方向(上下左右)
     * @param 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.yellow);
                break;
        }

        //根据坦克方向,来绘制对应形状坦克
        //direct 表示方向(0: 向上 1 向右 2 向下 3 向左 )
        //
        switch (direct) {
            case 0: //表示向上
                g.fill3DRect(x, y, 10, 60, false);//画出坦克左边轮子
                g.fill3DRect(x + 30, y, 10, 60, false);//画出坦克右边轮子
                g.fill3DRect(x + 10, y + 10, 20, 40, false);//画出坦克盖子
                g.fillOval(x + 10, y + 20, 20, 20);//画出圆形盖子
                g.drawLine(x + 20, y + 30, x + 20, y);//画出炮筒
                break;
            case 1: //表示向右
                g.fill3DRect(x, y, 60, 10, false);//画出坦克上边轮子
                g.fill3DRect(x, y + 30, 60, 10, false);//画出坦克下边轮子
                g.fill3DRect(x + 10, y + 10, 40, 20, false);//画出坦克盖子
                g.fillOval(x + 20, y + 10, 20, 20);//画出圆形盖子
                g.drawLine(x + 30, y + 20, x + 60, y + 20);//画出炮筒
                break;
            case 2: //表示向下
                g.fill3DRect(x, y, 10, 60, false);//画出坦克左边轮子
                g.fill3DRect(x + 30, y, 10, 60, false);//画出坦克右边轮子
                g.fill3DRect(x + 10, y + 10, 20, 40, false);//画出坦克盖子
                g.fillOval(x + 10, y + 20, 20, 20);//画出圆形盖子
                g.drawLine(x + 20, y + 30, x + 20, y + 60);//画出炮筒
                break;
            case 3: //表示向左
                g.fill3DRect(x, y, 60, 10, false);//画出坦克上边轮子
                g.fill3DRect(x, y + 30, 60, 10, false);//画出坦克下边轮子
                g.fill3DRect(x + 10, y + 10, 40, 20, false);//画出坦克盖子
                g.fillOval(x + 20, y + 10, 20, 20);//画出圆形盖子
                g.drawLine(x + 30, y + 20, x, y + 20);//画出炮筒
                break;
            default:
                System.out.println("暂时没有处理");
        }

    }

    @Override
    public void keyTyped(KeyEvent e) {

    }

    //处理 wdsa 键按下的情况
    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println(e.getKeyCode());
        if (e.getKeyCode() == KeyEvent.VK_W) {//按下W键
            //改变坦克的方向
            myTank.setDirect(0);//
            //修改坦克的坐标 y -= 1
            myTank.moveUp(); //向上
        } else if (e.getKeyCode() == KeyEvent.VK_D) {//D键, 向右
            myTank.setDirect(1);
            myTank.moveRight();//向右

        } else if (e.getKeyCode() == KeyEvent.VK_S) {//S键
            myTank.setDirect(2);
            myTank.moveDown();
        } else if (e.getKeyCode() == KeyEvent.VK_A) {//A键
            myTank.setDirect(3);
            myTank.moveLeft();
        }
        //让面板重绘
        this.repaint();
    }

    @Override
    public void keyReleased(KeyEvent e) {

    }
}
/**
 * @ClassName MyTank
 * @Author :BLWY-1124
 * @Date :2022/3/27 12:29
 * @Description:自己的坦克
 * @Version: 1.0
 */
public class MyTank extends Tank {

    public MyTank(int x, int y) {
        super(x, y);
    }
}
/**
 * @ClassName Tank
 * @Author :BLWY-1124
 * @Date :2022/3/27 12:29
 * @Description: 父类坦克模板
 * @Version: 1.0
 */
public class Tank {
    private int x;//坦克的横坐标
    private int y;//坦克的纵坐标
    private int direct; //坦克方向 0 上 1 右 2 下 3 左
    private int speed = 1;
    public Tank(int x, int y) {
        this.x = x;
        this.y = y;
    }

    //上右下左移动方法
    public void moveUp() {
        y -= speed;
    }
    public void moveRight() {
        x += speed;
    }
    public void moveDown() {
        y += speed;
    }
    public void moveLeft() {
        x -= speed;
    }
    public int getDirect() {
        return direct;
    }

    public int getSpeed() {
        return speed;
    }

    public void setSpeed(int speed) {
        this.speed = speed;
    }

    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;
    }
}

1.5 本章作业

1.5.1本章作业

在这里插入图片描述

/**
 * @ClassName HspTankGame01
 * @Author :BLWY-1124
 * @Date :2022/3/27 11:21
 * @Description:
 * @Version: 1.0
 */
//为了监听 键盘事件, 实现 KeyListener
public class HspTankGame02 extends JFrame {
    //定义一个面板
    private MyPanel mp = null;

    public static void main(String[] args) {
        HspTankGame02 hspTankGame02 = new HspTankGame02();
        System.out.println("程序开始");
    }

    public HspTankGame02() {//构造器
        //初始化面板
        mp = new MyPanel();
        //把面板放入到窗口(画框)
        this.add(mp);
        //设置窗口的大小
        this.setSize(1000, 750);
        this.addKeyListener(mp);//让JFrame 监听mp的事件
        //当点击窗口的小×,程序完全退出.
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);//可以显示

    }
}
package com.qinbo.tankgame02;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;

/**
 * @ClassName MyPanel
 * @Author :BLWY-1124
 * @Date :2022/3/27 12:14
 * @Description: 坦克大战的绘图区
 * @Version: 1.0
 */
public class MyPanel extends JPanel implements KeyListener {
    //定义我的坦克
    MyTank myTank = null;
    //定义敌人的坦克放到Vector
    Vector<EnemyTank> enemyTanks = new Vector<>();
    int enemyTanksSize = 3;

    public MyPanel() {
        myTank = new MyTank(100, 100);//初始化自己坦克
        myTank.setSpeed(6);
        //初始敌人的坦克
        for (int i = 0; i < enemyTanksSize; i++) {
            //创建一个敌人的坦克
            EnemyTank enemyTank = new EnemyTank((100 * (i + 1)), 0);
            //设置方向
            enemyTank.setDirect(2);
            //加入
            enemyTanks.add(enemyTank);
        }
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        //填充矩形,默认黑色
        g.fillRect(0, 0, 1000, 750);
        //画出坦克-封装方法
        drawTank(myTank.getX(), myTank.getY(), g, myTank.getDirect(), 1);
        //画出敌人的坦克, 遍历Vector
        for (int i = 0; i < enemyTanks.size(); i++) {
            //取出坦克
            EnemyTank enemyTank = enemyTanks.get(i);
            drawTank(enemyTank.getX(), enemyTank.getY(), g, enemyTank.getDirect(), 0);
        }
    }
    //编写方法,画出坦克

    /**
     * @param x      坦克的左上角 x 坐标
     * @param y      坦克的左上角 y 坐标
     * @param g      画笔
     * @param direct 坦克方向(上下左右)
     * @param 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.yellow);
                break;
        }

        //根据坦克方向,来绘制对应形状坦克
        //direct 表示方向(0: 向上 1 向右 2 向下 3 向左 )
        //
        switch (direct) {
            case 0: //表示向上
                g.fill3DRect(x, y, 10, 60, false);//画出坦克左边轮子
                g.fill3DRect(x + 30, y, 10, 60, false);//画出坦克右边轮子
                g.fill3DRect(x + 10, y + 10, 20, 40, false);//画出坦克盖子
                g.fillOval(x + 10, y + 20, 20, 20);//画出圆形盖子
                g.drawLine(x + 20, y + 30, x + 20, y);//画出炮筒
                break;
            case 1: //表示向右
                g.fill3DRect(x, y, 60, 10, false);//画出坦克上边轮子
                g.fill3DRect(x, y + 30, 60, 10, false);//画出坦克下边轮子
                g.fill3DRect(x + 10, y + 10, 40, 20, false);//画出坦克盖子
                g.fillOval(x + 20, y + 10, 20, 20);//画出圆形盖子
                g.drawLine(x + 30, y + 20, x + 60, y + 20);//画出炮筒
                break;
            case 2: //表示向下
                g.fill3DRect(x, y, 10, 60, false);//画出坦克左边轮子
                g.fill3DRect(x + 30, y, 10, 60, false);//画出坦克右边轮子
                g.fill3DRect(x + 10, y + 10, 20, 40, false);//画出坦克盖子
                g.fillOval(x + 10, y + 20, 20, 20);//画出圆形盖子
                g.drawLine(x + 20, y + 30, x + 20, y + 60);//画出炮筒
                break;
            case 3: //表示向左
                g.fill3DRect(x, y, 60, 10, false);//画出坦克上边轮子
                g.fill3DRect(x, y + 30, 60, 10, false);//画出坦克下边轮子
                g.fill3DRect(x + 10, y + 10, 40, 20, false);//画出坦克盖子
                g.fillOval(x + 20, y + 10, 20, 20);//画出圆形盖子
                g.drawLine(x + 30, y + 20, x, y + 20);//画出炮筒
                break;
            default:
                System.out.println("暂时没有处理");
        }

    }

    @Override
    public void keyTyped(KeyEvent e) {

    }

    //处理 wdsa 键按下的情况
    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println(e.getKeyCode());
        if (e.getKeyCode() == KeyEvent.VK_W) {//按下W键
            //改变坦克的方向
            myTank.setDirect(0);//
            //修改坦克的坐标 y -= 1
            myTank.moveUp(); //向上
        } else if (e.getKeyCode() == KeyEvent.VK_D) {//D键, 向右
            myTank.setDirect(1);
            myTank.moveRight();//向右

        } else if (e.getKeyCode() == KeyEvent.VK_S) {//S键
            myTank.setDirect(2);
            myTank.moveDown();
        } else if (e.getKeyCode() == KeyEvent.VK_A) {//A键
            myTank.setDirect(3);
            myTank.moveLeft();
        }
        //让面板重绘
        this.repaint();
    }

    @Override
    public void keyReleased(KeyEvent e) {

    }
}
package com.qinbo.tankgame02;

/**
 * @ClassName EnemyTank
 * @Author :BLWY-1124
 * @Date :2022/3/27 18:19
 * @Description: 敌人的坦克
 * @Version: 1.0
 */
public class EnemyTank extends Tank{
    public EnemyTank(int x, int y) {
        super(x, y);
    }
}
/**
 * @ClassName EnemyTank
 * @Author :BLWY-1124
 * @Date :2022/3/27 18:19
 * @Description: 敌人的坦克
 * @Version: 1.0
 */
public class EnemyTank extends Tank{
    public EnemyTank(int x, int y) {
        super(x, y);
    }
}

package com.qinbo.tankgame02;

/**
 * @ClassName Tank
 * @Author :BLWY-1124
 * @Date :2022/3/27 12:29
 * @Description: 父类坦克模板
 * @Version: 1.0
 */
public class Tank {
    private int x;//坦克的横坐标
    private int y;//坦克的纵坐标
    private int direct; //坦克方向 0 上 1 右 2 下 3 左
    private int speed = 1;
    public Tank(int x, int y) {
        this.x = x;
        this.y = y;
    }

    //上右下左移动方法
    public void moveUp() {
        y -= speed;
    }
    public void moveRight() {
        x += speed;
    }
    public void moveDown() {
        y += speed;
    }
    public void moveLeft() {
        x -= speed;
    }
    public int getDirect() {
        return direct;
    }

    public int getSpeed() {
        return speed;
    }

    public void setSpeed(int speed) {
        this.speed = speed;
    }

    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;
    }
}
ivate int direct; //坦克方向 0 上 1 右 2 下 3 左
    private int speed = 1;
    public Tank(int x, int y) {
        this.x = x;
        this.y = y;
    }

    //上右下左移动方法
    public void moveUp() {
        y -= speed;
    }
    public void moveRight() {
        x += speed;
    }
    public void moveDown() {
        y += speed;
    }
    public void moveLeft() {
        x -= speed;
    }
    public int getDirect() {
        return direct;
    }

    public int getSpeed() {
        return speed;
    }

    public void setSpeed(int speed) {
        this.speed = speed;
    }

    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;
    }
}
**我亦无他,惟手熟尔**
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别来无恙blwy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值