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…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
