如何修复Python Pygame运行贪吃蛇游戏时仅显示黑屏的问题
Pygame贪吃蛇黑屏无响应修复方案
你的代码没有报错但黑屏、按键失效,是核心逻辑缩进错误、API调用错误导致的,具体问题和修复方案如下:
具体错误点
- 核心逻辑位置错误:边界判断、坐标更新、画面绘制、帧率控制、屏幕刷新代码全部写在
while not game_over主循环之外,主循环内没有任何绘制操作,导致持续黑屏 - 事件处理缩进错误:方向键判断逻辑写在了
if event.type == QUIT:的分支内部,只有点击关闭窗口时才会触发按键检测,所有操作无效 - 背景填充API调用错误:使用
game_display.blit(black)填充背景,正确方法应为game_display.fill(black) - 方向逻辑错误:向上移动对应y轴坐标减小,你写的
y_speed = snake_size会导致按向上键时蛇向下移动,且缺失向下方向的按键检测 - 游戏结束逻辑错误:两次判断按下
K_1的逻辑冲突,且QUIT事件判断缩进错误,无法正常关闭窗口
修复后完整代码
注意:请确保你已经提前完成pygame初始化、窗口创建、字体初始化、颜色/常量定义等前置代码编写
def print_score(score): text = score_font.render(f"Score: {score}", True, orange) game_display.blit(text, [0, 0]) def draw_snake(snake_size, snake_pixels): for pixel in snake_pixels: pygame.draw.rect(game_display, white, [pixel[0], pixel[1], snake_size, snake_size]) def run_game(): game_over = False game_close = False x = width / 2 y = height / 2 x_speed = 0 y_speed = 0 snake_pixels = [] snake_length = 1 target_x = round(random.randrange(0, width-snake_size) / 10.0) * 10.0 target_y = round(random.randrange(0, height-snake_size) / 10.0) * 10.0 while not game_over: while game_close: game_display.fill(black) game_over_msg = message_font.render("Game Over! 按Q退出 按R重新开始", True, red) game_display.blit(game_over_msg, [width / 6, height / 3]) print_score(snake_length - 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_r: run_game() if event.type == pygame.QUIT: game_over = True game_close = False 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 x_speed == 0: x_speed = -snake_size y_speed = 0 if event.key == pygame.K_RIGHT and x_speed == 0: x_speed = snake_size y_speed = 0 if event.key == pygame.K_UP and y_speed == 0: x_speed = 0 y_speed = -snake_size if event.key == pygame.K_DOWN and y_speed == 0: x_speed = 0 y_speed = snake_size if x >= width or x < 0 or y >= height or y < 0: game_close = True x += x_speed y += y_speed game_display.fill(black) pygame.draw.rect(game_display, orange, [target_x, target_y, snake_size, snake_size]) snake_pixels.append([x, y]) if len(snake_pixels) > snake_length: del snake_pixels[0] for pixel in snake_pixels[:-1]: if pixel == [x, y]: game_close = True draw_snake(snake_size, snake_pixels) print_score(snake_length - 1) pygame.display.update() if x == target_x and y == target_y: target_x = round(random.randrange(0, width-snake_size) / 10.0) * 10.0 target_y = round(random.randrange(0, height-snake_size) / 10.0) * 10.0 snake_length += 1 clock.tick(snake_speed) pygame.quit() quit() run_game()
内容的提问来源于stack exchange,提问作者Kirito-Kun
相关产品推荐
相关产品推荐

