Python在线编译器Lightly轻松实现贪吃蛇游戏

 更新时间:2025年09月04日 09:19:56   作者:杰西笔记  
今天我将带领大家使用Python的Pygame库在Lightly在线编译器中实现一个经典的贪吃蛇游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

前言

今天我将带领大家使用Python的Pygame库在Lightly在线编译器中实现一个经典的贪吃蛇游戏。Lightly是一个非常方便的在线开发环境,无需安装任何软件,直接在浏览器中就能编写和运行Python代码。

https://www.lightlycode.com/python

一、环境准备

安装Pygame库

在Lightly中,我们首先需要安装Pygame库。虽然Lightly已经预装了许多常用库,但为了确保最新版本,我们可以在终端中运行:

pip install pygame

Lightly的终端位于界面底部,点击"+"号可以打开新终端。

二、贪吃蛇游戏实现

下面我将完整展示贪吃蛇游戏的代码,并解释关键部分:

import pygame
import random

# 初始化
pygame.init()
width, height = 400, 300
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("贪吃蛇 - 极简中文版")
clock = pygame.time.Clock()

# 颜色定义
black = (0, 0, 0)
green = (0, 255, 0)
red = (255, 0, 0)
white = (255, 255, 255)

# 蛇和食物初始化
snake = [(width // 2, height // 2)]
food = (random.randint(0, (width - 10) // 10) * 10, 
        random.randint(0, (height - 10) // 10) * 10)
dx, dy = 10, 0  # 初始向右移动

# 字体设置(支持中文)
try:
    font = pygame.font.Font(None, 30)
except:
    pass

try:
    font = pygame.font.SysFont("SimHei", 25)  # 黑体
except:
    font = pygame.font.SysFont("Microsoft YaHei", 25)  # 微软雅黑
    if not font:
        font = pygame.font.SysFont("arial", 25)  # 兜底方案

# 游戏主循环
running = True
game_over = False
score = 0

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        # 游戏进行中的键盘控制
        if not game_over:
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_UP and dy == 0:
                    dx, dy = 0, -10
                elif event.key == pygame.K_DOWN and dy == 0:
                    dx, dy = 0, 10
                elif event.key == pygame.K_LEFT and dx == 0:
                    dx, dy = -10, 0
                elif event.key == pygame.K_RIGHT and dx == 0:
                    dx, dy = 10, 0
        else:
            # 游戏结束后的键盘控制
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_r:
                    # 重新开始
                    snake = [(width // 2, height // 2)]
                    food = (random.randint(0, (width - 10) // 10) * 10,
                            random.randint(0, (height - 10) // 10) * 10)
                    dx, dy = 10, 0
                    score = 0
                    game_over = False
                elif event.key == pygame.K_q:
                    running = False

    # 游戏结束画面
    if game_over:
        screen.fill(black)
        game_over_text = font.render("游戏结束!", True, red)
        score_text = font.render(f"得分: {score}", True, white)
        restart_text = font.render("按 R 重新开始, Q 退出", True, white)
        screen.blit(game_over_text, (width // 2 - 60, height // 2 - 40))
        screen.blit(score_text, (width // 2 - 50, height // 2))
        screen.blit(restart_text, (width // 2 - 100, height // 2 + 40))
        pygame.display.flip()
        continue

    # 蛇的移动逻辑
    head = snake[0]
    new_head = ((head[0] + dx) % width, (head[1] + dy) % height)
    snake.insert(0, new_head)

    # 食物检测
    if new_head == food:
        food = (random.randint(0, (width - 10) // 10) * 10,
                random.randint(0, (height - 10) // 10) * 10)
        score += 1
    else:
        snake.pop()

    # 碰撞检测(撞到自己)
    if snake[0] in snake[1:]:
        game_over = True

    # 绘制游戏画面
    screen.fill(black)
    # 绘制蛇身
    for part in snake:
        pygame.draw.rect(screen, green, (*part, 10, 10))
    # 绘制食物
    pygame.draw.rect(screen, red, (*food, 10, 10))
    # 显示分数
    score_surface = font.render(f"得分: {score}", True, white)
    screen.blit(score_surface, (10, 10))

    pygame.display.flip()
    clock.tick(10)  # 控制游戏速度

pygame.quit()

三、代码解析

1. 初始化设置

  • pygame.init() 初始化所有Pygame模块
  • 创建400x300像素的游戏窗口
  • 设置游戏标题为"贪吃蛇 - 极简中文版"
  • 定义了黑、绿、红、白四种颜色

2. 游戏对象初始化

  • 蛇初始位置在屏幕中央,用一个坐标列表表示
  • 食物位置随机生成,确保在网格对齐
  • 初始移动方向向右(dx=10, dy=0)

3. 字体处理

特别处理了中文字体显示问题,尝试使用系统自带的中文字体:

  • 首先尝试黑体(SimHei)
  • 然后尝试微软雅黑(Microsoft YaHei)
  • 最后回退到Arial(可能不支持中文)

4. 游戏主循环

事件处理

  • 处理窗口关闭事件
  • 游戏进行中:处理方向键控制(防止180度转弯)
  • 游戏结束后:按R重新开始,按Q退出

游戏逻辑

  • 蛇的移动:计算新头部位置,插入到蛇身列表开头
  • 食物检测:如果吃到食物,增加分数并生成新食物;否则移除蛇尾
  • 碰撞检测:检查蛇头是否撞到自身

画面渲染

  • 清屏为黑色
  • 绘制蛇身(绿色矩形)
  • 绘制食物(红色矩形)
  • 显示当前分数

5. 游戏速度控制

clock.tick(10) 控制游戏帧率为10FPS,使蛇的移动速度适中。

四、在Lightly中运行游戏

  • 打开Lightly Python在线编译器(https://www.lightlycode.com/python)
  • 创建新Python文件,粘贴上述代码
  • 点击运行按钮
  • 游戏窗口将在右侧显示区域弹出

五、游戏操作说明

方向键:控制蛇的移动方向

R键:游戏结束后重新开始

Q键:游戏结束后退出

六、可能的改进方向

  • 增加游戏难度选择
  • 添加背景音乐和音效
  • 实现关卡系统
  • 添加障碍物
  • 实现高分记录功能

演示效果

七、总结

通过这个项目,我们学习了:

  • 如何在Lightly在线环境中使用Pygame库
  • 贪吃蛇游戏的基本实现原理
  • 游戏循环、事件处理和渲染的基本流程
  • 中文字体处理的技巧

到此这篇关于Python在线编译器Lightly轻松实现贪吃蛇游戏的文章就介绍到这了,更多相关Python Lightly实现贪吃蛇内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python+Socket实现基于UDP协议的局域网广播功能示例

    Python+Socket实现基于UDP协议的局域网广播功能示例

    这篇文章主要介绍了Python+Socket实现基于UDP协议的局域网广播功能,结合实例形式分析了Python+socket实现UDP协议广播的客户端与服务器端功能相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • Python使用pylab库实现绘制直方图功能示例

    Python使用pylab库实现绘制直方图功能示例

    这篇文章主要介绍了Python使用pylab库实现绘制直方图功能,结合实例形式分析了Python数据读取、遍历以及基于pylab库绘制直方图的相关操作技巧,需要的朋友可以参考下
    2018-06-06
  • python中字符串数组逆序排列方法总结

    python中字符串数组逆序排列方法总结

    在本篇文章里小编给大家整理了关于python中字符串数组如何逆序排列的相关知识点,需要的朋友们学习下。
    2019-06-06
  • Python可视化神器pyecharts绘制仪表盘

    Python可视化神器pyecharts绘制仪表盘

    这篇文章主要介绍了Python可视化神器pyecharts绘制仪表盘,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07
  • Python基于类路径字符串获取静态属性

    Python基于类路径字符串获取静态属性

    这篇文章主要介绍了Python基于类路径字符串获取静态属性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]

    Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]

    这篇文章主要介绍了Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n],文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 使用Python将Markdown格式转为EPUB电子书格式的代码实现

    使用Python将Markdown格式转为EPUB电子书格式的代码实现

    我们每天都会接触到大量的文本内容,无论是收藏的技术文档、自己撰写的笔记,还是网络上的优质文章,都可能面临阅读体验不佳的问题,所以本文给大家介绍了使用Python将Markdown格式转为EPUB电子书格式的实现方法,需要的朋友可以参考下
    2025-04-04
  • Python变量的赋值、浅拷贝和深拷贝详解

    Python变量的赋值、浅拷贝和深拷贝详解

    这篇文章主要介绍了Python变量的赋值、浅拷贝和深拷贝详解,python中为声明一个变量有三种方法:赋值、浅拷贝、深拷贝,相信每个pythoner或多或少都知道他们之间的区别,但在某些点上,还是会踩坑,这篇文章记录下所有关于这三者区别的疑问,需要的朋友可以参考下
    2023-11-11
  • PyCharm2019安装教程及其使用(图文教程)

    PyCharm2019安装教程及其使用(图文教程)

    这篇文章主要介绍了PyCharm2019安装教程(图文教程),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 自然语言处理NLP TextRNN实现情感分类

    自然语言处理NLP TextRNN实现情感分类

    这篇文章主要为大家介绍了自然语言处理NLP TextRNN实现情感分类示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04

最新评论