Как создать шашки на Python: пошаговое руководство

Игра в шашки — это классическая настольная игра между двумя игроками. Каждый игрок управляет набором шашек, цель игры — захватить все фигуры противника или заблокировать их так, чтобы те не могли двигаться.

Создание игры на Python позволяет лучше понять язык программирования и его возможности. Совмещение Python с библиотеками графики и обработки событий, такими как Pygame, дает мощный инструмент для разработки интерактивных приложений.

Установка необходимых библиотек

Первое, что нам нужно для разработки игры в шашки, — это установить необходимые инструменты и библиотеки. В нашем случае нам понадобится библиотека Pygame, предназначенная для разработки игр и визуализаций.

Описание необходимых инструментов и библиотек

Pygame — это набор Python-модулей, предназначенных для написания видеоигр. Он включает компьютерную графику и звук.

Инструкции по установке

Для начала создадим виртуальное окружение, чтобы изолировать зависимости нашего проекта:

python -m venv venv
source venv/bin/activate  # Для Linux/MacOS
venv\Scripts\activate     # Для Windows

После активации виртуального окружения установим Pygame:

pip install pygame  # Установка библиотеки Pygame для разработки игр

Теперь у нас есть все необходимое для начала работы над нашим проектом.

Создание игрового поля

Как создать графическое окно с помощью Pygame

Создадим графическое окно, которое будет основой нашего игрового поля.

import pygame

pygame.init()

# Размеры окна
WINDOW_SIZE = (800, 800)
screen = pygame.display.set_mode(WINDOW_SIZE)
pygame.display.set_caption('Шашки на Python')

# Основной цикл игры
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill((255, 255, 255))  # Заполнение окна белым цветом
    pygame.display.flip()

pygame.quit()

Рисование доски для шашек

Теперь добавим код для отображения доски. Доска будет состоять из черных и белых квадратов, чередующихся в шахматном порядке.

def draw_board(screen: pygame.Surface) -> None:
    colors = [(255, 255, 255), (0, 0, 0)]  # Белый и черный цвета доски
    square_size = WINDOW_SIZE[0] // 8  # Размер одного квадрата доски

    for row in range(8):
        for col in range(8):
            color = colors[(row + col) % 2]
            pygame.draw.rect(screen, color, pygame.Rect(col * square_size, row * square_size, square_size, square_size))

# Доработка основного цикла
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    draw_board(screen)  # Отрисовка доски
    pygame.display.flip()

pygame.quit()

Расположение шашек на доске

Описание структуры данных для хранения состояния доски

Для хранения состояния доски мы используем двумерный массив. Каждый элемент массива будет представлять состояние одной клетки доски: пустая клетка, шашка одного игрока или шашка другого игрока.

Функция для размещения шашек на доске

Определим функцию для инициализации доски и размещения шашек:

def setup_board(size: int = 8) -> list:
    board = [[' ' for _ in range(size)] for _ in range(size)]
    for row in range(size):
        for col in range(size):
            if (row < 3 or row > 4) and (row + col) % 2 != 0:
                board[row][col] = 'b' if row < 3 else 'r'
    return board

Эта функция создает доску размером 8×8 и размещает белые и красные шашки в стартовых позициях.

Обработка пользовательского ввода

Как обрабатывать события мыши для перемещения шашек

Теперь научимся обрабатывать клики мыши, чтобы игроки могли перемещать шашки.

for event in pygame.event.get():
    if event.type == pygame.MOUSEBUTTONDOWN:
        pos = pygame.mouse.get_pos()
        # Обработка клика
        print("Клик на позиции:", pos)

Определение правил для допустимых ходов

Создадим функцию для проверки допустимости хода:

def is_valid_move(start: tuple, end: tuple, board: list) -> bool:
    # Логика проверки
    return True

Эта функция будет содержать логику для проверки допустимости движения шашки.

Логика игры: проверки ходов и победы

Функции для проверки допустимости ходов

Реализуем логику для проверки допустимости ходов, включая захваты шашек:

def is_valid_move(start: tuple, end: tuple, board: list) -> bool:
    sr, sc = start
    er, ec = end

    if not (0 <= er < 8 and 0 <= ec < 8):
        return False
    if board[er][ec] != ' ':
        return False
    # Дополнительные проверки на допустимость хода
    return True

Реализация проверки победы и условия завершения игры

Создадим условия для завершения игры:

def check_winner(board: list) -> str:
    red_count = sum(row.count('r') for row in board)
    black_count = sum(row.count('b') for row in board)

    if red_count == 0:
        return 'Black Wins!'
    elif black_count == 0:
        return 'Red Wins!'
    return ''

Добавление графики и интерфейса

Как добавить изображение шашек и анимацию

Добавим изображения для шашек и обработаем их отображение на доске.

def draw_pieces(screen: pygame.Surface, board: list) -> None:
    piece_size = WINDOW_SIZE[0] // 8

    for row in range(8):
        for col in range(8):
            if board[row][col] == 'r':
                pygame.draw.circle(screen, (255, 0, 0), (col * piece_size + piece_size // 2, row * piece_size + piece_size // 2), piece_size // 2 - 5)
            elif board[row][col] == 'b':
                pygame.draw.circle(screen, (0, 0, 0), (col * piece_size + piece_size // 2, row * piece_size + piece_size // 2), piece_size // 2 - 5)

# Доработка основного цикла
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    draw_board(screen)  # Отрисовка доски
    draw_pieces(screen, board)  # Отрисовка шашек
    pygame.display.flip()

pygame.quit()

Создание простого интерфейса для отображения информации о ходе игры

Добавим отображение информации о текущем ходе и состоянии игры:

font = pygame.font.Font(None, 36)
text = font.render('Your Move', True, (0, 128, 0))
screen.blit(text, (10, 10))

Объединим все это в едином потоке отрисовки интерфейса.

Тестирование игры

Методы тестирования функционала игры

Для тестирования создадим юнит-тесты. Это поможет убедиться в правильности работы всех компонентов игры.

import unittest

class TestCheckers(unittest.TestCase):
    def test_is_valid_move(self):
        board = setup_board()
        self.assertTrue(is_valid_move((2, 1), (3, 2), board))

if __name__ == '__main__':
    unittest.main()

Проверка на наличие ошибок и исправление багов

Кроме юнит-тестов, важно проводить E2E тестирование, симулируя полный цикл игры, чтобы убедиться в отсутствии багов.

Заключение

Мы создали игру в шашки на Python, изучив основы работы с библиотекой Pygame. Это включало создание графического окна, отрисовку доски и шашек, обработку пользовательского ввода, реализацию правил игры и вывод информации об игре.

Продолжаем развивать проект, возможно, добавляя искусственный интеллект для игры против компьютера.


Добавить комментарий