【Python游戏】编程开发贪吃蛇游戏(升级版)

2024-08-22 15:20

本文主要是介绍【Python游戏】编程开发贪吃蛇游戏(升级版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文收录于 《一起学Python趣味编程》专栏,从零基础开始,分享一些Python编程知识,欢迎关注,谢谢!

文章目录

    • 一、前言
    • 二、正式开始
        • 2.1 增加游戏背景音乐和吃掉食物动效音乐
        • 2.2 从单人游戏模式升级为双人游戏模式
        • 2.3 增加支持游戏手柄Xbox操作
        • 2.4 从生成单个食物升级为随机生成多个食物
        • 2.5 窗口顶部增加跑马灯效果,播放当前游戏得分排名
        • 2.6 当得分满足条件时,播放动画点赞效果
    • 三、游戏录屏和完整代码
    • 四、总结

一、前言

本文介绍如何对Python贪吃蛇游戏进行升级改造。

  • 什么是Python?

    Python是由荷兰人吉多·范罗苏姆于1990年代初设计的一门编程语言,应用领域非常广泛,尤其在数据分析、人工智能、游戏开发等领域,已经成为最受欢迎的程序设计语言之一,比较适合新手学习。
    Python语言标准库官方使用手册:https://docs.python.org/zh-cn/3/library/

  • 什么是Pygame?

    Pygame 是一个专门用来开发游戏的 Python 模块,是一个免费、开源的第三方软件包,主要为开发、设计 2D 电子游戏而生,比如扫雷、纸牌游戏、贪吃蛇、超级马里奥、飞机大战等等。
    Pygame官网地址:https://www.pygame.org/tags/all

  • 本次贪吃蛇游戏升级的内容有哪些?

    1、增加游戏背景音乐和吃掉食物动效音乐;
    2、从单人游戏模式升级为双人游戏模式;
    3、增加支持游戏手柄Xbox操作;
    4、从生成单个食物升级为随机生成多个食物;
    5、窗口顶部增加跑马灯效果,播放当前游戏得分排名;
    6、当得分满足条件时,播放动画点赞效果;
    

在这里插入图片描述

二、正式开始

2.1 增加游戏背景音乐和吃掉食物动效音乐

‌在贪吃蛇游戏中增加游戏背景音乐,可以使用pygame.mixer‌,它是Pygame模块中的一个子模块,专门用于加载和播放声音。

import time
import pygame# 初始化pygame
pygame.init()# 设置音频文件的路径
music_path = 'assets/music/bgm.mp3'# 加载音乐
pygame.mixer.music.load(music_path)# 播放音乐
pygame.mixer.music.play()# 进程挂起休眠X秒
time.sleep(10)# 停止音乐
pygame.mixer.music.stop()# 退出pygame
pygame.quit()

这段代码演示了如何使用pygame.mixer模块来加载和播放音乐文件。在播放音乐之前,我们首先初始化pygame,加载音乐文件。然后,我们播放音乐,并在需要时停止音乐和退出pygame。

2.2 从单人游戏模式升级为双人游戏模式

贪吃蛇从单人游戏模式升级为双人游戏模式,由于python是面向对象编程语言,所以,我们只需要在原有的代码的基础上,再生成一个蛇类对象即可。

# 定义蛇类,点以25为单位
class Snake(object):# 初始化, 设置开始时移动方向和身体块长度x5def __init__(self, snake_no, operate_type):self.snake_no = snake_no  # 蛇编号,蛇1:snake_no_1,蛇2:snake_no_2self.operate_type = operate_type  # 操作方式,游戏手柄:xbox,键盘:keyboardself.body = []if SNAKE_NO_1 == snake_no:if OPERATE_TYPE_XBOX == operate_type:self.direction = XBOX_RIGHTif OPERATE_TYPE_KEYBOARD == operate_type:self.direction = KEY_D_RIGHTfor x in range(5):self.add_first_node(0, 400)if SNAKE_NO_2 == snake_no:if OPERATE_TYPE_XBOX == operate_type:self.direction = XBOX_LEFTif OPERATE_TYPE_KEYBOARD == operate_type:self.direction = pygame.K_LEFTfor x in range(5):self.add_first_node(800, 400)# 新增第一个蛇块def add_first_node(self, left, top):# 创建一个指定位置和大小的矩形区域,即蛇块node = pygame.Rect(left, top, 25, 25)self.body.insert(0, node)  # insert在列表的指定位置插入一个元素# 生成两个蛇类
snake_no_1 = Snake(SNAKE_NO_1, OPERATE_TYPE_XBOX)
snake_no_2 = Snake(SNAKE_NO_2, OPERATE_TYPE_XBOX)
2.3 增加支持游戏手柄Xbox操作

在贪吃蛇游戏中,增加支持游戏手柄Xbox操作,需要使用pygame.joystick,它是与游戏杆、游戏手柄、追踪球进行交互的 pygame 模块。其中,Joystick 类的每个实例代表一个插入电脑的游戏设备。
在这里插入图片描述

以下是一个使用游戏杆控制红色圆圈移动的简单示例:

import pygame
import sys# 初始化pygame
pygame.init()# 设置屏幕大小
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))# 设置角色的起始位置
x = 50
y = 50# 游戏主循环标志
running = True# 游戏杆的轴索引
AXIS_LEFT_RIGHT = 0
AXIS_UP_DOWN = 1# 游戏杆索引
JOYSTICK_ID = 0# 获取玩家的游戏杆
joystick = pygame.joystick.Joystick(JOYSTICK_ID)
joystick.init()# 游戏主循环
while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 获取游戏杆的轴值axes = joystick.get_axis(AXIS_LEFT_RIGHT)axes_up_down = joystick.get_axis(AXIS_UP_DOWN)# 根据轴值移动角色if axes > 0.5:x += 5elif axes < -0.5:x -= 5if axes_up_down > 0.5:y += 5elif axes_up_down < -0.5:y -= 5# 确保角色不会移出屏幕x = max(0, min(screen_width, x))y = max(0, min(screen_height, y))# 绘制背景screen.fill((255, 255, 255))# 绘制角色pygame.draw.circle(screen, (255, 0, 0), (x, y), 10)# 更新屏幕显示pygame.display.flip()# 限制游戏循环的速度pygame.time.delay(10)# 结束pygame
pygame.quit()
sys.exit()

这段代码首先初始化pygame,设置屏幕大小,并获取玩家的游戏杆。然后,它进入一个主循环,在循环中不断检测事件(比如窗口关闭事件),并根据玩家的游戏杆轴值移动一个红色圆圈。游戏的主循环速度被限制,以避免使用过多的CPU资源。最后,当玩家关闭窗口或者程序结束时,pygame库被正确地关闭。

2.4 从生成单个食物升级为随机生成多个食物

在贪吃蛇游戏中,由原来生成单个食物,想升级为随机多个食物。可以使用随机函数,随机创建若干个食物类对象,存放在一个列表中。
在这里插入图片描述

示例代码如下:

 # 创建一波食物对象,放在列表Foods中if len(Foods) == 0:for i in range(random.randint(2, 10)):Foods.append(Food())
2.5 窗口顶部增加跑马灯效果,播放当前游戏得分排名

在贪吃蛇游戏中,窗口顶部增加跑马灯效果,播放当前游戏得分排名。首先,可以把每次游戏的得分数据进行排序后记录在一个TXT文件中。之后,从TXT文件中读取得分排名数据,放在文本Surface对象中。最后,把文本Surface对象绘制在屏幕screen上。

在这里插入图片描述

以下是一个TXT文件读写简单示例。

# 写入得分txt文件,数据为字典格式
def write_txt(file_name, data_dict):try:with open(file_name, 'w', encoding='utf-8') as f1:data_str = json.dumps(data_dict)  # json to strf1.write(data_str)except FileNotFoundError:print('文件未找到,请检查文件路径是否正确。')# 读取得分txt文件,返回字典格式数据
def read_txt(file_name):try:with open(file_name, 'r', encoding='utf-8') as f1:data_list = f1.readlines()if len(data_list) > 0:data_dict = json.loads(data_list[0])  # str to jsonreturn data_dictexcept FileNotFoundError:print('文件未找到,请检查文件路径是否正确。')

以下是一个屏幕上显示文本Surface对象简单示例:

# 导入所需的模块
import sys
import pygame# 使用pygame之前必须初始化
pygame.init()# 设置主屏窗口
screen = pygame.display.set_mode((400, 600))# 设置窗口的标题
pygame.display.set_caption('pygame demo')# 引入字体类型
f = pygame.font.Font('C:/Windows/Fonts/simhei.ttf', 50)# 生成文本信息,第一个参数文本内容;第二个参数字体是否平滑;第三个参数字体颜色设置红色;第四个参数字体背景颜色设置为蓝色;
text = f.render("hello world!", True, (255, 0, 0), (0, 0, 255))# 获得显示对象的rect区域坐标
textRect = text.get_rect()
# 设置显示对象居中
textRect.center = (200, 200)# 将准备好的文本信息,绘制到主屏幕 Screen 上。
screen.blit(text, textRect)# 固定代码段,实现点击"X"号退出界面的功能,几乎所有的pygame都会使用该段代码
while True:# 循环获取事件,监听事件状态for event in pygame.event.get():# 判断用户是否点了"X"关闭按钮,并执行if代码段if event.type == pygame.QUIT:# 卸载所有模块pygame.quit()# 终止程序,确保退出程序sys.exit()pygame.display.flip()  # 更新屏幕内容
2.6 当得分满足条件时,播放动画点赞效果

在贪吃蛇游戏中,当得分满足条件时,想播放动画点赞效果。需要使用图像Surface对象,之后通过不断的修改图像的坐标,实现动画播放效果。

在这里插入图片描述

简单的代码示例如下:

import pygame, syspygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
my_ball = pygame.image.load("../../assets/ball.png")
x = 50
y = 50
x_speed = 5
while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()pygame.time.delay(20)x = x + x_speedif x > screen.get_width():x = 0 - 90screen.blit(my_ball, [x, y])pygame.display.flip()

三、游戏录屏和完整代码

在这里插入图片描述

若需要游戏的完整源码,请在评论区,回复“我要源码”。

四、总结

以上介绍了如何升级改造贪吃蛇游戏,对修改的思路和代码进行了简单的介绍。希望对大家有帮助,谢谢。

如果您对文章中内容有疑问,欢迎在评论区进行留言,我会尽量抽时间给您回复。如果文章对您有帮助,欢迎点赞、收藏。您的点赞,是对我最大的支持和鼓励,谢谢 :-)

这篇关于【Python游戏】编程开发贪吃蛇游戏(升级版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1096645

相关文章

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Python包管理工具pip的升级指南

《Python包管理工具pip的升级指南》本文全面探讨Python包管理工具pip的升级策略,从基础升级方法到高级技巧,涵盖不同操作系统环境下的最佳实践,我们将深入分析pip的工作原理,介绍多种升级方... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

Python中将嵌套列表扁平化的多种实现方法

《Python中将嵌套列表扁平化的多种实现方法》在Python编程中,我们常常会遇到需要将嵌套列表(即列表中包含列表)转换为一个一维的扁平列表的需求,本文将给大家介绍了多种实现这一目标的方法,需要的朋... 目录python中将嵌套列表扁平化的方法技术背景实现步骤1. 使用嵌套列表推导式2. 使用itert

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核