Еще один пока не реализованный метод — это CanMoveTo(), проверка на допустимость выбранного перемещения карты.
Если вам удалось осилить данный раздел, как следует разобраться в реализации метода 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