Python 游戏开发入门:用 Pygame 创作贪吃蛇游戏

news/2025/3/28 9:39:32/文章来源:https://www.cnblogs.com/yoyoliwu/p/18791707

在编程的世界里,游戏开发一直是极具吸引力的领域之一。它不仅能够激发你的创造力,还能让你在实践中提升编程技能。Python 作为一门简单易学且功能强大的语言,搭配 Pygame 库,为游戏开发提供了一个完美的起点。今天,就让我们一起走进 Python 游戏开发的世界,从零开始制作经典游戏——贪吃蛇,让编程变得更加有趣!

一、Pygame 简介

Pygame 是一个开源的 Python 游戏开发库,它提供了丰富的功能来创建游戏,包括图形显示、声音处理、用户输入等。Pygame 的设计目标是简单易用,非常适合初学者学习游戏开发的基本概念。

(一)安装 Pygame

在开始之前,你需要安装 Pygame 库。通过 pip 命令可以轻松完成安装:

pip install pygame

二、创建第一个 Pygame 程序

在深入了解游戏开发之前,我们先来创建一个简单的 Pygame 程序,熟悉 Pygame 的基本结构。

(一)初始化 Pygame

import pygame
import sys# 初始化 Pygame
pygame.init()# 设置屏幕大小
screen = pygame.display.set_mode((800, 600))# 设置窗口标题
pygame.display.set_caption("我的第一个 Pygame 程序")# 游戏主循环
running = True
while running:# 遍历所有事件for event in pygame.event.get():# 如果点击关闭按钮,退出游戏if event.type == pygame.QUIT:running = False# 填充屏幕颜色screen.fill((0, 0, 0))# 更新屏幕显示pygame.display.flip()# 退出 Pygame
pygame.quit()
sys.exit()

这段代码展示了 Pygame 程序的基本结构:初始化 Pygame、设置屏幕、进入游戏主循环、处理事件、更新屏幕显示,最后退出 Pygame。

三、开发贪吃蛇游戏

贪吃蛇是一个经典的简单游戏,非常适合用来学习 Pygame 的基本操作。

(一)游戏逻辑

  1. 蛇的移动:蛇在屏幕上移动,每次移动一个单位。
  2. 食物生成:在随机位置生成食物。
  3. 碰撞检测:检测蛇是否吃到食物,或者撞到自己或边界。
  4. 得分:每吃到一个食物,得分增加。

(二)代码实现

import pygame
import sys
import random# 初始化 Pygame
pygame.init()# 设置屏幕大小
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("贪吃蛇游戏")# 定义颜色
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
BLACK = (0, 0, 0)# 蛇的初始位置和速度
snake_pos = [100, 50]
snake_body = [[100, 50], [90, 50], [80, 50]]
food_pos = [random.randrange(1, 80) * 10, random.randrange(1, 60) * 10]
food_spawn = True
direction = 'RIGHT'
change_to = direction
score = 0# 设置帧率
clock = pygame.time.Clock()# 游戏主循环
while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()elif event.type == pygame.KEYDOWN:if event.key == pygame.K_UP and direction != 'DOWN':change_to = 'UP'elif event.key == pygame.K_DOWN and direction != 'UP':change_to = 'DOWN'elif event.key == pygame.K_LEFT and direction != 'RIGHT':change_to = 'LEFT'elif event.key == pygame.K_RIGHT and direction != 'LEFT':change_to = 'RIGHT'# 确认方向direction = change_to# 移动蛇头if direction == 'UP':snake_pos[1] -= 10elif direction == 'DOWN':snake_pos[1] += 10elif direction == 'LEFT':snake_pos[0] -= 10elif direction == 'RIGHT':snake_pos[0] += 10# 蛇身增长snake_body.insert(0, list(snake_pos))if snake_pos == food_pos:score += 1food_spawn = Falseelse:snake_body.pop()# 生成食物if not food_spawn:food_pos = [random.randrange(1, 80) * 10, random.randrange(1, 60) * 10]food_spawn = True# 填充屏幕颜色screen.fill(BLACK)# 绘制蛇和食物for pos in snake_body:pygame.draw.rect(screen, GREEN, pygame.Rect(pos[0], pos[1], 10, 10))pygame.draw.rect(screen, RED, pygame.Rect(food_pos[0], food_pos[1], 10, 10))# 检测碰撞if snake_pos[0] < 0 or snake_pos[0] >= 800 or snake_pos[1] < 0 or snake_pos[1] >= 600:breakfor block in snake_body[1:]:if snake_pos == block:break# 显示得分font = pygame.font.SysFont(None, 36)score_text = font.render(f"得分: {score}", True, WHITE)screen.blit(score_text, (0, 0))# 更新屏幕显示pygame.display.update()# 控制帧率clock.tick(15)

四、游戏优化与拓展

(一)优化游戏体验

  1. 增加游戏结束提示:当蛇撞到自己或边界时,显示游戏结束的提示信息。
  2. 增加音效:为游戏添加音效,例如吃到食物的声音。
  3. 增加难度级别:设置不同的难度级别,调整蛇的速度。

(二)拓展功能

  1. 增加计分板:显示玩家的最高得分。
  2. 增加多玩家模式:支持两名玩家同时游戏。
  3. 增加关卡设计:设计不同的关卡,增加游戏的趣味性。

文章来源于zlibrary图书馆中《Python编程从入门到实践》书的 Python游戏开发入门章节内容

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

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

相关文章

愚人节恶搞代码:系统错误倒计时与节日彩蛋动画

为你的网页增添趣味性和互动性!通过JavaScript轻松创建一个逼真的“系统错误倒计时”画面,结合动态进度条和节日彩蛋动画,为你的用户带来意想不到的惊喜。无论是愚人节还是特殊节日,这段代码都能为你的网站增添一份独特的幽默感和创意。距离愚人节还有一周时间,在这个充满…

RFDN:用于轻量级图像超分辨率的残差特征蒸馏网络

在本文中,我们提出了一种**特征蒸馏连接(feature distillation connection FDC)**,它在功能上等同于通道分裂操作,同时更加轻量级和灵活。多亏了FDC,我们可以重新思考信息**多蒸馏网络(information multi-distillation network IMDN)**,并提出一个轻量级和准确的SISR模…

AI编程的 9 个大坑

原帖:[X@cj_zZZz](x.com) 我每天使用AI工具编程6-7小时。 在过去12个月里开发了超过36个项目。 事实是:用一个提示"给我构建...应用"是不可能的。 所以,以下是你在使用AI编程时可能犯的所有错误: 1. 没有规划 通过我的规划技巧,我能在几小时内从想法到一个写得很…

从按键到语音:家电设备交互的演进之旅

家电,在人们的日常生活中扮演着不可或缺的角色,也是提升人们幸福感的重要组成部分,那你了解家电的发展史吗? #70年代 结婚流行“四大件”:手表、自行车、缝纫机,收音机,合成“三转一响”。#80年代 随着改革开放的深化,中国经济开始飞速发展,黑白电视机、冰箱、洗衣机这…

Docker环境搭建与容器化入门实战——从虚拟机配置到应用部署

作者信息 姓名:林俊祥 专业:云计算技术应用 学号:23593107 技术方向:云平台搭建与部署 一、项目背景 本次实践基于Ubuntu系统,通过虚拟机环境完成Docker的完整部署流程,涵盖: 虚拟机创建与系统安装 SSH远程连接配置 Docker引擎安装与容器管理 应用容器化实战三、关键技术…

Vibe Coding彻底火了,到底什么是氛围编程?它如何改变未来的软件开发?

在过去十年间,低代码/无代码平台和 AI 代码助手持续冲击着软件开发行业。如今,一种被称为 Vibe Coding 的新兴实践突然走红,甚至颠覆了人们对"程序员到底在做什么"的认知。本篇文章将从定义到实践策略、从优势到局限性,全方位探讨 Vibe Coding 给软件开发带来的重…

知识蒸馏实战

蒸馏实战小实验 本实验相关代码已开源至github 失败经历 爱爱医数据蒸馏Qwen2.5-7B 1.用爬虫在爱爱医网站爬取1k条数据。(刚学一点爬虫,不会越过验证码,还是自己一次一次验证😅) 2.数据格式预处理,例如: {"instruction": "你需要基于我提供的患者病历,…

VLM-R1环境搭建推理测试

引子 前文也写了DeepSeek R1模型的安装测试,感兴趣的童鞋移步(https://blog.csdn.net/zzq1989_/article/details/145400876?spm=1001.2014.3001.5502)。那么在多模态方面R1方法(GRPO,Group Relative Policy Optimization)能不能用呢?毫无疑问,已经有不少人在尝试了。今…

振弦采集读数仪 智能型 支持振弦、温度、电压、电流测量,无线传输 自动化操作 适用地质灾害与土木工程监测

振弦采集读数仪 智能型 支持振弦、温度、电压、电流测量,无线传输 自动化操作 适用地质灾害与土木工程监测VH03 型多功能读数仪是一款专为多类型传感器设计的手持式读数设备,主要用于单弦式振弦传感器的测量,同时支持电压、电流传感器的辅助测量。设备采用高性能 32 位 ARM …

GoWebDAV,随时随地访问windows电脑上的文件

GoWebDAV使用 WebDAV 分享本地文件,轻量、易于使用English | 简体中文特性基于 Golang 实现,性能高。最终编译为单二进制文件,不需要 Apache 等环境,依赖少。支持浏览器访问。可以在同个端口下启用多个 WebDAV 服务,各自有不同的挂载目录、用户名密码。良好的 Docker 支持…

WPF MVVM入门系列教程(命令)

WPF中的命令模型 在WPF中,我们可以使用事件来响应鼠标和键盘动作。但使用事件会具备一定的局限性,例如:我想通过键盘快捷键触发事件、或者在某个时刻禁用事件。如果使用代码去编写这些控制逻辑,会变得非常枯燥。因此WPF提供了命令模型。 命令具有多个用途。 第一个用途是分…

【读文总结】transformers circuits 随笔

【读文总结】transformers circuits 随笔内容有点太多,先截图一份 contents对 transformers 结构的重刻划 一种常见的 decoder only 的 transformer 结构如下。但是我们可以把这个 residual stream 的线抻直,将这个过程视为 transformer layer 对 residual stream 中所包含的…