Code Monkey home page Code Monkey logo

chess's Introduction

Project - Chess
Author - Borisov, Chulkov, Nikonov

Необходимо разработать программу для игры с компьютером в шахматы.
Естественно, никто не требует, чтобы программа в полной мере обладала искусственным интеллектом и могла выигрывать,
 но действовать в соответствии с правилами она обязана.

Используемые классы (примерный перечень):
* Игровое поле - Game
* Игра - GameField (например, здесь может учитываться история ходов, время на обдумывание текущего хода и т.д.;
данный класс может агрегировать класс игровое поле)
* Фигура (для каждой фигуры свой класс) – Figure и наследники
o Каждая фигура должна определять возможность сделать ход на ту или иную клетку игрового поля
* Игрок (человек или алгоритм) - Player
* Система визуализации и контроля действий пользователя – GameControlForm
* Фигура в системе визуализации
* Вероятно, различные внутренние классы

Используемые паттерны (примерный перечень):
* Фасад для описания текущего состояния игры, т.е. какой ход, какие фигуры стоят в каких клетках,
какие фигуры уже вне игры, информация, какой сейчас ход, сколько прошло времени на ход,
можно ли сделать ход из клетки А в клетку B, осуществление хода и т.д.
Функциональность фасада может на себя взять класс игра,
а использовать эту функциональность могут фигуры при определении возможности хода в ту или иную клетку,
подсистема визуализации и т.д.
* Итераторы для представления всех фигур в игре, истории ходов и т.д. (может использоваться системой визуализации).
* Команда для описания хода, которые можно отменять. Т.е. ход в виде команды подается игре от игрока.
* Хранитель для текущего состояния игры,
с каждой выполненной командой связывается экземпляр хранителя состояния до выполнения этой команды. 
Кроме того команды могут использоваться в интеллектуальных стратегиях, которые
работают по принципу “сделать ход в уме и посмотреть, к чему он приведет” (возможно на несколько шагов вперед).
* Стратегия для описания алгоритма выбора хода. Стратегия может быть представлена как алгоритмами,
так и интерфейсом к действиям пользователя.
Для каждого из 2-х игроков должна быть возможность выбора одной из нескольких стратегий. Компьютерные стратегии могут быть автоматически подгружаемыми.
* Адаптер для преобразования действий пользователя в GameControlForm к интерфейсу Player.
* Фабричный метод для создания игры (с нуля или загрузка из файла уже начавшейся игры).
* Наблюдатель, которым выступает система визуализации, наблюдающая за изменением состояния игры,
т.е. за ходами каждого из игроков.
* Приспособленец для фигур в системе визуализации
Алгоритм работы приложения может быть следующий:

Создается игра (новая или загружается начавшаяся из файла). Выбираются игроки (стратегии),
которые будут отвечать за каждую из команда. 
После активации игры вызывается асинхронный метод выполнить ход нужному из игроков. 
После получения данной команды игрок обдумывает ход (алгоритм просчитывает, делегируя при этом выполнение части алгоритма фигурам,
 а стратегия, отвечающая за человека, ждет его действий). 
Компьютерные стратегии имеет смысл выделить в отдельные потоки выполнения. 
Когда решение стратегией получено, она вызывает метод игры “сделать ход”, игра проверяет, 
что выполняемый ход корректен и, если так, выполняет его и сообщает другому игроку, что теперь его ход. 
Игра должна обнаруживать мат. В случае отмены хода, 
думающему игроку посылается асинхронный метод отмены обдумывания и отменяется последний выполненный ход. 
После повторной активации игры все продолжается. Текущее состояние игры может быть записано в файл.

chess's People

Contributors

radiatus avatar drawell avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.