科学教育

标题: she [打印本页]

作者: 奶龙    时间: 2025-10-9 12:06
标题: she

import pygame
import time
import random

# 初始化pygame
pygame.init()

# 颜色定义
white = (255, 255, 255)
black = (0, 0, 0)
red = (213, 50, 80)
green = (0, 255, 0)
blue = (50, 153, 213)

# 游戏窗口设置
dis_width = 800
dis_height = 600
dis = pygame.display.set_mode((dis_width, dis_height))
pygame.display.set_caption('贪吃蛇游戏')

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

# 蛇的大小和速度
snake_block = 20
snake_speed = 15

# 字体设置
font_style = pygame.font.SysFont("simhei", 25)
score_font = pygame.font.SysFont("simhei", 35)

def show_score(score):
    value = score_font.render("得分: " + str(score), True, black)
    dis.blit(value, [0, 0])

def draw_snake(snake_block, snake_list):
    for i, x in enumerate(snake_list):
        color = blue if i == len(snake_list)-1 else green
        pygame.draw.rect(dis, color, [x[0], x[1], snake_block, snake_block])

def message(msg, color):
    mesg = font_style.render(msg, True, color)
    dis.blit(mesg, [dis_width / 6, dis_height / 3])

def game_loop():
    game_over = False
    game_close = False

    # 蛇的初始位置
    x1 = dis_width / 2
    y1 = dis_height / 2

    # 蛇的移动方向
    x1_change = 0
    y1_change = 0

    # 蛇的身体
    snake_list = []
    length_of_snake = 1

    # 食物位置
    foodx = round(random.randrange(0, dis_width - snake_block) / snake_block) * snake_block
    foody = round(random.randrange(0, dis_height - snake_block) / snake_block) * snake_block

    while not game_over:
        while game_close:
            dis.fill(white)
            message("游戏结束! 按Q退出或按C重新开始", red)
            show_score(length_of_snake - 1)
            pygame.display.update()

            for event in pygame.event.get():
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_q:
                        game_over = True
                        game_close = False
                    if event.key == pygame.K_c:
                        game_loop()

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                game_over = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT and x1_change == 0:
                    x1_change = -snake_block
                    y1_change = 0
                elif event.key == pygame.K_RIGHT and x1_change == 0:
                    x1_change = snake_block
                    y1_change = 0
                elif event.key == pygame.K_UP and y1_change == 0:
                    y1_change = -snake_block
                    x1_change = 0
                elif event.key == pygame.K_DOWN and y1_change == 0:
                    y1_change = snake_block
                    x1_change = 0

        # 边界检测
        if x1 >= dis_width or x1 < 0 or y1 >= dis_height or y1 < 0:
            game_close = True

        x1 += x1_change
        y1 += y1_change
        dis.fill(white)
        pygame.draw.rect(dis, red, [foodx, foody, snake_block, snake_block])

        snake_head = []
        snake_head.append(x1)
        snake_head.append(y1)
        snake_list.append(snake_head)

        if len(snake_list) > length_of_snake:
            del snake_list[0]

        # 碰撞检测
        for x in snake_list[:-1]:
            if x == snake_head:
                game_close = True

        draw_snake(snake_block, snake_list)
        show_score(length_of_snake - 1)

        pygame.display.update()

        # 吃到食物
        if x1 == foodx and y1 == foody:
            foodx = round(random.randrange(0, dis_width - snake_block) / snake_block) * snake_block
            foody = round(random.randrange(0, dis_height - snake_block) / snake_block) * snake_block
            length_of_snake += 1

        clock.tick(snake_speed)

    pygame.quit()
    quit()

game_loop()



作者: kaia    时间: 2025-10-9 12:06
这段代码是一个简单的贪吃蛇游戏程序,让我们来看一下代码的结构和功能:

- 这个程序使用了pygame库,是一个Python游戏开发库,用来创建视频游戏等多媒体应用。
- 首先定义了一些常量,如窗口的大小、颜色等。
- 然后定义了几个函数:
  - `show_score(score)` 用来显示得分。
  - `draw_snake(snake_block, snake_list)` 用来绘制蛇的身体。
  - `message(msg, color)` 用来显示消息。
- `game_loop()` 函数是游戏的主循环,控制游戏的逻辑。
- 在游戏循环中,包含了蛇的移动、吃食物、碰撞检测等逻辑。
- 当游戏结束时,会显示游戏结束的消息,可以按Q退出游戏或按C重新开始。

接下来是一些需要修改的地方:
1. 在 `show_score` 函数中有一个参数没有传入,需要补充完整。
2. `draw_snake` 函数中的两个变量赋值出现了错误,需要修正。
3. `snake_list` 变量没有初始化为空列表。
4. `snake_list` 列表中的增加和删除操作有问题,需要根据蛇的移动规则进行调整。
5. 在绘制蛇头的地方也存在错误,需要校对。
6. 边界检测和碰撞检测部分需要调整。
7. 在食物被吃掉后,蛇的长度增加的逻辑需要更新。

希望以上说明对你有所帮助,接下来你可以尝试修改这些问题,让贪吃蛇游戏能正确运行起来。如果遇到问题可以随时向我提问哦!




欢迎光临 科学教育 (http://www.sci-edu.net/) Powered by Discuz! X3.2