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()

 后续发布贪吃蛇吃食物计分完整代码,内容量多

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

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

相关文章

检索增强和知识冲突学习笔记

检索增强生成任务&#xff08;Retrieval-Augmented Generation, RAG&#xff09;是一种自然语言处理技术&#xff0c;它结合了信息检索和生成模型&#xff0c;用于生成高质量的文本输出。具体来说&#xff0c;RAG 模型在生成文本时&#xff0c;会先通过检索模块从外部知识库或文…

从0开始深度学习(25)——多输入多输出通道

之前我们都只研究了一个通道的情况&#xff08;二值图、灰度图&#xff09;&#xff0c;但实际情况中很多是彩色图像&#xff0c;即有标准的RGB三通道图片&#xff0c;本节将更深入地研究具有多输入和多输出通道的卷积核。 1 多输入通道 当输入包含多个通道时&#xff0c;需要…

网管平台(进阶篇):如何正确的管理网络设备?

网络设备作为构建计算机网络的重要基石&#xff0c;扮演着数据传输、连接和管理的关键角色。从交换机、路由器到防火墙、网关&#xff0c;各类网络设备共同协作&#xff0c;形成了高效、稳定的网络系统。本文将详细介绍网络设备的种类&#xff0c;并探讨如何正确管理这些设备&a…

论文 | Teaching Algorithmic Reasoning via In-context Learning

这篇论文《通过上下文学习教授算法推理》探讨了如何通过上下文学习&#xff08;In-context Learning, ICL&#xff09;有效训练大型语言模型&#xff08;LLMs&#xff09;以进行算法推理。以下是从多个角度对这项工作的详细解读&#xff1a; 1. 问题陈述与研究动机 算法推理的…

RK3568平台(基础篇)性能分析工具

一.Linux 性能优化工具简介 Linux 系统性能指标无非就是这几个方面,CPU、内存、磁盘 I/O、文件系统、网络等相关指标。不同的性能指标都有对应的具体命令工具进行查看与监控,接下来我们将介绍一些常见的 Linux 系统性能指标及其对应的命令工具(通过命令工具找出 Linux 系统性…

2024阿里云CTF Web writeup

《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect 前言 又是周末…

Bartender 5 for Mac 菜单栏管理软件 安装教程【保姆级教程,操作简单小白轻松上手使用】

Mac分享吧 文章目录 Bartender 5 for Mac 菜单栏管理软件 安装完成&#xff0c;软件打开效果一、Bartender 5 菜单栏管理软件 Mac电脑版——v5.2.3⚠️注意事项&#xff1a;1️⃣&#xff1a;下载软件2️⃣&#xff1a;安装软件3️⃣&#xff1a;打开软件&#xff0c;根据自己…

职场逆袭!学会管理上司,你也能成为职场赢家

书友们&#xff0c;不要错过了&#xff01;我挖到了一本真正让我彻夜难眠的小说&#xff0c;情节跌宕起伏&#xff0c;角色鲜活得就像从书里跳出来陪你聊天。每一页都是新的惊喜&#xff0c;绝对让你欲罢不能。要是你也在寻找那种让人上瘾的阅读体验&#xff0c;这本书就是你的…

Actor-Critic方法【A2C,A3C,Policy Gradient】

强化学习笔记系列目录 第一章 强化学习基本概念 第二章 贝尔曼方程 第三章 贝尔曼最优方程 第四章 值迭代和策略迭代 第五章 强化学习实例分析:GridWorld 第六章 蒙特卡洛方法 第七章 Robbins-Monro算法 第八章 多臂老虎机 第九章 强化学习实例分析:CartPole 第十章 时序差分法…

若依管理系统使用已有 Nacos 部署流程整理

背景 玩了一下开源项目 RuoYi 管理系统Cloud 版&#xff0c;卡住的地方是&#xff1a;它用到了 nacos 配置管理&#xff0c;如果用的 nacos 环境是单机且是内置数据库的话&#xff0c;该怎么配置呢&#xff1f; 本文整理本机启动 RuoYi Cloud 应用本地部署的过程&#xff0c;…

数字信号处理-FPGA插入不同误码率的模拟源

module data_error_injector (input clk, // 时钟信号&#xff0c;50MHzinput reset, // 复位信号&#xff0c;高有效input DIN_EN, // 数据输入使能&#xff0c;高有效input [7:0] ERROR_LEVEL, // 错误等级…

对称二叉树(力扣101)

题目如下: 思路 对于这道题, 我会采用递归的解法. 看着对称的二叉树, 写下判断对称的条件, 再进入递归即可. 值得注意的是, 代码中会有两个函数, 第一个是isSymmetric,第二个是judge. 因为这里会考虑到一种特殊情况, 那就是 二叉树的根结点(最上面的那个),它会单独用…

山东布谷科技:关于直播源码|语音源码|一对一直播源码提交App Store的流程及重构建议

自从YY、六间房开启国内聊天室和秀场等网红盛行的网络红利时代以来&#xff0c;紧随其后国内各大音视频平台相应出现&#xff0c;先有映客花椒等直播平台的风头正劲&#xff0c;后有功能板块更丰富的头条抖音Tiktok等&#xff0c;盈利功能点不仅仅有直播PK连麦等礼物打赏功能&a…

k8s图形化显示(KRM)

在master节点 kubectl get po -n kube-system 这个命令会列出 kube-system 命名空间中的所有 Pod 的状态和相关信息&#xff0c;比如名称、状态、重启次数等。 systemctl status kubelet #查看kubelet状态 yum install git #下载git命令 git clone https://gitee.com/duk…

ArcGIS地理空间平台 manager 任意文件读取漏洞复现

0x01 产品描述&#xff1a; ‌ ArcGIS‌是一个综合的地理空间平台&#xff0c;由Esri开发&#xff0c;旨在为专业人士和组织提供全面的地理信息系统&#xff08;GIS&#xff09;功能。ArcGIS通过集成和连接地理环境中的数据&#xff0c;支持创建、管理、分析、映射和共享…

【Rust实现命令模式】

Rust实现命令模式 什么是命令模式命令模式的应用场景命令模式的在Rust中的关系图Rust中的命令模式代码示例运行结果总结 什么是命令模式 命令模式,即通过统一接口,如C#interface,亦或C中的抽象类的0方法,通过定义统一的接口,在定义不同的对象,为之接口实现具体的方法逻辑,再通…

【学术论文投稿】React全攻略:构建高性能前端应用的黄金法则

第六届国际科技创新学术交流大会暨管理科学信息化与经济创新发展学术会议&#xff08;MSIEID 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议论文投稿请看&#xff1a;https://ais.cn/u/nuyAF3 目录 引言 1. React简介 2. React的三大核心概念 2.1 JSX 2.2…

鸿蒙应用App测试-专项测试(DevEco Testing)

注意&#xff1a;大家记得先学通用测试在学专项测试 鸿蒙应用App测试-通用测试-CSDN博客 注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&am…

AndroidLab:一个系统化的Android代理框架,包含操作环境和可复现的基准测试,支持大型语言模型和多模态模型。

2024-10-31&#xff0c;由清华大学和北京大学共同创建的AndroidLab数据集&#xff0c;为安卓自主代理的训练和评估提供了一个包含操作环境、行动空间和可复现基准的系统框架&#xff0c;这对于推动安卓代理技术的发展具有重要意义。 数据集地址&#xff1a;Android Instruct|A…

如何在算家云搭建Aatrox-Bert-VITS2(音频生成)

一、模型介绍 ‌ Aatrox - Bert -VITS2 模型是一种基于深度学习的语音合成系统&#xff0c;结合了 BERT 的预训练能力和 VITS2 的微调技术&#xff0c;旨在实现高质量的个性化语音合成。 二、模型搭建流程 1. 创建容器实例 进入算家云的“应用社区”&#xff0c;点击搜索找到…