import os import time import random import msvcrt # Размер поля WIDTH = 40 HEIGHT = 20 # Начальное положение snake = [(WIDTH//2, HEIGHT//2), (WIDTH//2-1, HEIGHT//2), (WIDTH//2-2, HEIGHT//2)] # 3 сегмента direction = (0, 1) # Генерируем еду, убедившись что она не на змейке def generate_food(): while True: food_pos = (random.randint(1, WIDTH-2), random.randint(1, HEIGHT-2)) if food_pos not in snake: return food_pos food = generate_food() score = 0 def draw(): # НЕ очищаем экран вообще! # Перемещаем курсор в начало print("\033[H", end="", flush=True) # Рисуем верхнюю рамку print("+" + "-" * WIDTH + "+") # Рисуем игровое поле for y in range(HEIGHT): print("|", end="") for x in range(WIDTH): if (x, y) == food: print("*", end="") # Еда elif (x, y) == snake[0]: # Голова змейки print("\033[32m#\033[0m", end="") # Зеленая голова elif (x, y) in snake: print("#", end="") # Тело змейки else: print(" ", end="") # Пустое место print("|") # Рисуем нижнюю рамку print("+" + "-" * WIDTH + "+") print("Score:", score) print("Управление: W - вверх, S - вниз, A - влево, D - вправо") # Инициализация - рисуем поле один раз print("\033[2J", end="", flush=True) # Очищаем только в начале draw() while True: # Перемещаем курсор в начало и перерисовываем print("\033[H", end="", flush=True) draw() time.sleep(0.1) # Обработка ввода if msvcrt.kbhit(): key = msvcrt.getch() if key == b'w' and direction != (0, 1): direction = (0, -1) elif key == b's' and direction != (0, -1): direction = (0, 1) elif key == b'a' and direction != (1, 0): direction = (-1, 0) elif key == b'd' and direction != (-1, 0): direction = (1, 0) # Новая голова head = (snake[0][0] + direction[0], snake[0][1] + direction[1]) # Обработка выхода за границы if head[0] < 0: head = (WIDTH - 1, head[1]) elif head[0] >= WIDTH: head = (0, head[1]) if head[1] < 0: head = (head[0], HEIGHT - 1) elif head[1] >= HEIGHT: head = (head[0], 0) # Проверка на проигрыш if head in snake: print(" Game Over!") break snake.insert(0, head) # Если еда съедена if head == food: score += 1 food = generate_food() else: snake.pop() import os import time import random import msvcrt # Размер поля WIDTH = 40 HEIGHT = 20 # Начальное положение snake = [(WIDTH//2, HEIGHT//2)] direction = (0, 1) # Генерируем еду, убедившись что она не на змейке def generate_food(): while True: food_pos = (random.randint(1, WIDTH-2), random.randint(1, HEIGHT-2)) if food_pos not in snake: return food_pos food = generate_food() score = 0 def draw(): # НЕ очищаем экран вообще! # Перемещаем курсор в начало print("\033[H", end="", flush=True) # Рисуем верхнюю рамку print("+" + "-" * WIDTH + "+") # Рисуем игровое поле for y in range(HEIGHT): print("|", end="") for x in range(WIDTH): if (x, y) == food: print("*", end="") # Еда elif (x, y) in snake: print("#", end="") # Змейка else: print(" ", end="") # Пустое место print("|") # Рисуем нижнюю рамку print("+" + "-" * WIDTH + "+") print(f"Score: &#123;score&#125;") print("Управление: W - вверх, S - вниз, A - влево, D - вправо") # Инициализация - рисуем поле один раз print("\033[2J", end="", flush=True) # Очищаем только в начале draw() while True: # Перемещаем курсор в начало и перерисовываем print("\033[H", end="", flush=True) draw() time.sleep(0.3) # Обработка ввода if msvcrt.kbhit(): key = msvcrt.getch() if key == b'w' and direction != (0, 1): direction = (0, -1) elif key == b's' and direction != (0, -1): direction = (0, 1) elif key == b'a' and direction != (1, 0): direction = (-1, 0) elif key == b'd' and direction != (-1, 0): direction = (1, 0) # Новая голова head = (snake[0][0] + direction[0], snake[0][1] + direction[1]) # Обработка выхода за границы if head[0] < 0: head = (WIDTH - 1, head[1]) elif head[0] >= WIDTH: head = (0, head[1]) if head[1] < 0: head = (head[0], HEIGHT - 1) elif head[1] >= HEIGHT: head = (head[0], 0) # Проверка на проигрыш if head in snake: print(" Game Over!") break snake.insert(0, head) # Если еда съедена if head == food: score += 1 food = generate_food() else: snake.pop()