使用pygame绘制图形

news2024/11/20 3:19:32

参考链接:https://www.geeksforgeeks.org/pygame-tutorial/?ref=lbp

在窗口中绘制单个图形

import pygame
from pygame.locals import *
import sys
pygame.init()

window = pygame.display.set_mode((600,600))
window.fill((255,255,255))

# pygame.draw.rect(window, (0,0,255), [100,100,400,100],0)
# pygame.draw.circle(window, (0, 0, 255),[300,300], 170, 0)
# pygame.draw.polygon(window, (255,0,0), [[300,300],[100,400],[100,300]])
pygame.draw.line(window, (0, 0, 0), [100, 300], [500, 300], 5)
pygame.display.update()

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
  1. pygame.draw.rect()

    这个函数用于在屏幕上绘制一个矩形。它的参数如下:

    • Surface:要在其上绘制矩形的窗口或屏幕对象。
    • color:矩形的颜色。这是一个RGB值,带有三个组件(每个范围从0到255)的元组。例如,(255, 0, 0)为红色。
    • Rect:矩形的位置和尺寸,格式为[x坐标, y坐标, 矩形宽度, 矩形高度]。
    • width(可选):矩形的厚度。如果值为0(默认值)或省略,则内部填充为颜色。
  2. pygame.draw.circle()

    这是一个用于在屏幕上绘制一个圆形的函数。它的参数为:

    • Surface:要在其上绘制圆形的窗口或屏幕对象。
    • color:同上,圆形的颜色。
    • pos:圆心的位置,格式为[x坐标, y坐标]。
    • radius:圆的半径。
    • width(可选):与上面的相同,圆的厚度。
  3. pygame.draw.polygon()

    这个函数用于在屏幕上绘制一个多边形。参数为:

    • Surface:要在其上绘制多边形的窗口或屏幕对象。
    • color:多边形的颜色。
    • pointlist:多边形顶点的位置列表,格式为[[x1, y1], [x2, y2], …]。
    • width(可选):多边形的厚度。
  4. pygame.draw.line()

    这个函数用于在屏幕上绘制一条线。该函数的参数如下:

    • Surface:要在其上绘制线条的窗口或屏幕对象。
    • color:线条的颜色。这是一个RGB值,带有三个组件(每个范围从0到255)的元组。例如,(0, 0, 0)为黑色。
    • start_pos:线条起点的位置,为一个坐标列表,即 [x坐标, y坐标]。
    • end_pos:线条终点的位置,格式与 start_pos 相同。
    • width (可选):线条的宽度。默认值为1。

绘制多个图形

import pygame
from pygame.locals import *
pygame.init()

window = pygame.display.set_mode((600,600))
window.fill((255,255,255))

pygame.draw.rect(window, (0,0,255),[50,200,500,200])
pygame.draw.circle(window, (0,255,0),[300,300],100)

pygame.display.update()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
pygame.quit()

首先,导入了 pygame 模块,并初始化了 pygame

然后,创建了一个 600x600 大小的窗口,并填充了白色背景。

在窗口上绘制了一个蓝色的矩形,其左上角坐标是(50,200),长是500像素,宽是200像素。

接着,在窗口上绘制了一个绿色的圆形,圆心位于(300,300),半径为100像素。

最后,更新了显示,并在用户关闭窗口之前保持了一个运行循环。
在这里插入图片描述

import pygame  # 导入pygame模块, 这是一个用于开发视频游戏的Python库
from pygame.locals import *  # 导入pygame.locals 模块中的所有内容,该模块包含了很多常用的常量和函数

pygame.init()  # 初始化pygame模块

window = pygame.display.set_mode((600,600))  # 创建一个600 x 600像素的窗口 
window.fill((255,255,255))  # 为这个窗口填充白色 (RGB: 255,255,255)

# 创建含有五个矩形的列表
rect_list = [
    pygame.Rect(50,100,500,200), 
    pygame.Rect(70,120,460,160),   
    pygame.Rect(90,140,420,120),   
    pygame.Rect(110,160,380,80),
    pygame.Rect(130,180,340,40)    
]

# 创建含有五种不同颜色的列表
color_list = [
    (0, 0, 0),
    (255, 255, 255,),
    (0, 0, 255),
    (0, 255, 0),
    (255, 0, 0)
]

color_var = 0  # 初始化颜色索引变量

# 遍历矩形列表并为每个矩形绘制对应的颜色
for rectangle in rect_list :
    pygame.draw.rect(window, color_list[color_var], rectangle)  # 在window上绘制一个指定颜色和大小和位置的矩形
    color_var += 1  # 颜色索引变量+1

pygame.display.update()  # 更新显示的内容使绘制的矩形可见

# 主游戏循环
running = True  
while running:
    for event in pygame.event.get():  # 为窗口处理事件
        if event.type == pygame.QUIT :  # 如果事件类型是QUIT(通常表示关闭窗口事件)
            running = False  # 退出主循环

pygame.quit()  # 关闭pygame窗口

在这里插入图片描述

使用函数

import pygame  # 导入pygame库,这是一个用于2D游戏开发的库
from pygame.locals import *  # 从pygame模块中导入常用的函数和常量

def drawingfunction(x, y, width, height):  # 声明一个名为drawingfunction的函数,接受四个参数:x,y坐标和矩形宽度和高度
    pygame.draw.rect(window, (0, 0, 255), [x, y, width, height])  # 在给定位置和大小上画一个蓝色矩形

    circle_x = width / 2 + x  # 计算圆心x坐标
    circle_y = height / 2 + y  # 计算圆心y坐标

    # 判断宽度和高度哪个较小,并将其一半作为半径值
    if height < width:
        radius = height / 2
    else:
        radius = width / 2
    pygame.draw.circle(window, (0, 255, 0), [circle_x, circle_y], radius)  # 画一个绿色的圆形

pygame.init()  # 初始化所有导入的pygame模块

window = pygame.display.set_mode((600, 600))  # 创建一个新的窗口
window.fill((255, 255, 255))  # 使用白色填充窗口

drawingfunction(50, 200, 500, 200)  # 调用我们前面定义的函数,画一个矩形和圆形

pygame.display.update()  # 更新整个窗口

running = True  # 控制游戏循环的开关
while running:  # 主游戏循环,当运行开关为真时,持续运行
    for event in pygame.event.get():  # 遍历事件队列
        if event.type == pygame.QUIT:  # 当获取到退出事件时,将运行开关置为假,从而退出主游戏循环
            running = False

pygame.quit()  # 退出pygame,清理内存

用鼠标点击来绘制形状

也就是加了监听器

import pygame  # 导入pygame模块,用于游戏开发
from pygame.locals import *  # 导入 pygame.locals 模块中的所有内容。这个模块包含了 pygame 所需的常量和函数

pygame.init()  # 初始化 pygame 库,准备图形和声音库

window = pygame.display.set_mode((600,600))  # 创建一个600x600像素大小的窗口
window.fill((255, 255, 255))  # 将窗口填充为白色,RGB代码为 (255,255,255)

circle_positions = []  # 初始化储存圆的位置的空列表
circle_radius = 60  # 设置画圆的半径为60像素

color = (0, 0, 255)  # 设置画圆的颜色为蓝色,RGB代码为 (0,0,255)

run = True  # 设置运行标记为 True,这将允许主游戏循环运行
while run:  # 主游戏循环
    for event in pygame.event.get():  # 遍历所有事件
        if event.type == pygame.QUIT:  # 如果事件类型为 QUIT (通常为点击窗口关闭按钮)
            run = False  # 将运行标记设置为 False,退出主游戏循环
        elif event.type == MOUSEBUTTONDOWN:  # 如果事件类型为鼠标按钮被点击
            position = event.pos  # 获取鼠标当前位置
            circle_positions.append(position)  # 将鼠标当前位置加入到储存圆位置的列表中

    for position in circle_positions:  # 遍历所有的圆的位置
        pygame.draw.circle(window, color, position, circle_radius)  # 在指定位置绘制一个蓝色圆
    pygame.display.update()  # 更新屏幕显示,保证新绘制的圆立即可见
pygame.quit()  # 退出 pygame,关闭窗口

在这里插入图片描述

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

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

相关文章

针对上一篇微信同声传译语音播报部分坑的解决和优化

1. 上一篇语音播报其实是不完美的&#xff0c;就是如何停止上一个音频开始下一个音频的问题&#xff0c;我在此做一下修改 比如说&#xff1a;现在正在播放1&#xff0c;我点击2让2开始播放&#xff0c;1停止播放&#xff0c;我上面的写法是有问题的&#xff1a; 通过 innerAu…

编译器 编译过程 compiling 动态链接库 Linking 接口ABI LTO PGO inline bazel增量编译

编译器 编译过程 compiling 动态链接库 Linking 接口ABI LTO PGO Theory Shared Library Symbol Conflicts (on Linux) 从左往右查找:Note that the linker only looks further down the line when looking for symbols used by but not defined in the current lib.Linux 下…

【全部更新完毕】2024电工杯B题详细思路代码成品文章教学:大学生平衡膳食食谱的优化设计及评价

大学生平衡膳食食谱的优化设计及评价 摘要 大学阶段是学生获取知识和身体发育的关键时期&#xff0c;也是形成良好饮食习惯的重要阶段。然而&#xff0c;当前大学生中存在饮食结构不合理和不良饮食习惯的问题&#xff0c;主要表现为不吃早餐或早餐吃得马虎&#xff0c;经常食用…

JVM学习-垃圾收集器(三)

G1回收器-区域化分代式 为了适应不断扩大的内存和不断增加的处理器数量&#xff0c;进一步降低暂停时间&#xff0c;同时兼顾良好的吞吐量官方给G1设定的目标&#xff1a;延迟可控的情况下获得尽可能高的吞吐量&#xff0c;所以才担当起“全功能收集器”的重任与期望G1是一款面…

构建数字未来:探索Web3在物联网中的新视角

引言 随着Web3时代的来临&#xff0c;物联网技术正迎来一场新的变革。在这个数字化时代&#xff0c;Web3所带来的技术创新将为物联网的发展开辟新的视角。本文将深入探讨Web3在物联网领域的应用&#xff0c;揭示其在构建数字未来中的重要性和影响。 Web3与物联网的融合 区块链…

Docker学习笔记(二)Dockerfile自定义镜像、DockerCompose、Docker私有镜像仓库

文章目录 前言3 Dockerfile自定义镜像3.1 镜像结构3.2 Dockerfile文件3.3 构建自定义镜像3.3.1 基于Ubuntu构建Java项目3.3.2 基于Java8构建Java项目 3.4 小结 4 DockerCompose4.1 安装DockerCompose4.2 部署微服务集群 5 Docker私有镜像仓库 前言 Docker学习笔记(一)安装Dock…

ctfhub中的SSRF的相关例题(下)

目录 URL Bypass 知识点 相关例题 数字IP Bypass 相关例题 方法一&#xff1a;使用数字IP 方法二&#xff1a;转16进制 方法三&#xff1a;用localhost代替 方法四&#xff1a;特殊地址 302跳转 Bypass ​编辑 关于localhost原理: DNS重绑定 Bypass 知识点&…

每日练习之数学——砝码和天平

砝码和天平 题目描述 运行代码 #include<iostream> using namespace std; int main() {int w,m,T;cin>>T;while(T--){cin>>w>>m;while(m){if((m-1)%w0)m(m-1)/w;else if((m1)%w0)m(m1)/w;else if(m%w0)m/w;else break;}if(!m)cout<<"YES&…

「职场必备」让你摆脱思维混乱的7个工具

1. 升维思考&#xff0c;降维拆解 解决复杂问题时&#xff0c;有两个关键的阶段&#xff0c;能让我们事半功倍。 第一个阶段是思考阶段&#xff0c;要自下而上进行“升维思考”&#xff0c;明确问题的本质是什么。第二阶段是行动阶段&#xff0c;要自上而下进行“降维拆解”&am…

Excel查找匹配函数(VLOOKUP):功能与应用解析

文章目录 概述VLOOKUP函数语法查询并返回单列结果查找并返回多列结果MATCH函数VLOOKUPMATCH 从右向左逆向查找&#xff1a;INDEX函数INDEXMATCH 函数匹配方式查找匹配注意事项函数名称错误: #NAME?值错误&#xff1a;#VALUE!引用错误&#xff1a;#REF!找不到数据&#xff1a;#…

1、NLP分词

分词处理 1、token&#xff08;词汇单元&#xff09;2、Tokenizer&#xff08;分词&#xff09;3、ElasticSearch 分词器&#xff08;Analyzer&#xff09;4、分词工具停用词&#xff08;Stop words&#xff09; 1、token&#xff08;词汇单元&#xff09; “token”主要用于文…

AI早班车5.25

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步&#x1f91d;&#x1f91d; 一位上进心十足的【Java ToB端大厂…

51-53 DriveWorld:通过自动驾驶世界模型进行 4D 预训练场景理解 (含模型数据流梳理)

24年5月&#xff0c;北京大学、国防创新研究院无人系统技术研究中心、中国电信人工智能研究院联合发布了DriveWorld: 4D Pre-trained Scene Understanding via World Models for Autonomous Driving。 DriveWorld在UniAD的基础上又有所成长&#xff0c;提升了自动驾驶目标检测…

linux之防火墙工具

netfilter Linux防火墙是由Netfilter组件提供的&#xff0c;Netfilter工作在内核空间&#xff0c;集成在linux内核中。 Netfilter在内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING)&#xff0c;而这五个hook function向用户…

人工智能应用-实验8-用生成对抗网络生成数字图像

文章目录 &#x1f9e1;&#x1f9e1;实验内容&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;代码&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;分析结果&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;实验总结&#x1f9e1;&#x1f9e1; &#x1f9…

Stable Diffusion【艺术特效】【霓虹灯】:霓虹灯像素化马赛克特效

提示词 Neon pixelated mosaic of [Subject Description],highly detailed [主题]的霓虹灯像素化马赛克&#xff0c;高度详细 参数设置 大模型&#xff1a;万享XL_超写实摄影V8.2 采样器&#xff1a;Euler a 采样迭代步数&#xff1a;25 CFG&#xff1a;3 反向提示词&#x…

Docker Desktop安装和如何在WSL2中使用Docker

最近在使用WSL的过程中&#xff0c;想使用docker遇到了一些问题&#xff0c;在WSL中安装Linux版本的docker&#xff0c;启动镜像之后不能从Windows机器的端口映射出来&#xff0c;查了一圈之后&#xff0c;发现应该使用Docker Desktop软件&#xff0c;下面是安装和使用的方式 …

UE5 双手握剑的实现(逆向运动学IK)

UE5 双手握剑的实现 IK 前言 什么是IK&#xff1f; UE官方给我们提供了很多对于IK处理的节点&#xff0c;比如ABRIK、Two Bone IK、Full Body IK 、CCD IK等&#xff0c;但是看到这&#xff0c;很多人就好奇了&#xff0c;什么是IK&#xff1f; 首先我们来看看虚幻小白人的骨…

实战Java虚拟机-实战篇

一、内存调优 1.内存溢出和内存泄漏 内存泄漏&#xff08;memory leak&#xff09;&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在GC ROOT的引用链上&#xff0c;这个对象就不会被垃圾回收器回收&#xff0c;这种情况就称之为内存泄漏。内存泄漏绝大…

图论(二)-图的建立

引言&#xff1a; 建图&#xff0c;将图放进内存的方法 常用的建图方式&#xff1a;邻接矩阵&#xff0c;邻接链表&#xff0c;链式前向星 一、邻接矩阵 通过一个二维数组即可将图建立&#xff0c;邻接矩阵&#xff0c;考虑节点集合 &#xff0c;用一个二维数组定义邻接矩…