猫史档案馆


【Python作品分享】贪吃蛇1.0

用户:罗罗5tp4罗罗5tp4查看:0 回复:1 评论:0 创建时间:2024-08-11T16:46:06


【作品展示】

center_image

 

【作品介绍】

白色是蛇,上下左右控制贪吃蛇。绿色方块是食物,蛇吃了后边长。当蛇移出屏幕或碰到自己身体时,游戏失败

 

【作品源代码】

import random as ran
import pygame as py

#游戏的初始化设置(包括屏幕大小、颜色、蛇和食物的初始位置、游戏状态和得分等变量的定义)。

# 基础设置
# 屏幕高度

SCREEN_HEIGHT = 680
# 屏幕宽度
SCREEN_WIDTH = 1200
# 小方格大小
GRID_SIZE = 20

# 颜色设置
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
RED = (255, 0, 0)

# 初始化 pygame
py.init()

# 创建屏幕
screen = py.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
py.display.set_caption("贪吃蛇游戏")

# 游戏时钟
clock = py.time.Clock()

# 蛇的初始位置和速度
snake_pos = [200, 100]
snake_speed = [0, 0]

# 食物的初始位置
food_pos = [ran.randint(0, SCREEN_WIDTH // GRID_SIZE - 1) * GRID_SIZE,
            ran.randint(0, SCREEN_HEIGHT // GRID_SIZE - 1) * GRID_SIZE]

# 蛇的身体列表
snake_body = [[snake_pos[0], snake_pos[1]]]

# 游戏结束标志
game_over = False

# 得分
score = 0

# 游戏主循环(主循环中处理 pygame 事件,包括退出游戏和控制蛇的移动方向)
while not game_over:
    for event in py.event.get():
        if event.type == py.QUIT:
            game_over = True

        if event.type == py.KEYDOWN:
            # 向上移动,且当前速度不为向下
            if event.key == py.K_UP and snake_speed[1] != GRID_SIZE:
                snake_speed = [0, -GRID_SIZE]
            # 向下移动,且当前速度不为向上
            elif event.key == py.K_DOWN and snake_speed[1] != -GRID_SIZE:
                snake_speed = [0, GRID_SIZE]
            # 向左移动,且当前速度不为向右
            elif event.key == py.K_LEFT and snake_speed[0] != GRID_SIZE:
                snake_speed = [-GRID_SIZE, 0]
            # 向右移动,且当前速度不为向左
            elif event.key == py.K_RIGHT and snake_speed[0] != -GRID_SIZE:
                snake_speed = [GRID_SIZE, 0]

#蛇的移动、判断是否吃到食物、是否撞到自己或边界,以及对蛇身体的处理

    # 根据速度移动蛇头
    snake_pos[0] += snake_speed[0]
    snake_pos[1] += snake_speed[1]

    # 判断是否吃到食物
    if snake_pos[0] == food_pos[0] and snake_pos[1] == food_pos[1]:
        food_pos = [ran.randint(0, SCREEN_WIDTH // GRID_SIZE - 1) * GRID_SIZE,
                    ran.randint(0, SCREEN_HEIGHT // GRID_SIZE - 1) * GRID_SIZE]
        score += 1
    else:
        # 移除蛇尾
        del snake_body[0]

    # 检查是否撞到自己或边界
    if [snake_pos[0], snake_pos[1]] in snake_body[1:]:
        game_over = True
    elif snake_pos[0] < 0 or snake_pos[0] >= SCREEN_WIDTH or snake_pos[1] < 0 or snake_pos[1] >= SCREEN_HEIGHT:
        game_over = True

    # 添加蛇头到身体
    snake_body.append(list(snake_pos))

#游戏画面的绘制,包括背景、食物、蛇和得分的显示,然后刷新屏幕并控制帧率。

    # 绘制背景
    screen.fill(BLACK)

    # 绘制食物
    py.draw.rect(
        screen, GREEN, [food_pos[0], food_pos[1], GRID_SIZE, GRID_SIZE])

    # 绘制蛇
    for pos in snake_body:
        py.draw.rect(screen, WHITE, [pos[0], pos[1], GRID_SIZE, GRID_SIZE])

    # 显示得分
    font = py.font.SysFont(None, 36)
    text = font.render("Length: " + str(score), 1, WHITE)
    screen.blit(text, [10, 10])

    # 刷新屏幕
    py.display.flip()

    # 控制游戏帧率
    clock.tick(10)

# 退出游戏
py.quit()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
python喵呜python喵呜

CN博客里抄的(我的)

点赞0


评论