Однако оставлять массив Coords обычной переменной нехорошо. Желательно сделать его константой:
const int Coords [18] [4] = II...
Разместить объявление Coords надо в файле MainUnit.cpp сразу за описаниями остальных констант.
Продолжаем проверку пользовательского выбора
Если координаты щелчка в массив Coords не попали, то выполнять метод их обработки смысла не имеет — просто щелчок был сделан где-то на незанятой части игрового поля. Тогда метод надо прервать с помощью оператора return.
Если же какая-то стопка выбрана в первый раз (то есть Line равно 1), то надо проверить, есть ли в этой стопке карты и не относится ли эта стопка к группе колонн (королей), из которой карты перемещать нельзя. Если это так, то надо'запомнить группу и стопку в переменных Line и*Ро5 и покинуть метод в ожидании дальнейших действий человека.
Наконец, когда в переменных Line и Pos уже хранятся координаты начальной стопки, и они не совпадают с координатами конечной стопки (это может быть, если пользователь дважды щелкнет на одной и той же стопке), то тогда надо проверить, допустимо ли перемещение карты из стопки Pos группы Line в стопку роз группы line, и выполнить его.
Осталось еще отследить щелчок на колоде карт, лежащей рубашкой вверх, чтобы выполнить раскладку карт во вспомогательном ряду. Такая проверка выполнится с помощью условного оператора
if( X > MAIN_LEFT && X < MAIN_LEFT+CARD_WIDTH && Y > MAIN_TOP && Y < MAIN_TOP+CARD_HEIGHT )
Если колода пуста, то в нее надо собрать карты из вспомогательной колоды и уменьшить значение счетчика числа раскладываемых карт Cycle. Когда он станет равным нулю, других допустимых перекладываний в пасьянсе нет, о чем человеку надо сообщить — пасьянс не сошелся. В противном случае необходимо выполнить раскладку такого количества карт,.какое значение хранится в Cycle. В заключение новую раскладку надо перерисовать.
void _fastcall TFormI::FormMouseUp(TObject ^Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
214