Java面向对象之坦克大战游戏

文章目录

      • 1、坦克大战游戏
        • 1.1、游戏演示
        • 1.2、项目目的
        • 1.3、java 绘图坐标体系
          • 1.3.1、坐标体系-定义
          • 1.3.2、坐标体系-像素
          • 1.3.3、代码实现
          • 1.3.4、绘图原理
          • 1.3.5、Graphics 类
        • 1.4、绘出坦克

1、坦克大战游戏

1.1、游戏演示

Java面向对象之坦克大战游戏_第1张图片

1.2、项目目的

Java面向对象之坦克大战游戏_第2张图片
Java面向对象之坦克大战游戏_第3张图片

1.3、java 绘图坐标体系

1.3.1、坐标体系-定义

Java面向对象之坦克大战游戏_第4张图片

1.3.2、坐标体系-像素

Java面向对象之坦克大战游戏_第5张图片

1.3.3、代码实现

Java面向对象之坦克大战游戏_第6张图片

package draw_;

import javax.swing.*;
import java.awt.*;

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.EXIT_ON_CLOSE);
        this.setVisible(true);  // 可以显示
    }
}

// 先定义一个 MyPanel, 继承 JPanel 类, 画图形, 就在面板上
class MyPanel extends JPanel {
    // 说明:
    // 1. MyPanel 对象就是一个画板
    // 2. Graphics g 把 g 理解成一支画笔
    // 3. Graphics 提供了很多绘图的方法

    @Override
    public void paint(Graphics g) {  // 绘图方法
        super.paint(g);  // 调用父类的方法完成初始化
        System.out.println("paint 方法被调用了");

        // 画出一个圆形
        g.drawOval(10, 10, 100, 100);

        // 绘制不同的图形
        // 画直线 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);

        // 画椭圆边框 drawOval(int x, int y, int width, int height)
        // 填充矩形 fillRect(int x, int y, int width, int height)
        // 设置画笔的颜色
        g.setColor(Color.blue);
        g.fillRect(10, 10, 100, 100);

        // 填充椭圆 fillOval(int x, int y, int width, int height)
        g.setColor(Color.red);
        g.fillOval(10, 10, 100, 100);

        // 画图片 drawImage(Image img, int x, int y, ..)
        // 获取图片资源, /bg.png 表示在该项目的根目录去获取 bg.png 图片资源
        Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bg.png"));
        g.drawImage(image, 10, 10, 175, 221, this);

        // 画字符串 drawString(String str, int x, int y)  // 写字
        // 给画笔设置颜色和字体
        g.setColor(Color.red);
        g.setFont(new Font("隶书", Font.BOLD, 50));
        // 这里设置的 100, 100, 是 "北京你好"左下角
        g.drawString("北京你好", 100, 100);
        // 设置画笔的字体 setFont(Font font)
        // 设置画笔的颜色 setColor(Color c)
    }
}
1.3.4、绘图原理

Java面向对象之坦克大战游戏_第7张图片

1.3.5、Graphics 类

Java面向对象之坦克大战游戏_第8张图片

package draw_;

import javax.swing.*;
import java.awt.*;

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.EXIT_ON_CLOSE);
        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);  // 调用父类的方法完成初始化
        System.out.println("paint 方法被调用了");

        // 画出一个圆形
        g.drawOval(10, 10, 100, 100);

        // 绘制不同的图形
        // 画直线 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);

        // 画椭圆边框 drawOval(int x, int y, int width, int height)
        // 填充矩形 fillRect(int x, int y, int width, int height)
        // 设置画笔的颜色
        g.setColor(Color.blue);
        g.fillRect(10, 10, 100, 100);

        // 填充椭圆 fillOval(int x, int y, int width, int height)
        g.setColor(Color.red);
        g.fillOval(10, 10, 100, 100);

        // 画图片 drawImage(Image img, int x, int y, ..)
        // 获取图片资源, /bg.png 表示在该项目的根目录去获取 bg.png 图片资源
        Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bg.png"));
        g.drawImage(image, 10, 10, 175, 221, this);

        // 画字符串 drawString(String str, int x, int y)  // 写字
        // 给画笔设置颜色和字体
        g.setColor(Color.red);
        g.setFont(new Font("隶书", Font.BOLD, 50));
        // 这里设置的 100, 100, 是 "北京你好"左下角
        g.drawString("北京你好", 100, 100);
        // 设置画笔的字体 setFont(Font font)
        // 设置画笔的颜色 setColor(Color c)
    }
}

1.4、绘出坦克

Java面向对象之坦克大战游戏_第9张图片
Java面向对象之坦克大战游戏_第10张图片
TankGame01.java

package tankgame;

import javax.swing.*;

public class TankGame01 extends JFrame {
    // 定义 MyPanel
    MyPanel mp = null;

    public static void main(String[] args) {
        TankGame01 tankGame01 = new TankGame01();
    }

    public TankGame01() {
        mp = new MyPanel();
        this.add(mp);  // 把面板(就是游戏的绘图区域)
        this.setSize(1000, 750);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}

MyPanel.java

package tankgame;

import javax.swing.*;
import java.awt.*;

public class MyPanel extends JPanel {
    // 定义我的坦克
    Hero hero = null;

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

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.fillRect(0, 0, 1000, 750);  // 填充矩形, 默认黑色

        // 画出坦克-封装方法
        drawTank(hero.getX(), hero.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("暂时没有处理");
        }
    }
}

Tank.java

package tankgame;

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

Hero.java

package tankgame;

/**
 * 自己的坦克
 */
public class Hero extends Tank {
    public Hero(int x, int y) {
        super(x, y);
    }
}

你可能感兴趣的:(java,java)