import pygame
import random
# 初始化pygame
pygame.init()
# 游戏窗口尺寸
WIDTH, HEIGHT = 800, 600
# 蛇的方块大小
BLOCK_SIZE = 20
# 设置游戏窗口
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('贪吃蛇游戏')
# 颜色定义
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
BLACK = (0, 0, 0)
# 蛇类
class Snake:
def __init__(self):
self.segments = [(200, 200), (180, 200), (160, 200)]
self.direction = 'right'
def move(self):
head_x = self.segments[0][0]
head_y = self.segments[0][1]
if self.direction == 'right':
new_head = (head_x + BLOCK_SIZE, head_y)
elif self.direction == 'left':
new_head = (head_x - BLOCK_SIZE, head_y)
elif self.direction == 'up':
new_head = (head_x, head_y - BLOCK_SIZE)
else:
new_head = (head_x, head_y + BLOCK_SIZE)
self.segments = [new_head] + self.segments[:-1]
def grow(self):
tail = self.segments[-1]
self.segments.append(tail)
def draw(self):
for segment in self.segments:
pygame.draw.rect(screen, GREEN,
(segment[0], segment[1], BLOCK_SIZE, BLOCK_SIZE))
# 食物类
class Food:
def __init__(self):
self.x = random.randint(0, (WIDTH - BLOCK_SIZE) // BLOCK_SIZE) * BLOCK_SIZE
self.y = random.randint(0, (HEIGHT - BLOCK_SIZE) // BLOCK_SIZE) * BLOCK_SIZE
def draw(self):
pygame.draw.rect(screen, RED,
(self.x, self.y, BLOCK_SIZE, BLOCK_SIZE))
# 游戏主循环
def main():
clock = pygame.time.Clock()
snake = Snake()
food = Food()
game_over = False
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 and snake.direction!= 'down':
snake.direction = 'up'
elif event.key == pygame.K_DOWN and snake.direction!= 'up':
snake.direction = 'down'
elif event.key == pygame.K_LEFT and snake.direction!= 'right':
snake.direction = 'left'
elif event.key == pygame.K_RIGHT and snake.direction!= 'left':
snake.direction = 'right'
snake.move()
# 检查蛇是否吃到食物
if snake.segments[0][0] == food.x and snake.segments[0][1] == food.y:
snake.grow()
food = Food()
# 检查蛇是否撞到边界
if snake.segments[0][0] < 0 or snake.segments[0][0] >= WIDTH or \
snake.segments[0][1] < 0 or snake.segments[0][1] >= HEIGHT:
game_over = True
# 检查蛇是否撞到自己
for segment in snake.segments[1:]:
if segment == snake.segments[0]:
game_over = True
screen.fill(BLACK)
snake.draw()
food.draw()
pygame.display.flip()
clock.tick(10)
pygame.quit()
if __name__ == "__main__":
main()