Snake
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: {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.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()