Примеры кода игр на Python: от «Угадай число» до графических проектов
Создание игры на Python: основные подходы
Наиболее эффективный способ освоить программирование игр на Python - начать с простой консольной игры, например «Угадай число». Этот проект охватывает циклы, условные операторы и случайные числа. Код минимален, но позволяет понять структуру игрового цикла.
import random
secret = random.randint(1, 100)
attempt = 0
while True:
guess = input("Угадай число от 1 до 100: ")
if not guess.isdigit():
print("Введите число!")
continue
guess = int(guess)
attempt += 1
if guess < secret:
print("Загаданное число больше.")
elif guess > secret:
print("Загаданное число меньше.")
else:
print(f"Поздравляю! Угадал за {attempt} попыток.")
breakкод игры на python (код игры на python)
Пояснение шагов: 1) Импорт random для генерации числа. 2) Бесконечный цикл while True - основной игровой цикл. 3) Проверка ввода через isdigit() предотвращает ошибки преобразования. 4) Сравнение числа с секретным и вывод подсказок. 5) Выход из цикла при правильном ответе.
Типичные ошибки и их решение:
- Забыли про continue при нечисловом вводе - программа падает. Всегда проверяйте ввод.
- Бесконечный цикл, если не обновлять secret - случайное число генерируется один раз, это правильно.
- Ошибка отступа - все строки внутри while должны иметь одинаковый отступ.
Как сделать игру с выбором из нескольких вариантов?
Игра «Камень, ножницы, бумага» добавляет комбинаторику. Пользователь вводит один из трёх вариантов, компьютер выбирает случайно. Результат определяется по правилам.
import random
options = ["камень", "ножницы", "бумага"]
while True:
user = input("Выбирай: камень, ножницы, бумага (или стоп): ").lower()
if user == "стоп":
break
if user not in options:
print("Неправильный выбор!")
continue
comp = random.choice(options)
print(f"Компьютер: {comp}")
if user == comp:
print("Ничья")
elif (user == "камень" and comp == "ножницы") or \
(user == "ножницы" and comp == "бумага") or \
(user == "бумага" and comp == "камень"):
print("Ты победил!")
else:
print("Компьютер победил!")Пояснения: Используется список options для проверки ввода. Компьютер выбирает через random.choice(). Условия победы записаны через логические комбинации. Цикл прерывается по команде «стоп».
Типичные проблемы: Игрок вводит с заглавной буквы - решается .lower(). Путаница в условиях победы - помогает таблица правил.
Как реализовать игру со строками и попытками?
Игра «Виселица» тренирует работу со строками, множествами и счётчиком ошибок. Слово выбирается из списка, пользователь отгадывает буквы.
import random
words = ["python", "программа", "игра", "алгоритм"]
secret = random.choice(words)
guessed = set()
tries = 6
while tries > 0:
display = "".join(c if c in guessed else " _" for c in secret)
print(display)
if "_" not in display:
print("Ты выиграл!")
break
letter = input("Введи букву: ").lower()
if len(letter) != 1 or not letter.isalpha():
print("Введи одну букву!")
continue
if letter in guessed:
print("Уже была.")
continue
guessed.add(letter)
if letter not in secret:
tries -= 1
print(f"Осталось попыток: {tries}")
else:
print(f"Проиграл. Слово было: {secret}")Пояснения: Множество guessed хранит отгаданные буквы. Списочное выражение формирует текущее состояние слова. Цикл while-else вызывает блок else только если цикл завершился без break (то есть попытки кончились).
Типичные ошибки: Учёт кириллицы - .isalpha() работает корректно. Многократный ввод одной буквы - проверка через guessed. Бесконечный цикл, если не уменьшать tries.
Как создать простую 2D игру с графикой?
Использование Pygame позволяет вывести на экран движущийся квадрат. Это основа для более сложных игр.
import pygame
pygame.init()
size = (700, 500)
screen = pygame.display.set_mode(size)
clock = pygame.time.Clock()
x, y = 50, 50
speed = 5
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
x -= speed
if keys[pygame.K_RIGHT]:
x += speed
if keys[pygame.K_UP]:
y -= speed
if keys[pygame.K_DOWN]:
y += speed
screen.fill((0, 0, 0))
pygame.draw.rect(screen, (255, 0, 0), (x, y, 50, 50))
pygame.display.flip()
clock.tick(60)
pygame.quit()Пояснения: Инициализация Pygame, создание окна, главный цикл обработки событий. Клавиши опрашиваются через pygame.key.get_pressed(). Квадрат рисуется функцией draw.rect. clock.tick(60) фиксирует 60 кадров в секунду.
Типичные ошибки: Не установлен pygame - установка через pip install pygame. Квадрат выходит за границы - нужно добавить проверки. Тормозит без clock.tick.
Как построить игру с ветвлением сюжета?
Текстовый квест на словарях и функциях - удобный способ создать многосценарную игру без графики.
scenes = {
"start": {
"text": "Ты в тёмном лесу. Куда пойти?",
"choices": {"1": "Налево", "2": "Направо"},
"next": {"1": "left_path", "2": "right_path"}
},
"left_path": {
"text": "Ты нашел сундук. Открыть?",
"choices": {"1": "Да", "2": "Нет"},
"next": {"1": "treasure", "2": "end"}
},
"right_path": {
"text": "Избушка на курьих ножках. Войти?",
"choices": {"1": "Войти", "2": "Убежать"},
"next": {"1": "babayaga", "2": "end"}
},
"treasure": {
"text": "Ты нашёл золото! Победа!",
"choices": {},
"next": {}
},
"babayaga": {
"text": "Баба-Яга угостила чаем. Конец.",
"choices": {},
"next": {}
},
"end": {
"text": "Игра окончена.",
"choices": {},
"next": {}
}
}
current = "start"
while current in scenes:
scene = scenes[current]
print(scene["text"])
if not scene["choices"]:
break
for key, desc in scene["choices"].items():
print(f"{key}. {desc}")
choice = input("Выбери номер: ")
current = scene["next"].get(choice, current)Пояснения: Словарь scenes содержит сцены. Каждая сцена - текст, варианты выбора и указатели на следующую сцену. Цикл переходит по ключам. При пустом словаре choices игра завершается.
Типичные ошибки: Рекурсия вместо цикла - лучше использовать while. Сложность добавления новых сцен - структура словаря легко расширяется. Неверный ввод номера - проверка через get с запасным вариантом (текущая сцена).
Расширенные примеры кода игр на Python
Пример 1: Змейка на Pygame
Полноценная игра «Змейка» с управлением стрелками, ростом при съедании еды и условием проигрыша при столкновении с границей или собой.
import pygame
import random
pygame.init()
WIDTH, HEIGHT = 600, 400
CELL_SIZE = 20
screen = pygame.display.set_mode((WIDTH, HEIGHT))
clock = pygame.time.Clock()
# Цвета
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
# Начальное положение змейки
snake = [(100, 100)]
snake_dir = (CELL_SIZE, 0) # движение вправо
# Еда
food = (random.randrange(0, WIDTH, CELL_SIZE),
random.randrange(0, HEIGHT, CELL_SIZE))
score = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP and snake_dir != (0, CELL_SIZE):
snake_dir = (0, -CELL_SIZE)
if event.key == pygame.K_DOWN and snake_dir != (0, -CELL_SIZE):
snake_dir = (0, CELL_SIZE)
if event.key == pygame.K_LEFT and snake_dir != (CELL_SIZE, 0):
snake_dir = (-CELL_SIZE, 0)
if event.key == pygame.K_RIGHT and snake_dir != (-CELL_SIZE, 0):
snake_dir = (CELL_SIZE, 0)
# Движение змейки
head_x, head_y = snake[0]
new_head = (head_x + snake_dir[0], head_y + snake_dir[1])
# Границы
if (new_head[0] < 0 or new_head[0] >= WIDTH or
new_head[1] < 0 or new_head[1] >= HEIGHT):
running = False
break
# Столкновение с собой
if new_head in snake:
running = False
break
snake.insert(0, new_head)
# Съели еду
if new_head == food:
score += 1
food = (random.randrange(0, WIDTH, CELL_SIZE),
random.randrange(0, HEIGHT, CELL_SIZE))
else:
snake.pop()
# Отрисовка
screen.fill(BLACK)
for segment in snake:
pygame.draw.rect(screen, GREEN, (*segment, CELL_SIZE, CELL_SIZE))
pygame.draw.rect(screen, RED, (*food, CELL_SIZE, CELL_SIZE))
pygame.display.set_caption(f"Змейка | Очки: {score}")
pygame.display.flip()
clock.tick(10)
pygame.quit()Результат: на экране отображается змейка, движущаяся по полю. При съедении красной еды змейка увеличивается, очки растут. При касании границы или собственного тела игра завершается. Окно закрывается.
Пример 2: Крестики-нолики с минимаксом (ИИ)
Реализация игры с искусственным интеллектом, использующим алгоритм минимакс для поиска оптимального хода. Поле 3x3, ИИ играет за 'O', игрок за 'X'.
import math
board = [" "] * 9
def print_board():
for i in range(0, 9, 3):
print("|" + "|".join(board[i:i+3]) + "|")
def check_winner(board, player):
win_patterns = [(0,1,2),(3,4,5),(6,7,8),(0,3,6),(1,4,7),(2,5,8),(0,4,8),(2,4,6)]
for a,b,c in win_patterns:
if board[a]==board[b]==board[c]==player:
return True
return False
def get_available(board):
return [i for i, val in enumerate(board) if val == " "]
def minimax(board, depth, is_max):
if check_winner(board, "O"):
return 10 - depth
if check_winner(board, "X"):
return depth - 10
if not get_available(board):
return 0
if is_max:
best = -math.inf
for move in get_available(board):
board[move] = "O"
score = minimax(board, depth+1, False)
board[move] = " "
best = max(best, score)
return best
else:
best = math.inf
for move in get_available(board):
board[move] = "X"
score = minimax(board, depth+1, True)
board[move] = " "
best = min(best, score)
return best
def ai_move():
best_score = -math.inf
best_move = None
for move in get_available(board):
board[move] = "O"
score = minimax(board, 0, False)
board[move] = " "
if score > best_score:
best_score = score
best_move = move
return best_move
# Игровой цикл
while True:
print_board()
if not get_available(board):
print("Ничья!")
break
# Ход игрока
try:
move = int(input("Твой ход (0-8): "))
if move not in get_available(board):
print("Клетка занята!")
continue
except ValueError:
print("Введи число!")
continue
board[move] = "X"
if check_winner(board, "X"):
print_board()
print("Ты выиграл!")
break
# Ход ИИ
if get_available(board):
ai = ai_move()
board[ai] = "O"
print(f"ИИ походил на {ai}")
if check_winner(board, "O"):
print_board()
print("ИИ выиграл!")
breakРезультат: консольная игра, где игрок вводит номер клетки (0-8), ИИ отвечает оптимальным ходом. При победе одной из сторон или заполнении поля выводится соответствующее сообщение.