当前位置: 首页 > news >正文

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

  • 常用的绘图方法
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 {// 定义一个MaPanelMyPanel 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);}@Overridepublic 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("其他坦克方向暂时没有处理");}}
}

运行结果:

相关文章:

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

常用的绘图方法 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坐…...

OpenAI澄清:“GPT Next”不是新模型。

不,”GPT Next” 并不是OpenAI的下一个重要项目。 本周早些时候,OpenAI 日本业务的负责人长崎忠男在日本 KDDI 峰会上分享了一场演讲,似乎在暗示一个名为 “GPT Next” 的新模型即将出现。 但OpenAI的一位发言人已向Mashable证实&#xff0…...

<<编码>> 第 10 章 逻辑与开关(Logic and Switches) 示例电路

串联电路 info::操作说明 鼠标单击开关切换开合状态 需要两个开关同时闭合才能接通电路 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/code-hlchs-examples/assets/circuit/code-hlchs-ch10-01-series-circuit.txt 并联电路 in…...

深入浅出 Ansible 自动化运维:从入门到实战

在现代 IT 运维中,自动化是提升效率、降低错误率的关键。Ansible 作为一款流行的自动化工具,凭借其简洁的语法和强大的功能,成为了运维工程师的得力助手。本文将深入探讨 Ansible 的核心概念、实际应用以及一些实用的技巧,帮助你在…...

一句话描述设计模式

最近在看设计模式,其描述抽象程度令人欲罢不能,始终不得其意。于是尝试用一句话总结了一下,常规的就不说了,只是举了个例子。 单例模式 Spring中的单例bean使用了双重锁机制 工厂模式 Spring中的BeanFactory是简单工厂模式Bea…...

【Linux】Ubuntu 22.04 shell实现MySQL5.7 tar 一键安装

参考 https://blog.csdn.net/qq_35995514/article/details/134350572?spm1001.2014.3001.5501 在原作者基础上做了修改,加了一个删除原有mysql 的脚本 文章目录 一、安装下载**my.cnf 配置文件** 二、执行安装**install_mysql.sh 安装脚本**本机免密脚本 ssh_keyge…...

SQL Server开启网络访问

目前工作中很少用到SQL Server了,最近需要测试几个表,需要搭建一个SQL Server数据库服务,这里做个总结吧。 安装这里就不做详细介绍了,本文只介绍如何开启SQL Server网络访问。 1、云服务器安全组设置 如果是搭建在云服务器上&a…...

el-input设置type=‘number‘和v-model.number的区别

el-input设置typenumber’与设置.number修饰符的区别 1. 设置type‘number’ 使用el-input时想收集数字类型的数据,我们首先会想到typenumber,设置完type为number时会限制我们输入的内容只能为数字,不能为字符/汉字等非数字类型的数值&…...

6.第二阶段x86游戏实战2-理解程序流程

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 工具下载: 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…...

Netty笔记01-Netty的基本概念与用法

文章目录 1. 概述1.1 Netty 是什么?1.2 Netty 的特点1.3 Netty 的作者1.4 Netty 的地位1.5 Netty 的优势1.6 Netty 的工作原理1.7 Netty 的应用场景1.8 Netty 的重要组件 2. 第一个程序2.1 目标2.2 服务器端2.3 客户端2.4 流程梳理💡 提示 1. 概述 1.1 …...

OpenHarmony鸿蒙( Beta5.0)RTSPServer实现播放视频详解

鸿蒙开发往期必看: 一分钟了解”纯血版!鸿蒙HarmonyOS Next应用开发! “非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通) “一杯冰美式的时间” 了解鸿蒙HarmonyOS Next应用开发路…...

QT使用事件事件和绘制事件实现简易时钟

这个时钟实现的底层原理主要是利用 Qt 的绘图机制和定时器。首先,设置固定大小的窗口,创建定时器并连接到槽函数,定时器每秒钟触发一次,触发窗口重绘。在paintEvent函数中,使用QPainter进行绘图,绘制圆形表…...

kubeadm方式安装k8s

一、安装环境 环境准备:(有阿里云)centos7 k8s-master 192.168.1.11 k8s-node1 192.168.1.22 k8s-node2 192.168.1.33 二、前期准备 在k8s-master主机 [rootk8s-master ~]# vim /etc/hosts…...

如何使用go生成可执行文件

在 Go 中生成可执行文件非常简单。你可以使用 go build或者go install 命令。以下是步骤: 1. 步骤 1.1. 打开终端,导航到你的 Go 项目目录 确保你在包含 main 包的目录中,通常这是项目的根目录或包含 main.go 文件的目录。 1.2. 运行 go …...

手写Promise

构造器的实现 const PENDING pending; const FULFILLED fulfilled; const REJECTED rejectedclass MyPromise{#state PENDING;#result undefined;constructor(executor){const resolve (data) > {this.#changeState(FULFILLED, data);};const reject (reason) > …...

深度学习云服务器免费使用教程

#云服务器# #深度学习# #人工智能# #计算机视觉# 本文为各位学习深度学习的入门选手而创建,降低深度学习的入门门槛。 谷歌云服务器Colab: T4GPU。限额,需要科学上网,不能使用终端。 谷歌云服务器地址:欢迎使用 C…...

使用ansible的剧本制作salt-master与salt-minion的安装与启动服务过程

虚拟机版本:Rocky Linux release 8.6 (Green Obsidian) 准备几台虚拟机 ipv4地址主机名192.168.137.13center192.168.137.14sp-1192.168.137.15sp-2192.168.137.16sp-3 一、center主机的配置 1.vim /etc/hosts 127.0.0.1 localhost localhost.localdomain loc…...

数据库sqlite3

用数据库函数完成数据的增删改查 增: 将要存储的信息录入到结构体中,再使用snprintf函数信息结合sqlite3命令语句使用sqlite3_exec函数完成插入。 int do_insert(sqlite3 *ppDb) {Worker Work;printf("输入插入的工号:");scanf("%d&qu…...

开发基础之Python 函数(Basic Python Functions for Development)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…...

Django_Vue3_ElementUI_Release_001_项目初始化

1. 数据库 1.1 安装 https://blog.csdn.net/rbx508780/article/details/127176754 1.2 创建数据库 1.3 DBeaver可视化数据库 https://dbeaver.io/download/ 2 安装Python(3.9.12) 2.1 下载地址 https://www.python.org/downloads/release/python-3912/ 2.2 设定国内源 pip …...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

如何在网页里填写 PDF 表格?

有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据&#xff…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息&#xff0…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

git: early EOF

macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...

用递归算法解锁「子集」问题 —— LeetCode 78题解析

文章目录 一、题目介绍二、递归思路详解:从决策树开始理解三、解法一:二叉决策树 DFS四、解法二:组合式回溯写法(推荐)五、解法对比 递归算法是编程中一种非常强大且常见的思想,它能够优雅地解决很多复杂的…...

数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)

目录 🔍 若用递归计算每一项,会发生什么? Horners Rule(霍纳法则) 第一步:我们从最原始的泰勒公式出发 第二步:从形式上重新观察展开式 🌟 第三步:引出霍纳法则&…...