PyGame开发贪吃蛇小游戏

话不多说,直接上代码

python 复制代码
'''
Author: Zhao 2869210303@qq.com
Date: 2025-03-15 20:08:40
LastEditors: Zhao 2869210303@qq.com
LastEditTime: 2025-03-16 13:16:00
FilePath: \2024_2025_1\snake_game.py
Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
'''
import pygame
import random
import sys

# 初始化pygame
pygame.init()

# 定义颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)

# 定义游戏窗口大小
WIDTH, HEIGHT = 600, 400

# 创建游戏窗口
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('贪吃蛇')

# 定义时钟
clock = pygame.time.Clock()

# 定义蛇的初始位置和速度-
snake_pos = [100, 50]
snake_body = [[100, 50], [90, 50], [80, 50]]
snake_direction = 'RIGHT'
snake_speed = 15

# 定义食物的初始位置
food_pos = [random.randrange(1, WIDTH//10) * 10, random.randrange(1, HEIGHT//10) * 10]
food_spawn = True

# 游戏主循环
while 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 and snake_direction != 'DOWN':
                snake_direction = 'UP'
            elif event.key == pygame.K_DOWN and snake_direction != 'UP':
                snake_direction = 'DOWN'
            elif event.key == pygame.K_LEFT and snake_direction != 'RIGHT':
                snake_direction = 'LEFT'
            elif event.key == pygame.K_RIGHT and snake_direction != 'LEFT':
                snake_direction = 'RIGHT'

    # 移动蛇
    if snake_direction == 'UP':
        snake_pos[1] -= 10
    elif snake_direction == 'DOWN':
        snake_pos[1] += 10
    elif snake_direction == 'LEFT':
        snake_pos[0] -= 10
    elif snake_direction == 'RIGHT':
        snake_pos[0] += 10

    # 蛇身更新
    snake_body.insert(0, list(snake_pos))
    if snake_pos == food_pos:
        food_spawn = False
    else:
        snake_body.pop()

    # 生成新食物
    if not food_spawn:
        food_pos = [random.randrange(1, WIDTH//10) * 10, random.randrange(1, HEIGHT//10) * 10]
        food_spawn = True
        snake_speed += 1  # 蛇的速度随着长度增加

    # 绘制游戏界面
    screen.fill(BLACK)
    for pos in snake_body:
        pygame.draw.rect(screen, GREEN, pygame.Rect(pos[0], pos[1], 10, 10))
    pygame.draw.rect(screen, RED, pygame.Rect(food_pos[0], food_pos[1], 10, 10))

    # 碰撞检测
    if snake_pos[0] < 0 or snake_pos[0] > WIDTH-10:
        break
    if snake_pos[1] < 0 or snake_pos[1] > HEIGHT-10:
        break
    for block in snake_body[1:]:
        if snake_pos == block:
            break

    # 更新显示
    pygame.display.flip()
    clock.tick(snake_speed)
    

再展示一下运行的效果截图:

相关推荐
m0_7369191010 分钟前
用Pandas处理时间序列数据(Time Series)
jvm·数据库·python
getapi12 分钟前
实时音视频传输与屏幕共享(投屏)
python
java干货41 分钟前
为什么 “File 10“ 排在 “File 2“ 前面?解决文件名排序的终极算法:自然排序
开发语言·python·算法
机器懒得学习42 分钟前
智能股票分析系统
python·深度学习·金融
毕设源码-郭学长43 分钟前
【开题答辩全过程】以 基于python的二手房数据分析与可视化为例,包含答辩的问题和答案
开发语言·python·数据分析
SR_shuiyunjian1 小时前
Python第三次作业
python
vx_biyesheji00011 小时前
豆瓣电影推荐系统 | Python Django 协同过滤 Echarts可视化 深度学习 大数据 毕业设计源码
大数据·爬虫·python·深度学习·django·毕业设计·echarts
鸽芷咕1 小时前
DrissionPage 成 CANN 仓库爆款自动化工具:背后原因何在?
运维·python·自动化·cann
爱学习的阿磊1 小时前
使用Fabric自动化你的部署流程
jvm·数据库·python
少云清2 小时前
【金融项目实战】7_接口测试 _代码实现接口测试(重点)
python·金融项目实战