Основная часть пасьянса

Основная часть пасьянса

Проектирование логики работы главной формы

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

h01971.jpg

При определении структуры данных будущей программы во многих случаях удобно исходить из принципа информационной избыточности. То есть не надо пытаться придумывать слишком сложные и запутанные структуры и способы хранения информации (в различных книгах нередко можно встретить упоминания списков, «деревьев» и других структур, которые дают определенный выигрыигв памяти — например, вместо 100 Кбайт потребуется 15 Кбайт, или выигрыш в быстродействии, процентов на 20, но усложняют логику работы и часто приводят к трудно обнаруживаемым ошибкам). При современном развитии персональной вычислительной техники память вообще лучше не экономить (в разумных пределах, конечно). Как правило, данные, представленные с определенной избыточностью — в виде массива, некоторые элементы которого заведомо не будут использоваться, позволяют выполнять обработку просто и наглядно с помощью циклов.

Давайте посмотрим на структуру игрового поля, где будет раскладываться пасьянс. На нем в смысловом плане выделяются пять групп, объединяющих несколько стопок карт — стена, колонны, пристенок, склад и вспомогательный ряд. Поэтому длина главного массива пасьянса (назовем его Well типа TCard), в котором будет храниться текущее расположение карт на столе, составит пять элементов:

TCard Well [5] ;

А какое максимальное число стопок может быть в каждой группе? В первых четырех — по четыре, а во вспомогательном ряду допускается выкладывать пять стопок. Значит, второе измерение массива Well — число стопок в соответствующей группе — тоже будет иметь длину 5:

TCard Well [5] [5] ;

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

197