Еще один пока не реализованный метод — это CanMoveTo(), проверка на допустимость выбранного перемещения карты.

h02181.jpg

Если вам удалось осилить данный раздел, как следует разобраться в реализации метода FormMouseUp() и понять его работу — а ведь это фактически вся логика работы пользовательского интерфейса, то можно с уверенностью сказать, что вам по плечу любая задача прикладного программирования. Если Же что-то осталось неясным, все-таки постарайтесь добиться понимания работы FormMouseUp() — вернитесь к предыдущим разделам или, может быть, даже к началу данной главы, и еще раз внимательно прочитайте описание всех аспектов функционирования создаваемого пасьянса.

Игра по правилам

Метод CanMoveTo() остался последним довольно сложным методом проекта. Если в методе FormMouseUp() заключалась логика взаимодействия с человеком, то в методе CanMoveToQ надо реализовать правила перекладывания карт. Метод CanMoveTo() описывается в класса TFormI так:

bool CanMoveTo(int line, int pos);

В качестве параметров этот метод получает две переменные — line (номер группы) и pos (номер стопки), которые определяют координаты стопы назначения. Стопка, с верха которой карта будет браться, уже задана внутренними переменными Line и Pos класса TFormI.

Возвращаемое методом значение имеет тип bool и будет равно true, если карту в соответствии с правилами можно переместить на новое место.

О работе метода CanMoveToQ удобнее всего рассказывать непосредственно в его теле с помощью комментариев. Предварительно надо отметить, что метод состоит из трех условных операторов (с большими логическими блоками), каждый из которых проверяет, в какую группу будет карта перекладываться.

bool TFormI::CanMoveTo(int line, int pos) {

//

// если карта кладется на королевскую колонну:

if( line == 1 )

218