百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

只要100行代码,实现python贪吃蛇

ztj100 2024-10-29 18:22 60 浏览 0 评论

[赞]?[赞]?[赞]?[赞]?[赞]?[赞]

贪吃蛇 具体实现部分,大致分为三个模块来介绍:游戏初始化、游戏运行(蛇移动、吃掉食物)、游戏结束

1,游戏初始化

首先,需对游戏中的 蛇、食物、游戏边界、各元素颜色属性、得分记录、速度记录 等进行初始化,初始的窗口大小设为(600,480),通过宽度为 1 的黑线将游戏窗口分为数个小方格(每个小方格大小为 (20,20))

初始化的大小占连续3个小方格;食物占 1个小方格、初始时食物随机放置在窗口内某一坐标处(当然需要排除蛇身区域外)

2,游戏得分

当游戏开始时需给与 **蛇 ** 运动方向设定为一个初始参数 ,这里以二维元组形式存储,赋值给变量 p,共分为四种情况:

  • p = (1,0),向右;
  • P = (0,-1),向下;
  • p = (0,1),向上;
  • p = (-1,0),向左;

配合键盘事件响应,当用户按下 上(w)、下(s)、左(a)、右(d)键时,程序会执行相应操作

        for event in pygame.event.get():#事件刷新
            if event.type == QUIT:
                sys.exit()#退出
            elif event.type == KEYDOWN:
                if event.key == K_RETURN:
                    if game_over:
                        start = True
                        game_over = False
                        b =True
                        snake = init_snake()
                        food = create_food(snake)
                        food_style = get_food_style()
                        pos = (1,0)#方向
                        score = 0
                        last_move_time = time.time()#上次移动时间


                elif event.key == K_SPACE:
                    if not game_over:
                        pause = not pause
                elif event.key in(K_w,K_UP):
                    #判断防止蛇向上移动时按了向下键,导致Game Over
                    if b and not pos[1]:
                        pos = (0,-1)
                        b = False
                elif event.key in (K_s,K_DOWN):
                    if b and not pos[1]:
                        pos =(0,1)
                        b = False
                elif event.key in (K_a,K_LEFT):
                    if b and not pos[0]:
                        pos = (-1,0)
                        b =False
                elif event.key in (K_d,K_RIGHT):
                    if b and not pos[0]:
                        pos =(1,0)
                        b = False

蛇身移动

程序将 所占所有小方格坐标依次存储在一个队列中,移动一次,队列完成一次进出操作:队尾删除一个元素,对列头部插入蛇头所在的新方格坐标;

吃到食物

每吃到一次食物,蛇身多增加一个小方格区域,其队列插入一个新元素、长度加一,

3,游戏结束

游戏终止的边界条件为两类

1,移动区域超出窗口边界;

2,蛇头碰到蛇身;

程序中用 布尔变量 game_over来标识游戏是否结束(True或者False),每次刷新页面之前默认为 False,当游戏正常运行未发生以上两类事件时设为True 游戏运行,否则游戏结束

为了提高游戏体验,程序中用 score 变量表示得分,speed 来表示移动速度,得分每增加100 更新一次移动速度,随着时间推移游戏难度也不断加大

 score += food_style[0]
 speed = orispeed - 0.03*(score//100) # 更新速度

相关推荐

Java的SPI机制详解

作者:京东物流杨苇苇1.SPI简介SPI(ServiceProvicerInterface)是Java语言提供的一种接口发现机制,用来实现接口和接口实现的解耦。简单来说,就是系统只需要定义接口规...

90%的Java程序员都忽视的内部类使用不当导致内存泄露!

...

一文读懂 Spring Boot 启动原理,开发效率飙升!

在当今的Java开发领域,SpringBoot无疑是最热门的框架之一。它以其“约定大于配置”的理念,让开发者能够快速搭建和启动应用,极大地提高了开发效率。但是,你是否真正了解Spring...

ServiceLoader

ServiceLoader是Java提供的一种服务发现机制(ServiceProviderInterface,SPI)...

深入探索 Spring Boot3 中的自定义扩展操作

在当今互联网软件开发领域,SpringBoot无疑是最受欢迎的框架之一。随着其版本迭代至SpringBoot3,它为开发者们带来了更多强大的功能和特性,其中自定义扩展操作更是为我们在项目开发中...

Spring Boot启动过程全面解析:从入门到精通

一、SpringBoot概述SpringBoot是一个基于Spring框架的快速开发脚手架,它通过"约定优于配置"的原则简化了Spring应用的初始搭建和开发过程。...

Spring Boot 3.x 自定义 Starter 详解

今天星期六,继续卷springboot3.x。在SpringBoot3.x中,自定义Starter是封装和共享通用功能、实现“约定优于配置”理念的强大机制。通过创建自己的Starte...

Spring Boot 的 3 种动态 Bean 注入技巧

在SpringBoot开发中,动态注入Bean是一种强大的技术,它允许我们根据特定条件或运行时环境灵活地创建和管理Bean。相比于传统的静态Bean定义,动态注入提供了更高的灵活性和可...

大佬用4000字带你彻底理解SpringBoot的运行原理!

SpringBoot的运行原理从前面创建的SpringBoot应用示例中可以看到,启动一个SpringBoot工程都是从SpringApplication.run()方法开始的。这个方法具体完成...

Springboot是如何实现自动配置的

SpringBoot的自动配置功能极大地简化了基于Spring的应用程序的配置过程。它能够根据类路径中的依赖和配置文件中的属性,自动配置应用程序。下面是SpringBoot实现自动配置的...

Spring Boot3.x 应用的生命周期深度解析

SpringBoot应用的生命周期可以清晰地划分为三个主要阶段:启动阶段(Startup)...

Springboot 启动流程及各类事件生命周期那点事

前言本文通过Springboot启动方法分析SpringApplication逻辑。从静态run方法执行到各个阶段发布不同事件完成整个应用启动。...

Spring框架基础知识-常用的接口1

BeanDefinition基本概念BeanDefinition是Spring框架中描述bean配置信息的核心接口,它包含了创建bean实例所需的所有元数据。...

一家拥有 158 年历史的公司遭遇索赔,被迫关闭!

...

Java 技术岗面试全景备战!从基础到架构的系统性通关攻略分享

Java技术岗的面试往往是一项多维度的能力检验。本文将会从核心知识点、项目经验到面试策略,为你梳理一份系统性的备战攻略!...

取消回复欢迎 发表评论: