一步步教你怎么用python写贪吃蛇游戏!

用python写一个简单的贪吃蛇游戏(附代码) 今天要给大家分享的是一个 pygame 写的“贪吃蛇”小游戏 阅读详情

目录

0 引言

1 环境

2 需求分析

3 代码实现

4 后记

0 引言

前几天,星球有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Python(蛇)玩Snake(贪吃蛇),那再合适不过了

先通过下面这个效果图来感受下吧!

 

 

 

 

1 环境

操作系统:Windows

Python版本:3.7.3

2 需求分析

Python学习交流群:1004391443

我们先来回顾下贪吃蛇中的游戏元素及游戏规则。

首先呢,需要有贪吃蛇、有食物;需要能控制贪吃蛇来上下移动获取食物;贪吃蛇在吃取食物后,自身长度增加,同时食物消失并随机生成新的食物;如果贪吃蛇触碰到四周墙壁或是触碰到自己身体时,则游戏结束。

游戏规则就是这么简单,接下来我们借助一个第三方库pygame来实现它。

Pygame是一个利用SDL库的游戏库, 是一组用来开发游戏软件的 Python 程序模块。

SDL(Simple DirectMedia Layer)是一个跨平台库,支持访问计算机多媒体硬件(声音、视频、输入等),SDL非常强大,但美中不足的是它是基于 C 语言的。

PyGame是 SDL 库的 Python 包装器(wrapper),Pygame 在SDL库的基础上提供了各种接口,从而使用用户能够使用python语言创建各种各样的游戏或多媒体程序。

它的安装方法很简单,如下:

pip install pygame

想要了解更多pygame功能的朋友也可以查阅官方的文档。

3 代码实现

首先导入我们要用到的模块,除了第三方库pygame外,我们还会用到一些Python内置的模块如sys、random、time等,一并导入即可。

import pygame, sys, random, time
# 从pygame模块导入常用的函数和常量
from pygame.locals import *

3.1 一些全局参数的初始化

接下来,我们需要声明一些全局参数。如初始化pygame、定义游戏窗口的大小、窗口的标题、定义全局的颜色变量等信息。

# 初始化Pygame库
pygame.init()
# 初始化一个游戏界面窗口
DISPLAY = pygame.display.set_mode((640, 480))
# 设置游戏窗口的标题
pygame.display.set_caption('人人都是Pythonista - Snake')
# 定义一个变量来控制游戏速度
FPSCLOCK = pygame.time.Clock()
# 初始化游戏界面内使用的字体
BASICFONT = pygame.font.SysFont("SIMYOU.TTF", 80)
# 定义颜色变量
BLACK = pygame.Color(0, 0, 0)
WHITE = pygame.Color(255, 255, 255)
RED = pygame.Color(255, 0, 0)
GREY = pygame.Color(150, 150, 150)

3.2 初始化贪吃蛇及食物

游戏中需要有贪吃蛇及食物,我们给定一个初始值。我们将整个界面看成许多20*20的小方块,每个小方块代表一个标准小格子,贪吃蛇的长度就可以用几个标准小格子表示。我们将贪吃蛇身体用列表的形式存储,方便之后的删减。

'''初始化贪吃蛇及食物'''

# 贪吃蛇的的初始位置
snake_Head = [100,100]
# 初始化贪吃蛇的长度 (注:这里以20*20为一个标准小格子)
snake_Body = [[80,100],[60,100],[40,100]]
# 指定蛇初始前进的方向,向右
direction = "right"
# 给定第一枚食物的位置
food_Position = [300,300]
# 食物标记:0代表食物已被吃掉;1代表未被吃掉。
food_flag = 1

3.3 实现贪吃蛇的上下左右移动

我们需要控制贪吃蛇的上下左右的移动,这里通过监听键盘输入来实现。利用键盘中的上下左右键或WASD键来控制贪吃蛇的运动。

# 检测按键等Pygame事件
for event in pygame.event.get():
    if event.type == QUIT:
        # 接收到退出事件后,退出程序
        pygame.quit()
        sys.exit()
        
    # 判断键盘事件,用 方向键 或 wsad 来表示上下左右
    elif event.type == KEYDOWN:
        if (event.key == K_UP or event.key == K_w) and direction != DOWN:
            direction = UP
        if (event.key == K_DOWN or event.key == K_s) and direction != UP:
            direction = DOWN
        if (event.key == K_LEFT or event.key == K_a) and direction != RIGHT:
            direction = LEFT
        if (event.key == K_RIGHT or event.key == K_d) and direction != LEFT:
            direction = RIGHT

接下来就是将蛇前进方向按照键盘的输入进行转弯操作,并将蛇的头部当前的位置加入到蛇身的列表中。

# 根据键盘的输入,改变蛇的头部,进行转弯操作
if direction == LEFT:
    snake_Head[0] -= 20
if direction == RIGHT:
    snake_Head[0] += 20
if direction == UP:
    snake_Head[1] -= 20
if direction == DOWN:
    snake_Head[1] += 20
# 将蛇的头部当前的位置加入到蛇身的列表中
snake_Body.insert(0, list(snake_Head))

3.4 判断是否吃到食物

如果蛇头与食物的位置重合,则判定吃到食物,将食物数量清零;而没吃到食物的话,蛇身就会跟着蛇头运动,蛇身的最后一节将被踢出列表。

# 判断是否吃掉食物
if snake_Head[0]==food_Position[0] and snake_Head[1]==food_Position[1]:
    food_flag = 0
else:
    snake_Body.pop()

3.5 重新生成食物

当游戏界面中的食物数量为0时,需要重新生成食物。利用random函数来生成随机位置

# 生成新的食物
if food_flag == 0:
    # 随机生成x, y
    x = random.randrange(1,32)
    y = random.randrange(1,24)
    food_Position = [int(x*20),int(y*20)]
    food_flag = 1

3.6 绘制贪吃蛇、食物、分数等信息

定义贪吃蛇的绘制函数

# 绘制贪吃蛇
def drawSnake(snake_Body):
    for i in snake_Body:
        pygame.draw.rect(DISPLAY, WHITE, Rect(i[0], i[1], 20, 20))
定义食物的绘制函数
# 绘制食物的位置
def drawFood(food_Position):
    pygame.draw.rect(DISPLAY, RED, Rect(food_Position[0], food_Position[1], 20, 20))
定义分数的绘制函数
# 打印出当前得分
def drawScore(score):
    # 设置分数的显示颜色
    score_Surf = BASICFONT.render('%s' %(score), True, GREY)
    # 设置分数的位置
    score_Rect = score_Surf.get_rect()
    score_Rect.midtop = (320, 240)
    # 绑定以上设置到句柄
    DISPLAY.blit(score_Surf, score_Rect)

这些都定义好之后,我们需要在游戏主逻辑中调用它们,并刷新Pygame的显示层,贪吃蛇与食物的每一次移动,都会进行刷新显示层的操作来显示。最后我们可以设定一个速度值来合理控制游戏执行的速度。

DISPLAY.fill(BLACK)
# 画出贪吃蛇
drawSnake(snake_Body)
# 画出食物的位置
drawFood(food_Position)
# 打印出玩家的分数
drawScore(len(snake_Body) - 3)
# 刷新Pygame的显示层,贪吃蛇与食物的每一次移动,都会进行刷新显示层的操作来显示。
pygame.display.flip()
# 控制游戏速度
FPSCLOCK.tick(7)

3.7 定义游戏结束的画面并判断游戏是否结束

定义函数,用于展示游戏结束的画面并退出程序

# 游戏结束并退出
def GameOver():
    # 设置GameOver的显示颜色
    GameOver_Surf = BASICFONT.render('Game Over!', True, GREY)
    # 设置GameOver的位置
    GameOver_Rect = GameOver_Surf.get_rect()
    GameOver_Rect.midtop = (320, 10)
    # 绑定以上设置到句柄
    DISPLAY.blit(GameOver_Surf, GameOver_Rect)
    pygame.display.flip()
    # 等待3秒
    time.sleep(3)
    # 退出游戏
    pygame.quit()
    # 退出程序
    sys.exit()

在游戏主逻辑中加入判断,游戏是否结束

'''游戏结束的判断'''
# 贪吃蛇触碰到边界
if snake_Head[0]<0 or snake_Head[0]>620:
    GameOver()
if snake_Head[1]<0 or snake_Head[1]>460:
    GameOver()
# 贪吃蛇触碰到自己
for i in snake_Body[1:]:
    if snake_Head[0]==i[0] and snake_Head[1]==i[1]:
        GameOver()

4 后记

本文利用Pygame模块实现了最简单的贪吃蛇版本。当然还有很多需要优化的地方,比如随机生成食物时如何避免出现在贪吃蛇的自身上、通过贪吃蛇的长度来自动控制游戏速度等等。更高级一点的有如何通过AI自动玩贪吃蛇、贪吃蛇的双人对战等,期待大家利用Python可以把贪吃蛇玩出一个新的高度!:sunglasses::sunglasses::sunglasses:

手把手教你使用 Python 制作贪吃蛇游戏 贪吃蛇游戏是有史以来最受欢迎的街机游戏之一。在这个游戏中,玩家的主要目标是在不撞墙或不撞墙的情况下抓住最大数量的水果。在学习 Python 或 Pygame 时,可以将创建蛇游戏视为一项挑战。这是每个新手程序员都应该接受的最好的初学者友好项目之一。学习构建视频游戏是一种有趣而有趣的学习。 我们将使用Pygame来创建这个蛇游戏。Pygame是一个开源库,专为制作视频游戏而设计。它具有内置的图形和声音库。它也是初学者友好的和跨平台的。 ???? 安装 要安装 Pygame,您需要打开终端或命令提示符并输 阅读详情

相关推荐

新手用Python通过Pygame一步步实现贪吃蛇

我是一个Python的newer,这几天一直在学习Python,昨天在优快云看到了一篇关于用pygame写贪吃蛇游戏的代码,名字叫《一步步教你怎么用Python写贪吃蛇游戏》 ,文章写得很清晰,游戏的大概原理和关于pygame的使用方法也都做了详细的说明,但是由于代码顺序比较乱,如果按照文章的顺序一步步敲代码出来,会马上闪退。 本来也是学习,所以我自己修改了一下,发上来供像我这样的新手研究学习。 第一步,先导入需要的模块,初始化Pygame。代码里的注释都比较清楚了,我就不再赘述。 # 导入需要用到的模块

weixin_43173447的博客 4094

怎样用Python制作一个贪吃蛇游戏

side=30#正方形边长height=20*side#20个正方形的边长width=20*side#20个正方形的边长margin=4#间距snake=[]#蛇身的坐标move=[1,0]#移动方向score=[0]#得分t=[]#时间#窗口初始化ci,cj=set_cookie()#生成cookiestart_x=6#蛇的初始坐标start_y=6cookie.append([ci,cj])#保存cookie。

qq_66912943的博客 4243

用Python做贪吃蛇小游戏

用Python做贪吃蛇小游戏简介引言游戏预览结构图代码框架图代码讲解main主函数-开始工作show_start_info()欢迎进入游戏running_game-让我们开始游戏吧draw_snake-画出我们的贪吃蛇draw_food-画出我们的食物 简介 贪吃蛇游戏是一款经典的益智游戏,既简单又耐玩。该游戏通过控制蛇头方向吃食物,从而使得蛇变得越来越长。 引言 贪吃蛇小游的设计过程,以及这个系...

weixin_44279800的博客 5392

【python】10分钟教你用python打造贪吃蛇超详细教程

【python】10分钟教你用python打造贪吃蛇超详细教程 10分钟教你用python打造贪吃蛇超详细教程 在家闲着没妹子约, 刚好最近又学了一下python,听说pygame挺好玩的。今天就在家研究一下, 弄了个贪吃蛇出来。希望大家喜欢。 先看程序效果: 01 整体框架 平台:pycharm 关于pygame的安装这里就不在...

infinitor的博客 6584

10分钟用Python编写一个贪吃蛇小游戏

贪吃蛇,大家应该都玩过。当初第一次接触贪吃蛇的时候 ,还是能砸核桃的诺基亚上,当时玩的不亦乐乎。今天,我们用Python编程一个贪吃蛇游戏,下面我们先看看效果: 好了,先介绍一个思路 所有的游戏最主要的内容都是程序的内循环,这才是保证一个游戏能够正常运行的前提。 以下是编写贪吃蛇小游戏的主要思路。 废话不多说,我们直接来讲解如何利用Python进行贪吃蛇的编写吧 一、调用库以及初始设置 1. 调用第三方库 Python与其他语言很不一样的一点在于他有很多的第三方库可以调用。在P

m0_69951489的博客 9092

Python实现贪吃蛇【含代码和讲解】

接下来我们定义了蛇和食物的类,蛇类拥有绘制、移动、改变方向以及检查碰撞等方法,食物类拥有随机位置、绘制等方法。当蛇的头部碰到自己的身体或者碰到边界时,游戏结束。首先,让我们了解一下贪吃蛇游戏的规则:玩家需要控制一条蛇去吃食物,每吃一个食物长度加一,当蛇的头部碰到自己的身体或者碰到边界时,游戏结束。我们知道,蛇是由多个方块组成,每条蛇都有一个头部和若干个身体节,蛇可以通过移动改变自己的方向和位置。通过以上代码实现,我们可以轻松地打造出属于自己的贪吃蛇游戏,是一款非常有趣的小游戏,大家感受一下吧!

. 3831

bat贪吃蛇游戏代码_一步步教你怎么用python写贪吃蛇游戏!

目录0 引言1 环境2 需求分析3 代码实现4 后记0 引言前几天,星球有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Python(蛇)玩Snake(贪吃蛇),那再合适不过了先通过下面这个效果图来感受下吧!1 环境操作系统:WindowsPython版本:3.7.32 需求分析Python学习交流群:1004391443我们先来回顾下贪吃蛇...

weixin_39753213的博客 909

PYTHON做贪吃蛇代码

PYTHON做贪吃蛇代码 PYTHON做贪PYTHONPYTHON做贪吃蛇代码做贪吃蛇代码 吃蛇代码 PYTHON做贪吃蛇代码PYTHON做贪吃蛇代码PYPYTHON做贪吃蛇代码THON做贪吃蛇代码PYTHON做贪吃蛇代码PYTHON做PYTHON做贪吃蛇代码贪吃蛇代码PYTHON做贪吃蛇代码PYTHON做贪吃蛇代码PYTHON做贪吃蛇代码PYTHON做贪吃蛇代码PYTHON做贪吃蛇代码PYTHON做贪吃蛇代码PYTHON做贪吃蛇代码PYTHON做贪吃蛇代码PYTHON做贪吃蛇代码PYTHON做贪吃蛇代码PYTHON做贪吃蛇代码PYTHON做贪吃蛇代码PYTHON做贪吃蛇代码PYTHON做贪吃蛇代码,非常有用,可供大家学习,注意是PY3.10的哦!

如何用python做贪吃蛇_一步步教你怎么用python写贪吃蛇游戏!

目录0 引言1 环境2 需求分析3 代码实现4 后记0 引言前几天,星球有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Python(蛇)玩Snake(贪吃蛇),那再合适不过了先通过下面这个效果图来感受下吧!1 环境操作系统:WindowsPython版本:3.7.32 需求分析Python学习交流群:1004391443我们先来回顾下贪吃蛇...

weixin_39968655的博客 453

用Verilog在FPGA上做个电子琴:从矩阵键盘到蜂鸣器的完整实现(附代码)

本文详细介绍了如何使用Verilog在FPGA上实现一个完整的电子琴系统,涵盖矩阵键盘扫描、音调生成和蜂鸣器驱动等核心模块。通过模块化设计和PWM调制技术,开发者可以构建一个可交互的音乐播放器,项目代码完整且易于扩展,适合FPGA初学者和数字逻辑设计爱好者实践。

weixin_29191669的博客 403

ArcGIS 10.8软件安装包免费下载及安装教程

ArcGIS 10.8安装教程

qq_44894692的博客 2万+

一步步教你怎么用python写贪吃蛇游戏

目录 0 引言 1 环境 2 需求分析 3 代码实现 4 后记 0 引言 前几天,星球有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Python(蛇)玩Snake(贪吃蛇),那再合适不过了

Python专栏 3万+

3. ChaosBlade-Box平台安装

参考自:https://chaosblade.io/docs/about-chaosblade/box-introduce/通过ChaosBlade-Box可实现chaosblade等已托管工具自动化部署,按照社区的建立的混沌实验模型统一实验场景,根据主机、Kubernetes、应用来划分目标资源,通过目标管理器来控制,在实验创建页面,可以实现白屏化的目标资源选择。

lldhsds的专栏 2485

一步步教你怎么用Python写贪吃蛇游戏

(图片下载自视觉中国)作者 | 上海小胖来源 | Python专栏(ID:xpchuiit)目录0 引言1 环境2 需求分析3 代码实现4 后记0 引言前几天,星球有...

Python大本营的博客 4万+

用Python+OpenCV给斗地主做个‘外挂’:手把手教你写个桌面记牌器(附源码)

本文详细介绍了如何使用Python和OpenCV开发一个智能斗地主记牌器,包括环境搭建、图像采集与预处理、扑克牌识别技术及PyQt5界面设计。通过实战案例,帮助开发者掌握图像处理与界面开发的结合应用,提升游戏辅助工具的编写能力。

weixin_29079643的博客 546

Python爬招聘网站:Selenium+ActionChains破解滑动验证码,批量采集岗位数据(新手可跑)

通过本文实战,你不仅学会了用Selenium+ActionChains破解滑动验证码,还掌握了爬虫的核心优化思路——“模拟人类行为”是突破反爬的关键。这套逻辑不仅适用于招聘网站,还能迁移到其他有滑动验证码的平台(如电商、资讯网站)。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1188

基于Python的贪吃蛇游戏设计

摘要 本次论文设计的主题是贪吃蛇游戏。游戏的主要内容大致分为游戏界面设计和游戏功能设计两大部分,其中游戏界面设计是以满足用户的视觉体验为主,游戏功能设计是在满足原有的贪吃蛇游戏基本功能的基础上添加一些其他的功能。本次的实现代码也较为简洁,总共170行左右,运用了Python的一些函数库和模块库,其中最主要的是pygame模块。 1.引言 1.1背景、意义 现如今,人们的生活节奏日益加快,繁忙冗杂的工作、学习和生活使人们的生活变得枯燥,没有新意,休息时间越来越少。面对这样的生活,人们大都渴望在这仅有的休息时间

hsg5201314的博客 2万+

车载以太网-组播

车载以太网-组播

天赐好车的博客 253

【Python】 Python小游戏-贪吃蛇大冒险

一、前言 距上次更新博客,又过去很长时间了,感觉再不更新一下,自己写博客的习惯就要废了,哈哈。从去年九月份开学之后,疫情学期期末考试开学考、实验室项目软著申请和新项目设计、课程集训等事情较多,没有很多时间;然后这个学期我到大三下学期,实验室工作交接完就准备考研,之后也没有很多时间来写博客,所以赶紧来更新一下,和大家分享一些知识和心得,希望喜欢的小伙伴可以点赞、收藏和关注,哈哈。 二、贪吃蛇大冒险小游戏 一、游戏简介 1.1游戏操作及游戏规则 (1)游戏开始后,通过键盘上下左右键控制贪吃蛇移动寻找食物; (2

Up_Long的博客 9万+

【S32K3 MCAL配置】-3.4-CANFD配置-接收特定的“经典CAN/CANFD标准帧”和“经典CAN/CANFD扩展帧”(基于MCAL+FreeRTOS)

【S32K3 MCAL配置】-3.4-CANFD配置-接收特定的“经典CAN/CANFD标准帧”和“经典CAN/CANFD扩展帧”(基于MCAL+FreeRTOS)

「汽车电子助手」的博客 696

RK3568 Android14 调试 RTL8211F 千兆以太网 (RGMII)

调试 RTL8211F 的核心在于:确认地址(看电阻贴片情况)和 搞定延时(配置 rgmii-id 或微调 delay 值)。一旦这两点对上了,RK3568 的千兆网络就能稳定运行。希望这篇结合原理图的实战记录能帮到你!

qq_33427070的博客 1649

手把手教你使用Python写贪吃蛇游戏(pygame)

手把手教你使用Python写贪吃蛇游戏

qq_51447436的博客 2万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

python贪吃蛇代码写好了怎么运行-教你一步步利用python实现贪吃蛇游戏

0 引言前几天,星球有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Python(蛇)玩Snake(贪吃蛇),那再合适不过了???先通过下面这个效果图来感受下吧!1 环境操作系统:WindowsPython版本:3.7.32 需求分析我们先来回顾下贪吃蛇中的游戏元素及游戏规则。首先呢,需要有贪吃蛇、有食物;需要能控制贪吃蛇来上下移动获取食物;...

weixin_37988176的博客 4963

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

python贪吃蛇代码写好了怎么运行-一步步教你怎么用python写贪吃蛇游戏

目录0 引言1 环境2 需求分析3 代码实现4 后记0 引言前几天,星球有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Python(蛇)玩Snake(贪吃蛇),那再合适不过了???先通过下面这个效果图来感受下吧!1 环境操作系统:WindowsPython版本:3.7.32 需求分析我们先来回顾下贪吃蛇中的游戏元素及游戏规则。首先呢,需要有...

weixin_37988176的博客 1600

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【python小游戏】用python写一款小游戏--贪吃蛇

【python小游戏】用python写一款小游戏--贪吃蛇。相信大家都玩过,那么玩一款自己写的是一种什么样的体验呢。只要三个模块就可以了pygame,sys,random。

爱吃饼干的小白鼠的博客 5950
上一篇: 媲美Pandas?告诉你Python的Datatable包到底怎么用!
下一篇: Python新手入门的一些 PyCharm 的使用和设置建议!
普通网友
博客等级 码龄7年 438粉丝 263原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值