Qt::Шахматы. Часть 2

Во второй части цикла статей, посвященного написанию шахмат, будет рассмотрена организация ходов по доске. Для начала введем два класса: QPiece – фигура и QGame – игра.

QPiece

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

Фигура будет наследником от QSvgWidget, виджета, для отображения svg картинок.

Свойства фигуры

  • State- состояние. Фигуры будет иметь два основных состояния: Simple (обычная фигура) и Deleted (уже срубленная). Доступно для записи и для чтения.
  • Color– цвет фигуры (белая или черная). Свойство доступно только для чтения. Тип bool.
  • Position– позиция фигуры на доске. Доступно для записи и чтения.
  • Board – доска. Тип QBoard, доступна только для чтения.

Объявление:

  1. class QPiece : public QSvgWidget
  2. {
  3.     Q_OBJECT
  4. public:
  5.     enum State { Simple, Deleted };
  6.  
  7.     QPoint position();
  8.     void setPosition( QPoint value );
  9.  
  10.     bool color();
  11.     static QGame *game();
  12.  
  13.     void setState( State value );
  14.     State state();
  15.  
  16.     QBoard *board();
  17.     QPiece( QPoint position, QWidget *board );
  18.  
  19. protected:
  20.     QBoard *_board;
  21.     QPoint _position;
  22.     State _state;
  23.     bool _color;
  24. };


паттерны, qt, cpp

Qt::Шахматы. Часть 1. Введение

В этом цикле статей будет разработано приложение для игры в шахматы. Вообще, написание шахмат, без искусственного интеллекта, довольно распространенная задача по практике в объектно-ориентированном программировании. Тут есть и наследование, полиморфизм, инкапсуляция, можно даже придумать, куда приделать паттерны :).

Сначала мы напишем шахматы типа человек против человека, а искусственному интеллекту будет посвящен уже другой цикл статей. В качестве IDE будем использовать отличный Qt Creator (скачать можно здесь, если в системе нет Qt, то лучше качать полностью Qt SDK).

Требования к программе

  • Проверка хода согласно правилам для каждой из фигур.
  • Проверки на шах, мат и пат.
  • Возможность рокировки.
  • Подсветка возможных ходов.
  • Размер доски должен подстраиваться под размер окна.

Внешний вид

Определимся с внешним видом приложения. За основу можно взять оформление glChess, шахмат, которые идут в комплекте с Gnome. Картинки фигурок должны быть в векторном формате, что бы шахматы смотрелись одинаково хорошо при любом размере окна. Такие картинки были найдены на просторах интернета, скачать их можно здесь (формат svg).

В конечном итоге приложение может выглядеть так (KDE4):

 

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

qt, cpp