和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()