当前位置: 首页 > 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("其他坦克方向暂时没有处理");}}
}

运行结果:

http://www.lryc.cn/news/435778.html

相关文章:

  • OpenAI澄清:“GPT Next”不是新模型。
  • <<编码>> 第 10 章 逻辑与开关(Logic and Switches) 示例电路
  • 深入浅出 Ansible 自动化运维:从入门到实战
  • 一句话描述设计模式
  • 【Linux】Ubuntu 22.04 shell实现MySQL5.7 tar 一键安装
  • SQL Server开启网络访问
  • el-input设置type=‘number‘和v-model.number的区别
  • 6.第二阶段x86游戏实战2-理解程序流程
  • Netty笔记01-Netty的基本概念与用法
  • OpenHarmony鸿蒙( Beta5.0)RTSPServer实现播放视频详解
  • QT使用事件事件和绘制事件实现简易时钟
  • kubeadm方式安装k8s
  • 如何使用go生成可执行文件
  • 手写Promise
  • 深度学习云服务器免费使用教程
  • 使用ansible的剧本制作salt-master与salt-minion的安装与启动服务过程
  • 数据库sqlite3
  • 开发基础之Python 函数(Basic Python Functions for Development)
  • Django_Vue3_ElementUI_Release_001_项目初始化
  • MySQL之安装与基础知识
  • 前端基础 | HTML基础:HTML结构,HTML常见标签
  • 宏任务和微任务+超全面试真题
  • 针对SVM算法初步研究
  • Java中的`String`不可变性详解
  • c# SMTP发送邮件
  • GPU基础 -- 并行化与阿姆达尔定律
  • Lua热更
  • 提升汽车行业软件质量:ASPICE培训的关键实践方法
  • 2024 全新智能识别 API 接口震撼登场
  • 《UniVS: Unified and Universal Video Segmentation with Prompts as Queries》要点提炼