ZX-Ревю 1992 №7-8 1991 г.

Крибедж - глава из книги "Настольные игры своими руками".


Темы статьи: Программирование  

КРИБЕДЖ

( Глава из книги "Настольные игры своими руками")

Вашему внимания предлагается глава из готовящейся к изданию книги "Персональный компьютер СПЕКТРУМ. Настольные игры своими руками. " Мы надеемся, что данный отрывок дает представление о содержании книги, которая будет предложена к изданию в ближайшее время.

КРИБЕДЖ

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

Предполагают, что изобрел крибедж и дал ему название английский поэт, лорд Джон Саклинг (1609-1642). Впоследствии первые колонисты завезли игру в Америку, где она и получила свой расцвет.

В чем прелесть крибеджа? Дело в том, что здесь, как и в любой другой карточной игре, определенную роль играет везение, но не слишком большую. У опытного игрока всегда есть возможность доказать, что счастье - это хорошо, но голова на плечах - лучше. Своим успехом крибедж во многом обязан правилам, которые сложными пожалуй не назовешь, но многообразными - можно. Счет очков идет настолько динамично, что для игроков даже существует специальное приспособление - доска с отверстиями. Игроки по мере набора очков переставляют свои колышки из отверстия в отверстие, стараясь как можно быстрее пройти путь к концу доски.

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

В игре используется полная колода карт - 52 листа. Старшинство карт следующее

(сверху вниз): К,Д,В,10, ..... 3,2,Т. Туз - младшая карта, каждая карта имеет свое

достоинство. Все фигуры и десятка - по 10 очков, прочие - по номиналу, а туз - 1 очко.

Вся игра состоит из геймов.

Гейм состоит из раундов. Гейм закончен, когда кто-то наберет 121 очко. Победителю в гейме засчитывается одно очко, если его противник набрал более 61 очка и два очка, если тот набрал меньше. О том, до какого счета по геймам Вы будете играть - договоритесь сами, обычно играют до 6 или до 12-ти.

Сдача в игре производится по очереди, сдающий имеет значительное преимущество, он ведет активную игру. Его противник как бы держит оборону, сдача происходит в следующем порядке:

1. Каждому сдаются по 6 карт.

2. Каждый оставляет себе по 4 карты и по две карты сбрасывает на стол рубашкой вверх, не показывая их противнику. В результате у каждого осталось по 4 карты и на столе образовалась еще одна рука с четырьмя картами - эту руку называют КРИБ. Она принадлежит сдавшему.

3. После сноса криба противник "срезает" колоду и сдающий открывает верхнюю (после срезки карту). Эту карту называют "стартер". Она остается на колоде, но условно принадлежит всем играющим, в том числе и крибу, т.е. они имеют для игры по 4 карты, но для зачетов очков - по пять карт вместе со стартером.

Очки в раунде добываются двумя путями.

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

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

Игра.

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

Первый выкладывает любую свою карту несдававший. Затем кладет карту сдатчик. При этом:

- если полученная сумма равна 15, ему запишется 2 очка;

- если его карта равна карте предыдущего хода, т.е. образуется "пара", ему запишется 2 очка.

Ход переходит к несдававшему. Он может сделать:

- "пятнадцать" (2 очка)

- "пару"(2 очка)

- "секанс" (три карты подряд, например В,10,Д или 3,2,Т - 3 очка).

Ход переходит и так далее.

В последующие ходы могут возникать и более сложные комбинации:

- секансы из более чем трех карт оцениваются во столько очков, сколько карт в секансе.

- "пэр рояль" - три одинаковые карты подряд дают 6 очков, т. к. из них можно составить 3 разные пары;

- "двойной пэр рояль" - 4 карты одного достоинства - 12 очков (6 разных пар).

Так игроки ходят по очереди до тех пор, пока один из них не сможет сделать ход. Ведь выходить за пределы 31 очка нельзя. Тогда он объявляет "ХОД" и его противник получает себе очко. Теперь противник может, если у него есть мелкие карты, выкладывать их на стол, оставаясь в пределах 31 очка. Так можно выложить за ход и две и три карты подряд. Если ему удается в результате своего хода набрать ровно тридцать одно, ему запишется 2 очка.

Когда и второй играющий не сможет сделать хода, то с оставшимися на руках картами игроки начинают новую выкладку, первым кладет карту тот, кто первым пропустил ход.

Ход последней картой (из восьми) дает еще одно очко, а если к тому же в результате этого хода образовалось 31, то добавляются 2 дополнительных очка.

Теперь, когда все карты выложены, игроки начинают подсчитывать свои очки за комбинации, которые у них были на руках к началу игры. Начинающим для простоты можно разобрать выложенные карты со стола по рукам и начать считать. В игре с компьютером подсчет сделает за вас машина, если Вы этого пожелаете. Стартер считается пятой картой для каждой из трех рук.

В зачет идут следующие комбинации:

"Пятнадцать" - 2 очка.

"Пара" - 2 очка.

"Пэр рояль" - 6 очков.

"Двойной пэр рояль" - 12 очков.

"Секанс" - по числу карт.

"Флешь" - 4 или 5 очков.

Флешь - это 4 карты одной масти в руке, но не в крибе (4 очка). Если ту же масть имеет стартер - то 5 очков, за 4 карты одной масти в крибе не дается ничего, но если эту масть имеет и стартер, то хозяин криба (сдающий) получает 5 очков.

"Его благородие" - Если у вас на руках есть валет той же масти, что и масть стартера, вы получаете одно очко.

"Челядь" - Если валет оказывается картой-стартером, то сдатчику засчитывается

очко.

Теперь, рассмотрим некоторые примеры подсчета очков.

Комбинация К, Д, Д, В.

К, Д, В - 3 очка. К, Д, В - 3 очка. Д, Д - 2 очка.

Итого: 8 очков

Комбинация К, Д, Д, В, 10: К, Д, В, 10 - 4 очка К, Д, В, 10 - 4 очка Д, Д, - 2 очка

Итого: 10 очков

Комбинация К, Д, Д, Д, В: К, Д, В - 3 очка, К, Д, В - 3 очка. К, Д, В - 3 очка. Д, Д, Д, - 6 очков Итого: 15 очков

Комбинация К, Д, Д, В, В: К, Д, В - 3 очка. К, Д, В - 3 очка. К, Д, В - 3 очка. К, Д, В - 3 очка. Д, Д, - 2 очка.

В, В, - 2 очка.

Итого 16 очков.

Комбинация 9, 8,8,7,7

8,7

- 2 очка

8,7

- 2 очка

8, 7

- 2 очка

8, 7

-2 очка

7,7

- 2 очка

8, 8

- 2 очка

9, 8, 7

- 3 очка

9, 8, 7

- 3 очка

9, 8, 7

- 3 очка

9, 8, 7

- 3 очка

Итого:

24 очка

Как видите, в крибедже не так просто правильно подсчитать все положенные Вам очки. В этом тоже есть интересный элемент игры. Считать нужно быстро и точно - этому вас научит правило МАГГИНЗ. Дело в том, что если Вы, объявляя свои очки, что-то забудете подсчитать, то Вам соперник имеет право Вас подправить, объявив "Маггинз!" и Ваши очки, которые он увидел, а Вы - нет, запишутся ему.

Вообще-то говоря, не принято при игре с новичками пользоваться этим правилом, поэтому в той программе, которая предлагается Вашему вниманию, есть возможность играть с этим правилом или без. Если Вы играете с ним, то сами должны ввести количество своих очков. Ошибетесь, компьютер сделает Вам "Маггинз!". Если Вы от этого правила откажетесь, то компьютер будет делать все расчеты и за Вас и за себя по всем правилам.

Стратегия в крибедже.

Исследование стратегий в крибедже можно разделить на два этапа. На первом этапе игроки должны определиться со сносом в криб. На первый взгляд, достаточно сосчитать все очки в шести картах и отложить две с тем, чтобы сохранить максимальный счет в оставшихся четырех. Но иногда это приводит к тому, что приходится сносить в криб очки или ценные карты. Если криб принадлежит Вам, в этом нет ничего плохого, но если он принадлежит противнику, лучше ослабить руку и "надуть" криб. В криб противника очень опасно сносить пятерки, семерки, восьмерки и карты, которые могут стать основой для секанса. Лучшими для "надувания" являются очень высокие по достоинству, очень малые и карты "с разбросом", имеющие по достоинству промежуток в две и более карты.

Иногда приходится дробить комбинацию на руке, даже если криб принадлежит Вам. Как правило, лучше сохранить секанс и разбить пару, если это необходимо. Секанс в руке дает хорошие ожидания на поддержку от стартера, после того, как он будет открыт.

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

Десятиочковая карта (десятка или фигура) не очень хороший первый код, но он неплох, если у вас есть пятерка. Когда противник объявит "пятнадцать", Вы поставите "пару".

Гораздо приятнее ход, например семеркой. Если противник поставит "пару", Вы сможете тузом сделать "пятнадцать". Если противник поставит "пятнадцать" с помощью восьмерки, У Вас возможность дать "пару" и открытая и сверху и снизу секансная последовательность.

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

Пример розыгрыша партии.

Рассмотрим в качестве примера розыгрыш одной партии, после чего перейдем непосредственно к нашей программе. В результате сдачи карт образовался следующий расклад:

СДАТЧИК: ПК Б9 Т9 Б8 П7 ЧТ

ПРОТИВНИК БВ П10 Ч8 Т7 Ч5 Т3

Противник сносит в криб 10-3.

Он не может сбросить 8-7 как прекрасную комбинацию (это "пятнадцать" и хорошая основа для "секанса"). Он не может сбросить 5, т.к. велика вероятность, что стартером окажется десятиочковая карта. Выбирая между бубновым валетом и пиковой десяткой, он предпочитает оставить валета, т.к. он может оказаться "его благородием".

У сдатчика уже есть двойной "секанс" 9-9-8-7, поэтому он легко сносит К-Т.

После переворота стартера оказалось, что это пиковая шестерка.

СТАРТЕР: П6

1. Противник заходит восьмеркой (можно было пойти и семеркой). - "Восемь".

2. Сдатчик делает ход семеркой. - "Пятнадцать" - "два очка".

3. Противник кладет семерку. - "Двадцать два" - "пара" - "два очка".

4. Сдатчик играет бубновой девяткой. - "Тридцать одно" - "два очка".

5. Противник открывает новый счет, он ходит валетом - "Десять".

6. Сдатчик может положить восьмерку или девятку, он кладет девятку, полагая, что девятки у противника нет, иначе тот на третьем ходу положил бы ее, делая "секанс", а он сделал "пару". - "Девятнадцать".

7. Противник играет пятеркой. - "Двадцать четыре".

8. У сдатчика восьмерка. Ее класть нельзя, т. к. сумма превысит 31 очко. Он объявляет "Ход!" и противник заносит себе очко.

9. У противника нет карт, счет открывается в третий раз. Ходит сдатчик, выкладывает свою восьмерку и получает очко "за последнюю карту".

Начинается подсчет комбинаций.

пятнадцать "пятнадцать" "секанс" Итого

ПРОТИВНИК В-5 - 2 очка

8-7 - 2 очка

8-7-6-5 - 4 очка - 8 очков

СДАТЧИК

- 2 очка

- 2 очка

- 2 очка

- 2 очка

- 4 очка

- 4 очка

16 очков.

"пятнадцать" 8-7

"пятнадцать" 9-6

"пятнадцать" 9-6

"пара" 9-9

"секанс" 9-8-7-

"секанс" 9-8-7-Итого

Сдатчик открывает криб, но там, к сожалению, нет ни одного очка.

Программа

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

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

На Ваше собственное усмотрение остается вопрос русификации Вашего компьютера. В вашем распоряжении память выше 60000, где вы можете разместить свой шрифт. О том, как это делается, читателям ZX-РЕВЮ, по-видимому, говорить не надо - мы об этом много раз писали. Можете этот адрес и изменить, скорректировав значение CLEAR в строке 9900.

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

10 REM Здесь Вы введете команды, 20 REM необходимые для 30 REM русификации Вашего 40 REM компьютера 50 REM ************************* 60 DEF FN t(x) = (x>9)*10+U<10)*x 70 DEF FN s(x)=10*(x-INT (x)) 80 GO TO 7000

500 REM ********************************* Выбор 2-х карт.

510 PRINT AT 7, 8; FLASH 1; "Я думаю"; AT 0,0;

565 FOR i=1 TO 5

570 FOR j=i+1 TO 6 : REM (I+1)

575 LET y=1: LET sum=0: LET f5=0

580 FOR x=1 TO 6

585 IF x=i OR x=j THEN GO TO 610

590 LET h(y)=c(x): LET i(y)=d(x) : LET h$(y)=c$(x): LET sum= sum+i(y)

595 IF i(y)=5 THEN LET f5=f5+1

600 LET y=y+1

610 NEXT x

620 GO SUB 1000

630 LET s=s+p+f+fl+f5: LET cr=0

640 IF c(j)=c(i) OR c(j)=c(i)+1 THEN LET cr=2

650 IF d(i)+d(j)=15 THEN LET cr=cr+2

652 IF debug THEN PRINT: FOR q=1 TO 4: PRINT h(q);" ";: NEXT q: PRINT , s;" ";cr;" 655 IF dir=1 THEN LET s=s+cr: GO TO 665 660 LET s=s-cr

665 IF s>max THEN LET max=s: LET t(1)=i: LET t(2)=j: IF debug THEN PRINT "x"; 670 NEXT j: NEXT i 675 LET y=0

680 LET x=t(1): GO SUB 5300 685 LET x=t(2): GO SUB 5300 690 PRINT AT 7,8;" ГОТОВ " 695 RETURN

1000 REM ********************************* Расчет руки

1070 LET p=0: LET f=0: LET fl=4 : REM (FL=4)

1110 IF sum=15 THEN LET f=2

1120 FOR x=1 TO c-1

1130 FOR y=x+1 TO c

1140 IF h(x)=h(y) THEN LET p=p+2

1150 IF i(x)+i(y)=15 THEN LET f=f+a

1155 IF c<5 THEN GO TO 1220

1160 LET t=0

1170 FOR z=1 TO c

1180 IF z=x OR z=y THEN GO TO 1200 1190 LET t=i(z)+t 1200 NEXT z

1210 IF t=15 THEN LET f=f+2 1220 NEXT y: NEXT x 1240 FOR x=1 TO x

1250 IF sum=1(x)=15 THEN LET f=f+2

1260 IF h$(x)<>h$(1) THEN LET f1=0: REM (FL=0)

1270 NEXT x

1360 IF c=4 THEN GO TO 1400

1290 IF sum-i(5)=15 THEN LET f=f+2

1300 IF fl=4 AND h$(5)=h$(1) THEN LET fl=5: REM (FL)

1310 IF fl=4 AND crib=2 THEN LET fl=0: REM Флешь в крибе может иметь не менее 5 карт. 1400 LET x=1: LET s=0 1410 IF x>3 THEN RETURN 1420 LET r=1: LET d=1

1430 IF h(x+1)=h(x)+1 THEN LET r=r+1: GO TO 1490

1440 IF h(x+1)>h(x) THEN GO TO 1470

1450 LET d=d+1: IF d<>3 THEN GO TO 1490

1455 IF h(x-1)<>h(x) THEN LET d=4

1460 GO TO 1490

1470 IF r>rlen THEN LET s=s+d*r : IF r=2 THEN LET s=s-d

1460 LET x=x+1: GO TO 1410

1490 LET x=x+1: IF x<c THEN GO TO 1430

1500 IF r>rlen THEN LET s=+d*r: IF r=2 THEN LET s=s-d

1510 RETURN

2000 REM ********************************* Выкладывание карт на стол 2005 LET p=0: LET s=0 2008 LET ct=FN t(c)

2010 IF sum+ct>31 THEN LET s=-1: RETURN

2055 LET n=n+1 : LET t(n)=c

2020 LET t=sum+ct: IF t=15 OR t=31 THEN LET s=2

2022 IF n=1 THEN RETURN

2025 IF ABS (t(n-1)-c)>= n THEN RETURN

2026 REM **Проверка на пару 2030 FOR x=n-1 TO 1 STEP 1

IF t(n)<>l???(x) THEN GO TO 2100 LET p=p+2 NEXT x

IF p=6 THEN LET p=12

IF p=4 THEN LET p=6 2115 LET s=s+p

IF p>0 THEN RETURN

REM **Пар нет, проверим cекансы

IF n<3 THEN RETURN

FOR I=3 TO n

LFT y=1

FOR x=n-I+1 TO n

LET h(y)=t(x): LET У=У+1

NEXT x

GO SUB 2400

LET r=l: REM (R=L)

FOR x=1 TO I-1

IF h(x)+1<>h(x+1) THEN GO TO 2360 NEXT x

IF r>p THEN LET p=r NEXT I LET s=s+p RETURN

REM ******* Подпрограмма сортировки массива h() размерностью l; LET Z=0

FOR x=1 TO l-1

IF h(x)>h(x+1) THEN LET z=h(x): LET h(x)=h(x+1): LET h(x+1)=z NEXT X

IF z<>0 THEN GO TO 2410 RETURN

REM ********* Ход игрока.

PRINT AT 6,9; " ХОД! GO SUB 5500

LET m$="Сумма должна быть меньше 32": GO SUB 5500: GO TO 2720

REM 7 пробелов

RETURN

AT 0,0; n$; AT 0, 0;

RETURN

IF nh = 4 THEN LET hgo=1 LET m$= "Выберите карту" LET c=4: LET x=1: GO SUB 3700 IF b(x)<>0 THEN GO TO 2765 IF sum<22 THEN GO TO 2720 PRINT AT 20, x*4-4; "ход?"

LET m$= "Если нет хода, нажмите ЕНТЕР": GO SUB 5500 LET hgo=x: GO SUB 3700

PRINT AT 20, hgo*4-4; " ": REM 4 пробела IF hgo<>x THEN GO TO 2740 IF sum<safe THEN LET safe=sum RETURN

LET k=x: BEEP .02,15 LET c=a(k): GO SUB 2000 IF s<0 THEN BEEP .2,20: LET nh = nh+1 LET sum=t: LET b(k)=0 LET x = k: LET y=16 GO SUB 5300 LET x=nh: LET y=8 LET x$=r$(c): LET y$=a$(k) GO SUB 5400 LET player=man REM *** Подсчет очков PAPER 4

PRINT AT 6,0; "Всего ";sum; PRINT AT 6, 9; " ";s; " " GO SUB 6000 RETURN

REM *** Ход компьютера IF nc =4 THEN LET cgo=1: LET m$="": GO SUB 5500 IF debug=1 THEN PRINT #1 LET max=-9: LET x1=0 FOR i=1 TO 4

IF d(1)<0 THEN GO TO 3500: REM ход уже сделан LET с=сЦ)

GO SUB 2000: IF s<0 THEN GO TO 3500: REM не по правилам

LET n=n-1: LET i(i)=s: REM Переиграть, счет сохранить

REM специальные правила

IF t+c=31 AND t<safe THEN LET s=s-1

LET s=s+(t>15)-(t=21)+(t>=safe)-2*(t = 5)

IF n>0 THEN GO TO 3400

FOR j=1 TO 4

IF i=j OR d(j)<0 THEN GO TO 3360 IF t<>5 AND t+d(j)=15 THEN LET s=s+2 IF ABS (c-c(j))<2 THEN LET s=s+2 NEXT j GO TO 3450

IF ABS (t(n)-c)>2 THEN GO TO 3450 FOR j=1 TO 4

IF j =i OR d(j) THEN GO TO 3440

IF ABS (t(n)-c(j) )< = 2 THEN IF t+2*d(i)<32 THEN LET s = s+2 NEXT j

LET s=s+(RND)>.6)

IF s>=max THEN LET max=s: LET x1=i IF debug THEN PRINT #1;c;"=":i(i);",";s;" "; NEXT i

IF x1=0 THEN LET cgo=1: PRINT AT 6,9;" ХОД! ": RETURN

LET c=c(x1): LET t=sum+FN t(c)

LET n=n+1: LET t(n)=c

LET sum=t: LET s=i(x1)

LET nc=nc+1: LET d(x1)=-9

LET x=nc: LET y=0

LET x$=r$(c): LET y$=c$(x1)

BEEP .02,12: GO SUB 5400

LET player=zx

GO TO 2900

REM ********************************* Выбор карты PAPER 4

PRINT AT 21,x*4-3; FLASH 1: IF INKEY$<>"" THEN GO TO 3725 IF CODE INKEY$=13 THEN GO TO 3600 IF INKEY$<>" " THEN GO TO 3730 PRINT AT 21, x*4-3;" "; LET x=x+1: IF x>c THEN LET x=1 GO TO 3720

PRINT AT 21,x*4-3;" "; RETURN

REM ********************************* Очередность ходов LET nh=0: LET nc=0 LET safe=31 GO SUB 4400

IF dir<>zx THEN GO TO 4200 REM ИГРОК

IF done=1 THEN RETURN

GO SUB 2700

IF win>0 THEN RETURN

IF sum=31 THEN GO SUB 4300: GO TO 4200

IF cgo=0 THEN GO TO 4200

IF hgo = 0 THEN GO TO 4100

LET s=1: GO SUB 2900: IF win>0 THEN RETURN

GO SUB 4300

REM Компьютер

IF done= 1 THEN RETURN

GO SUB 3200

IF win>0 THEN RETURN

IF sum=31 THEN GO SUB 4300: GO TO 4100

IF hgo=0 THEN GO TO 4100

IF cgo=0 THEN GO TO 4200

LET s=1: GO SUB 2900: IF win>0 THEN RETURN GO SUB 4300 GO TO 4100

REM ** Переворот карты

LET y=0

FOR x=1 TO nc

GO SUB 5350

NEXT x

LET y=8

FOR x=1 TO nh

GO SUB 5350

NEXT x

REM **Следующий раунд

LET done=0: LET s=0

LET sum=0: LET n=0

IF nh=4 AND nc=4 THEN LET done=1

LET cgo=0: LET hgo=1

GO SUB 2900: RETURN

REM ********************************* Открытие и подсчет очков

PRINT #1;AT 0,0;n$;

LET c=5: LET rlen=2

LET x=18: GO SUB 5600

IF dir=zx THEN GO TO 4600

FOR x=1 TO 5

LET h(x)=c(x): LET h$(x)=c$(x) NEXT x

LET up=1: LET c=4: GO SUB 5100

LET m$="Считаю свои очки":GO SUB 5500

LET player=zx: GO SUB 4700

IF win THEN RETURN

IF dir=zx THEN GO TO 4660

LET m$="Считаю Ваши очки":GO SUB 5500

FOR x=1 TO 5

LET h(x)=a(x): LET h$(x)=a$(x) NEXT x

LET c=4: LET y=11 GO SUB 5000

LET player=man: GO SUB 4700

IF dir=zx THEN GO TO 4540

LET m$="Готовы вскрыть криб? ": GO SUB 5500

PAUSE 0

LET x=18: GO SUB 5600 GO SUB 5200

LET m$="Считаю очки в крибе": GO SUB 5500

GO SUB 4700

RETURN

REM ********************************* Подсчет очков LET nob=0: LET sum=0 FOR x=1 TO 5

IF x<5 AND h(x)=1 AND h$(x)=e$(5) THEN LET nob=1 LET i(x)=FN t(h(x)) LET sum=sum+i(x) NEXT x

LET l=5: GO SUB 2400 LET с=5: GO SUB 1000 PRINT

LET m$="": GO SUB 5500 IF player=zx OR NOT mug THEN GO TO 4820 INPUT "Введите свой счет. " ;ss IF ss<0 OR ss>50 THEN GO ТO 4780

IF ss=s+p+f+fl+nob THEN LET m$='^ согласен": LET s=ss: GO TO 4880 LET m$=STR$ ss+" - неверно. Я получаю очки!" LET mug=2: LET player=zx PAPER 4

IF f>0 THEN PRINT "15-ть -";f;" ";

IF p>0 THEN PRINT "пары-"^; PRINT

IF fl>0 THEN PRINT "Флешь-";П;" "; IF s>0 THEN PRINT "секанс-";s; PRINT

IF nob=1 THEN PRINT "очко - его благородие"

LET s=s+p+f+fl+nob

PRINT "Всего = ";s;

IF mug = 2 THEN PRINT " - МОИ!"

GO SUB 5500: GO SUB 6000

IF mug=2 THEN LET player=man: LET mug=l: PAUSE 100 RETURN

REM ********************************* Снятие колоды - стартер выкладывается пятой

картой в руке LET y=8: GO SUB 5350 LET m$="Теперь я снимаю колоду"

IF player=man THEN GO SUB 5500: PAUSE 50: GO TO 4930

LET m$="Снимите колоду - любой клавишей": GO SUB 5500

IF INKEY$="" THEN GO TO 4925

LET r=RND*40+12.5

LET k=INT p(r)

IF k=s THEN GO TO 4930

LET k$=s$(FN s(p(r)))

LET x$=r$(k): LET y$=k$

LET x=x-.25: LET y=7

GO SUB 5400

LET a(5)=k: LET a$(5)=k$ LET c(5)=k: LET c$(5)=k$ LET e(5)=k; LET e$(5)=k$ RETURN

LET e(5)=k: LET e$(5)=k$ REM выкладка вашей руки FOR x=1 TO c

LET x$=r$U(x)): LET y$=a$(x) GO SUB 5400 NEXT x: RETURN

REM выкладка руки компьютера

LET y=0

FOR x=1 TO с

LET x$=r$(c(x)): LET y$=c$(x) GO SUB 5400 NEXT x: RETURN REM выкладка криба

LET crib=1: LET y=11: IF dir=zx THEN LET y=0 FOR x=1 TO 5

LET h(x)=e(x): LET h$(x)=e$(x) LET x$=r$(e(x)): LET y$=e$(x) IF x<5 THEN GO SUB 5400 NEXT x: RETURN REM стирание карты PAPER 4: GO TO 5370 REM закрытая карта PAPER 2

LET x$=" ": LET y$=x$: GO TO 5420 REM открытая карта

PAPER 7: IF y$=s$(1) OR y$=s$(3) THEN INK 2 LET x1=4*x-4

PRINT AT y,xl;x$;" ";AT y+1,xl;y$;" "

PRINT AT y+2,x1;" ";AT y+3,xl;" ";y$

PRINT AT y+4,x1;" ";x$

PAPER 4: INK 0: RETURN

REM печать сообщений

PRINT #1;AT l,0;n$;AT 1,0; m$

RETURN

REM Очистка экрана

PAPER 4: PRINT AT 0,0; FOR y=1 TO 22: PRINT TAB x: NEXT y PRINT AT 0,0: RETURN REM Изображение доски для крибеджа PRINT AT 0,25; PAPER 6; "ВЫСП" :REM 3 пробела PRINT TAB 25; PAPER 6;" "

FOR y=1 TO 6 5730 PRINT TAB 25; PRINT TAB 25; PAPER 6;" A A " :

REM UDG-символы.

REM: 7 пробелов

REM UDG-символы.

PRINT TAB 25; PAPER 6; " B B " NEXT y

PRINT TAB 25; PAPER 6; " PRINT n$; PAPER 6 PRINT AT 2,28;"E";AT 19,28;"E" LET т$="КРИБЕДЖ" FOR x=1 TO 7 PRINT AT 2*x+1,28;m$(x) NEXT x

PRINT AT 1,0;: PAPER 4: RETURN REM корректировка счета BEEP .2,10

IF s=0 THEN RETURN: REM вход в демонстрационную подпрограмму

LET ss=v(player)

IF ss>0 THEN GO SUB 6400

LET v(player)=s(player)

LET s(player)=s(player)+s

IF s(player)>120 THEN LET win=player: GO TO 6085 LET ss=s(player) GO SUB 6400

PRINT PAPER 6; AT 20,25;s(man)

PRINT PAPER 6; AT 20,31-(s(zx)>99)-(s(zx)>9):s(zx)

RETURN

LET x=25: LET v=1

IF player=zx THEN LET x=31: LET v=3

IF ss>60 THEN LET ss=ss-60

IF ss<31 THEN LET ss=31-ss: GO TO 6440

LET ss=ss-30: LET x=27: LET v=3: IF player=zx THEN LET x=29: LET v=1

LET y=1+(ss+INT ((ss-1)/5))/2

IF y<>INT y THEN LET y=INT y+1: LET v=v+1

PRINT OVER 1; PAPER 6; AT y,x;v$(v)

RETURN

REM ********************************* Инициализация

RANDOMIZE: LET debug=0

BORDER 4: PAPER 4: INK 0: CLS

LET x=0: LET y=0: LET z=0: LET i=0: LET j=0

DIM h(8): DIM h$(6): DIM i(6)

DIM a(6): DIM a$(6): DIM b(6): REM рука игрока

DIM c(6): DIM c$(6): DIM d(6): REM рука компьютера

DIM e(6): DIM e$(6): REM рука криба

DIM g(2): DIM s(2): DIM v(2): DIM v$(5): REM счет

DIM p(52): DIM t (12): REM колода

INPUT "Добро пожаловать!" "Вам нужны инструкции? "; i$

IF i$(1):"y" OR i$(1)="Y" THEN GO SUB 9000: GO TO 7080

PRINT #1; "Пожалуйста немного подождите. "

FOR x=1 TO 13: READ k$

FOR y=0 TO 7: READ z

POKE USR k$+y,z

NEXT y: NEXT x

LET zx=1: LET man=2

REM ***Графика пользователя

LET v$= LET s$= LET r$= LET n$= LET o$-

GFJIK" HCDS"

T23456739RBДК": REM здесь R - символ UDG-графики.

": REM 32 пробела

: REM 7 пробелов PAPER 6; " A A " REM UDG-символы. REM UDG-символы.

Нажмите любую клавишу"

IF i$="y" THEN GO SUB 9050

REM: подготовка колоды

LET z=0

FOR x=1 TO 13

FOR y=. 1 TO .4 STEP .1

LET z=z+l: LET p(z)=x+y

NEXT y 7380 NEXT x

LET g(man)=0: LET g(zx)=0

REM ******************************** Начало новой игры LET mug=0

INPUT "Играем с правилом МАГИНЗ? ";m$: IF m$="y" OR m$="Y" THEN LET mug=1 GO SUB 5700

PRINT #1;AT 0,0; "Младшая карта сдает. " LET s(zx)=0: LET s(man)=0: LET v(1)=0: LET v(2)=0 LET dir=zx: LET s= 0: LET player=zx: LET win=0 LET x=2: GO SUB 4900: LET s=k PAUSE 50

LET player=man: LET x=5: GO SUB 4900

IF s<k THEN LET dir=man

PAUSE 50: LET x=23: GO SUB 5600

REM ************************** Тасование колоды и сдача LET m$=" Я сдаю"

IF dir=man THEN LET m$="Вы сдаете" PRINT #0;АТ 0, 0; m$; n$ LET m$= "Тасую колоду" GO SUB 5500 FOR x=1 TO 51

LET y=INT (RND*(53-x))+x: LET z=p(x); LET p(x)=p(y): LET p(y)=z NEXT x

LET m$="": GO SUB 5500 REM **Сортировка карт FOR y=1 TO 7 STEP 6 LET z=0

FOR x=y TO y+4

IF p(x)>p(x+1) THEN LET z=x: LET j=p(x): LET p(x)=p(z+1):LET p(x+1)=j NEXT x: IF z>0 THEN GO TO 7655 NEXT y

REM ** сдача

LET i=0: LET j=16

IF dir=zx THEN LET i=16: LET j=0

FOR x=1 TO 6

LET y=1: GO SUB 5350

LET c(x)=INT p(x): LET c$(x)=s$(FN s(p(x))) LET d(x)=FN t(c(x)) LET y=j: GO SUB 5350

LET a(x)=INT p(x+6): LET a$(x)=s*(FN s(p(x+6))) LET b(x)=1 NEXT x

REM********************************* Снос карт в криб LET c=6: LET y=16: GO SUB 5000 IF debug THEN GO SUB 5100

LET m$=" Подождите, пока я снесу 2 карты.": GO SUB 5500 LET c=4: LET rlen=l: LET crib=0 LET max=-99: LET t(1)=1: LET t(2)=6 GO SUB 500

LET m$="Выберите 2 карты": GO SUB 5500

IF i$="y" THEN GO SUB 9300: GO SUB 9400

LET c=6: LET y=16: LET x=1

GO SUB 3700: GO SUB 5350

LET t(3)=x: GO SUB 3700

LET x$=r$(a(x)): LET y$=a$(x)

IF x=t(3) THEN GO SUB 5350: GO TO 7860

LET t(4)=x: GO SUB 5350

REM** Закрытие рук

FOR x=1 TO 2

LET e(x)=c(t(x)): LET e$(x)=c$(t(x))

7910 LET c(t(x))=0

7915 LET e(x+2)=a(t(x+2)): LET e$(x+2)=a$(t(x+2))

7920 LET a(t(x+2))=0

7925 NEXT x

7930 LET y=1: LET z=1

7935 FOR x=1 TO 6

7940 IF c(x)=0 THEN GO TO 7955

7945 LET c(y)=c(x): LET d(y)=d(x)

7950 LET c$(y)=c$(x): LET y=y+1

7955 IF a(x)=0 THEN GO TO 7970

7960 LET a(z)=a(x): LET a$(z)=a$(x) : LET z=z+1

7970 NEXT x

7980 LET x=24: GO SUB 5600 7985 IF i$="y" THEN GO SUB 9450 7990 PRINT #0; AT 0,0; n$

7999 REM **** Ход картой

8000 LET s=0: LET player=dir 8010 LET x=6: GO SUB 4900

8020 IF k=11 THEN LET m$= "2 очка за его челядь": GO SUB 5500: LET s=2: GO SUB 6000: PAUSE 40

8030 LET c=4

8040 LET y=16: GO SUB 5000

8050 GO SUB 4000

8060 IF win THEN GO TO 8300

8065 IF i$="y" THEN GO SUB 9200

8070 GO SUB 4500

8080 IF win THEN GO TO 8200

8100 LET т$="Готовы к следующему ходу ?": GO SUB 5500

8105 IF INKEY$="" THEN GO TO 8105

8110 LET dir = dir+1: IF dir>2 THEN LET dir=1

8120 LET x=25: GO SUB 5600

8130 IF i$<>"y" THEN GO TO 7500

8140 INPUT "Продолжать инструкции? " ; i$

8150 IF i$="Y" THEN LET i$="y"

8160 GO TO 7500

8200 REM ***Победитель

8210 LET m$= "Примите поздравления с победой!"

8220 IF win=zx THEN LET т$="Вам не повезло - моя победа!"

8230 PRINT #1;AT 0,0;m$

8240 PRINT PAPER 6; AT 18,28; FLASH 1;v$(5)

8250 FOR x=1 TO 60 STEP 2: BEEP .02,x: NEXT x

8260 LET g(player)=g(player)+1 8265 LET m$=o$: GO SUB 5500

8270 PAUSE 0

8280 LET x=23: GO SUB 5600 8290 PRINT AT 4,8; "Счет: ": AT 5,7 8300 PRINT AT 7,8; "Вы ";g(man) 8310 PRINT AT 9,8; "Комп."^^) 8320 INPUT "Сыграем еще? "; m$ 8330 IF m$="n" OR m$="N" THEN STOP 8380 GO TO 7400

9000 REM ******************** Инструкции 9005 LET i$="y"

9010 CLS : PRINT " Крибедж - игра для двух игроков. Каждый получает до 6 карт, из которых должен 2 снести, образуя третью руку, называемую крибом. Криб считается в пользу сдатчика. Из колоды вскрывается карта, принадлежащая одновременно всем трем рукам - стартер." 9020 PRINT ' " Тузы оцениваются в одно очко. Все фигуры - в 10 очков."

9030 PRINT : PRINT " Во время игры Вы увидите, как за некоторые комбинации карт начисляются очки." 9040 RETURN

9060 LET m$=o$: GO SUB 5500

9065 PAUSE 0

9070 CLS: GO SUB 5700

9075 PRINT " Полученные очки отмечаются на игровой доске перемещением колышков. Победит тот, кто первым наберет 121 очко (два жды обойдет доску)." 9090 LET m$="Для демонстрации нажмите пробел." : GO SUB 5500 9095 PAUSE 0: IF INKEY$<>" " THEN GO TO 9175 9100 LET s(man)=0: LET s(zx)=0 9105 LET m$="Посмотрим мои очки": GO SUB 5500 911O FOR i=zx TO man 9115 LET player=i: LET win=0 9120 LET s(player)=0: LET v(player)=0 9130 LET s=INT (RND*10): GO SUB 6015 9140 IF win=0 THEN GO TO 9130 9145 PRINT PAPER 6; AT 18,28;v$(5) 9150 LET m$="Посмотрим Ваши очки":GO SUB 5500 9155 NEXT i

9160 LET m$ "Для повтора нажмите ПРОБЕЛ": GO SUB 5500: GO TO 9095 9180 PRINT AT 9,0;

"Когда Вам надо выбрать " ' "карту, перемещайте ука-" ' "затель клавишей ПРОБЕЛ " ' "и делайте свой выбор - " ' "клавишей ЕНТЕР. "

9190 PRINT AT 9,0;

"Если Вы будете играть " ' "с правилом МАГГИНЗ, то " ' "должны сами считать " ' "свои очки. Я отберу их," ' "если Вы ошибетесь. " 9195 RETURN

9200 LET x=25: GO SUB 5600 9210 PRINT

"Каждый сам считает свои" ' "очки "

9220 PRINT

"Затем сдававший счита- " ' ет криб. "

9240 GO SUB 9305: GO SUB 9400 9245 LET m$=o$: GO SUB 5500 9250 PAUSE 0: LET x=25: GO SUB 5600 9255 LET x=6: LET y=8: GO SUB 5350

9260 LET x=x-.25: LET y=7: LET x$-r$(c(5)): LET y$=c$(5)

9270 GO SUB 5400

9280 RETURN

9300 PRINT AT 0,0;

9305 PRINT

"Очки начисляется за " ' "комбинации: " '

9310 PRINT "За 15 баллов......2 очка"

9320 PRINT "За пару........... 2 очка"

9330 PRINT "За три........... 6 очков"

9310 PRINT "За четыре.......12 очков"

9350 PRINT "За секанс..очко за карту" 9360 RETURN

9400 PRINT "Флешь из четырех..4 очка" 9410 PRINT "Флешь из пяти....5 очков" 9420 PRINT "Валет масти стартера.... "

PRINT "................. 1 очко"

RETURN

PRINT AT 0,0; "Мы ходим по очереди, "пока сумма очков не "приблизится к 31. PRINT

"Набравший 31 балл, по-"лучает 2 очка. Ближай-"ший к 31 получает очко. PRINT

"Комбинации на руках да-"ют очки: GO SUB 9320 PRINT

"Если вам нечем ходить, " "выбирайте пустую карту " LET m$=o$: GO SUB 5500 PAUSE 0: LET x=25: GO SUB 5600 RETURN DATA "a"

DATA 0,195,195,0,0,195,195,0 DATA "b"

DATA 0,195,195,0,0, DATA "c"

DATA 56,56,254,254, DATA "d"

DATA 16,56,124,254, DATA "e"

DATA 0,24,24,0,0,0, DATA "f"

DATA 240,255,240,0, DATA "g"

DATA 0,0,0,0,240,295,240,0 DATA "h"

DATA 66,238,254,124,124,56,16,16 DATA "i"

DATA 15,255,15,0,0,0,0,0 DATA "j"

DATA 0,0,0,0,15,255,15 DATA "k"

DATA 28,28,28,28,8,8,8 DATA "s"

DATA 16,56,124,254,254 DATA "r"

DATA 0,76,210,82,82,82, CLEAR 59999

PAPER 7: BORDER 7: INK 0: CLS: LIST

9430 9440 9450

9460

9470

9510 9520

9530 9540 9590 9600 9610 9620 9630 9640 9650 9660 9670 9680 9690 9700 9710 9720 9730 974O 9750 9760 977O 9760 9790 9800 9810 9820 9B30 9840 9850 9900 9999

0,0,0

214,16,1 6,56 254,124,56,16 0,0 0,0,0,0

0 8

146,16,56 76,0

Комментарий

Графика пользователя используется в строках: 5730, 5740, 5750, 5775,7310,7315 и

7320.

Стратегия работы программы состоит из двух фаз. Первая фаза - когда компьютер решает, какие же 2 карты ему следует снести в криб. Здесь программа просматривает все комбинации из шести карт по 4 и каждый раз рассчитывает силу руки. Оценивается также сила двух сносимых в криб карт. Этих комбинаций всего 15 и они занимают около 1 секунды. Всего расчет оптимального сноса занимает порядка 20 секунд. Это самая медленная часть программы, но если Вы попробуете с ней сыграть, то увидите, что это не намного дольше, чем ожидание решения от живого партнера, так что здесь со скоростью работы проблемы особой нет.

Вторая фаза - розыгрыш рук и ведение счета. Здесь программа рассчитывает итог, который может быть получен при том или ином ходе и применяет некоторый эвристический подход, который в определенной степени может давать и непредсказуемые результаты. Те, кому интересно посмотреть, как это происходит, могут в строке 7005 задать для переменной debug значение LET debug=1.

Несмотря на то, что программа полностью написана на БЕЙСИКе, в ней многое сделано для структурирования. Наиболее часто использующиеся подпрограммы, вынесены в начало для минимизации времени доступа к ним. Ниже мы рассмотрим назначение основных подпрограмм.

Данные также структурированы.

Колода представлена массивом из пятидесяти двух чисел - p(). Целая часть каждого числа выражает собой достоинство карты (1...13), а дробная часть - ее масть (0.1...0.4). Массив организуется случайный образом во время тасования колоды.

Другие важнейшие массивы: Партнер:

a()- достоинство карт; а$()-масти карт; Ь()-вспомогательный массив.

Компьютер:

c() - достоинство карт;

c$() - масти карт;

d()- вспомогательный массив.

Криб:

e()- достоинство карт; е$()-масти карт;

Вычислительные массивы: h()- достоинство карт: И$()-масти карт; iQ-вспомогательный массив.

tQ-массив, содержащий карты, выложенные на стол во время ходов. Карты стола. s() -счет.

Все вычисления, связанные со счетом, производятся после копирования массивов того или иного игрока в вычислительные массивы. Использование прочих переменных мы рассмотрим в составе основных подпрограмм.

500. Подпрограмма рассматривает все возможные комбинации 4-х карт из шести с целью определения что же сносить в криб. Сами расчеты делает другая подпрограмма (1000), к которой происходит обращение по мере необходимости.

На входе в подпрограмму задаются массивы, описывающие руку компьютера - c(), c$(),d().

На выходе она выдает t(1) и t(2) - позиции тех карт, которые должны быть снесены в

криб.

1000. Подпрограмма рассчитывает очки, имеющиеся на руке. Она вызывается не только при расчете сноса, но и при проведении расчетов после открытия карт. Параметр c указывает сколько карт принимаются в расчет. При расчете сноса с=4, при подсчете итогов c=5 (включая карту-стартер).

Другие переменные:

rlen - содержит минимальную длину секанса. sum - суммарная сила карт руки.

h(),i(),h$0 - временно содержат данные той руки, для которой идет подсчет очков. crib=1, если расчет идет для криба (флаг криба). На выходе эта подпрограмма выдает: p - очки за "пары";

f - очки за комбинации "пятнадцать"; s - очки за секансы; fl - очки за флеши.

2000. Подпрограмма переносит карту из массива игрока в массив стола (делается ход, если он законный). Изменяется сила руки игрока и общий счет. На входе подпрограмма получает:

c - номер карты, которой делается ход; sum - текущая сила руки; t() - массив карт уже лежащих на столе. n - количество карт, лежащих на столе. На выходе подпрограмма выдает:

s - текущий счет (если сделан был незаконный ход, то этот параметр выдается отрицательным);

t() и n - измененные значения.

2400. Подпрограмма выполняет сортировку поступившего массива h(), имеющего длину l (буква L).

2700. Подпрограмма обслуживает ход игрока. Вход:

nh количество карт сыгранных с этой руки;

a(), a$ () - карты, имеющиеся на руке;

b() - содержит нули для карт, которые уже сыграны.

Выход:

hgo=1, если ни один ход не может быть сделан; win=man, если игрок достиг 121 очка и победил.

2900. Подсчитывает текущую сумму очков, корректирует счет, если необходимо. Вход:

sum - текущая сумма очков; s - счет;

player - указывает на игрока. player=zx - компьютер; player=man - человек. Выход: нет.

3200. Рассчитывает оптимальный ход с руки компьютера. Перебираются и оцениваются все возможные ходы. Вход:

nc - количество карт сыгранных с этой руки; с(), c$ - карты, имеющиеся на руке; d () - содержит нули для карт, которые уже сыграны. Выход:

cgo=1 , если ни один ход не может быть сделан;

3700. подпрограмма обеспечивает игроку выбор карты для хода путем перемещения указателя. SPACE - перемещение, ENTER - ход. Вход:

с - количество карт на руке.

Выход:

x - номер избранной карты.

4000. Подпрограмма последовательно вызывает подпрограммы, отвечавшие за ход игрока и ход компьютера, Подпрограмма в строке 3400 используется для того, чтобы перевернуть карты на столе, когда текущий счет дойдет до 31. Вызов подпрограммы 4400 сбрасывает текущий счет на ноль. Вход:

dir - содержит сведения о том, кто сдавал карты. dir=zx - компьютер; dir=man - человек. Выход:

done=1,если ход сделав; win - указывает на победителя; win=zx - компьютер; win=man - человек.

4500. Изображает на экране раскрытые карты игроков и результат подсчета очков.

4700. Печатает счет для руки. Если в силе правило "МАГГИНЗ", предлагает игроку самому ввести свой результат. Вход:

mug=1, если действует "МАГГИНЗ"; h(),h$() - карты анализируемой руки.

4900. Подпрограмма выполняет "срезку" колоды для вскрытия стартера. Вход:

x - позиция указателя в колоде. Выход:

k - достоинство стартера; k$ - его масть.

5000. Изображает на экране карты игрока. y - вертикальная позиция на экране; c - количество карт в руке.

5100. изображает на экране карты компьютера. c - количество карт в руке.

up= 1, если карты следует положить в открытом виде.

5200. Изображает на экране карты криба и копирует их из e() в h() для подготовки к расчетам.

5300. Стирает карты с экрана. x - позиция карты от 1 до 6. y - позиция экрана по вертикали.

5350. Печатает карту, изображенную рубашкой вверх (в темную). x - позиция карты от 1 до 6. y - позиция экрана по вертикали.

5400. Печатает открытую карту. x - позиция карты от 1 до 6 y - позиция экрана по вертикали.

x$ - достоинство карты; y$ - масть.

5500. Печатает в нижней части экрана текст сообщения из переменной m$.

5600. Очищает левую часть экрана.

5700. Рисует доску для крибеджа.

6000. Корректирует счет на доске для крибеджа.

7000. Инициализация программы. Объявление массивов, задание графики пользователя, составление колоды.

7400. Начало игры. Сбрасывается счет, вытягиванием младшей карты определяется, кто будет сдавать первый.

7500. Тасуется и сдается колода.

7800. Сброс карт, вызывается подпрограмма 500 для определения карт сноса. Дважды вызывается подпрограмма 3700 для сброса карт игрока. Массивы рук перерабатываются для удаления образовавшихся зазоров.

8000. Начало розыгрыша раунда. Срезается колода вызовом 4900. Затем игроки по очереди ходят (4000) и карты открываются для подсчета очков (4500).

8200. Определяется победитель. Изменяется счет в геймах, начинается новый гейм.

9000, Печать инструкции по игре. Переменная i$ определяет, давать инструкции или

нет.

9600. Данные по UDG-графике.

9990. Инициализация цвета, установка верхней границы области БЕЙСИКа оператором CLEAR.

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




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Анонс - В следующем номере ожидаются.
Криминал - Самые громкие хакерские скандалы последних двух лет.
Проект года - презентация версии игры Robo от KT-soft/ETC.
посмеёмся? - Дневник юзера BBS.
CREDITS - Кто трудился над номером...

В этот день...   21 ноября