[Python] 纯文本查看 复制代码 import pygame
import random
# 初始化 Pygame
pygame.init()
# 颜色定义
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
green = (0, 255, 0)
# 屏幕尺寸
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption('贪吃蛇游戏')
# 时钟用于控制帧率
clock = pygame.time.Clock()
class Snake:
def __init__(self):
self.size = 10
self.speed = 15
self.segments = [(screen_width // 2, screen_height // 2)]
self.direction = "right"
def move(self):
x, y = self.segments[0]
if self.direction == "right":
x += self.size
elif self.direction == "left":
x -= self.size
elif self.direction == "up":
y -= self.size
elif self.direction == "down":
y += self.size
self.segments.insert(0, (x, y))
self.segments.pop()
def draw(self):
for segment in self.segments:
pygame.draw.rect(screen, green, (segment[0], segment[1], self.size, self.size))
def change_direction(self, direction):
if direction == "right" and not self.direction == "left":
self.direction = direction
elif direction == "left" and not self.direction == "right":
self.direction = direction
elif direction == "up" and not self.direction == "down":
self.direction = direction
elif direction == "down" and not self.direction == "up":
self.direction = direction
class Food:
def __init__(self):
self.size = 10
self.x = round(random.randrange(0, screen_width - self.size) / 10.0) * 10.0
self.y = round(random.randrange(0, screen_height - self.size) / 10.0) * 10.0
def draw(self):
pygame.draw.rect(screen, red, (self.x, self.y, self.size, self.size))
def main():
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
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
snake.change_direction("right")
elif event.key == pygame.K_LEFT:
snake.change_direction("left")
elif event.key == pygame.K_UP:
snake.change_direction("up")
elif event.key == pygame.K_DOWN:
snake.change_direction("down")
screen.fill(black)
snake.move()
snake.draw()
food.draw()
# 检查蛇是否吃到食物
if snake.segments[0][0] == food.x and snake.segments[0][1] == food.y:
food = Food()
snake.segments.append(snake.segments[-1])
# 检查蛇是否撞到边界或自己
if (snake.segments[0][0] >= screen_width or snake.segments[0][0] < 0 or
snake.segments[0][1] >= screen_height or snake.segments[0][1] < 0):
game_over = True
for segment in snake.segments[1:]:
if snake.segments[0] == segment:
game_over = True
pygame.display.update()
clock.tick(snake.speed)
if __name__ == "__main__":
main()
pygame.quit()
|