chess's Introduction
Project - Chess Author - Borisov, Chulkov, Nikonov Необходимо разработать программу для игры с компьютером в шахматы. Естественно, никто не требует, чтобы программа в полной мере обладала искусственным интеллектом и могла выигрывать, но действовать в соответствии с правилами она обязана. Используемые классы (примерный перечень): * Игровое поле - Game * Игра - GameField (например, здесь может учитываться история ходов, время на обдумывание текущего хода и т.д.; данный класс может агрегировать класс игровое поле) * Фигура (для каждой фигуры свой класс) – Figure и наследники o Каждая фигура должна определять возможность сделать ход на ту или иную клетку игрового поля * Игрок (человек или алгоритм) - Player * Система визуализации и контроля действий пользователя – GameControlForm * Фигура в системе визуализации * Вероятно, различные внутренние классы Используемые паттерны (примерный перечень): * Фасад для описания текущего состояния игры, т.е. какой ход, какие фигуры стоят в каких клетках, какие фигуры уже вне игры, информация, какой сейчас ход, сколько прошло времени на ход, можно ли сделать ход из клетки А в клетку B, осуществление хода и т.д. Функциональность фасада может на себя взять класс игра, а использовать эту функциональность могут фигуры при определении возможности хода в ту или иную клетку, подсистема визуализации и т.д. * Итераторы для представления всех фигур в игре, истории ходов и т.д. (может использоваться системой визуализации). * Команда для описания хода, которые можно отменять. Т.е. ход в виде команды подается игре от игрока. * Хранитель для текущего состояния игры, с каждой выполненной командой связывается экземпляр хранителя состояния до выполнения этой команды. Кроме того команды могут использоваться в интеллектуальных стратегиях, которые работают по принципу “сделать ход в уме и посмотреть, к чему он приведет” (возможно на несколько шагов вперед). * Стратегия для описания алгоритма выбора хода. Стратегия может быть представлена как алгоритмами, так и интерфейсом к действиям пользователя. Для каждого из 2-х игроков должна быть возможность выбора одной из нескольких стратегий. Компьютерные стратегии могут быть автоматически подгружаемыми. * Адаптер для преобразования действий пользователя в GameControlForm к интерфейсу Player. * Фабричный метод для создания игры (с нуля или загрузка из файла уже начавшейся игры). * Наблюдатель, которым выступает система визуализации, наблюдающая за изменением состояния игры, т.е. за ходами каждого из игроков. * Приспособленец для фигур в системе визуализации Алгоритм работы приложения может быть следующий: Создается игра (новая или загружается начавшаяся из файла). Выбираются игроки (стратегии), которые будут отвечать за каждую из команда. После активации игры вызывается асинхронный метод выполнить ход нужному из игроков. После получения данной команды игрок обдумывает ход (алгоритм просчитывает, делегируя при этом выполнение части алгоритма фигурам, а стратегия, отвечающая за человека, ждет его действий). Компьютерные стратегии имеет смысл выделить в отдельные потоки выполнения. Когда решение стратегией получено, она вызывает метод игры “сделать ход”, игра проверяет, что выполняемый ход корректен и, если так, выполняет его и сообщает другому игроку, что теперь его ход. Игра должна обнаруживать мат. В случае отмены хода, думающему игроку посылается асинхронный метод отмены обдумывания и отменяется последний выполненный ход. После повторной активации игры все продолжается. Текущее состояние игры может быть записано в файл.
chess's People
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.