当前位置: 首页 > article >正文

贪吃蛇(python版)

安装依赖pipinstallpygame完整代码importpygameimportrandomimportsys# 初始化pygamepygame.init()# 游戏配置WINDOW_WIDTH800WINDOW_HEIGHT600CELL_SIZE20CELL_NUMBER_XWINDOW_WIDTH//CELL_SIZE CELL_NUMBER_YWINDOW_HEIGHT//CELL_SIZE# 颜色定义BLACK(0,0,0)WHITE(255,255,255)GREEN(0,255,0)DARK_GREEN(0,200,0)RED(255,0,0)BLUE(0,0,255)GRAY(40,40,40)GRASS_COLOR(167,209,61)TEXT_COLOR(255,255,255)# 设置游戏窗口screenpygame.display.set_mode((WINDOW_WIDTH,WINDOW_HEIGHT))pygame.display.set_caption(贪吃蛇游戏)clockpygame.time.Clock()# 字体设置fontpygame.font.SysFont(arial,25)big_fontpygame.font.SysFont(arial,50)classSnake:def__init__(self):# 初始位置身体由多个方块组成self.body[pygame.Vector2(5,10),pygame.Vector2(4,10),pygame.Vector2(3,10)]self.directionpygame.Vector2(1,0)# 初始向右移动self.new_blockFalsedefdraw_snake(self):绘制蛇forindex,blockinenumerate(self.body):x_posint(block.x*CELL_SIZE)y_posint(block.y*CELL_SIZE)block_rectpygame.Rect(x_pos,y_pos,CELL_SIZE,CELL_SIZE)# 蛇头用深绿色身体用浅绿色ifindex0:pygame.draw.rect(screen,DARK_GREEN,block_rect)else:pygame.draw.rect(screen,GREEN,block_rect)defmove_snake(self):移动蛇ifself.new_block:body_copyself.body[:]body_copy.insert(0,body_copy[0]self.direction)self.bodybody_copy[:]self.new_blockFalseelse:body_copyself.body[:-1]body_copy.insert(0,body_copy[0]self.direction)self.bodybody_copy[:]defadd_block(self):增加蛇的长度self.new_blockTruedefcheck_collision(self):检查碰撞撞墙或撞自己# 检查是否撞墙ifnot0self.body[0].xCELL_NUMBER_Xornot0self.body[0].yCELL_NUMBER_Y:returnTrue# 检查是否撞到自己forblockinself.body[1:]:ifblockself.body[0]:returnTruereturnFalseclassFood:def__init__(self):self.randomize()defdraw_food(self):绘制食物food_rectpygame.Rect(int(self.pos.x*CELL_SIZE),int(self.pos.y*CELL_SIZE),CELL_SIZE,CELL_SIZE)pygame.draw.rect(screen,RED,food_rect)defrandomize(self):随机生成食物位置self.xrandom.randint(0,CELL_NUMBER_X-1)self.yrandom.randint(0,CELL_NUMBER_Y-1)self.pospygame.Vector2(self.x,self.y)classGame:def__init__(self):self.snakeSnake()self.foodFood()self.score0self.game_overFalsedefupdate(self):更新游戏状态ifnotself.game_over:self.snake.move_snake()self.check_collision()self.check_fail()defdraw_elements(self):绘制所有游戏元素self.food.draw_food()self.snake.draw_snake()self.draw_score()ifself.game_over:self.draw_game_over()defcheck_collision(self):检查蛇是否吃到食物ifself.food.posself.snake.body[0]:self.food.randomize()self.snake.add_block()self.score1# 确保食物不会生成在蛇身上forblockinself.snake.body[1:]:ifblockself.food.pos:self.food.randomize()defcheck_fail(self):检查游戏是否失败ifself.snake.check_collision():self.game_overTruedefdraw_score(self):绘制分数score_textstr(self.score)score_surfacefont.render(score_text,True,TEXT_COLOR)score_xint(WINDOW_WIDTH-60)score_yint(WINDOW_HEIGHT-40)score_rectscore_surface.get_rect(center(score_x,score_y))screen.blit(score_surface,score_rect)defdraw_game_over(self):绘制游戏结束界面# 半透明遮罩overlaypygame.Surface((WINDOW_WIDTH,WINDOW_HEIGHT))overlay.set_alpha(150)overlay.fill((0,0,0))screen.blit(overlay,(0,0))game_over_surfacebig_font.render(GAME OVER,True,WHITE)game_over_rectgame_over_surface.get_rect(center(WINDOW_WIDTH//2,WINDOW_HEIGHT//2-50))screen.blit(game_over_surface,game_over_rect)restart_textfont.render(Press R to Restart or Q to Quit,True,WHITE)restart_rectrestart_text.get_rect(center(WINDOW_WIDTH//2,WINDOW_HEIGHT//220))screen.blit(restart_text,restart_rect)defreset(self):重置游戏self.snakeSnake()self.foodFood()self.score0self.game_overFalsedefmain():gameGame()# 自定义事件控制蛇的移动速度SCREEN_UPDATEpygame.USEREVENT pygame.time.set_timer(SCREEN_UPDATE,150)# 每150毫秒更新一次whileTrue:foreventinpygame.event.get():ifevent.typepygame.QUIT:pygame.quit()sys.exit()ifevent.typeSCREEN_UPDATEandnotgame.game_over:game.update()ifevent.typepygame.KEYDOWN:ifnotgame.game_over:# 控制蛇的方向不能直接反向ifevent.keypygame.K_UPandgame.snake.direction.y!1:game.snake.directionpygame.Vector2(0,-1)ifevent.keypygame.K_DOWNandgame.snake.direction.y!-1:game.snake.directionpygame.Vector2(0,1)ifevent.keypygame.K_RIGHTandgame.snake.direction.x!-1:game.snake.directionpygame.Vector2(1,0)ifevent.keypygame.K_LEFTandgame.snake.direction.x!1:game.snake.directionpygame.Vector2(-1,0)else:# 游戏结束时可以重新开始或退出ifevent.keypygame.K_r:game.reset()ifevent.keypygame.K_q:pygame.quit()sys.exit()screen.fill(GRAY)game.draw_elements()pygame.display.update()clock.tick(60)if__name____main__:main()

相关文章:

贪吃蛇(python版)

安装依赖 pip install pygame完整代码 import pygame import random import sys# 初始化pygame pygame.init()# 游戏配置 WINDOW_WIDTH 800 WINDOW_HEIGHT 600 CELL_SIZE 20 CELL_NUMBER_X WINDOW_WIDTH // CELL_SIZE CELL_NUMBER_Y WINDOW_HEIGHT // CELL_SIZE# 颜色定义…...

小飞手俱乐部招聘平台 中小企业免费招聘软件直连人才

在国内市场主体中,中小企业是最具活力的组成部分,而人才招聘,始终是制约中小企业稳步发展的核心痛点。预算有限、招聘频次灵活、用人需求急、没有专职 HR 团队,是绝大多数中小企业的招聘常态,也让无数企业管理者和负责…...

TensorRT安装后验证的几种实用方法:从sample_mnist到PyTorch/TensorFlow模型

TensorRT环境验证全指南:从基础测试到多框架实战 当你完成TensorRT的安装后,最迫切的问题往往是:"我的环境真的装对了吗?"作为NVIDIA推出的高性能深度学习推理引擎,TensorRT的安装验证远比简单的版本检查复杂…...

别怕概率论!用Python的NumPy和SciPy库,帮你一步步验算期末试卷里的12道填空题

用Python玩转概率论:NumPySciPy实战12道经典填空题 当概率论遇上Python,枯燥的公式瞬间变得生动起来。本文不是简单地教你解题,而是带你用代码「实验」概率,让每个数学概念都变成可运行的代码块。我们将从零开始,用Pyt…...

从随便用到查户口:AI圈的实名暴政,程序员炸了

这两天Anthropic的Claude实名认证风波席卷AI圈,引发全球用户群体的强烈不满和抗议。这一政策变化在科技社区、社交媒体平台上迅速发酵,形成了"全球集体众怒"的舆论风暴。 作为一个写了几十年代码、摸遍国内外AI工具的老程序员,我是…...

YOLOv8性能跃迁:集成可变形注意力机制DAttention的实战指南

1. 为什么YOLOv8需要可变形注意力机制? 目标检测领域近年来最令人头疼的问题之一,就是模型在复杂场景下的表现不稳定。我在实际项目中遇到过这样的情况:同一个检测模型,在空旷场景下mAP能达到85%,但在人群密集的商场监…...

逆向糖豆视频:从动态加载到防盗链破解的实战解析

1. 糖豆视频逆向分析的核心挑战 第一次尝试爬取糖豆视频时,我遇到了几个让人头疼的问题。最明显的就是视频只能播放5秒就中断,这其实是典型的防盗链机制在起作用。糖豆视频采用了动态加载技术,真实视频地址隐藏在层层接口之后,需要…...

5步掌握DoL-Lyra整合包:从零构建个性化游戏体验的完整指南

5步掌握DoL-Lyra整合包:从零构建个性化游戏体验的完整指南 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS Degrees of Lewdity中文模组整合包(DOL-CHS-MODS)是一个…...

告别触摸漂移!手把手教你用tslib校准嵌入式Linux触摸屏(基于Buildroot)

告别触摸漂移!手把手教你用tslib校准嵌入式Linux触摸屏(基于Buildroot) 电阻屏在工业控制、医疗设备等嵌入式场景中依然占据重要地位,但开发者常被一个"幽灵问题"困扰——明明点击了A位置,系统却响应在B位置…...

用ILA抓波形:手把手教你调试XC7K325T的XDMA AXI总线读写时序

用ILA抓波形:深入解析XC7K325T的XDMA AXI总线调试实战 在FPGA开发中,AXI总线协议作为Xilinx系列芯片的核心互联标准,其稳定性和正确性直接决定了系统性能。而XDMA(Xilinx DMA)IP作为PCIe与AXI总线之间的桥梁&#xff0…...

Adobe-GenP终极指南:如何免费解锁Adobe全家桶完整功能?

Adobe-GenP终极指南:如何免费解锁Adobe全家桶完整功能? 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe Creative Cloud系列软件以其强…...

10分钟深度解析:FigmaCN如何实现专业级界面本地化

10分钟深度解析:FigmaCN如何实现专业级界面本地化 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 对于中文设计师来说,Figma英文界面常常是工作效率的隐形障碍。…...

2026 年苹果高层变动:库克功成身退,特努斯接棒引领未来

【苹果相关链接与信息】有 DF T 恤促销,可通过相关链接进入商店。还有 Daring Fireball 相关内容,作者为 John Gruber。网站提供存档、The Talk Show、Dithering、项目、联系我们、鸣谢、订阅源/社交平台、赞助等信息。此外,Rec League 可分享…...

内存涨价手机普涨,华为苹果稳价抢市场,“荣米OV”危险了?

【华为影像旗舰发布,定价策略引争议】4月20日,华为影像旗舰Pura 90系列发布。对于价格,网上出现两极分化观点:一边夸赞加量不加价,一边质疑改名、减配曲线涨价。不过,华为实现了较为平稳的定价策略&#xf…...

用Python seaborn库5分钟搞定mpg汽车油耗数据集的可视化分析(保姆级教程)

用Python seaborn库5分钟搞定mpg汽车油耗数据集的可视化分析(保姆级教程) 刚接触数据分析的新手常被复杂的代码和理论吓退,但数据科学的魅力恰恰在于用简单工具快速获得洞察。今天我们就用Python的seaborn库,在5分钟内完成mpg汽车…...

AEUX插件:如何从设计工具无缝传输图层到After Effects实现高效动画工作流

AEUX插件:如何从设计工具无缝传输图层到After Effects实现高效动画工作流 【免费下载链接】AEUX Editable After Effects layers from Sketch artboards 项目地址: https://gitcode.com/gh_mirrors/ae/AEUX 在当今的UX动效设计领域,AEUX作为连接设…...

终极指南:5步掌握哔哩下载姬的完整使用体验

终极指南:5步掌握哔哩下载姬的完整使用体验 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等)。 …...

ZXPInstaller:Adobe插件安装的完整免费解决方案

ZXPInstaller:Adobe插件安装的完整免费解决方案 【免费下载链接】ZXPInstaller Open Source ZXP Installer for Adobe Extensions 项目地址: https://gitcode.com/gh_mirrors/zx/ZXPInstaller 你是否曾为Adobe创意软件的.zxp插件安装感到困扰?当官…...

大模型小白逆袭之路:从入门到精通,产品经理大模型学习之旅

本文为产品经理提供了一份从零开始学习大模型AI的完整路线图,涵盖学习资源选择、实践操作、深入探索等阶段,并推荐了丰富的学习资料,包括视频教程、电子书、面试题等,旨在帮助读者从“小白”成长为“大牛”,掌握大模型…...

不止于‘能用’:深度体验麒麟V10 SP1的UKUI 3桌面与那些被忽略的‘效率神器’

不止于‘能用’:深度体验麒麟V10 SP1的UKUI 3桌面与那些被忽略的‘效率神器’ 在国产操作系统的浪潮中,银河麒麟V10 SP1以其独特的UKUI 3桌面环境和丰富的内置工具,正在重新定义"生产力工具"的边界。不同于简单的功能罗列&#xf…...

Applite镜像加速:为Homebrew Casks带来流畅的GUI管理体验

Applite镜像加速:为Homebrew Casks带来流畅的GUI管理体验 【免费下载链接】Applite User-friendly GUI macOS application for Homebrew Casks 项目地址: https://gitcode.com/gh_mirrors/ap/Applite Applite是一款专为macOS设计的开源GUI应用程序&#xff0…...

kill-doc终极指南:简单免费解决文档下载难题的完整方案

kill-doc终极指南:简单免费解决文档下载难题的完整方案 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了…...

别再只会用OpenFileDialog选文件了!C# WinForms里这几个隐藏属性和坑你得知道

深度解锁C# OpenFileDialog:从精准过滤到异常处理全攻略 在Windows窗体应用开发中,文件选择对话框是用户与系统交互的重要桥梁。虽然OpenFileDialog控件看似简单,但真正掌握其精髓需要跨越多个技术细节。本文将带您深入探索那些官方文档未曾详…...

抖音批量下载神器:3分钟学会免费下载视频、音乐和图集

抖音批量下载神器:3分钟学会免费下载视频、音乐和图集 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppo…...

从限流器到分布式ID生成器:我是如何通过复刻《System Design Interview》里的7个核心组件来准备面试的

从限流器到分布式ID生成器:7个核心组件的实战复刻与面试启示 当我在准备系统设计面试时,书架上的《System Design Interview》已经落了一层薄灰。直到某天深夜,我决定不再被动地阅读理论,而是选择书中最具代表性的7个组件——从限…...

【LaTeX】表格标题与表格间距调整:从基础命令到实战技巧

1. LaTeX表格排版的核心痛点 第一次用LaTeX排表格时,我盯着PDF输出文件皱起了眉头——表格标题几乎要贴到表格内容上,活像被压缩的三明治。这种"亲密无间"的排版在学术论文里特别扎眼,审稿人可能觉得我们连基础排版都不重视。表格标…...

测试人员的极致追求,如何做到不漏测?

什么是漏测? 具体地说,什么是测试漏测?测试漏测是指软件产品在测试结束后出现了在测试过程中没有被发现的bug。 我们知道,漏测是每一个软件测试者最头疼的事,一旦出现漏测: 首先给客户带来了非常不好的影…...

零信任医疗容器网络配置:用eBPF+Docker Compose实现手术机器人通信链路100%加密(实测延迟<8.3ms)

第一章&#xff1a;零信任医疗容器网络配置&#xff1a;用eBPFDocker Compose实现手术机器人通信链路100%加密&#xff08;实测延迟<8.3ms&#xff09;在高可靠性手术机器人系统中&#xff0c;控制指令与实时影像流的传输必须满足毫秒级确定性、端到端不可篡改性及最小化信任…...

保姆级教程:用VS Code调试牛客网C语言百题(附BC33统计成绩单步调试实战)

用VS Code高效调试牛客网C语言百题的完整指南 在牛客网刷C语言百题时&#xff0c;你是否遇到过这样的情况&#xff1a;代码提交后报错&#xff0c;却无法直观地看到程序执行过程中变量的变化&#xff1f;本文将带你搭建一个高效的本地调试环境&#xff0c;让你能够像专业开发者…...

5G网络优化实战笔记:手把手配置NR测量事件门限与迟滞,解决乒乓切换难题

5G网络优化实战&#xff1a;NR测量事件参数配置与乒乓切换抑制策略 在5G网络部署与优化过程中&#xff0c;小区边缘用户的切换性能直接影响着用户体验。当车辆驶过高架桥下&#xff0c;或是用户在密集城区拐角处通话时&#xff0c;频繁出现的掉线、卡顿现象&#xff0c;往往源于…...