Python项目——贪吃蛇

news2024/12/28 3:26:15

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为15
        clock.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 = True
                    move_down = False
                    move_left = False
                    move_right = False
                if event.key == pygame.K_DOWN and not move_up:
                    move_up = False
                    move_down = True
                    move_left = False
                    move_right = False
                if event.key == pygame.K_LEFT and not move_right:
                    move_up = False
                    move_down = False
                    move_left = True
                    move_right = False
                if event.key == pygame.K_RIGHT and not move_left:
                    move_up = False
                    move_down = False
                    move_left = False
                    move_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] -= 20
            if snake_list[pos][1] < 0:
                snake_list[pos][1] = 600
        if move_down:
            snake_list[pos][1] += 20
            if snake_list[pos][1] > 600:
                snake_list[pos][1] = 0
        if move_left:
            snake_list[pos][0] -= 20
            if snake_list[pos][0] < 0:
                snake_list[pos][0] = 800
        if move_right:
            snake_list[pos][0] += 20
            if 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 = False
            count -= 1
        # 将绘制的内容显示出来
        pygame.display.update()
    
    pygame.quit()

4、运行结果

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

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

相关文章

【数据结构】八大排序之直接插入排序算法

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 一.直接插入排序简介及思路 直接插入排序(Straight Insertion Sort)是一种简单直观的插入排序算法. 它的基本操作是: 将一个数据插入到已经排好的有序表中,从而得到一个新的,数…

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

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

【DataSophon】大数据服务组件之Flink升级

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&am…

Logstash访问安全访问Elasticsearch集群

生成logstash证书: opensal pkcs12 -in elastic-stack-ca.p12 -clcerts -nokeys > logafash.cer openssl x509 -in logstash.cer -out logstash.pem 编排配置文件

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

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

NAS搭建WebDAV服务同步Zotero科研文献

文章目录 一、Zotero安装教程二、群晖NAS WebDAV设置三、Zotero设置四、使用公网地址同步Zotero文献库五、使用永久固定公网地址同步Zotero文献库 Zotero 是一款全能型 文献管理器,可以 存储、管理和引用文献&#xff0c;不但免费&#xff0c;功能还很强大实用。 ​ Zotero 支…

c# bitmap压缩导致png不透明的问题解决

新建.net 6控制台项目 安装System.Drawing.Common包 代码如下 using System.Drawing; using System.Drawing.Imaging;namespace PngCompress02 {internal class Program{static void Main(string[] args){CompressPngImage("E:\Desktop\6.png", "E:\Desktop\6…

MySQL undo日志精讲

事务回滚的需求 我们说过事务需要保证原子性&#xff0c;也就是事务中的操作要么全部完成&#xff0c;要么什么也不做。但是偏偏有时候事务执行到一半会出现一些情况&#xff0c;比如&#xff1a; 情况一&#xff1a;事务执行过程中可能遇到各种错误&#xff0c;比如服务器本身…

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

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

智慧路灯杆如何实现雪天道路安全监测

随着北方区域连续发生暴雪、寒潮、大风等气象变化&#xff0c;北方多地产生暴雪和低温雨雪冰冻灾害风险&#xff0c;冬季雨雪天气深度影响人们出行生活&#xff0c;也持续增加道路交通风险。 智慧路灯杆是现代城市不可或缺的智能基础设施&#xff0c;凭借搭载智慧照明、环境监测…

读论文:Restormer: Efficient Transformer for High-Resolution Image Restoration

《Restormer: Efficient Transformer for High-Resolution Image Restoration》发表于2022年的CVPR&#xff0c;在 Transformer block 中进行了几个关键设计以提出一种新的高效的视觉 Transformer&#xff0c;称为 Restormer&#xff0c;再一次刷新了视觉 transformer 在高分辨…

山西电力市场日前价格预测【2023-12-16】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-12-16&#xff09;山西电力市场全天平均日前电价为259.00元/MWh。其中&#xff0c;最高日前电价为333.74元/MWh&#xff0c;预计出现在18:00。最低日前电价为0.00元/MWh&#xff0c;预计出…

Intellij IDEA 运行maven报错误“CreateProcess error=2, 系统找不到指定的文件“的完美解决方案

一、问题背景 博主正常使用着Intellij IDEA&#xff0c;不知道为什么突然Intellij IDEA报错&#xff0c;错误提示如下&#xff1a; Error:Cannot run program "C:\Program Files\Java\jdk1.8.0_351" 观察Intellij IDEA报错的原因&#xff0c;我们可以知道&#xff1…

​FL Studio2024最新版本好不好用?有哪些新功能

FL Studio2024版是一款在国内非常受欢迎的多功能音频处理软件&#xff0c;我们可以通过这款软件来对多种不同格式的音频文件来进行编辑处理。而且FL Studio 2024版还为用户们准备了超多的音乐乐器伴奏&#xff0c;我们可以直接一键调取自己需要的音调。 FL Studio 2024版不仅拥…

一分钟解决:vscode卡在“设置SSH主机:VS Code-正在本地下载 VS Code 服务器”

问题&#xff1a;vscode之前可正常使用&#xff0c;更新之后&#xff0c;连接服务器卡住了。 解决&#xff1a;从CMD或者你的终端连接服务器&#xff0c;进入vscode-server目录下&#xff0c;删除一些文件夹就行&#xff0c;然后使用vscode重新链接&#xff0c;它会自动下载新…

机器学习:自督导式学习模型

outline 自督导式模型有跨语言的能力 中文&#xff1a;DRCD的数据集英文&#xff1a;SQuAD的数据集 在104种语言上进行学习&#xff0c;并在英文上进行微调&#xff0c;结果在中文上效果也比较好。 XTREME Benchmark 只用英文进行微调&#xff0c;在其他剩下的语言中进行测试。…

【计算机视觉】SIFT

在边缘提取的时候&#xff0c;用高斯一阶导对信号进行卷积&#xff0c;响应值最大的就是边界如果用高斯二阶导对信号进行卷积&#xff0c;0点就是边界点&#xff08;二阶导等于0的点&#xff0c;对应一阶导的极值点&#xff09; 如果用高斯二阶导在不同的信号上进行卷积&#x…

基于主动安全的AIGC数据安全建设

面对AIGC带来的数据安全新问题&#xff0c;是不是就应该一刀切禁止AIGC的研究利用呢&#xff1f;答案是否定的。要发展AIGC&#xff0c;也要主动积极地对AIGC的数据安全进行建设。让AIGC更加安全、可靠的为用户服务。为达到此目的&#xff0c;应该从三个方面来开展AIGC的数据安…

【GPU】安装nvidia驱动

安装NVIDIA驱动通常有几种方法&#xff0c;包括使用发行版自带的软件仓库、使用NVIDIA官方网站上的.run文件、或使用专有的PPA&#xff08;个人软件包存档&#xff09;等。以下是基于不同情况的一般步骤&#xff1a; 一、通过发行版仓库安装&#xff08;以Ubuntu为例&#xff…