豆包marscode 贪吃蛇

168 阅读2分钟

和marscode 对话的 写的贪吃蛇 @豆包MarsCode

import pygame

import random

  


# 初始化Pygame

pygame.init()

  


# 定义颜色

BLACK = (0, 0, 0)

WHITE = (255, 255, 255)

RED = (255, 0, 0)

GREEN = (0, 255, 0)

  


# 定义窗口大小

WINDOW_WIDTH = 800

WINDOW_HEIGHT = 800

  


# 创建窗口

screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))

pygame.display.set_caption("贪吃蛇游戏")

  


# 定义字体

font_style = pygame.font.SysFont(None, 38)

  


# 定义贪吃蛇和食物的大小

BLOCK_SIZE = 20

  


# 定义贪吃蛇的初始位置和速度

snake_x = WINDOW_WIDTH / 2

snake_y = WINDOW_HEIGHT / 2

snake_x_change = 0

snake_y_change = 0

  


# 定义食物的初始位置

food_x = round(random.randrange(0, WINDOW_WIDTH - BLOCK_SIZE) / 20.0) * 20.0

food_y = round(random.randrange(0, WINDOW_HEIGHT - BLOCK_SIZE) / 20.0) * 20.0

  


# 定义游戏时钟

clock = pygame.time.Clock()

  


# 定义游戏结束标志

game_over = False

background_image = pygame.image.load("image.jpg").convert()

# 定义得分

score = 0

snake_body = []

snake_length = 1

# 游戏主循环

while not game_over:

    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            game_over = True

        elif event.type == pygame.KEYDOWN:

            if event.key == pygame.K_UP:

                if snake_y_change == 0:

                    snake_y_change = -BLOCK_SIZE

                    snake_x_change = 0

            elif event.key == pygame.K_DOWN:

                if snake_y_change == 0:

                    snake_y_change = BLOCK_SIZE

                    snake_x_change = 0

           

            elif event.key == pygame.K_LEFT:

                if snake_x_change == 0:

  


                    snake_x_change = -BLOCK_SIZE

                    snake_y_change = 0

            elif event.key == pygame.K_RIGHT:

                if snake_x_change == 0:

                    snake_x_change = BLOCK_SIZE

                    snake_y_change = 0

  


    # 移动贪吃蛇

    snake_x += snake_x_change

    snake_y += snake_y_change

  


    # 检查贪吃蛇是否撞到边界

    if snake_x >= WINDOW_WIDTH or snake_x < 0 or snake_y >= WINDOW_HEIGHT or snake_y < 0:

        game_over = True

  


    if len(snake_body) > 1:

        for segment in snake_body[1:]:

            if segment == [snake_x, snake_y]:

                game_over = True

    if background_image is not None:

        screen.blit(background_image, (0, 0))

    else:

        screen.fill(BLACK)

    # 绘制背景

    #screen.fill(BLACK)

    background_image = pygame.image.load("image.jpg").convert()

    background_image = pygame.transform.scale(background_image, (WINDOW_WIDTH, WINDOW_HEIGHT))

    center_x = WINDOW_WIDTH // 2

    center_y = WINDOW_HEIGHT // 2

   

  


    #screen.fill(BLACK)

  


    # 绘制食物

    pygame.draw.rect(screen, RED, [food_x, food_y, BLOCK_SIZE, BLOCK_SIZE])

  


    # 绘制贪吃蛇

    pygame.draw.rect(screen, GREEN, [snake_x, snake_y, BLOCK_SIZE, BLOCK_SIZE])

  


    # 更新屏幕

    pygame.display.flip()

  


    # 检查贪吃蛇是否吃到食物

    snake_head = [snake_x, snake_y]

    snake_body.append(snake_head)

    if len(snake_body) > snake_length:

        del snake_body[0]

    for segment in snake_body:

        pygame.draw.rect(screen, GREEN, [segment[0], segment[1], BLOCK_SIZE, BLOCK_SIZE])

  


    # 更新屏幕

    text = font_style.render(f"Score : {score}", True, WHITE)

    screen.blit(text, [0, 0])

    pygame.display.flip()

  


    # 检查贪吃蛇是否吃到食物

    if snake_x == food_x and snake_y == food_y:

        food_x = round(random.randrange(0, WINDOW_WIDTH - BLOCK_SIZE) / 20.0) * 20.0

        food_y = round(random.randrange(0, WINDOW_HEIGHT - BLOCK_SIZE) / 20.0) * 20.0

        score += 1

        snake_length += 1

  


    # 设置游戏速度

    clock.tick(8)

  


# 显示游戏结束画面

screen.fill(BLACK)

text = font_style.render("Game Over", True, WHITE)

screen.blit(text, [WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2])

pygame.display.flip()

  


# 等待一段时间后退出游戏

pygame.time.wait(1000)

pygame.quit()

视频效果: www.bilibili.com/video/BV1Qj…