Java重修笔记 第五十四天 坦克大战(二)常用的绘图方法、画出坦克图形

news2024/9/23 23:56:37
  • 常用的绘图方法
1.设置当前画笔的颜色,可多次调用

        public abstract void setColor(Color c)

        参数:c -颜色

2. 画一条直线

        public abstract void drawLine(int x1, int y1, int x2, int y2)

        参数:x1 - 第一个点的 x坐标。 y1 - 第一点的 y坐标。 x2 - 第二点的 x坐标。 y2 - 第二点的 y坐标。

3.  画矩形边框

        public void drawRect(int x, int y, int width, int height)

        参数:x - 要绘制的矩形的 x坐标。 y - 要绘制的矩形的 y坐标。 width - 要绘制的矩形的宽度。 height - 要绘制的矩形的高度。

4. 画填充矩形,填充颜色为画笔颜色

        public abstract void fillRect(int x, int y, int width, int height)

        参数:x - 要填充的矩形的 x坐标。 y - 要填充的矩形的 y坐标。 width - 要填充的矩形的宽度。 height - 要填充的矩形的高度。

5. 画空心椭圆

        public abstract void drawOval(int x, int y, int width, int height)

        参数:x - 要绘制的椭圆的左上角的 x坐标。 y - 要绘制的椭圆的左上角的 y坐标。 width - 要绘制的椭圆的宽度。 height - 要绘制的椭圆的高度。

6. 画填充椭圆,填充颜色为画笔颜色

        public abstract void fillOval(int x, int y, int width, int height)

        参数:x - 要填充的椭圆的左上角的 x坐标。 y - 要填充的椭圆的左上角的 y坐标。 width - 要填充的椭圆的宽度。 height - 要填充的椭圆的高度。

7. 显示图片
        (1)准备图片

        将准备好的图片放到out目录的该项目根目录下

        (2)获取图片资源

        Image image =

        Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bg.png"));

        (3)显示该图片

        g.drawImage(image, 10, 10, 175, 221, this);

注:网上直接下载的 .webp 图片改了后缀也放不进去,必须用PS转成其他格式,或者直接使用其他原生图片格式。

8. 显示字符串

        (1)设置字体格式

        g.setColor(Color.red);

        g.setFont(new Font("隶书", Font.BOLD, 50));

        (2)显示字体

        g.drawString("字体设置", 100, 100);

注:g.drawString 方法的横纵坐标指的是字体的左下角

  • 画出坦克图形
public class HspTankGame01 extends JFrame {

    // 定义一个MaPanel
    MyPanel mp = null;
    
    public static void main(String[] args) {
        new HspTankGame01();
    }

    public HspTankGame01() throws HeadlessException {
        mp = new MyPanel();
        this.add(mp);
        this.setSize(1000,750);
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        this.setVisible(true);
    }
}

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

        // 坦克坐标为: x 和 y, 用方法给它包装起来
        drawMyTank(hero.getX(), hero.getY(), g, 0, 0);
        drawMyTank(hero.getX() + 100, hero.getY(), g, 1, 0);
        drawMyTank(hero.getX() + 200, hero.getY(), g, 2, 0);
        drawMyTank(hero.getX() + 300, hero.getY(), g, 3, 0);
    }

    /**
     * 画坦克的方法
     * @param x      坦克左上角的x横坐标
     * @param y      坦克左上角的y的纵坐标
     * @param g      画笔
     * @param direct 坦克的方向
     * @param type   坦克的类型
     */
    public void drawMyTank(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 + 9, y + 20, 20, 20);
                // 炮管
                g.drawLine(x + 20, y, x + 20, y + 30);
                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 + 9, 20, 20);
                // 炮管
                g.drawLine(x, y + 20, x + 40, 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 + 9, y + 20, 20, 20);
                // 炮管
                g.drawLine(x + 20, y + 20, 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 + 9, 20, 20);
                // 炮管
                g.drawLine(x + 20, y + 20, x + 60, y + 20);
                break;
            default:
                System.out.println("其他坦克方向暂时没有处理");
        }
    }
}

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2126567.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git使用—把当前仓库的一个分支push到另一个仓库的指定分支、基于当前仓库创建另一个仓库的分支并推送到对应仓库(mit6828)

目录 背景提示 将当前仓库的一个分支push到另一个仓库的指定分支 直接基于仓库rep1中的某个分支创建新的分支并将其推送到目标仓库rep2 补充 参考链接 背景提示 最近打算做一下mit6.828的项目,这个仓库使用问题困扰了自己一段时间,由于6828官方提供…

92、K8s之ingress下集

一、ingress 1.1、两种部署方式 1、ingress------------deployment nodeport ​ daemonset hostnetwork----每台设备只能有一个pod,因为直接使用宿主机的端口,所以只能开启一个pod。 2、ingress------svc------deployment里面的pod,这种…

文件IO编程

文章目录 文件描述符相关系统调用文件有关的系统调用文件操作函数--creat函数文件操作函数--open函数文件操作函数--read函数文件操作函数--write函数文件操作函数--close函数文件操作函数--lseek函数缓冲区的大小对性能的影响 实验:调用系统函数,实现文…

Linux:体系结构和操作系统管理

目录 一、冯诺依曼体系结构 1.问题1 2.问题2 二、操作系统管理 一、冯诺依曼体系结构 本章将会谈论一下对冯诺依曼计算机体系结构的理解。 在2024年,几乎所有的计算机,都遵守冯诺依曼体系结构。 冯诺依曼体系结构是应用在硬件层面的,而硬…

Docker高级管理--Compose容器编排与私有仓库(Docker技术集群与应用)

本文介绍了Docker的三大工具:Docker Machine用于创建和管理Docker主机,Docker Compose用于单引擎模式下的多容器应用部署和管理,而Docker Swarm则是一个集群管理工具,提供微服务应用编排功能。Docker Machine支持在不同环境配置Do…

【代码随想录训练营第42期 Day56打卡 - 图论Part6 - 并查集2 - 冗余连接问题

目录 一、做题心得 二、题目与题解 题目一:108. 冗余连接 题目链接 题解:并查集 题目二:109. 冗余连接II 题目链接 题解:并查集 三、小结 一、做题心得 冗杂连接问题是图论章节应用并查集的经典问题。所有的顶点通过边相…

Redis 篇- 实战项目中使用 Redis 实现经典功能(异步秒杀商品、点赞功能、共同关注的好友、投喂功能)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 使用 Redis 实现异步秒杀 1.1 基于 Lua 脚本判断是否符合条件:库存是否充足、一人一单 1.2 基于 Redis 中的 Stream 实现消息队列 1.3 使用 Java 操作…

Unity Hub自动安装指定版本Unity的Android开发环境

Unity开发Android环境要求SDK、DNK、JDK、Gradle版本都要对才能发布APK,自己去配置很容易出错。Unity Hub可以自动安装指定版本Unity的Android开发环境。 1.安装国内用的UnityHub(我这里用的3.3.2-c6) 2.找到对应的Unity版本 3.点击【从Unit…

docker管理redis集群

1.拉取redis镜像 docker pull redis拉取完成 [rootlocalhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE redis latest a617c1c92774 3 years ago 105MB2.运行redis容器 docker run -itd --name redis-test01 -p 6379:6379…

谈谈PCIe VID、DID、SSID、SSVID背后的智慧

PCIe Vendor ID 想了半天还是觉得从“ID是什么”这个问题开始比较好。那么ID是什么?ID就是身份。那身份又是什么?身份就是一个合理存在,用于区分不同个体。为什么叫“合理存在”呢?如果国家不给你发身份证,你就是黑户…

记一次导入dbf文件后数据为空问题的解决方法

前言 省流:这篇文章最终采用的是更换导出文件格式的方法,看到这里觉得方法不适用的小伙伴可以不用浪费几秒钟看完这篇文章哦。 问题描述 作者使用的是Navicat数据库管理工具,然后在将源数据库的数据表导出为dbf格式文件后,再将…

F110批量付款如何Debug BTE增强(后台JOB的调试方法)

F110批量付款如何Debug BTE增强(后台JOB的调试方法) SAP系统中的F110(Automatic Payment)是一个常用的付款程序,在实施过程中,也经常会遇到一些运行的错误,而对于此类的错误,通常的…

基于SpringBoot的租房网站系统

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:SpringBoot框架 工具:ECLIPSE 系统展示 首页 管理员功能界面 用户信息界面 预约看房界…

动手学深度学习(pytorch)学习记录28-使用块的网络(VGG)[学习记录]

目录 VGG块VGG网络训练模型 VGG块 定义了一个名为vgg_block的函数来实现一个VGG块 import torch from torch import nn from d2l import torch as d2ldef vgg_block(num_convs, in_channels, out_channels):layers []for _ in range(num_convs):layers.append(nn.Conv2d(in_…

线程池原理及改造

目录 一 线程池执行原理 二 线程池改造(一) 三 线程池改造(二) 一 线程池执行原理 首先我们先了解一下线程池里面几个参数: 第一个是核心线程数,第二个是线程池最大线程数。(线程池里面的线程分为核心线程和非核心线程,既然核心…

人物化身持有者每月奖励:九月版

世界急需英雄。你准备好响应号召了吗? 穿上你的斗篷,戴上你的面具,用你的风格保卫 The Sandbox 的街道吧!本月为人物化身持有者准备的独家奖励是 The Sandbox 超级套装! 本月我们将首次向我们生态系统中的所有人物化…

Vulnhub-RickdiculouslyEasy靶机攻略

御剑扫描到ip 一.第一个flag 主机扫描 目录扫描 二.网页信息收集-第二个flag 9090也开放了web服务所以我们在IP地址后面加端口试试,如下图,加上了端口,并且发现了第二个flag,也对第二个flag进行了简单的探索也没有发现什么可以…

Kubernetes上安装Metallb和Ingress并部署应用程序

视频和代码仓库 视频教程地址:https://www.bilibili.com/video/BV1QV4rebEb8 代码仓库地址:https://github.com/xiaohh-me/kubernetes-yaml 网络规划 之前已经写了几篇安装Kubernetes文章,这次来讲讲在Kubernetes上安装Ingress&#xff0c…

【Linux】Linux介绍及CentOS虚拟机环境搭建

内容大纲介绍 文章目录 内容大纲介绍1.计算机简介2.Linux系统介绍3.虚拟化软件介绍4.Linux环境搭建5.扩展_虚拟机的快照6.Linux的目录介绍 1.计算机简介 概述 全称叫电子计算机, 英文名叫Computer, 俗称叫: 电脑, 简称叫: PC, 就是有硬件和软件组成的电子设备. 组成 计算机硬件…

IO复用-epoll基础

文章目录 IO复用认识epollepoll原理重要结构体 epoll的ET、LTepoll高效的原因epoll需要解决的问题对于使用epoll的建议 IO复用 IO等待拷贝 IO复用是一种通过减少等待时间,来提高IO效率的方式。 其原理是通过同时管理多个IO接口(文件描述符)…