Python项目——贪吃蛇

1、原理

  • 整个界面由一个二维数组组成。游戏开始时,会随机生成一个苹果(红点)和一条蛇(黄点)。蛇会在二维数组中移动,当蛇碰到苹果时,苹果被吃,蛇的长度加一(红点变黄点)。然后再次随机生成一个苹果。
  • 蛇一旦碰到自身,游戏结束。
  •   

2、工具

  • 语言:python3.11
  • 编译器:PyCharm
  • 包:pygame
    • pip install pygame

3、代码

  • # 贪吃蛇
    import pygame
    import random
    import copy# 蛇身,蛇头在最后
    snake_list = [[10, 10]]# 移动方向
    move_up = False
    move_down = True
    move_left = False
    move_right = False# 苹果 随机
    apple_point = [random.randrange(20, 780, 20), random.randrange(20, 580, 20)]  # 20~780随机生成一个数,不能生成到外面去"""初始化游戏"""
    pygame.init()
    # fps 刷新帧率
    clock = pygame.time.Clock()
    # 设置屏幕大小
    screen = pygame.display.set_mode((800, 600))
    # 绘制标题
    pygame.display.set_caption('贪吃蛇')"""进入游戏"""
    # 设置游戏开关
    running = True
    while running:# 设置fps为15clock.tick(15)# 绘制屏幕为黑色screen.fill([0, 0, 0])# 用键盘控制移动方向for event in pygame.event.get():# 判断按键是否按下if event.type == pygame.KEYDOWN:# 判断按键类型if event.key == pygame.K_UP and not move_down:move_up = Truemove_down = Falsemove_left = Falsemove_right = Falseif event.key == pygame.K_DOWN and not move_up:move_up = Falsemove_down = Truemove_left = Falsemove_right = Falseif event.key == pygame.K_LEFT and not move_right:move_up = Falsemove_down = Falsemove_left = Truemove_right = Falseif event.key == pygame.K_RIGHT and not move_left:move_up = Falsemove_down = Falsemove_left = Falsemove_right = True# 绘制苹果apple_rect = pygame.draw.circle(screen, [255, 0, 0], apple_point, 20)  # 绘制圆点# 绘制蛇snake_rect = []  # 蛇身for snake_point in snake_list:snake_rect.append(pygame.draw.circle(screen, [255, 255, 255], snake_point, 10, 0))# 点碰撞检测,吃苹果if apple_rect.collidepoint(snake_point):# 蛇吃掉苹果,增加一个点snake_list.append(apple_point)# 重新绘制苹果apple_point = [random.randrange(20, 780, 20), random.randrange(20, 580, 20)]apple_rect = pygame.draw.circle(screen, [255, 0, 0], apple_point, 20, 0)  # 绘制圆点break"""让蛇移动"""pos = len(snake_list) - 1# 蛇身移动while pos > 0:snake_list[pos] = copy.deepcopy(snake_list[pos - 1])  # 把前一个蛇身赋值给后一个蛇身pos -= 1# 更改蛇头位置,蛇头单独处理,蛇头控制方向if move_up:snake_list[pos][1] -= 20if snake_list[pos][1] < 0:snake_list[pos][1] = 600if move_down:snake_list[pos][1] += 20if snake_list[pos][1] > 600:snake_list[pos][1] = 0if move_left:snake_list[pos][0] -= 20if snake_list[pos][0] < 0:snake_list[pos][0] = 800if move_right:snake_list[pos][0] += 20if snake_list[pos][0] > 800:snake_list[pos][0] = 0# 蛇撞上自己,结束游戏head_rect = snake_rect[0]  # 蛇头count = len(snake_rect)while count > 1:# 矩形碰撞检测if head_rect.colliderect(snake_rect[count - 1]):running = Falsecount -= 1# 将绘制的内容显示出来pygame.display.update()pygame.quit()

4、运行结果

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

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

相关文章

性能测试

什么是性能测试&#xff1f;性能测试定义性能测试和功能测试区别性能测试常见术语及指标1&#xff1a;用户数3&#xff1a;响应时间4&#xff1a;事务5&#xff1a;每秒事务通过数6&#xff1a;用户点击率7&#xff1a;吞吐量8&#xff1a;吞吐率9&#xff1a;思考时间10&#…

基于ssm的简单学校课程管理系统的设计与实现(源码+调试)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于ssm的简单学校课程管…

探索Nginx的奥秘--从代理到负载均衡的艺术实践

文章目录 &#x1f33a;Nginx的引入&#x1f33a;&#x1f33a;深刻理解正向代理与反向代理&#x1f33a;&#x1f339;Reverse proxy&#x1f339;&#x1f339;正向代理与反向代理的区别&#x1f339;&#x1f339;反向代理为什么叫反向代理&#x1f339;&#x1f339;负载均…

C#教程(三):字符串的各种用法

在C#中&#xff0c;字符串&#xff08;string 类型&#xff09;是一种常用的数据类型&#xff0c;用于存储和操作文本数据。以下是一些C#中字符串的常见用法 1、输出任意的字符串长度 代码 #region 输出任意的字符串长度 Console.WriteLine("请输入你心中想到的名字&…

Activiti工作流框架学习笔记(一)之通用数据表详细介绍

文/朱季谦 Activiti工作流引擎自带了一套数据库表&#xff0c;这里面有一个需要注意的地方&#xff1a; 低于5.6.4的MySQL版本不支持时间戳或毫秒级的日期。更糟糕的是&#xff0c;某些版本在尝试创建此类列时将引发异常&#xff0c;而其他版本则不会。执行自动创建/升级时&a…

C++ 二叉搜索树(BST)的实现(非递归版本与递归版本)与应用

C 二叉搜索树的实现与应用 一.二叉搜索树的特点二.我们要实现的大致框架三.Insert四.InOrder和Find1.InOrder2.Find 五.Erase六.Find,Insert,Erase的递归版本1.FindR2.InsertR3.EraseR 七.析构,拷贝构造,赋值运算符重载1.析构2.拷贝构造3.赋值运算重载 八.Key模型完整代码九.二…

2020年第九届数学建模国际赛小美赛D题石头剪刀游戏与合作解题全过程文档及程序

2020年第九届数学建模国际赛小美赛 D题 石头剪刀游戏与合作 原题再现&#xff1a; 小时候你可能至少玩过几次石头剪刀游戏。在这个游戏中&#xff0c;你几乎有三个选择&#xff0c;每一个都有一个项目要打败&#xff0c;一个项目输给。石头打败剪刀&#xff0c;剪刀剪纸和布覆…

yasaf永安视安防监控恢复案例

永安视(yasaf)一个小到连官网都没有的安防厂商&#xff0c;是国内众多品牌中的一个&#xff0c;可以说是小十八线&#xff0c;让人敬佩的是这么一个小厂也自行写了嵌入式方案&#xff0c;下边我们来看看这个恢复案例。 故障存储: WD500G 故障现象: 此安防设备在使用过程中被…

python/c++ Leetcode题解——1.两数之和

目录 方法1:枚举法 思路 Code 方法2:哈希表 思路 Code 方法1:枚举法 思路 最容易想到的方法是枚举数组中的每一个数 x&#xff0c;寻找数组中是否存在 target - x。 当我们使用遍历整个数组的方式寻找 target - x 时&#xff0c;需要注意到每一个位于 x 之前的元素都已…

【机器学习】应用KNN实现鸢尾花种类预测

目录 前言 一、K最近邻&#xff08;KNN&#xff09;介绍 二、鸢尾花数据集介绍 三、鸢尾花数据集可视化 四、鸢尾花数据分析 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Fil…

07-抽象工厂

意图 提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定它们具体的类。 适用性 在以下的情况可以选择使用抽象工厂模式&#xff1a; 一个系统要独立于它的产品的创建、组合和表示。一个系统要由多个产品系列中的一个来配置。要强调一系列相关的产品对象的…

Spring MVC 中的常用注解和用法

目录 一、什么是 Spring MVC 二、MVC定义 三、简述 SpringMVC 起到的作用有哪些? 四、注解 五、请求转发或请求重定向 一、什么是 Spring MVC Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架&#xff0c;从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web…

移动端Vant中的Calendar日历增加显示农历(节日、节气)功能

核心&#xff1a; 使用 js-calendar-converter 库实现 npm地址&#xff1a;js-calendar-converter 内部使用原生calendar.js&#xff0c; 中国农历&#xff08;阴阳历&#xff09;和西元阳历即公历互转JavaScript库&#xff0c;具体实现感兴趣的可自行查看其实现源码。 原日…

唱作歌手朱卫明的粤语版《兄弟情》:一曲深情唱尽人间真挚情感

朱卫明的粤语版《兄弟情》&#xff1a;一曲深情唱尽人间真挚情感 在音乐的广阔天地里&#xff0c;每种语言都有其独特的韵味和魅力。对于唱作音乐人朱卫明来说&#xff0c;他用普通话演唱的歌曲已经深入人心&#xff0c;但当他将《兄弟情》这首歌曲以粤语演绎时&#xff0c;更…

笔记 - 现代嵌入式芯片封装识读

0.引用&#xff1a; 配图、资料并非一处采集&#xff0c;我不太容易找到图片的原始链接。这里的图片仅作示例&#xff0c;无商业用途。如果涉及侵权&#xff0c;请随时联系。谢谢&#xff01; PCB封装欣赏了解之旅&#xff08;下篇&#xff09;—— 常用集成电路_ufqfpn封装…

【C++】STL 容器 - string 字符串操作 ⑤ ( string 字符串查找 | find 函数查找字符串 | rfind 函数查找字符串 )

文章目录 一、string 字符查找 - find 函数查找字符串1、string 类 find 函数原型说明2、代码示例 - 字符串查找3、代码示例 - 统计字符串子串 二、string 字符查找 - rfind 函数查找字符串1、string 类 rfind 函数原型说明2、代码示例 - rfind 字符串查找 一、string 字符查找…

注册与回调

C 再谈谈注册(本质是建立映射)与回调 在之前的博文中&#xff0c; 我们探讨过映射的重要作用&#xff0c; 请直接看&#xff1a;http://blog.csdn.net/stpeace/article/details/39452203, 在那篇文章中&#xff0c; 我们是用STL中的map来做的&#xff0c; map建立的是key-value…

rk3568 RGMII KSZ8795 MAC TO MAC

RK3568与KSZ8795交换机芯片连接&#xff0c;直接MAC TO MAC方式&#xff0c;这样一下就扩展会4路网口&#xff0c;应该场合比较多&#xff0c;移植过程如下&#xff1a; 参考《Rockchip_Developer_Guide_Linux_MAC_TO_MAC_CN.pdf》 《rockchip RGMIImv88e6390 管理型交换机功…

【Spring】之Ioc和Aop快速了解

这里写目录标题 1.Spring框架是什么&#xff1f;简介&#xff1a;总结&#xff1a;Spring框架&#xff0c;可以理解为是一个管理者&#xff1a;管理整个分层架构&#xff08;MVC&#xff09;中的每一个对象&#xff1b;&#xff08;每一个对象称之为bean&#xff09; 2.Spring框…

太空旅行:计算机技术的崭新航程

太空旅行&#xff1a;计算机技术的崭新航程 一、引言 自古以来&#xff0c;人类就对浩渺的宇宙充满了无尽的好奇和渴望。随着科技的飞速发展&#xff0c;太空旅行已经从科幻小说中的构想变为现实。在这个过程中&#xff0c;计算机技术起到了不可或缺的作用。从阿波罗时代的初…