使用Python+pygame实现贪吃蛇小游戏
使用Python+pygame贪吃蛇小游戏
使用第三方库pygame,关于Python中pygame游戏模块的安装使用可见 https://blog.csdn.net/cnds123/article/details/119514520
给出两种实现。
第一种
运行效果如下:

游戏源码如下:
import pygame
import sys
import random# 初始化pygame
pygame.init()# 设置屏幕大小
screen_size = (640, 480)
screen = pygame.display.set_mode(screen_size)# 设置游戏标题
pygame.display.set_caption("贪吃蛇:按p键暂停/继续")# 定义颜色
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)# 蛇的初始位置
snake_pos = [[100, 100], [80, 100], [60, 100]]# 食物的初始位置
food_pos = [300, 300]# 蛇的初始速度
snake_speed = [20, 0]# 初始化分数
score = 0# 创建字体对象
font = pygame.font.Font(None, 36)# 游戏暂停标志
paused = False# 主循环
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_p: # 按 P 键暂停或继续paused = not pausedif not paused:if event.key == pygame.K_UP and snake_speed != [0, 20]:snake_speed = [0, -20]elif event.key == pygame.K_DOWN and snake_speed != [0, -20]:snake_speed = [0, 20]elif event.key == pygame.K_LEFT and snake_speed != [20, 0]:snake_speed = [-20, 0]elif event.key == pygame.K_RIGHT and snake_speed != [-20, 0]:snake_speed = [20, 0]if not paused:# 更新蛇的位置snake_pos.insert(0, [snake_pos[0][0] + snake_speed[0], snake_pos[0][1] + snake_speed[1]])# 检查蛇头是否碰到墙壁,如果是则“经过墙壁”if snake_pos[0][0] < 0:snake_pos[0][0] = screen_size[0]-20elif snake_pos[0][0] >= screen_size[0]:snake_pos[0][0] = 0elif snake_pos[0][1] < 0:snake_pos[0][1] = screen_size[1]-20elif snake_pos[0][1] >= screen_size[1]:snake_pos[0][1] = 0# 检查蛇头是否碰到食物if snake_pos[0] == food_pos:food_pos = [random.randrange(1, screen_size[0] // 20) * 20, random.randrange(1, screen_size[1] // 20) * 20]score += 1 # 计分else:snake_pos.pop()# 绘制游戏界面screen.fill(WHITE)for pos in snake_pos:pygame.draw.rect(screen, GREEN, pygame.Rect(pos[0], pos[1], 20, 20))pygame.draw.rect(screen, RED, pygame.Rect(food_pos[0], food_pos[1], 20, 20))# 显示得分score_text = font.render("Score: " + str(score), True, (0, 0, 0))screen.blit(score_text, (10, 10))# 如果游戏暂停,则显示暂停提示if paused:pause_text = font.render("Paused. Press P to continue.", True, (0, 0, 0))screen.blit(pause_text, (screen_size[0] // 2 - pause_text.get_width() // 2, screen_size[1] // 2 - pause_text.get_height() // 2))pygame.display.flip() # 更新屏幕显示# 控制游戏速度pygame.time.Clock().tick(6)
第二种
就不给出运行效果图了,你可以运行看看。
下面给出另一种实现源码:
import pygame
import time
import random# 设置蛇的速度
snake_speed = 15# 窗口颜色
white = pygame.Color(255, 255, 255)# 蛇的颜色
green = pygame.Color(0, 255, 0)# 食物的颜色
red = pygame.Color(255, 0, 0)# 初始化pygame
pygame.init()# 初始化游戏窗口
window = pygame.display.set_mode((720, 480))# FPS(帧率)控制器
fps = pygame.time.Clock()# 定义蛇的默认位置
snake_position = [100, 50]# 定义蛇身体的前四个块
snake_body = [[100, 50], [90, 50], [80, 50], [70, 50]]# 食物位置
food_position = [random.randrange(1, 72) * 10, random.randrange(1, 48) * 10]# 蛇吃到食物时
food_spawn = True# 设置默认的蛇的方向为向右
direction = 'RIGHT'# 初始分数
score = 0def game_over():# 设置字体以显示分数#font = pygame.font.SysFont(None, 26) font = pygame.font.Font("C:\\Windows\\Fonts\\simsun.ttc", 26) #显示中文文字score_text = font.render('得分: ' + str(score), True, green)window.blit(score_text, [320, 240])# 显示信息again_text = font.render('游戏结束!按任意键重新开始', True, red) # 修改颜色变量为whitewindow.blit(again_text, [160, 280])pygame.display.flip() # 使用 flip() 来更新整个屏幕# 等待用户按键然后重新开始游戏waiting_for_input = Truewhile waiting_for_input:for event in pygame.event.get():if event.type == pygame.KEYDOWN:waiting_for_input = Falseelif event.type == pygame.QUIT:pygame.quit()quit()# 游戏重新开始main()# 游戏的主逻辑
def main():global direction, food_position, food_spawn, score# 重置游戏score = 0snake_position = [100, 50]snake_body = [[100, 50], [90, 50], [80, 50], [70, 50]]direction = 'RIGHT'food_position = [random.randrange(1, 72) * 10, random.randrange(1, 48) * 10]food_spawn = Truewhile True:# 处理按键事件for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()quit()elif event.type == pygame.KEYDOWN:if event.key == pygame.K_UP and direction != 'DOWN':direction = 'UP'if event.key == pygame.K_DOWN and direction != 'UP':direction = 'DOWN'if event.key == pygame.K_LEFT and direction != 'RIGHT':direction = 'LEFT'if event.key == pygame.K_RIGHT and direction != 'LEFT':direction = 'RIGHT'# 移动蛇if direction == 'UP':snake_position[1] -= 10if direction == 'DOWN':snake_position[1] += 10if direction == 'LEFT':snake_position[0] -= 10if direction == 'RIGHT':snake_position[0] += 10# 蛇身体增长机制snake_body.insert(0, list(snake_position))if snake_position[0] == food_position[0] and snake_position[1] == food_position[1]:score += 1food_spawn = Falseelse:snake_body.pop()if not food_spawn:food_position = [random.randrange(1, 72) * 10, random.randrange(1, 48) * 10]food_spawn = True# 图形界面window.fill(white)for pos in snake_body:pygame.draw.rect(window, green, pygame.Rect(pos[0], pos[1], 10, 10))pygame.draw.rect(window, red, pygame.Rect(food_position[0], food_position[1], 10, 10))# 游戏结束条件if snake_position[0] < 0 or snake_position[0] > 710 or snake_position[1] < 0 or snake_position[1] > 470:game_over()break # 结束游戏后跳出循环for block in snake_body[1:]:if snake_position[0] == block[0] and snake_position[1] == block[1]:game_over()break # 结束游戏后跳出循环# 更新显示pygame.display.update()# 每秒帧数/刷新率fps.tick(snake_speed)# 运行主函数
if __name__ == "__main__":main()
OK!
相关文章:
使用Python+pygame实现贪吃蛇小游戏
使用Pythonpygame贪吃蛇小游戏 使用第三方库pygame,关于Python中pygame游戏模块的安装使用可见 https://blog.csdn.net/cnds123/article/details/119514520 给出两种实现。 第一种 运行效果如下: 游戏源码如下: import pygame import sy…...
SpringBoot 全局异常统一处理:BindException(绑定异常)
概述 在Spring Boot应用中,数据绑定是一个至关重要的环节,它负责将HTTP请求中的参数映射到控制器方法的入参对象上。在这个过程中如果遇到任何问题,如参数缺失、类型不匹配或验证失败等,Spring MVC将会抛出一个org.springframewo…...
ucloud轻量云(wordpress)配置ssl
ucloud 轻量云(wordpress)配置ssl 1、上传ssl证书到/usr/local/software/apache/conf,这里的文件名和内容与ucloud控制台下载下来的文件名和内容保持一致 2、修改httpd.conf文件 vim /usr/local/software/apache/conf/httpd.conf 找到下面两行,去掉注…...
电脑/设备网络共享给其他设备上网
文章目录 一、概述二、设置网络共享2.1 电脑可以上网,通过网络共享让其他设备也可以上网2.2 手机如何使用USB数据线共享网络给电脑 一、概述 现在有如下几种情况: 设备本身不能上网,需要通过电脑上网 笔记本WIFI连热点上网,然后…...
vue之虚拟滚动
一、解决的问题 对于大量数据的懒加载,我们可以使用虚拟滚动的技术。虚拟滚动的原理是只渲染可视区域内的数据,当用户滚动时,动态计算并渲染新的可视数据,从而实现大数据量的流畅滚动。 在Vue中,我们可以使用第三方库…...
Redis学习指南(11)-Redis的有序集合数据类型介绍
文章目录 特点和用途常用命令插入操作查询操作删除操作 示例总结 Redis的有序集合数据类型是一种高效的数据结构,能够存储多个成员和对应的分值,并能够根据分值进行快速的查找、插入和删除操作。本文将详细介绍Redis的有序集合数据类型,包括其…...
Spring的纯注解配置
1.环境搭建 1.1.创建工程 1.2.待改造的问题 我们发现,之所以我们现在离不开xml配置文件,是因为我们有一处很关键的配置,如果他要也能用注解配置,那么我们就可以脱离xml文件了: 1.2.1.jdbc配置 <context:propert…...
numpy 筛选多段数据
目录 掩码方式 利用切片 掩码方式 range_to_remove list(range(77-1, 111-1)) list(range(122-1, 135-1))keep_mask np.ones(image0_cut.shape[0], dtypebool)keep_mask[range_to_remove] Falseprocessed_data image0_cut[keep_mask] 利用切片 import numpy as np# 假设…...
【Kotlin】协程的字节码原理
前言 协程是Koltin语言最重要的特性之一,也是最难理解的特性。网上关于kotlin协程的描述也是五花八门,有人说它是轻量级线程,有人说它是无阻塞式挂起,有人说它是一个异步框架等等,众说纷芸。甚至还有人出了书籍专门介…...
区间预测 | Matlab实现LSSVM-ABKDE的最小二乘支持向量机结合自适应带宽核密度估计多变量回归区间预测
区间预测 | Matlab实现LSSVM-ABKDE的最小二乘支持向量机结合自适应带宽核密度估计多变量回归区间预测 目录 区间预测 | Matlab实现LSSVM-ABKDE的最小二乘支持向量机结合自适应带宽核密度估计多变量回归区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现…...
基于深度学习的实例分割的Web应用
基于深度学习的实例分割的Web应用 1. 项目简介1.1 模型部署1.2 Web应用 2. Web前端开发3. Web后端开发4. 总结 1. 项目简介 这是一个基于深度学习的实例分割Web应用的项目介绍。该项目使用PaddlePaddle框架,并以PaddleSeg训练的图像分割模型为例。 1.1 模型部署 …...
20240115如何在线识别俄语字幕?
20240115如何在线识别俄语字幕? 2024/1/15 21:25 百度搜索:俄罗斯语 音频 在线识别 字幕 Bilibili:俄语AI字幕识别 音视频转文字 字幕小工具V1.2 BING:音视频转文字 字幕小工具V1.2 https://www.bilibili.com/video/BV1d34y1F7…...
Flink 处理函数(1)—— 基本处理函数
在 Flink 的多层 API中,处理函数是最底层的API,是所有转换算子的一个概括性的表达,可以自定义处理逻辑 在处理函数中,我们直面的就是数据流中最基本的元素:数据事件(event)、状态(st…...
Linux系统下编译MPlayer
一、编译MPlayer 在 http://www.mplayerhq.hu/design7/dload.html 下载MPlayer源码 执行命令: tar -xf MPlayer-1.5.tar.xz cd MPlayer-1.5 ./configure --prefix$(pwd)/install --yasm make make install 然后在install/bin目录下即会生成mplayer的可执行文件 二…...
事务的ACID属性是什么?为什么它们很重要?
引言 在现代的数据库和事务处理系统中,事务处理是一项非常重要的技术。在数据库中,事务是指一组被视为单个逻辑操作单元的SQL语句序列,它们要么全部成功执行,要么全部不执行。事务可以确保数据库在执行时保持一致性和可靠性。ACI…...
计算机毕业设计 基于Java的手机销售网站的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
Redis相关命令详解及其原理
Redis概念 Redis,英文全称是remote dictionary service,也就是远程字典服务。这是kv存储数据库。Redis,包括所有的数据库,都是请求-回应模式,通俗来说就是数据库不会主动地要给前台推送数据,只有前台发送了…...
go语言中的GoMock
GoMock是一个Go框架。它与内置的测试包整合得很好,并在单元测试时提供了灵活性。正如我们所知,对具有外部资源(数据库、网络和文件)或依赖关系的代码进行单元测试总是很麻烦。 安装 为了使用GoMock,我们需要安装gomo…...
DIFFWAVE: A VERSATILE DIFFUSION MODEL FOR AUDIO SYNTHESIS (Paper reading)
DIFFWAVE: A VERSATILE DIFFUSION MODEL FOR AUDIO SYNTHESIS Zhifeng Kong, Computer Science and Engineering, UCSD, ICLR2021, Code, Paper 1. 前言 在这项工作中,我们提出了DiffWave,这是一种用于条件和无条件波形生成的多功能扩散概率模型。该模…...
排序算法8----归并排序(非递归)(C)
1、介绍 归并排序既可以是内排序(在内存上的数据排序),也可以是外排序(磁盘上)(硬盘)(在文件中的数据排序)。 其他排序一般都是内排序。 区别于快速排序的非递归…...
解锁论文写作新境界:书匠策AI——学术探索的智能导航灯
在学术的浩瀚海洋中,每一位研究者、学生乃至教育博主,都如同勇敢的航海家,驾驶着知识的船只,追寻着真理的彼岸。然而,论文写作这一航程中的关键环节,往往让许多人感到迷茫与挑战重重。今天,就让…...
douyin-downloader:从素材焦虑到创作自由的抖音内容获取方案
douyin-downloader:从素材焦虑到创作自由的抖音内容获取方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback…...
机械键盘连击终结者:三分钟搞定键盘“鬼键“问题
机械键盘连击终结者:三分钟搞定键盘"鬼键"问题 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 还在为机械键盘的&…...
RyTuneX:WinUI3驱动的Windows性能优化引擎
RyTuneX:WinUI3驱动的Windows性能优化引擎 【免费下载链接】RyTuneX RyTuneX is a cutting-edge optimizer built with the WinUI 3 framework, designed to amplify the performance of Windows devices. Crafted for both Windows 10 and 11. 项目地址: https:/…...
深入解析CyberpunkSaveEditor:赛博朋克2077存档编辑的终极指南
深入解析CyberpunkSaveEditor:赛博朋克2077存档编辑的终极指南 【免费下载链接】CyberpunkSaveEditor A tool to edit Cyberpunk 2077 sav.dat files 项目地址: https://gitcode.com/gh_mirrors/cy/CyberpunkSaveEditor 想要彻底掌控《赛博朋克2077》的游戏体…...
免费开源音频转换工具fre:ac完整指南:跨平台多格式转换与CD抓取终极教程
免费开源音频转换工具fre:ac完整指南:跨平台多格式转换与CD抓取终极教程 【免费下载链接】freac The fre:ac audio converter project 项目地址: https://gitcode.com/gh_mirrors/fr/freac fre:ac是一款功能强大的免费开源音频转换工具,支持Windo…...
AI辅助游戏开发新体验:让快马平台的AI模型为你的Superpowers项目编写剧情与平衡技能
最近在尝试用Superpowers框架开发一款魔法题材的RPG游戏,发现InsCode(快马)平台的AI辅助功能特别适合快速原型开发。这里分享下如何用AI模型辅助完成游戏剧情脚本和技能平衡设计的实践过程。 剧情脚本生成 输入"魔法学校学徒发现古老卷轴"这个简单设定后&…...
SEO优化的预算一般应如何合理安排
SEO优化的预算一般应如何合理安排 在当今数字化时代,网站的搜索引擎优化(SEO)已成为提升网站流量和品牌知名度的重要手段。如何合理分配SEO优化预算成为许多企业和网站管理者面临的一个重要课题。本文将从问题分析、原因说明、解决方法、注意…...
智能文档处理新范式:Umi-OCR双层PDF功能让家庭与学生文档管理效率倍增
智能文档处理新范式:Umi-OCR双层PDF功能让家庭与学生文档管理效率倍增 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维…...
拆解RTX4090 24G GPU服务器,一文摸清硬件搭配逻辑
RTX4090 24G GPU凭借NVIDIA Ada Lovelace架构优势,以16384个CUDA核心、24GB GDDR6X显存、1008GB/s显存带宽的核心参数,成为个人开发者、中小企业、科研机构的首选算力核心,广泛应用于大模型训练、AI推理、工业仿真、视频渲染等场景。据IDC 20…...
