описания количества карт в стопке введем целочисленную переменную, которую назовем указателем. Выборка из массива при значении индекса равном указателю позволит нам получить информацию о верхней карте в стопке. Для того, чтобы смоделировать добавление карты в стопку, нужно увеличить указатель на 1 и записать в массив код карты, подставив в индекс значение указателя. Если нам нужно смоделировать снятие карты со стопки, нужно прочитать из массива код карты по значению указателя и уменьшить значение указателя на 1 (перед этим конечно необходимо убедиться, что значение указателя больше 0). Объект с такими свойствами, состоящий из массива и указателя, в математике называется стеком. В модели этой игры необходимо иметь 13 стеков.

Следующая программа демонстрирует первоначальную раскладку карт в игре "Солитер". (Из-за "случайности" раскладки успешное завершение игры не гарантируется). Первоначально программа размещает колоду по порядку номеров карт лицевой стороной вниз в 13 стеке. Из этой колоды производится раскладка карт по 7 стекам следующим образом: с 1 по 7, затем со 2 по 7 и так далее, притом последняя карта в стеке укладывается лицевой стороной вверх. Для того, чтобы раскладка не повторялась от одного сеанса игры к другому, очередная карта из колоды берется по случайному номеру, а на ее место помещается верхняя карта колоды. После завершения раскладки программа показывает исходное расположение карт на игровом столе.

SCREEN О

WIDTH 80, 43

DIM a(l ТО 7) AS STRING * 7

DIM stacks(1 TO 13, 1 TO 52) AS INTEGER

DIM ptrsd TO 13) AS INTEGER

empty$ = CHR$(249)+" ."+CHR$(249)

odd$ = CHR$ (219)+CHR$ (176)+CHR$ (219)+CHR$ (176)+CHR$ (219)+CHR$ (176)

+CHR$(219)

even$ = CHR$(176)+" "+CHR$ (176)+" "+CHR$ <176)+" "+CHR$ (176)

COLOR 0, 2

CLS

FOR i% = 1 TO 52: stacks(13, i%) = -i%: NEXT i%

'колода упорядочена ptrs(13) = 24 FOR i% = в ТО 12: ptrs(i%) = 0: NEXT i%

'стопки с 8 по 12 пустые RANDOMIZE TIMER last% = 52

FOR ic% = 1 TO 7 'цикл раскладки по уровням FOR jc% = ic% ТО 7 'цикл раскладки по стопкам i% == 1 + RND * last% 'выбор номера карты в колоде card% = stacks(13, i%) 'извлечение карты из колоды stacks(13, i%) = stacks(13, last%)

'последняя карта на месте извлеченной last% = last% - 1 'уменьшение размера колоды IF ic% = jc% THEN card% = -card%

'переворачивание верхней карты

stacks(jc%, ic%) = card% 'укладывание карты в стопку NEXT jc% ptrs(ic%) = ic% 'количество карт в стопке