python贪吃蛇游戏

news/2024/7/7 22:12:27

为了实现这个游戏,需要用到Python的pygame模块,它是一个专门用于开发游戏的模块,提供了很多方便的功能,比如窗口、图形、音效、事件处理等。

用pygame来创建一个窗口,设置游戏的背景色,画出蛇和食物,处理用户的输入,更新游戏的状态,显示分数等。

游戏思路

首先,我们需要初始化pygame,设置窗口的大小和标题,设置游戏的帧率,设置游戏的颜色和字体。

然后,我们需要设置蛇的初始位置和方向,用一个列表来存储蛇的每一节的坐标,用一个字符串来表示蛇的方向。我们还需要设置食物的初始位置,用一个元组来存储食物的坐标。我们还需要设置游戏的状态,用一个布尔值来表示游戏是否结束,用一个整数来表示分数。

接着,我们需要进入游戏的主循环,不断地处理用户的输入事件,更新游戏的状态,绘制游戏的画面,直到游戏结束。

- 在游戏的主循环中,我们需要做以下的事情:  

  - 处理用户的输入事件,如果用户点击了关闭按钮,退出游戏,如果用户按下了键盘,改变蛇的方向。    

- 根据蛇的方向,计算蛇头的新位置,把新的蛇头加到蛇的列表里。    

- 判断蛇是否撞到了边界或者自己的身体,如果是,游戏结束,跳出循环。     -

判断蛇是否吃到了食物,如果是,增加分数,随机生成一个新的食物位置,否则,去掉蛇的尾巴。 - 填充背景色,画出蛇的身体,画出食物,显示分数,更新屏幕,控制游戏的速度。

- 最后,退出pygame,结束游戏。

演示图

代码

# 导入pygame模块
import pygame
# 导入random模块
import random

# 初始化pygame
pygame.init()

# 设置窗口的大小和标题
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption('贪吃蛇')

# 设置游戏的帧率
clock = pygame.time.Clock()
FPS = 10

# 设置游戏的颜色
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)

# 设置游戏的字体
font = pygame.font.SysFont('arial', 32)

# 设置蛇的初始位置和方向
snake = [(400, 300), (380, 300), (360, 300)]
direction = 'right'

# 设置食物的初始位置
food = (random.randint(0, 39) * 20, random.randint(0, 29) * 20)

# 设置游戏的状态
game_over = False
score = 0

# 游戏的主循环
while not game_over:
    # 处理用户的输入事件
    for event in pygame.event.get():
        # 如果用户点击了关闭按钮,退出游戏
        if event.type == pygame.QUIT:
            game_over = True
        # 如果用户按下了键盘,改变蛇的方向
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP and direction != 'down':
                direction = 'up'
            if event.key == pygame.K_DOWN and direction != 'up':
                direction = 'down'
            if event.key == pygame.K_LEFT and direction != 'right':
                direction = 'left'
            if event.key == pygame.K_RIGHT and direction != 'left':
                direction = 'right'

    # 根据蛇的方向,计算蛇头的新位置
    head = snake[0]
    if direction == 'up':
        new_head = (head[0], head[1] - 20)
    if direction == 'down':
        new_head = (head[0], head[1] + 20)
    if direction == 'left':
        new_head = (head[0] - 20, head[1])
    if direction == 'right':
        new_head = (head[0] + 20, head[1])

    # 判断蛇是否撞到了边界或者自己的身体,如果是,游戏结束
    if new_head[0] < 0 or new_head[0] > 780 or new_head[1] < 0 or new_head[1] > 580 or new_head in snake:
        game_over = True
        break

    # 把新的蛇头加到蛇的列表里
    snake.insert(0, new_head)

    # 判断蛇是否吃到了食物,如果是,增加分数,否则,去掉蛇的尾巴
    if new_head == food:
        score += 10
        # 随机生成一个新的食物位置
        food = (random.randint(0, 39) * 20, random.randint(0, 29) * 20)
    else:
        snake.pop()

    # 填充背景色
    screen.fill(BLACK)

    # 画出蛇的身体
    for segment in snake:
        pygame.draw.rect(screen, GREEN, (segment[0], segment[1], 20, 20))

    # 画出食物
    pygame.draw.rect(screen, RED, (food[0], food[1], 20, 20))

    # 显示分数
    text = font.render('Score: ' + str(score), True, WHITE)
    screen.blit(text, (10, 10))

    # 更新屏幕
    pygame.display.flip()

    # 控制游戏的速度
    clock.tick(FPS)

# 退出pygame
pygame.quit()


http://lihuaxi.xjx100.cn/news/1973567.html

相关文章

什么是开放寻址法

开放寻址法&#xff08;Open Addressing&#xff09;是一种解决哈希冲突的方法&#xff0c;其中如果一个哈希表位置被占用了&#xff0c;就去寻找下一个可用的位置&#xff0c;直到找到一个空槽或者遍历整个表。这种方法避免了使用额外的数据结构&#xff08;比如链表&#xff…

ONLYOFFICE:开源、免费、安全,打造定制化办公平台的最佳选择

文章目录 写在前面ONLYOFFICE是什么&#xff1f;ONLYOFFICE的惊艳之处齐全的插件&#xff0c;助你锦上添花部署一款自己的安全可靠的办公平台写在最后 写在前面 说起 Office 办公软件&#xff0c;我想大家最常用的应该就是微软的 Microsoft Office 以及国产的 WPS Office。两款…

【音视频原理】图像相关概念 ② ( 帧率 | 常见帧率标准 | 码率 | 码率单位 )

文章目录 一、帧率1、帧率简介2、常见帧率标准3、帧率 刷新率 二、码率1、码率简介2、码率单位 一、帧率 1、帧率简介 帧率 Frame Rate , 帧 指的是 是 画面帧 , 帧率 是 画面帧 的 速率 ; 帧率 的 单位是 FPS , Frames Per Second , 是 每秒钟 的 画面帧 个数 ; 帧率 是 动画…

IP 网络分为接入网、城域网和骨干网

根据前述的IP 网络设计思想&#xff0c;结合算力网络对 正网络的需求分析&#xff0c;卫网络的具体实现可以从架构设计利网络技术两个方面进行总体设计。 首先从架构设计上考虑&#xff0c;架构应尽量简化&#xff0c;做到“以简应繁”。因此&#xff0c;整体网络架构不宜设计…

【协议】HTTP、HTTPS和HTTP2.0学习总结

1. TCP/IP四层协议 记得大学学网络课程的时候&#xff0c;学的都是OSI/RM七层协议&#xff0c;应用层 -> 表示层 -> 会话层 -> 传输层->网络层->数据链路层->物理层&#xff0c;当时学的时候&#xff0c;感觉太抽象了&#xff0c;学得个一知半解。大脑在接收…

multipass方便创建虚拟机

安装 https://multipass.run/ windows安装之后可能powershell或者cmd打不开的情况。 可以在安装目录下按住shift点击鼠标右键的方式打开powershell&#xff0c;在这个powershell中进行操作。 显示虚拟机信息 <实例名称> multipass info 修改驱动 multipass set loca…

黑群晖利用云服务器公网IP

一、服务器端 1.使用工具 xShell&#xff1a;连接云服务器使用。 云服务&#xff1a;阿里云&#xff0c;系统采用的是Ubuntu20.02&#xff0c;预装了宝塔界面&#xff0c;设置好root密码。 2.操作 远程登录阿里云&#xff0c;安装Vim、Wget等功能&#xff1b;下载和一键安装…

Qt SDL2播放Wav音频

这里介绍两种方法来实现Qt播放Wav音频数据。 方法一&#xff1a;使用QAudioOutput pro文件中加入multimedia模块。 #include <QApplication> #include <QFile> #include <QAudioFormat> #include <QAudioOutput>int main(int argc, char *argv[]) {…