импортировать pygame
импортировать случайный
# Инициализировать Pygame
pygame.init()
# Определяем цвета
ЧЕРНЫЙ = (0, 0, 0)
ЗЕЛЕНЫЙ = (0, 255, 0)
КРАСНЫЙ = (255, 0, 0)
СИНИЙ = (0, 0, 255)
# Установить ширину и высоту каждого сегмента змейки
ширина_сегмента = 15
высота_сегмента = 15
сегмент_маржа = 3
# Установить размер игрового окна
ширина_дисплея = 800
display_height = 600
# Установить начальную скорость змейки
змея_скорость = 15
# Создаем окно игры
game_display = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption("Змеиная игра")
# Определяем игровые часы
часы = pygame.time.Clock()
# Функция для отображения змеи в окне игры
защита draw_snake (snake_segments):
для сегмента в змее_сегменты:
pygame.draw.rect(game_display, ЗЕЛЕНЫЙ, [сегмент[0], сегмент[1], ширина_сегмента, высота_сегмента])
# Функция для генерации случайных позиций для еды
определение generate_food_position():
x = округлый (random.randrange (0, display_width — segment_width) / 15,0) * 15,0
y = round(random.randrange(0, display_height — segment_height) / 15,0) * 15,0
вернуть х, у
# Функция для отображения еды в окне игры
def draw_food (food_position, цвет):
pygame.draw.rect(game_display, color, [food_position[0], food_position[1], segment_width, segment_height])
# Основной игровой цикл
определение game_loop():
game_over = Ложь
game_quit = Ложь
# Инициализировать начальную позицию и направление змеи
х = ширина_экрана / 2
у = высота_отображения / 2
х_изменить = 0
у_изменение = 0
# Создать пустой список для представления змеи
змея_сегменты = []
# Инициализировать длину змеи и оценку
длина змеи = 1
оценка = 0
# Генерируем начальные позиции для еды
food_position1 = generate_food_position()
food_position2 = generate_food_position()
пока не game_quit:
пока игра_овер:
# Игра окончена
game_display.fill(ЧЕРНЫЙ)
шрифт = pygame.font.Font (нет, 36)
text = font.render("Игра окончена! Нажмите Q, чтобы выйти, или C, чтобы играть снова", True, RED)
game_display.blit(текст, [display_width / 2 — text.get_width() / 2, display_height / 2 — text.get_height() / 2])
pygame.display.update()
для события в pygame.event.get():
если event.type == pygame.ВЫЙТИ:
game_quit = Истина
game_over = Ложь
Элиф event.type == pygame.KEYDOWN:
если event.key == pygame.K_q:
game_quit = Истина
game_over = Ложь
Элиф event.key == pygame.K_c:
game_loop()
для события в pygame.event.get():
если event.type == pygame.ВЫЙТИ:
game_quit = Истина
Элиф event.type == pygame.KEYDOWN:
если event.key == pygame.K_LEFT:
x_change = -segment_width — поле_сегмента
у_изменение = 0
elif event.key == pygame.K_RIGHT:
x_change = ширина_сегмента + поле_сегмента
у_изменение = 0
Элиф event.key == pygame.K_UP:
y_change = -segment_height — поле_сегмента
х_изменить = 0
Элиф event.key == pygame.K_DOWN:
y_change = высота_сегмента + поле_сегмента
х_изменить = 0
# Обновить положение змеи
х += х_изменить
y += y_change
# Проверяем, не задевает ли змея границу
если x ›= display_width или x ‹ 0 или y ›= display_height или y ‹ 0:
game_over = Истина
# Обновить отображение игры
game_display.fill(ЧЕРНЫЙ)
# Рисуем еду
draw_food (food_position1, КРАСНЫЙ)
draw_food (food_position2, СИНИЙ)
# Нарисуйте и обновите змею
змея_голова = []
змея_голова.append(х)
змея_голова.append(y)
змея_сегменты.добавление(snake_head)
если len(snake_segments) › длина змеи:
сегменты_змей[0]
# Проверяем, бьет ли змея саму себя
для сегмента в змее_сегменты[:-1]:
если сегмент == змея_голова:
game_over = Истина
draw_snake (snake_segments)
# Проверяем, ест ли змея еду
если x == food_position1[0] и y == food_position1[1]:
food_position1 = generate_food_position()
длина змеи += 1
оценка += 1
elif x == food_position2[0] и y == food_position2[1]:
food_position2 = generate_food_position()
длина змеи += 1
оценка += 1
pygame.display.update()
часы.тик (snake_speed)
pygame.выйти()
# Начало игры
game_loop()
Первоначально опубликовано на https://electronicsforlearning.blogspot.com.