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

Pygame开发贪吃蛇

Pygame专为Python设计,支持多平台(如Windows、Mac OS X、Linux、Android等),提供简单易用的API来创建2D游戏。它不仅仅局限于游戏开发,还可用于图形界面和音频应用。

Pygame提供了简洁的API,使得开发者可以快速上手并创建游戏原型。我花了几个小时学习,第二天就开发出了贪吃蛇的主体功能,代码不到100行。

我的设计思路和算法主要如下:

1、每次蛇移动,都先填充整个窗口背景,遮盖原来蛇的图形,然后在新的位置重新绘制,以达到蛇移动的视觉效果。

2、蛇身由多个小正方形组成,每次蛇移动,后面的小正方形便移动到前一个小正方形的当前位置上,以此类推,所以控制蛇身移动的方向,只要控制蛇头移动的方向即可。

3、当遇到窗口边缘时,蛇从另一边出来。

完整代码如下:

import pygame,sys
from random import randintpygame.init()
screen = pygame.display.set_mode((800,600))
screen.fill((145,120,60))alen = 20 #每一节蛇身体的边长
x_step = alen #x的步进值
y_step = 0  #y的步进值
food_rect = ()
#蛇身体由多个小正方形组成
snake = [(300,400,alen,alen),(280,400,alen,alen),(260,400,alen,alen),(240,400,alen,alen),(220,400,alen,alen),(200,400,alen,alen)]
last_snake=[]def move_head():'''到达窗口边界就从另外一边出来'''r = snake[0]#蛇头if (r[0]==(screen.get_width())) and last_snake[1][0]+alen==r[0]: #向右到达右边界snake[0] = (0,r[1],r[2],r[3])   elif r[0]==0 and last_snake[1][0]==r[0]+alen: #向左到达左边界snake[0] = (screen.get_width()-alen,r[1],r[2],r[3])elif r[1]==(screen.get_height()) and last_snake[1][1]+alen==r[1]: #向下到达下边界snake[0] = (r[0],0,r[2],r[3])elif r[1]==0 and last_snake[1][1]==r[1]+alen: #向上到达上边界snake[0] = (r[0],screen.get_height()-alen,r[2],r[3])    else:snake[0] = (r[0]+x_step,r[1]+y_step,r[2],r[3])def move():'''蛇前进,每一节蛇身体的下一个坐标是它的前一节身体的当前坐标'''global x_step,y_step,last_snake    pygame.time.delay(300)      last_snake = snake.copy()    for i in range(len(snake)-1,-1,-1):if i>0:snake[i] = snake[i-1]            move_head()                  draw_snake()def draw_snake():for s in snake:pygame.draw.rect(screen,(0,0,255),s)def draw_food():global food_rectif len(food_rect)==0:xf = randint(1,screen.get_width())//alen*alen  #食物出现的位置应被alen整除yf = randint(1,screen.get_height())//alen*alenfood_rect = (xf,yf,alen,alen)pygame.draw.rect(screen,(255,0,0),food_rect)def eat():global snake,last_snake,food_rectif snake[0]==food_rect:last_snake.insert(0,food_rect)snake = last_snake.copy()food_rect = ()return Trueelse:return Falsewhile 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_UP:x_step = 0y_step = -alenelif event.key == pygame.K_RIGHT:x_step = aleny_step = 0elif event.key == pygame.K_LEFT:x_step = -aleny_step = 0elif event.key == pygame.K_DOWN:x_step = 0y_step = alenscreen.fill((145,120,60)) #填充背景,抹掉上一次的绘图draw_food()if eat():draw_snake()else:move()pygame.display.flip()

相关文章:

Pygame开发贪吃蛇

Pygame专为Python设计,支持多平台(如Windows、Mac OS X、Linux、Android等),提供简单易用的API来创建2D游戏。它不仅仅局限于游戏开发,还可用于图形界面和音频应用。 Pygame提供了简洁的API,使得开发者可以…...

Linux进程间通信(个人笔记)

Linux进程通信 1.进程通信介绍1.1进程间通信目的1.2进程间通信发展1.3进程间通信的具体分类 2.管道2.1匿名管道2.1.1代码实例2.1.2 fork共享管道原理2.1.3 管道的读写规则与特点2.1.4 进程池 2.2 命名管道2.2.1 命名管道的创建2.2.2匿名管道与命名管道的区别2.2.3代码实例 3.Sy…...

SAP S/4HANA 迁移:IT 高管实用指南

新版《通往SAP S/4HANA之路》指南为计划从SAP ERP或SAP S/4HANA本地版本迁移到云端的组织提供了全面的参考。随着数字化转型的加速,尤其是在面临挑战的汽车行业等领域,企业必须采用云ERP解决方案,例如SAP S/4HANA云私有版,以应对瞬…...

Qt源码-Qt多媒体音频框架

Qt 多媒体音频框架 一、概述二、音频设计1. ALSA 基础2. Qt 音频类1. 接口实现2. alsa 插件实现 一、概述 环境详细Qt版本Qt 5.15操作系统Deepin v23代码工具Visual Code源码https://github.com/qt/qtmultimedia/tree/5.15 这里记录一下在Linux下Qt 的 Qt Multimedia 模块的设…...

卸载PLSQL及标准卸载流程

目录 1. 卸载PLSQL2. 删除注册表3. 删除数据信息 1. 卸载PLSQL 等待进度条走完 2. 删除注册表 regedit 右击删除 3. 删除数据信息 由于AppData是隐藏文件,需要勾选隐藏的项目。 重启电脑,PLSQL就卸载成功了。...

如何使用ssm实现办公OA系统0

TOC 10907ssm办公OA系统10907ssm0 第一章 绪 论 1.1背景及意义 系统管理也都将通过计算机进行整体智能化操作,对于办公OA系统所牵扯的管理及数据保存都是非常多的,例如管理员;主页、个人中心、公司公告管理、设备分类管理、办公设备管理、…...

IPguard与Ping32—选择合适的企业数据保护解决方案

在数字化时代,企业面临着各种数据安全挑战,选择合适的保护工具至关重要。IPguard与Ping32是两款备受关注的数据保护软件,但它们各自的功能和适用场景有所不同,企业在选择时需根据自身需求做出明智决策。 Ping32:全面的…...

2024 kali虚拟机安装教程,分两大步骤,图文讲解(2)

准备工作: 按照图文讲解(1)搭建好虚拟机,继续以下步骤 2024 kali虚拟机安装教程,分两大步骤,图文讲解(1)-CSDN博客 正式开始 1.开启,↑ ↓ 方向键,选择第一…...

【解决办法】git clone报错unable to access ‘xxx‘: SSL certificate problem

git clone 是 Git 版本控制系统中的一个基本命令,用于从远程仓库复制一个完整的版本库到本地。这个命令不仅复制远程仓库中的所有文件,还复制仓库的历史记录,使得你可以在本地进行版本控制操作,如提交(commit&#xff…...

基于STM32的智能家居--硬件接线

分配GPIO 1.首先分配串口通讯引脚,该开发板中有三组串口引脚分别分配如图所示。 2.分配SPI。 3.其他为普通GPIO口,B8,B9模拟IIC协议与OLED屏幕进行通讯。...

mac电脑如何删除应用程序?怎么删除苹果电脑里的软件

在使用Mac电脑的过程中,随着时间的推移,我们可能会安装大量的应用程序。然而,这些应用程序中有很多可能只是临时使用,或者已经不再需要了。这些无用的应用程序不仅占据了宝贵的硬盘空间,还可能拖慢Mac系统的运行速度。…...

Hive优化操作(一)

Hive SQL 优化指南 在使用 Hive 进行数据分析时,提高查询性能至关重要。以下是一些具体的优化策略,帮助我们在工作中更有效地管理和查询数据。 一、 减少数据量进行优化 1. 分区表优化 分区是一种表的子集,用于按某一列(如日期…...

Vue中常用指令——(详解,并附有代码)

文章目录 一.指令合集1.0 概述1.1 插值表达式1.2 v-text/v-html1.3 v-show/ v-if1.4 v-on1.4.1 内联语句1.4.2 事件处理函数 1.5 v-bind1.6 Test1.7 v-for 一.指令合集 内容渲染指令(v-html、v-text)条件渲染指令(v-show、v-if、v-else、v-e…...

redistemplate实现点赞相关功能

使用Redis的SET数据结构来存储每个实体的点赞用户ID列表,方便进行点赞数量的计数和用户点赞状态的检查。以下是一个小demo,只提供简单思路。 Service public class LikeService {Autowiredprivate RedisTemplate redisTemplate;//点赞public Long like(…...

C++ 算法学习——7.4.1 优化算法——双指针

双指针法(Two Pointers)是一种常用的算法技巧,通常用于解决数组或链表中的问题。这种技巧通过维护两个指针,通常分别指向数组或链表的不同位置,来协同解决问题。双指针法一般有两种类型:快慢指针和左右指针…...

镁光DDR3的命名

64M16的解释如图。 125是指一个时钟周期需要1.25ns走完,1us对应 1MHZ, 1ns对应1000MHZ ,那么1.25ns对应的时钟频率,就先用 1/1.25得到 1.25us对应的时钟频率 0.8 ,然后再乘以1000,得到800就是MHZ 带宽的计算就是 800M…...

[Git] Git下载及使用 从入门到精通 详解(附下载链接)

前言 目录 Git概述 简介 下载 Git代码托管服务 Git常用命令 Git全局配置 获取Git仓库 在本地初始化一个Git仓库 从远程仓库克隆 基本概念 工作区文件状态 本地仓库操作 远程仓库操作 分支操作 标签操作 在IDEA中使用Git 在IDEA中配置Git 本地仓库操作 远程仓…...

Linux源码阅读笔记-USB驱动分析

基础层次详解 通用串行总线(USB)主要用于连接主机和外部设备(协调主机和设备之间的通讯),USB 设备不能主动向主机发送数据。USB 总线采用拓扑(树形),主机侧和设备侧的 USB 控制器&a…...

【超级详细解释】力扣每日一题 134.加油站 48. 旋转图像

134.加油站 力扣 这是一个很好的问题。这个思路其实基于一种贪心策略。我们从整个路径的油量变化来理解它,结合一个直观的“最低点法则”,来确保找到正确的起点。 问题的核心:油量差值的累积 对于每个加油站,我们有两个数组&…...

数据挖掘基本架构知识点

数据挖掘的基本架构主要包含以下几个部分: 一、数据获取 1. 数据源 - 可以是数据库(如关系型数据库MySQL、Oracle等)、文件系统(如CSV文件、XML文件等)、网络数据(如网页内容、社交媒体数据)等…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...