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…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...