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.rhkb.cn/news/466408.html

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

相关文章

【harbor】离线安装2.9.0-arm64架构服务制作和升级部署

harbor官网地址&#xff1a;Harbor 参考文档可以看这里&#xff1a;部署 harbor 2.10.1 arm64 - 简书。 前提环境准备&#xff1a; 安装docker 和 docker-compose 先拉arm64架构的harbor相关镜像 docker pull --platformlinux/arm64 ghcr.io/octohelm/harbor/harbor-regist…

【系统集成项目管理工程师教程】第13章 监控过程组

13.1控制质量 主要输入 项目管理计划&#xff08;质量管理计划&#xff09;、项目文件&#xff08;经验教训登记册、质量测量指标、测试与评估文件&#xff09;、批准的变更请求、可交付成果、工作绩效数据。 主要工具与技术 数据收集&#xff08;核对单、核查表、统计抽样、问…

水资源遥测终端机助力灌区信息化建设

随着社会的不断进步和人口数量的持续增加&#xff0c;水资源的管理和合理利用变得愈发关键。为了确保水资源能够得到科学的管理和高效的利用&#xff0c;智慧水务信息化建设已经成为当前社会面临的一项重要任务。在这一过程中&#xff0c;水资源遥测终端机扮演着至关重要的角色…

硬件知识10 线性稳压电源——二极管稳压、射级跟随器稳压、集成电路稳压

目录 一、相关理论 二、二极管稳压电路 1、理论与计算 2、不足 三、射级跟随器稳压电路 四、集成电路稳压器 1、78 79系列 2、LM317 LM337系列 3、功耗计算 一、相关理论 前文已进行了AC到DC的转换&#xff0c;只不过这个DC效果一般&#xff0c;因此需要用到稳压&…

Aop+自定义注解实现数据字典映射

数据字典 Web项目开发中&#xff0c;字典表的一般都会存在&#xff0c;主要用来给整个系统提供基础服务。 比如男女性别的类型可以使用0和1来进行表示&#xff0c;在存储数据和查询数据的时候&#xff0c;就可以使用字典表中的数据进行翻译处理。 再比如之前做的一个项目中宠物…

Cursor的chat与composer的使用体验分享

经过一段时间的试用&#xff0c;下面对 Composer 与 Chat 的使用差别进行总结&#xff1a; 一、长文本及程序文件处理方面 Composer 在处理长文本时表现较为稳定&#xff0c;可以对长文进行更改而不会出现内容丢失的情况。而 Chat 在更改长的程序文件时&#xff0c;有时会删除…

小北的字节跳动青训营与调用模型:调用模型:OpenAI API vs 微调开源Llama2/ChatGLM(持续更新中~~~)

前言 最近&#xff0c;字节跳动的青训营再次扬帆起航&#xff0c;作为第二次参与其中的小北&#xff0c;深感荣幸能借此机会为那些尚未了解青训营的友友们带来一些详细介绍。青训营不仅是一个技术学习与成长的摇篮&#xff0c;更是一个连接未来与梦想的桥梁~ 小北的青训营 X M…

Axure设计之三级联动选择器教程(中继器)

使用Axure设计三级联动选择器&#xff08;如省市区选择器&#xff09;时&#xff0c;可以利用中继器的数据存储和动态交互功能来实现。下面介绍中继器三级联动选择器设计的教程&#xff1a; 一、效果展示&#xff1a; 1、在三级联动选择器中&#xff0c;首先选择省份&#xff…

七次课掌握 Photoshop:选区与抠图

Photoshop 是一门选择的艺术。Photoshop 提供了多种工具和方法来创建选区&#xff0c;适用于不同的场景和需求。 理解和熟练使用这些工具&#xff0c;是提高图像处理能力的关键。 ◆ ◆ ◆ 选区方法与操作 一、创建选区的工具和命令 1、选区工具 &#xff08;1&#xff09;选…

智慧商城项目-VUE2

实现效果 项目收获 通过本项目的练习&#xff0c;可以掌握以下内容&#xff1a; 创建项目 ##基本创建 基于 VueCli 自定义创建项目架子,并对相关的配置进行选择 vue create demo-shopping调整目录 删除文件 删除初始化的一些默认文件 src/assets/logo.pngsrc/components…

Java | Leetcode Java题解之第546题移除盒子

题目&#xff1a; 题解&#xff1a; class Solution {int[][][] dp;public int removeBoxes(int[] boxes) {int length boxes.length;dp new int[length][length][length];return calculatePoints(boxes, 0, length - 1, 0);}public int calculatePoints(int[] boxes, int l…

PDF多功能工具箱 PDF Shaper v14.6

如今对PDF处理的软件很多都是只是单一的功能。PDF Shaper给你完全不同的体验&#xff0c;因为PDF Shaper是一款免费的PDF工具集合的软件。有了PDF Shaper&#xff0c;你以后再也不用下载其他处理PDF的软件了。PDF Shaper的功能有&#xff1a;合并&#xff0c;分割&#xff0c;加…

论文阅读--捍卫基于激光雷达视野范围的三维目标检测

目前存在的问题&#xff1a; 常用的体素化或鸟瞰图&#xff08;BEV&#xff09;表示相比&#xff0c;范围视图表示更紧凑且没有量化误差&#xff0c;但其在目标检测方面的性能很大程度上落后于体素化或 BEV 。范围视图尺度变化的挑战2D 图像不同&#xff0c;虽然距离图像的卷积…

使用匿名管道时出现程序一直运行问题

父进程创建两个子进程&#xff0c;父子进程之间利用管道进行通信。要求能显示父进程、子进程各自的信息&#xff0c;体现通信效果。(源程序pipe_1.c) 一开始&#xff0c;我忘了初始化pipe,很傻*的直接把fd当管道使&#xff0c;出现了儿子喊爸爸"i am your father."的…

【笔记】开关电源变压器设计 - 工作磁通的选择原则

变压器设计中有一个重要的输入参数&#xff0c;是选定电路工作的磁路参数。涉及到磁场的上下震荡最高幅度。如上图所示。磁场的方向有正负&#xff0c;所以如果电流在越过零点震荡&#xff0c;只考虑半周来和Bs或者Bmax比对即可。Bs,Bmax与特定材料有关。材料给出的最大Bmax,或…

一文了解Android本地广播

在 Android 开发中&#xff0c;本地广播&#xff08;Local Broadcast&#xff09;是一种轻量级的通信机制&#xff0c;主要用于在同一应用进程内的不同组件之间传递消息&#xff0c;而无需通过系统的全局广播机制。这种方法既可以提高安全性&#xff08;因为广播仅在应用内传播…

Spark本地模式安装

【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客 《Spark SQL大数据分析快速上手》【摘要 书评 试读】- 京东图书 大数据与数据分析_夏天又到了的博客-CSDN博客 Hadoop完全分布式环境搭建步骤-CSDN博客,前置环境安装参看此博文 Spark本地模式安装 Spark本地模式的安…

SpringSecurity6+OAuth2.0 从入门到熟练使用

文章目录 简介1、快速入门1.1 准备工作我们先要搭建一个SpringBoot工程① 创建工程 添加依赖② 创建启动类③ 创建Controller1.2 引入SpringSecurity2、 认证2.1 登录校验流程2.2 原理分析2.2.1 SpringSecurity完整流程2.2.2 认证流程详解概念速查:2.3 解决问题2.3.1 思路分析2…

计算机网络——SDN

分布式控制路由 集中式控制路由

自动驾驶革命:从特斯拉到百度,谁将主宰未来交通?

内容概要 自动驾驶技术正在经历一个前所未有的革命性变化&#xff0c;各大企业纷纷抢占这一充满潜力的新市场。以特斯拉和百度为代表的行业巨头&#xff0c;正利用各自的优势在这一技术的赛道上展开激烈竞争。特斯拉凭借其在电动汽车和自动驾驶领域的前瞻性设计与不断革新的技…