
- •Задание
- •Поставить новую шашку
- •Переставить существующую шашку
- •Описание вычисления оценочной функции
- •Формула оценки
- •1. Материальный баланс
- •2. Мобильность
- •3. Контроль центра
- •Примеры работы оценочной функции
- •Описание вычисления Альфа-Бета
- •Руководство пользователя
- •2. Требования к системе
- •3. Управление в игре
- •4. Правила игры
- •2. Архитектура системы
- •1.Основные компоненты:
- •3. Описание ключевых компонентов
- •4. Описание функций
- •4.1 Логика игры
- •4.2 Алгоритм ии
- •5. Возможные улучшения
- •Назначение
- •2. Архитектура и принципы функционирования
- •8. Техническое обслуживание
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. Дополнительные функции
• Поддержка сетевой игры
• Сохранение/загрузка партии
• Поддержка режима “человек против человека”
Руководство системного администратора