You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
5.7 KiB
168 lines
5.7 KiB
6 months ago
|
import pygame
|
||
|
import random
|
||
|
import copy
|
||
|
|
||
|
# 蛇 初始位置刷新点
|
||
|
snake_list = [[10, 10]]
|
||
|
|
||
|
# 移动 初始向下 定义四个移动方向
|
||
|
move_up = False
|
||
|
move_down = True
|
||
|
move_left = False
|
||
|
move_right = False
|
||
|
# 食物位置刷新点
|
||
|
food_point = [random.randint(10, 490), random.randint(10, 490)]
|
||
|
|
||
|
# 游戏状态
|
||
|
is_game_over = False
|
||
|
is_game_started = False
|
||
|
|
||
|
# 游戏计时器
|
||
|
game_duration = 60 # 游戏时长,单位为秒
|
||
|
start_time = 0 # 游戏开始时间
|
||
|
|
||
|
"""初始化游戏"""
|
||
|
pygame.init()
|
||
|
# fps刷新
|
||
|
clock = pygame.time.Clock()
|
||
|
# 设置屏幕大小
|
||
|
screen = pygame.display.set_mode((500, 500))
|
||
|
# 游戏名称
|
||
|
pygame.display.set_caption('贪吃蛇小游戏')
|
||
|
|
||
|
# 游戏开始界面
|
||
|
font = pygame.font.SysFont(None, 36)
|
||
|
start_text = font.render("Press Enter to Start Game", True, (255, 255, 255))
|
||
|
start_text_rect = start_text.get_rect(center=(250, 250))
|
||
|
|
||
|
# 结束界面文本
|
||
|
game_over_font = pygame.font.SysFont(None, 48)
|
||
|
game_over_text = game_over_font.render("Game Over", True, (255, 0, 0))
|
||
|
game_over_text_rect = game_over_text.get_rect(center=(250, 250))
|
||
|
|
||
|
# 倒计时文本
|
||
|
countdown_font = pygame.font.SysFont(None, 48)
|
||
|
|
||
|
"""进入游戏,玩游戏"""
|
||
|
# 设置游戏开关
|
||
|
running = True
|
||
|
while running:
|
||
|
# 设置fps
|
||
|
clock.tick(20)
|
||
|
|
||
|
if is_game_started and not is_game_over:
|
||
|
# 绘制屏幕颜色
|
||
|
screen.fill([255, 255, 255])
|
||
|
# 用键盘实现移动
|
||
|
for event in pygame.event.get():
|
||
|
# 判断是否按键盘
|
||
|
if event.type == pygame.KEYDOWN:
|
||
|
if event.key == pygame.K_UP:
|
||
|
move_up = True
|
||
|
move_down = False
|
||
|
move_left = False
|
||
|
move_right = False
|
||
|
if event.key == pygame.K_DOWN:
|
||
|
move_up = False
|
||
|
move_down = True
|
||
|
move_left = False
|
||
|
move_right = False
|
||
|
if event.key == pygame.K_LEFT:
|
||
|
move_up = False
|
||
|
move_down = False
|
||
|
move_left = True
|
||
|
move_right = False
|
||
|
if event.key == pygame.K_RIGHT:
|
||
|
move_up = False
|
||
|
move_down = False
|
||
|
move_left = False
|
||
|
move_right = True
|
||
|
# 绘制食物
|
||
|
food_rect = pygame.draw.circle(screen, [255, 0, 0], food_point, 15, 0)
|
||
|
|
||
|
# 绘制蛇
|
||
|
snake_rect = []
|
||
|
for snake_point in snake_list:
|
||
|
snake_rect.append(pygame.draw.circle(screen, [255, 0, 0], snake_point, 5, 0))
|
||
|
#检测蛇吃果子
|
||
|
if food_rect.collidepoint(snake_point):
|
||
|
#蛇吃果子
|
||
|
snake_list.append(food_point)
|
||
|
#重新绘制食物
|
||
|
food_point = [random.randint(10, 490), random.randint(10, 490)]
|
||
|
food_rect =pygame.draw.circle(screen, [255, 0, 0], food_point, 15, 0)
|
||
|
break
|
||
|
"""游戏进行"""
|
||
|
snake_len = len(snake_list) - 1
|
||
|
|
||
|
# 移动身子
|
||
|
while snake_len > 0:
|
||
|
snake_list[snake_len] = copy.deepcopy(snake_list[snake_len - 1])
|
||
|
snake_len -= 1
|
||
|
|
||
|
# 移动蛇头
|
||
|
if move_up:
|
||
|
snake_list[snake_len][1] -= 10
|
||
|
if snake_list[snake_len][1] < 0:
|
||
|
snake_list[snake_len][1] = 500
|
||
|
if move_down:
|
||
|
snake_list[snake_len][1] += 10
|
||
|
if snake_list[snake_len][1] > 500:
|
||
|
snake_list[snake_len][1] = 0
|
||
|
if move_left:
|
||
|
snake_list[snake_len][0] -= 10
|
||
|
if snake_list[snake_len][0] < 0:
|
||
|
snake_list[snake_len][0] = 500
|
||
|
if move_right:
|
||
|
snake_list[snake_len][0] += 10
|
||
|
if snake_list[snake_len][0] > 500:
|
||
|
snake_list[snake_len][0] = 0
|
||
|
#蛇不能撞自己
|
||
|
head_rect =snake_rect[0]
|
||
|
count = len(snake_rect)
|
||
|
while count > 1:
|
||
|
if head_rect.colliderect(snake_rect[count-1]):
|
||
|
running =False
|
||
|
count -= 1
|
||
|
# 计算剩余时间
|
||
|
elapsed_time = pygame.time.get_ticks() - start_time
|
||
|
remaining_time = game_duration - int(elapsed_time / 1000)
|
||
|
|
||
|
# 渲染剩余时间到屏幕
|
||
|
countdown_text = countdown_font.render(f"Time: {remaining_time}", True, (0, 0, 0))
|
||
|
screen.blit(countdown_text, (10, 10))
|
||
|
|
||
|
# 检查游戏时间是否超过一分钟
|
||
|
if remaining_time <= 0:
|
||
|
is_game_over = True
|
||
|
|
||
|
# 实现绘制内容展示
|
||
|
pygame.display.update()
|
||
|
elif is_game_over:
|
||
|
# 游戏结束界面
|
||
|
screen.fill((0, 0, 0))
|
||
|
screen.blit(game_over_text, game_over_text_rect)
|
||
|
pygame.display.update()
|
||
|
else:
|
||
|
# 游戏开始界面
|
||
|
screen.fill((0, 0, 0))
|
||
|
screen.blit(start_text, start_text_rect)
|
||
|
pygame.display.update()
|
||
|
|
||
|
for event in pygame.event.get():
|
||
|
if event.type == pygame.QUIT:
|
||
|
running = False
|
||
|
if event.type == pygame.KEYDOWN:
|
||
|
if event.key == pygame.K_RETURN:
|
||
|
if is_game_over:
|
||
|
# 重置游戏状态
|
||
|
is_game_over = False
|
||
|
is_game_started = False
|
||
|
snake_list = [[10, 10]]
|
||
|
food_point = [random.randint(10, 490), random.randint(10, 490)]
|
||
|
start_time = pygame.time.get_ticks() # 重置游戏计时器
|
||
|
else:
|
||
|
is_game_started = True
|
||
|
start_time = pygame.time.get_ticks() # 重置游戏计时器
|
||
|
|
||
|
pygame.quit()
|