10. Обобщение — мать учения
// обычное перемещение:
// если карта берется со стены, пристенка // или из вспомогательного ряда:
if( (Line == О I Line == 2 I Line == 4) &&
// и кладется в непустой склад IsCards(3,pos) &&
// и на карту такой же масти
GetCard(Line,Pos,true).GetSuitO == GetCardO.pos.true).GetSuitO &&
// и меньшую на 1 по значению OnBig(Line,Pos,3,pos,false) )
// то перемещение допустимо return true;
}
// во всех остальных случаях перемещение недопустимо return .false;
}
Нисходящее программирование
В методе CanMoveTo() не определен метод OnBig(), проверяющий, в строгом ли порядке возрастания или убывания значений карты кладутся друг на друга. Немногим ранее, когда писался метод реакции на щелчок мыши, также не был определен CanMoveToQ, он только упоминался, а реализован был позже.
Дело в том, что подобным способом разрабатывать программы гораздо проще. Сначала ее логика проектируется на самом высоком уровне абстракций, без привязки к конкретным конструкциям Си++, потом происходит детализация различных моментов, некоторые места, требующие особой
222