Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТП_3 этап.docx
Скачиваний:
0
Добавлен:
23.06.2025
Размер:
383.83 Кб
Скачать

2. Архитектура системы

1.Основные компоненты:

1. Board (матрица 9×9)

• Представляет игровое поле

• Поддерживает начальное размещение, проверку победы, генерацию и применение ходов

2. Move

• Представляет один ход игрока — от начальной клетки до конечной, возможно с промежуточными точками (прыжки)

3. Игровая логика

• Проверка допустимости координат

• Генерация возможных ходов для каждой фишки

• Рекурсивная генерация цепочек прыжков

4. ИИ

• Поиск лучшего хода с помощью MiniMax

• Оценочная функция

Поток данных

1. Игрок делает ход (ввод номера хода)

2. Программа применяет его на доске

3. ИИ анализирует состояние, применяет MiniMax и делает ответный ход

4. Проверка победы

5. Переход хода

3. Описание ключевых компонентов

Поля:

• Board board — матрица 9×9 (vector<vector<char>>)

• const char PLAYER1 = 'X', PLAYER2 = 'O', EMPTY = '.'

Методы:

• InitBoard() — инициализация поля

• PrintBoard() — печать доски

• IsValid() — проверка корректности координаты

• CheckWin() — победа, если игрок занял центральную зону противника

• ApplyMove() — применение хода

• GenerateAllMoves() — генерация всех возможных ходов

• GetAllMovesForPiece() — получение ходов конкретной фишки

• JumpDFSChain() — рекурсивная генерация прыжков

Move

struct Move {

vector<Coord> path; // Например: (2,4) -> (4,4) -> (6,4)

};

Хранит путь фишки за один ход (одиночный или цепной прыжок).

AI Методы:

1.Evaluate()

• Чем ближе фишка к вражеской зоне — тем выше оценка

• Бонус за наличие фишек в целевой зоне

• Учет положения и количества фишек

2.MiniMax()

• Классическая реализация с отсечением

• Глубина поиска = 3 (можно настроить)

• Вызывает сам себя рекурсивно

• Возвращает числовую оценку хода

3.FindBestAIMove()

• Генерирует ходы

• Вызывает MiniMax

• Возвращает лучший

4. Описание функций

4.1 Логика игры

bool IsValid(const Board& board, int x, int y) - Проверяет, можно ли обращаться к клетке (в пределах и не ’ ’).

void JumpDFSChain(Board, Coord, vector<Coord>&, vector<Move>&, ...) - Рекурсивно формирует цепочку прыжков (если после прыжка есть новый возможный — продолжает путь).

vector<Move> GenerateAllMoves(const Board& board, char player)- Обходит все фишки игрока, собирает доступные ходы.

void ApplyMove(Board& board, const Move& move, char player)- Удаляет фишку с начальной позиции, добавляет на конечную.

4.2 Алгоритм ии

1.int Evaluate(const Board& board, char player)

Возвращает целочисленную оценку позиции:

• За фишки в зоне цели +50

• За приближение к цели: -10 * расстояние

• Противник получает обратные оценки

2.int MiniMax(Board board, int depth, int alpha, int beta, bool maximizing, char currentPlayer)

• Минимизирует/максимизирует оценку позиции

• Глубина = 3

• Прерывает поиск, если alpha >= beta

• Проверяет победу и использует Evaluate на листьях

3.Move FindBestAIMove(Board board)

Выбирает наилучший ход с максимальной оценкой.

5. Возможные улучшения

1. Улучшение ИИ

• Добавить кэширование результатов (transposition table)

• Расширить глубину поиска до 4+

2. Улучшения интерфейса

• Интерфейс на Qt/SFML

• Цветовая подсветка возможных ходов

3. Игровая механика

• Диагональные ходы

• Фишки с уникальными свойствами (например, ускорение)

4. Дополнительные функции

• Поддержка сетевой игры

• Сохранение/загрузка партии

• Поддержка режима “человек против человека”

Руководство системного администратора