|
|
发表于 2024-8-30 19:00:31
|
显示全部楼层
本楼为最佳答案
 好的,我来看一下你的代码,并帮你添加统计得分的功能。
我们需要在游戏结束时输出蛇的长度来表示得分,并修复一些代码错误。以下是改进后的版本:
- import pygame, sys, random
- from pygame.locals import *
- red_color = pygame.Color(255, 0, 0)
- blue_color = pygame.Color(0, 0, 255)
- green_color = pygame.Color(0, 255, 0)
- def game_over(score):
- font = pygame.font.SysFont('arial', 36)
- game_over_surface = font.render(f'Game Over! Score: {score}', True, red_color)
- screen.blit(game_over_surface, (120, 200))
- pygame.display.flip()
- pygame.time.wait(3000)
- pygame.quit()
- sys.exit()
- def main():
- pygame.init()
- global screen
- screen = pygame.display.set_mode((640, 480))
- pygame.display.set_caption('贪吃蛇')
- clock = pygame.time.Clock()
- # 初始化蛇的位置和身体
- snake_position = [100, 50]
- snake_body = [[100, 50], [80, 50], [60, 50]]
- food_position = [random.randrange(1, 32) * 20, random.randrange(1, 24) * 20]
- food_flag = 1
- direction = 'RIGHT'
- key_direction = direction
- while True:
- for event in pygame.event.get():
- if event.type == QUIT:
- game_over(len(snake_body) - 3)
- elif event.type == KEYDOWN:
- if event.key == K_RIGHT:
- key_direction = 'RIGHT'
- if event.key == K_LEFT:
- key_direction = 'LEFT'
- if event.key == K_UP:
- key_direction = 'UP'
- if event.key == K_DOWN:
- key_direction = 'DOWN'
- if event.key == K_ESCAPE:
- pygame.event.post(pygame.event.Event(QUIT))
- if key_direction == 'LEFT' and direction != 'RIGHT':
- direction = key_direction
- if key_direction == 'RIGHT' and direction != 'LEFT':
- direction = key_direction
- if key_direction == 'UP' and direction != 'DOWN':
- direction = key_direction
- if key_direction == 'DOWN' and direction != 'UP':
- direction = key_direction
- if direction == 'RIGHT':
- snake_position[0] += 20
- if direction == 'LEFT':
- snake_position[0] -= 20
- if direction == 'UP':
- snake_position[1] -= 20
- if direction == 'DOWN':
- snake_position[1] += 20
- snake_body.insert(0, list(snake_position))
- if snake_position == food_position:
- food_flag = 0
- else:
- snake_body.pop()
- if food_flag == 0:
- x = random.randrange(1, 32) * 20
- y = random.randrange(1, 24) * 20
- food_position = [x, y]
- food_flag = 1
- screen.fill(blue_color)
- for position in snake_body:
- pygame.draw.rect(screen, red_color, Rect(position[0], position[1], 20, 20))
- pygame.draw.rect(screen, green_color, Rect(food_position[0], food_position[1], 20, 20))
- pygame.display.flip()
- if snake_position[0] >= 640 or snake_position[0] < 0 or snake_position[1] >= 480 or snake_position[1] < 0:
- game_over(len(snake_body) - 3)
- for block in snake_body[1:]:
- if snake_position == block:
- game_over(len(snake_body) - 3)
- clock.tick(10)
- if __name__ == '__main__':
- main()
复制代码
主要的修改点包括:
1. 修复了`snake_position`和`food_position`的初始化问题。
2. 添加了判断蛇是否撞墙或者撞到自己的逻辑。
3. 在`game_over`函数中添加了得分显示。
4. 调整了绘制蛇和食物的代码。
这样修改之后,游戏在结束时会显示玩家的得分。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|