pycharm小游戏贪吃蛇及pygame模块学习()
由于代码量大,会逐渐发布
一.pycharm学习
在PyCharm中使用Pygame插入音乐和图片时,有以下这些注意事项:
插入音乐:
- 文件格式支持:Pygame常用的音乐格式如MP3、OGG等,但MP3可能需额外安装库(如pymedia等)才能更好支持,OGG格式兼容性相对较好,建议优先选用OGG格式音乐文件以减少潜在问题。
- 路径问题:要确保音乐文件的路径设置正确。在代码中指定音乐文件路径时,要么是绝对路径(完整的文件存储位置路径),但这样可能在项目移植时出现路径不对的情况;要么是相对路径,一般是相对于当前Python脚本文件的位置,比如音乐文件放在和脚本同一文件夹下,直接写文件名就行,若在子文件夹,要写清楚相对的子文件夹路径。
- 初始化 mixer:在播放音乐前,需要先初始化Pygame的mixer模块,例如 pygame.mixer.init() ,否则无法正常播放音乐。
- 音乐加载与播放:先使用 pygame.mixer.music.load("音乐文件名") 加载音乐文件,然后再用 pygame.mixer.music.play() 播放音乐。播放时可设置循环次数等参数,比如 pygame.mixer.music.play(-1) 表示无限循环播放。
插入图片:
- 图片格式支持:常见的如JPEG、PNG等格式一般都支持,但同样要注意不同格式在某些情况下可能有兼容性差异,PNG格式带透明通道等特性,使用较灵活,可优先考虑。
- 路径问题:和音乐文件一样,要保证图片文件路径正确,注意是绝对路径还是相对路径的设置。
- 初始化显示:要先初始化Pygame的显示模块,比如 pygame.init() (通常在程序开头部分完成初始化操作),后续才能正常加载和显示图片。
- 加载与显示:使用 image = pygame.image.load("图片文件名") 加载图片,然后通过 screen.blit(image, (x坐标, y坐标)) 将图片绘制到指定的显示屏幕( screen 是初始化显示后创建的屏幕对象,坐标指定图片显示的位置),最后别忘用 pygame.display.flip() 更新显示,让图片真正显示出来。
基础快速了解,直接去pycharm操作可实现
'''import pygame
pygame.display.set_mode()#初始化一个准备的界面
pygame.display.get_surface()#获取当前的surface对象
pygame.display.flip()#更新整个待显示的surface对象
pygame.display.update(rectangle=None)#更新部分内容显示到屏幕上,如果没有参数,则与flip()功能相同'''# 1. 第一个窗口的实现
# import pygame# pygame.init() # 初始化pygame
# screen = pygame.display.set_mode() # 初始化一个准备的界面
# 上例的缺点:窗口闪一下就,没有了,不能持久工作
# 窗口最大化工作,遮盖了任务栏,影响其他操作,进行优化2. # 窗口持久化'''import pygame
import sys
pygame.init() # 初始化pygame
size=width,height=960,640
screen = pygame.display.set_mode(size)while True:for event in pygame.event.get(): #遍历所有事件if event.type==pygame.QUIT: #如果单击关闭窗口,则退出sys.exit() # 执行退出操作'''# 加continue
# 缺点一直进行# 3.增加图片
'''import pygame
import sys
pygame.init() # 初始化pygame
size=width,height=960,640
screen = pygame.display.set_mode(size)
color=(0,0,0) # 设置背景颜色
plane_image = pygame.image.load("plane.png")#加载图片
plane_rect = plane_image.get_rect()#获取该图片显示的矩形区域while True:for event in pygame.event.get(): #遍历所有事件if event.type==pygame.QUIT: #如果单击关闭窗口,则退出sys.exit() # 执行退出操作screen.fill(color) #填充颜色screen.blit(plane_image, plane_rect) #将图片化到窗口上去pygame.display.flip() #更新显示pygame.quit()
'''# 4.移动图片'''import pygame
import sys,time
pygame.init() # 初始化pygame
size=width,height=960,640
screen = pygame.display.set_mode(size)
color=(0,0,0) # 设置背景颜色
plane_image = pygame.image.load("plane.png")#加载图片
plane_rect = plane_image.get_rect()#获取该图片显示的矩形区域
speed=[5,5] #默认是偏移量while True:for event in pygame.event.get(): #遍历所有事件if event.type==pygame.QUIT: #如果单击关闭窗口,则退出sys.exit() # 执行退出操作plane_rect=plane_rect.move(speed) #控制飞机移动screen.fill(color) #填充颜色screen.blit(plane_image, plane_rect) #将图片化到窗口上去pygame.display.flip() #更新显示time.sleep(0.1)pygame.quit()'''# 5.触碰反弹
'''import pygame
import sys,timepygame.init() # 初始化pygame
size = width, height = 960, 640
screen = pygame.display.set_mode(size)
color = (0, 0, 0) # 设置背景颜色
plane_image = pygame.image.load("plane.png") # 加载图片
plane_rect = plane_image.get_rect() # 获取该图片显示的矩形区域
speed = [5, 5] # 默认是偏移量
i = -1while True:for event in pygame.event.get(): # 遍历所有事件if event.type == pygame.QUIT: # 如果单击关闭窗口,则退出sys.exit() # 执行退出操作plane_rect = plane_rect.move(speed) # 控制飞机移动# 默认矩形框左上角(0,0)if plane_rect.left < 0 or plane_rect.right > width:speed[0] = speed[0] * i # x轴if plane_rect.top < 0 or plane_rect.bottom > height:speed[1] = speed[1] * i # y轴screen.fill(color) # 填充颜色screen.blit(plane_image, plane_rect) # 将图片化到窗口上去pygame.display.flip() # 更新显示time.sleep(0.1)pygame.quit()
'''#6.音乐模块 不支持num格式音乐,MP3,OGG,WAV支持
'''import pygame
import syspygame.init() # 初始化pygame
pygame.mixer.init()
pygame.mixer.music.load(r"D:\41期\pygame模块\有何不可.MP3")
pygame.mixer.music.play(5) #播放6次
pygame.mixer.music.queue(r"D:\41期\pygame模块\有何不可.MP3")
#要持续化
while True:for event in pygame.event.get(): # 遍历所有事件if event.type == pygame.QUIT: # 如果单击关闭窗口,则退出sys.exit() # 执行退出操作'''
二.贪吃蛇实战
可以终端看方块的坐标移动
移动
代码1
#此串代码实现按键控制方块像贪吃蛇一样移动
import pygame
import syspygame.init() # 初始化pygame
size = width, height = 960, 640 # 窗口大小
screen = pygame.display.set_mode(size)
color = (0, 66, 0) # 设置背景颜色
square_color = 33, 255, 33 # 小方块颜色
square_x, square_y = 0, 0 # 小方块坐标
square_size = 20 # 小方块大小
game_speed=120
speed=0.05 # 方块速度
square_speed_x,square_speed_y=speed,0
clock = pygame.time.Clock()
while True:for event in pygame.event.get(): # 遍历所有事件if event.type == pygame.QUIT: # 如果单击关闭窗口,则退出sys.exit() # 执行退出操作# elif event.type == pygame.KEYDOWN:# if event.key == pygame.K_UP:# square_y += -5# elif event.key == pygame.K_DOWN:# square_y += 5# elif event.key == pygame.K_LEFT:# square_x += 5# elif event.key == pygame.K_RIGHT:# square_x += 5# 以上按键对应各方向移动,要实现x,y轴像贪吃蛇一样移动,下面代码elif event.type == pygame.KEYDOWN:if event.key == pygame.K_UP:square_speed_x = 0square_speed_y = -speedelif event.key == pygame.K_DOWN:square_speed_x = 0square_speed_y = speedelif event.key == pygame.K_LEFT:square_speed_y = 0square_speed_x = -speedelif event.key == pygame.K_RIGHT:square_speed_y = 0square_speed_x = speedsquare_y+=square_speed_ysquare_x+=square_speed_x# 防止小方块移出左右边界if square_x<0:square_x=0elif square_x>width-square_size:square_x=width-square_size# 防止小方块移出上下边界if square_y < 0:square_y = 0elif square_y > height - square_size:square_y = height - square_size# 终端看坐标print(square_x,square_y,square_speed_x,square_speed_y)screen.fill(color) # 填充颜色pygame.draw.rect(screen, square_color, (square_x, square_y, square_size, square_size))pygame.display.flip() # 更新显示pygame.quit()
代码2
上述代码用x,y坐标实现方块移动,代码较为冗长,复杂,下面代码同样可以实现上述效果
import pygame
import sys
import randompygame.init() # 初始化pygame
clock = pygame.time.Clock()
size = width, height = 960, 640 # 窗口大小
screen = pygame.display.set_mode(size)
game_speed=120
color = (33,66,33) # 设置背景颜色
square_color = 33, 255, 33 # 小方块颜色# square_x, square_y = 0, 0 # 小方块坐标
# speed=0.05 # 方块速度
# square_speed_x,square_speed_y=speed,0
# square_size = 20 # 小方块大小
CELL_SIZE=20
square_rect=pygame.Rect(0,0,CELL_SIZE,CELL_SIZE)
UP,DOWN,LEFT,RIGHT=(0,-1),(0,1),(-1,0),(1,0)
square_direction=RIGHT # 定义一个初始方向
while True:for event in pygame.event.get(): # 遍历所有事件if event.type == pygame.QUIT: # 如果单击关闭窗口,则退出sys.exit() # 执行退出操作# elif event.type == pygame.KEYDOWN:# if event.key == pygame.K_UP:# square_y += -5# elif event.key == pygame.K_DOWN:# square_y += 5# elif event.key == pygame.K_LEFT:# square_x += 5# elif event.key == pygame.K_RIGHT:# square_x += 5# 以上按键对应各方向移动,要实现x,y轴像贪吃蛇一样移动,下面代码elif event.type == pygame.KEYDOWN:if event.key == pygame.K_UP:square_direction=UPelif event.key == pygame.K_DOWN:square_direction = DOWNelif event.key == pygame.K_LEFT:square_direction = LEFTelif event.key == pygame.K_RIGHT:square_direction = RIGHTsquare_rect=square_rect.move(square_direction)# 防止小方块移出左右边界if square_rect.left<0:square_rect.left=0elif square_rect.right>width:square_rect.right=widthif square_rect.top<0:square_rect.top=0elif square_rect.bottom>height:square_rect.bottom=height# 终端看坐标print(square_rect.x, square_rect.y, square_direction[0],square_direction[1])screen.fill(color) # 填充颜色pygame.draw.rect(screen, square_color,square_rect)pygame.display.flip() # 更新显示clock.tick(game_speed)
pygame.quit()
代码3
在上述代码基础上,增加方块的丰富性及背景的网格线,并修改代码提高效率
背景颜色改为黑色,方块内有一个小黑方块(screen.fill(square_color2, square_rect.inflate(-4,-4)) # 可以放大或缩小图形 来实现
import pygame
import sys
import randompygame.init() # 初始化pygame
clock = pygame.time.Clock()
size = width, height = 960, 640 # 窗口大小
screen = pygame.display.set_mode(size)
game_speed=120
color = 0,0,0 # 设置背景颜色
color2=33,33,33
square_color = 33, 255, 33 # 小方块颜色
square_color2 = 0,0,0# square_x, square_y = 0, 0 # 小方块坐标
# speed=0.05 # 方块速度
# square_speed_x,square_speed_y=speed,0
# square_size = 20 # 小方块大小
CELL_SIZE=20
square_rect=pygame.Rect(0,0,CELL_SIZE,CELL_SIZE)
UP,DOWN,LEFT,RIGHT=(0,-1),(0,1),(-1,0),(1,0)
square_direction=RIGHT # 定义一个初始方向
while True:for event in pygame.event.get(): # 遍历所有事件if event.type == pygame.QUIT: # 如果单击关闭窗口,则退出sys.exit() # 执行退出操作# elif event.type == pygame.KEYDOWN:# if event.key == pygame.K_UP:# square_y += -5# elif event.key == pygame.K_DOWN:# square_y += 5# elif event.key == pygame.K_LEFT:# square_x += 5# elif event.key == pygame.K_RIGHT:# square_x += 5# 以上按键对应各方向移动,要实现x,y轴像贪吃蛇一样移动,下面代码elif event.type == pygame.KEYDOWN:if event.key == pygame.K_UP:square_direction=UPelif event.key == pygame.K_DOWN:square_direction = DOWNelif event.key == pygame.K_LEFT:square_direction = LEFTelif event.key == pygame.K_RIGHT:square_direction = RIGHTsquare_rect=square_rect.move(square_direction)# 防止小方块移出左右边界if square_rect.left<0:square_rect.left=0elif square_rect.right>width:square_rect.right=widthif square_rect.top<0:square_rect.top=0elif square_rect.bottom>height:square_rect.bottom=height# 终端看坐标print(square_rect.x, square_rect.y, square_direction[0],square_direction[1])screen.fill(color) # 填充颜色# pygame.draw.rect(screen, square_color,square_rect)for i in range(CELL_SIZE,width,CELL_SIZE):pygame.draw.line(screen,color2,(i,0),(i,height))for i in range(CELL_SIZE,height,CELL_SIZE):pygame.draw.line(screen,color2,(0,i),(width,i))screen.fill(square_color,square_rect)screen.fill(square_color2, square_rect.inflate(-4,-4)) # 可以放大或缩小图形pygame.display.flip() # 更新显示clock.tick(game_speed)
pygame.quit()
后续发布贪吃蛇吃食物计分完整代码,内容量多
相关文章:

pycharm小游戏贪吃蛇及pygame模块学习()
由于代码量大,会逐渐发布 一.pycharm学习 在PyCharm中使用Pygame插入音乐和图片时,有以下这些注意事项: 插入音乐: - 文件格式支持:Pygame常用的音乐格式如MP3、OGG等,但MP3可能需额外安装库…...
redis实战--黑马商城 记录
一、视频地址 黑马程序员Redis入门到实战教程,深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 二、笔记地址 Redis基础篇Redis实战篇...

机器人技术革新:人工智能的强力驱动
内容概要 在当今世界,机器人技术与人工智能的结合正如星星与大海,彼此辉映。随着科技的不断进步,人工智能不仅仅是为机器人赋予了“聪明的大脑”,更是推动了整个行业的快速发展。回顾机器人技术的发展历程,我们会发现…...

漫途焊机安全生产监管方案,提升安全生产管理水平!
随着智能制造时代的到来,企业安全生产管理的重要性日益凸显。特别是在现代工厂中,焊机的安全生产监管成为了一个不容忽视的重要环节。传统的焊机安全生产监管方式存在诸多不足,如人工巡检频率低、数据延迟、安全隐患发现不及时等问题。因此&a…...

动态规划之两个数组的 dp(上)
文章目录 最长公共子序列不相交的线不同的子序列通配符匹配 最长公共子序列 题目:最长公共子序列 思路 选取s1的[0, i]区间以及s2的[0, j]区间作为研究对象 状态表示:dp[i][j]表示,s1的[0, i]区间以及s2的[0, j]区间内…...

DC-9靶机通关
这是这个系列的最后一个靶机了!!!经过前面的锻炼和学习,这次我的目标是尽量不借助任何教程或者提示来拿下这个靶机!!!下面我们看能不能成功!!! 1.实验环境 攻…...
前端注释都应该怎么写?
以下是一些前端注释的例子,展示了如何应用前面提到的建议: 1. 使用清晰、简洁的语言 // 计算两个数的平均值 function calculateAverage(a, b) {return (a b) / 2; }2. 描述代码的目的和功能 // 将日期格式化为 "YYYY-MM-DD" 的字符串 fun…...

深入解析缓存模式下的数据一致性问题
今天,我们来聊聊常见的缓存模式和数据一致性问题。 常见的缓存模式有:Cache Aside、Read Through、Write Through、Write Back、Refresh Ahead、Singleflight。 缓存模式 Cache Aside 在 Cache Aside 模式中,是把缓存当做一个独立的数据源…...

嵌入式常用功能之通讯协议1--IIC
嵌入式常用功能之通讯协议1--串口 嵌入式常用功能之通讯协议1--IIC(本文) 嵌入式常用功能之通讯协议1--SPI 一、IIC总线协议介绍 Inter-Integrated Circuit(集成电路总线),是由 Philips 半导体公司(现在的 NXP 半导体…...

【Wi-Fi】Wi-Fi 7(802.11be) Vs Wi-Fi 8 (802.11bn)
介绍 WiFi 7 (802.11be) 是 WiFi-6 (802.11ax) 的继任者,旨在提高数据速率并减少拥挤环境中的延迟。 WiFi 8 (8021.1bn)是后续标准,专注于提高 WLAN 连接的可靠性, 提高…...
Ubuntu软件包管理机制
文章目录 🍊自我介绍🍊Ubuntu软件包管理机制🍊软件安装命令详解: 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞关注评论收藏(一键四连)哦~ 🍊自我介绍 Hello,大家好…...
SpringBoot详解:概念、优点、运行方式、配置文件、异步请求及异常处理
一、什么是SpringBoot? SpringBoot是一个基于Spring框架的开源项目,它简化了Spring应用的初始搭建以及开发过程。它提供了自动配置、起步依赖、Actuator、命令行界面等特性,使得开发者可以快速构建出一个独立、生产级别的Spring应用。 二、…...
npm install -g @vue/cil 非常卡慢
安装 vue/cli 时遇到卡慢的情况通常和网络问题有关,特别是国内的网络环境下访问 npm 的服务器可能较慢。你可以尝试以下几种方法来加速: 使用淘宝镜像源 淘宝 NPM 镜像源对国内用户更加友好。你可以临时使用淘宝镜像源安装 vue/cli: npm inst…...
Windows 基础 (二):系统目录与环境变量
内容预览 ≧∀≦ゞ Windows 基础 2:系统目录与环境变量声明系统目录系统核心目录其他重要日志目录应用程序数据目录用户数据目录隐藏目录 环境变量1. 查看环境变量2. 设置永久环境变量3. 查看特定环境变量的值4. 环境变量的存储位置5. 自定义环境变量的应用 结语 Wi…...

World of Warcraft [CLASSIC][80][the Ulduar] BOSS 05 06 07
BOSS-05-钢铁议会 BOSS-06-科隆加恩(无困难模式) BOSS-07-欧尔莉亚(无困难模式)...

World of Warcraft [CLASSIC][80][the Ulduar] BOSS 12 13
BOSS-12-维扎克斯将军 BOSS-13-尤格萨隆...

第一篇 硬件篇1[学习-来自 正点原子]
在电路设计中,TVS(瞬态电压抑制器)是一种有效的保护元件,可以用来防止瞬时过电压对芯片和其他敏感器件造成损坏。 STM32F103RCT6作为MCU 一键下载电路的具体实现过程: 首先, mcuisp控制 DTR输出低电平&…...

【TextIn:开源免费的AI智能文字识别产品(通用文档智能解析识别、OCR识别、文档格式转换、篡改检测、证件识别等)】
TextIn:开源免费的AI智能文字识别产品(通用文档智能解析识别、OCR识别、文档格式转换、篡改检测、证件识别等) 产品的官网:TextIn官网 希望感兴趣以及有需求的小伙伴们多多了解,因为这篇文章也是源于管网介绍才产出的…...
C++语言有哪些常用语句?
1. 变量定义语句 在 C 中,首先要定义变量才能使用。例如 int a;定义了一个整型变量a。这是很基础的语句,它告诉编译器为变量a分配内存空间,用于存储整数值。 如果要定义多个相同类型的变量,可以写成 int a, b, c;除了基本数据类…...
linux alsa-lib snd_pcm_open函数源码分析(二)
访问原版内容,可直接到博客 linux alsa-lib snd_pcm_open函数源码分析(二) https://blog.whatsroot.xyz/2020/08/12/alsa_snd_open-analysis-2/ 系列文章其他部分: linux alsa-lib snd_pcm_open函数源码分析(一) linux alsa-lib snd_pc…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...

STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...

9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...