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

pygame学习(二)——绘制线条、圆、矩形等图案

导语

pygame是一个跨平台Python库(pygame news),专门用来开发游戏。pygame主要为开发、设计2D电子游戏而生,提供图像模块(image)、声音模块(mixer)、输入/输出(鼠标、键盘、显示屏)模块等。使用pygame,理论上可以开发设计市面上所有的2D类型游戏。

 正文

1、绘制线条 

我们可以使用 pygame.draw.line()函数来绘制直线。

pygame.draw.line(screen,线段的颜色,起点坐标,终点坐标,线宽)

pygame.draw.line(screen ,lightgreen, (300,0), (300,600), linewidth)

import pygame #导包
from pygame.locals import*
import sysblack=0,0,0
lightgreen=144,238,144pygame.init() #初始化
screen = pygame.display.set_mode(size=(600,600),flags=0)
#绘制一个600*600的框框while True:for event in pygame.event.get():if event.type in (QUIT,KEYDOWN):sys.exit()#python的退出程序linewidth=4 #“线”的粗细pygame.draw.line(screen,lightgreen,(300,0),(300,600),linewidth)pygame.display.update()  # 刷新展示

2、绘制网格 

通过循环绘制一个网格大小为三十像素的网络 

import pygame #导包
from pygame.locals import*
import sysblack=0,0,0
lightgreen=144,238,144screen_width=600
screen_height=600pygame.init() #初始化
screen = pygame.display.set_mode(size=(screen_width,screen_height),flags=0)
#绘制一个600*600的框框# 设置网格大小
grid_size = 30  # 每个网格的大小为30个像素# 绘制网格
for i in range(0, screen_width, grid_size):pygame.draw.line(screen, lightgreen, (i, 0), (i, screen_height))
for i in range(0, screen_height, grid_size):pygame.draw.line(screen, lightgreen, (0, i), (screen_width, i))while True:for event in pygame.event.get():if event.type in (QUIT,KEYDOWN):sys.exit()#python的退出程序linewidth=4pygame.display.update()  # 刷新展示

3、绘制圆

pygame.draw.circle(screen,lightgreen,position,radius,linewidth)

通过pygame.draw.circle()可以画圆

  • screen代表屏幕
  • lightgreen代表着圆的颜色
  • position代表着圆心所在的位置
  • radius代表着圆的半径
  • linewidth代表着线的粗细 
import pygame #导包
from pygame.locals import*
import sysblack=0,0,0
lightgreen=144,238,144screen_width=600
screen_height=600pygame.init() #初始化
screen = pygame.display.set_mode(size=(screen_width,screen_height),flags=0)
#绘制一个600*600的框框# 主循环
while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()color = 255,255,255position = 300,250radius = 100width = 10linewidth=4screen.fill(color)pygame.draw.circle(screen,lightgreen,position,radius,linewidth)pygame.display.update()  # 刷新展示

 

4、绘制矩形

pygame.draw.rect() 是pygame库中的一个函数,用于在给定的屏幕上绘制一个矩形。

函数的参数解释如下:

  • screen: 这是你要在其上绘制矩形的pygame Surface 对象。
  • lightgreen: 这是矩形的颜色。它是一个包含RGB值的元组,例如 (144, 238, 144)。
  • pos: 这是矩形左上角的坐标 + 以左上标点为原点的右下角坐标,下面给出了具体例子。
  • width: 这是矩形的宽度。这是一个整数。
import pygame #导包
from pygame.locals import*
import sysscreen_width=600
screen_height=600
pygame.init() #初始化
screen = pygame.display.set_mode(size=(screen_width,screen_height))
pygame.display.set_caption("这是标题")
pos_x = 300
pos_y =300while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()lightgreen=144,238,144width = 0pos = pos_x, pos_y, 300, 300pygame.draw.rect(screen, lightgreen, pos, width)#300*300的矩形pygame.display.update()

 绘制右下角的矩形区域:

 5、绘制一个会动的矩形

设置屏幕的宽度和高度为600x600像素。 定义矩形的横向和纵向移动速度为0.14像素/帧。  每次循环将背景填充为黑色。 根据速度更新矩形的位置。 当矩形超出屏幕边界时,改变其速度的方向,使其反向移动。 使用pygame.draw.rect()方法绘制矩形,设置颜色为黄色,宽度为0(实心矩形)。

import pygame #导包
from pygame.locals import*
import sysscreen_width=600
screen_height=600
pygame.init() #初始化
screen = pygame.display.set_mode(size=(screen_width,screen_height))
pygame.display.set_caption("这是标题")
pos_x = 300
pos_y =300
vel_x = 0.14
vel_y = 0.1#粗略滴可以看作矩形的移动速度
while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()screen.fill((0,0,0))#每次循环都要将背景置为黑色pos_x += vel_xpos_y += vel_y#当矩形超过屏幕范围后返回if pos_x > 500 or pos_x < 0:vel_x = -vel_xif pos_y > 500 or pos_y < 0:vel_y = -vel_y
#绘制矩形color = 255, 255, 1width = 0pos = pos_x,pos_y, 100, 100pygame.draw.rect(screen,color,pos,width)pygame.display.update()

 视频没发上来,有兴趣的自己运行一下吧。

 6、还有哪些常用的绘制图形方法?

Pygame 提供了多种绘制图形的方法,这些方法主要用于在 Surface 对象上绘制基本的几何形状。以下是一些常用的 Pygame 绘制图形的方法:

  1. pygame.draw.polygon(): 用于绘制多边形。你需要提供一个点的列表来定义多边形的顶点,以及多边形的颜色。

  2. pygame.draw.ellipse(): 用于绘制椭圆。你需要指定一个矩形区域,椭圆将在这个区域内绘制,同时还需要指定椭圆的颜色。

  3. pygame.draw.arc(): 用于绘制圆弧。你需要指定一个矩形区域,圆弧将在这个区域内绘制,同时还需要指定圆弧的起始和结束角度、颜色。

  4. pygame.draw.lines(): 用于绘制一系列相连的线段,可以创建开放或闭合的多边形。你需要提供一个点的列表来定义线段的顶点,以及线段的颜色和宽度。

  5. pygame.draw.aaline() 和 pygame.draw.aalines(): 用于绘制抗锯齿线段,可以平滑线段的边缘。这两个方法只能绘制一个像素宽的线段,不支持设置线宽。

小结

在本篇文章中,主要介绍了如何绘制一条线、圆形、矩形、以及简单地实现了将矩形“动起来”,每个例子都有其对应的完整代码,可以直接复制使用。

相关文章:

pygame学习(二)——绘制线条、圆、矩形等图案

导语 pygame是一个跨平台Python库(pygame news)&#xff0c;专门用来开发游戏。pygame主要为开发、设计2D电子游戏而生&#xff0c;提供图像模块&#xff08;image&#xff09;、声音模块&#xff08;mixer&#xff09;、输入/输出&#xff08;鼠标、键盘、显示屏&#xff09;模…...

TCL学习笔记(持续更新)

前言&#xff1a; TCL&#xff08;tool common language&#xff09;是一种通用工具语言&#xff0c;很多eda tool都支持tcl&#xff0c;学习了解一些tcl基本语法还是很有必要的。 1&#xff1a;基础概念 解释器&#xff1a; #!/usr/bin/tclsh 打印&#xff1a; puts -> p…...

Xpath的问题:为什么在DOM中确定存在(可见)的元素,用//表达式匹配不到(附解决办法)

今天遇到一个很有意思的问题&#xff0c;我的爬取的目标页面上有时会出现一个弹窗&#xff0c;它挡住我点击其它按钮了&#xff0c;我想找到它的关闭按钮&#xff0c;自动点击一下关闭掉&#xff0c;本来是很简单的事情&#xff0c;但偏偏出问题了&#xff0c;DOM中看到的html是…...

有没有游泳可以戴的耳机?游泳耳机入耳式好,还是骨传导好

游泳是一项既能锻炼身体又能让人放松心情的运动。我们知道&#xff0c;音乐能够为我们的水上时光增添更多的乐趣。那么&#xff0c;在众多游泳耳机中&#xff0c;如何选择一款既适合自己的需求又具备良好性能的产品呢&#xff1f; 首先&#xff0c;我们要了解的是&#xff0c;…...

【绘图软件】自用安装教程

链接&#xff1a;https://pan.baidu.com/s/17r9Pr460FzkULU7fTr91_w?pwdftv7 提取码&#xff1a;ftv7 --来自百度网盘超级会员V6的分享解压并且右键打开set up 解压crack软件前需要退出杀毒软件&#xff0c; 关闭实时保护 域网络关闭&#xff0c;专用网络关闭&#xff0…...

AIGC时代-GPT-4和DALL·E 3的结合

在当今这个快速发展的数字时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为了我们生活中不可或缺的一部分。从简单的自动化任务到复杂的决策制定&#xff0c;AI的应用范围日益扩大。而在这个广阔的领域中&#xff0c;有两个特别引人注目的名字&#xff1a;GPT-4和D…...

springBoot集成RabbitMQ实现(直连模式\路由模式\广播模式\主题模式)的消息发送和接收

该项目介绍了springboot如何集成rabbitMQ消息中间件,实现(直连模式\路由模式\广播模式\主题模式)的消息发送和接收 pom依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId...

Attention机制

目录 提出背景 Attention原理 Attention机制本质思想 Attention机制总结 改进&#xff1a;Self-Attention 前置知识&#xff1a;RNN&#xff0c;LSTM/GRU 提出背景 Attention模型是基于Encoder-Decoder框架提出的。Encoder-Decoder框架&#xff0c;也就是编码-解码框架&…...

Rust 常用的第三方库

Rust 的标准库虽然已经很强大&#xff0c;但如果恰当地使用第三方库&#xff0c;可以大大改善编程效率。以下是一些常用的 Rust 第三方库。 tokio ---- 最通用的异步编程库&#xff0c;几乎可以说是行业标准了&#xff0c;大量的其它库依赖于tokio。reqwest ---- HTTP 客户端库…...

构建高可用性Java应用:介绍分布式系统设计与开发

构建高可用性Java应用需要考虑许多因素&#xff0c;其中之一是设计和开发分布式系统。分布式系统是由多个独立计算机或节点组成的系统&#xff0c;这些节点通过网络连接&#xff0c;共同完成一项任务。 在分布式系统设计和开发中&#xff0c;有几个关键方面需要考虑&#xff1…...

x-cmd pkg | gitui - git 终端交互式命令行工具

目录 简介首次用户功能特点类似工具与竞品进一步探索 简介 gitui 由 Stephan D 于 2020 年使用 Rust 语言构建的 git 终端交互式命令行工具&#xff0c;旨在终端界面中便捷管理 git 存储库。 首次用户 使用 x gitui 即可自动下载并使用 在终端运行 eval "$(curl https:/…...

javaWeb案例知识点

一.rest风格编程 二.综合案例结构 三.分页查询 分页插件PageHelper 四.部门管理开发 五.员工管理开发 六.文件上传...

SQL日期列更新操作详解

在实际的数据库管理过程中&#xff0c;有时我们需要对数据库中的日期列进行更新。这篇博客将详细介绍一条 SQL 语句&#xff0c;该语句用于更新 referral_up_order 表中的多个日期列&#xff0c;并将它们的日期部分更改为 2023-10-24&#xff0c;同时保留原始时间部分。 1、背…...

stable diffusion 基础教程-图生图

界面 图生图大概有以下几个功能: 图生图涂鸦绘制局部绘制局部绘制(涂鸦蒙版)其常用的也就上面四个,接下来逐步讲解。 以图反推提示词 图生图可以根据反推提示词来获取相应图片的提示词,目前3种主流方式,如下: CLIP反推提示词:推导出的文本倾向于自然语言的描述方式,…...

如何获取高质量的静态住宅代理?常见问题与误区

静态住宅IP代理在今天的网络营销领域扮演着至关重要的角色&#xff0c;静态住宅IP代理以其稳定性和高匿名性&#xff0c;为互联网业务提供了一个安全的执行环境。通过模拟真实用户的网络行为&#xff0c;这些IP代理降低了企业在网络营销活动中被识别和封禁的风险。它保护了企业…...

基于SpringBoot的旅游网站281

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的旅游网站281,java项目。…...

做外贸没客户就静下来沉淀

最近有人说&#xff0c;现在手上的各种群都变得很安静了&#xff0c;像之前&#xff0c;到各种节日&#xff0c;比如国庆&#xff0c;冬至&#xff0c;元旦这些。群里都非常热闹&#xff0c;不说全部人&#xff0c;总会有几个人发红包&#xff0c;或者发祝贺信息的。今年发现&a…...

网络流总结

网络流总结 基础知识最大流最小割定理 最大流EKdinic模型二分图匹配无源汇上下界可行流有源汇上下界最大、最小流多源汇最大流最大流之关键边最大流之拆点最大流建图实战 最小割模型最大权闭合子图最大密度子图最小点权覆盖集最大点权独立集最小割建图实战 费用流EK模型费用流与…...

安卓11通过脚本修改相应板型系统属性

安卓10以后rk的一套源码兼容很多板型&#xff0c;多种cpu型号都兼容了&#xff0c;这一点相比之前省心了很多&#xff0c;所以就诞生了需要一套代码兼容多种板子的需求&#xff0c;定制修改中需要经常修改系统属性&#xff0c;通过以下脚本一次实现&#xff1a; #!/bin/bashfu…...

网络安全—PKI公钥基础设施

文章目录 前提知识散列函数非对称加密数字签名 PKI受信任的人RA注册CA颁发IKE数字签名认证&#xff08;交换证书&#xff09;密钥管理 前提知识 散列函数 散列也可以叫哈希函数&#xff0c;MD5、SHA-1、SHA-2、、&#xff08;不管叫啥&#xff0c;都记得是同一个东西就行&…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...