You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
import sys # Для системных операций
import time # Для работы со временем
import random # Для генерации случайных чисел
import curses # Для создания текстового интерфейса
from curses import textpad # Для отрисовки рамок
def main(stdscr):
# Инициализация curses
curses.curs_set(0) # Скрыть курсор
stdscr.nodelay(1) # Неблокирующий режим ввода
stdscr.timeout(50) # Установка задержки для getch()
# Настройка цветовых пар
curses.init_pair(1, curses.COLOR_GREEN, curses.COLOR_BLACK) # Зеленый для тела змейки
curses.init_pair(2, curses.COLOR_RED, curses.COLOR_BLACK) # Красный для обычного яблока
curses.init_pair(3, curses.COLOR_BLUE, curses.COLOR_BLACK) # Синий для большого яблока
curses.init_pair(4, curses.COLOR_YELLOW, curses.COLOR_BLACK) # Желтый для головы змейки
# Инициализация игровых переменных
direction = curses.KEY_RIGHT # Начальное направление - вправо
score = 0 # Начальный счет
start_time = time.time() # Время начала игры
difficulty = 1 # Начальная сложность
map_size = 'medium' # Начальный размер карты
paused = False # Флаг паузы
def create_apple(snake, box):
"""Создание яблока в случайной позиции, не занятой змейкой"""
while True:
apple = [random.randint(box[0][0] + 1, box[1][0] - 1),
random.randint(box[0][1] + 1, box[1][1] - 1)]
if apple not in snake:
return apple
def show_menu():
"""Отображение главного меню с ASCII-артом"""
# ... (код меню)
def show_info():
"""Отображение информации об игре"""
# ... (код информации)
def set_difficulty():
"""Установка уровня сложности"""
# ... (код установки сложности)
def set_map_size():
"""Установка размера карты"""
# ... (код установки размера карты)
# Главный цикл меню
while True:
action = show_menu()
if action == 'play': break
elif action == 'info': show_info()
elif action == 'difficulty': set_difficulty()
elif action == 'map_size': set_map_size()
elif action == 'exit': sys.exit()
# Установка размеров карты
if map_size == 'small': sh, sw = 20, 40
elif map_size == 'medium': sh, sw = 30, 60
else: sh, sw = 40, 80
w = sw - 2
h = sh - 2
# Создание игрового поля
box = [[1, 1], [h, w]]
textpad.rectangle(stdscr, box[0][0], box[0][1], box[1][0], box[1][1])
# Инициализация змейки и яблок
snake = [[sh//2, sw//2]] # Начальная позиция змейки
apple = create_apple(snake, box) # Создание обычного яблока big_apple = create_apple(snake, box) # Создание большого яблока
last_move_time = time.time() # Время последнего движения змейки
# Главный игровой цикл
while True:
current_time = time.time()
stdscr.clear()
textpad.rectangle(stdscr, box[0][0], box[0][1], box[1][0], box[1][1])
stdscr.addstr(0, 0, f"Счет: {score} | Время: {int(current_time - start_time)} сек.")
stdscr.addstr(0, w-5, "Выход: Q | Пауза: P")
# Отрисовка змейки и яблок
for i, (y, x) in enumerate(snake):
if i == 0:
stdscr.addch(y, x, '@', curses.color_pair(4)) # Голова змейки
else:
stdscr.addch(y, x, '#', curses.color_pair(1)) # Тело змейки
stdscr.addch(apple[0], apple[1], '*', curses.color_pair(2)) # Обычное яблоко
stdscr.addch(big_apple[0], big_apple[1], '*', curses.color_pair(3)) # Большое яблоко
stdscr.refresh()
# Обработка ввода пользователя
key = stdscr.getch()
if key != -1:
if key == ord('q'): break
elif key == ord('p'):
paused = not paused
while paused:
stdscr.addstr(sh//2, sw//2 - 5, "Пауза. Нажмите P, чтобы продолжить.")
stdscr.refresh()
key = stdscr.getch()
if key == ord('p'):
paused = False
break
elif key in [curses.KEY_UP, ord('w')] and direction != curses.KEY_DOWN:
direction = curses.KEY_UP
elif key in [curses.KEY_DOWN, ord('s')] and direction != curses.KEY_UP:
direction = curses.KEY_DOWN
elif key in [curses.KEY_LEFT, ord('a')] and direction != curses.KEY_RIGHT:
direction = curses.KEY_LEFT
elif key in [curses.KEY_RIGHT, ord('d')] and direction != curses.KEY_LEFT:
direction = curses.KEY_RIGHT
# Механика движения змейки
if current_time - last_move_time > 0.1 / difficulty and not paused:
last_move_time = current_time
head = snake[0]
if direction == curses.KEY_UP:
new_head = [head[0] - 1, head[1]]
time.sleep(0.01) # Добавить небольшую задержку для вертикального движения
elif direction == curses.KEY_DOWN:
new_head = [head[0] + 1, head[1]]
time.sleep(0.01) # Добавить небольшую задержку для вертикального движения
elif direction == curses.KEY_LEFT:
new_head = [head[0], head[1] - 1]
elif direction == curses.KEY_RIGHT:
new_head = [head[0], head[1] + 1]
# Проверка столкновения с границами
if new_head[0] < box[0][0] + 1:
new_head[0] = box[1][0] - 1
elif new_head[0] > box[1][0] - 1:
new_head[0] = box[0][0] + 1
if new_head[1] < box[0][1] + 1:
new_head[1] = box[1][1] - 1
elif new_head[1] > box[1][1] - 1:
new_head[1] = box[0][1] + 1
snake.insert(0, new_head)
# Проверка столкновения с собой
if snake[0] in snake[1:]:
stdscr.addstr(sh//2, sw//2 - 5, "Вы проиграли!")
stdscr.refresh()
time.sleep(2)
break
# Проверка столкновения с яблоком
elif snake[0] == apple:
score += 1
apple = create_apple(snake, box)
elif snake[0] == big_apple:
score += 2
big_apple = create_app le(snake, box)
snake.insert(0, [snake[0][0], snake[0][1]]) # Добавить дополнительный сегмент
else:
snake.pop()
# Проверка победы
if len(snake) == w * h:
stdscr.addstr(sh//2, sw//2 - 5, "Вы выиграли!")
stdscr.refresh()
time.sleep(2)
break
curses.wrapper(main)
The text was updated successfully, but these errors were encountered:
Импорт необходимых библиотек
import sys # Для системных операций
import time # Для работы со временем
import random # Для генерации случайных чисел
import curses # Для создания текстового интерфейса
from curses import textpad # Для отрисовки рамок
def main(stdscr):
# Инициализация curses
curses.curs_set(0) # Скрыть курсор
stdscr.nodelay(1) # Неблокирующий режим ввода
stdscr.timeout(50) # Установка задержки для getch()
curses.wrapper(main)
The text was updated successfully, but these errors were encountered: