ZX-Ревю 1993 №3-4 1992 г.

Cash-flow - игровая программа для самостоятельного набора начинающими.


CASH-FLOW

Игра имитирует игровой автомат. Монета падает вниз, ударяясь о неподвижные штыри. Таким образом, путь монеты в значительной мере случаен. В нижней части игрового поля монета попадает в один из шести монетоприемников, в каждом из которых уже может находиться до четырех монет. Ваша задача - довести их количество до пяти. Тогда монеты будут выданы Вам в качестве приза (разумеется, при наличии у вашего "Спектрума" соответствующей приставки для выдачи "наличных"). Выигранные монеты можно использовать для продолжения игры. Результат игры в основном зависит от момента, когда Вы бросаете монету. В то же время, у Вас есть возможность подтолкнуть падающую монету в любом направлении, но только один раз и только в верхней части доски со штырями. Монетоприемник N 4 "проглатывает" все монеты, поэтому его следует избегать всеми силами. Всего на игру Вам дается 6 монет по 10 пенсов каждая. Постарайтесь как можно раньше получить выигрыш и продолжать игру как можно дольше.

1 GO TO 10

2 CLEAR 64599:LOAD "CHR" CODE 64600

3 POKE 23606,88:POKE 23607,251

4 GO SUB 3000:RUN

5 SAVE "CASH-FLOW"LINE 2:SAVE "CHR" CODE 64600,768:STOP 10 POKE 23658,8:BORDER 5:PAPER 6:INK 1

15 LET OW=0

20 LET A$="AB":LET B$="CD" 25 GO SUB 2500 30 CLS

35 FOR N=0 TO 21:DIM I$(26):PRINT PAPER 6;AT N,3;I$:DIM J$(2):PRINT PAPER 5;AT N,0;J$;AT

N,30;J$:NEXT N 40 FOR N=0 TO 192 STEP 32

45 CIRCLE 32+N,77,2:BEEP .05,10:CIRCLE 32+N,109,2:BEEP .05,20:CIRCLE 32+N,141,2:BEEP .05,30 50 NEXT N

55 FOR N=0 TO 160 STEP 32

60 CIRCLE 48+N,93,2:BEEP .05,40:CIRCLE 48+N,125,2:BEEP .05,20 65 NEXT N

70 DEF FN T()=INT ((65536*PEEK 23674+256*PEEK 23673+PEEK 23672)/50) 72 LET T1=FN T() 75 FOR N=0 TO 21

80 PRINT INK 4;AT N,2;"F";AT N,29;"E"

85 IF N>12 THEN PRINT INK 2;AT N,3;"EF EF EF EF EF EF EF" 90 NEXT N

95 PLOT INK 3;24,159:DRAW INK 3;207,0 100 LET W=0:LET L=0 120 GO TO 1000

130 PRINT AT X,Y;" ";AT X+1,Y;" "

135 IF INKEY$="Q" AND L>40 THEN LET NW=W-L:GO TO 2000

140 LET K=2*COS (PI*(INT (RND *2)))

150 LET X=X+2

151 IF I=0 AND M<4 AND Y<=25 AND INKEY$="P" THEN BEEP .05,32:LET Y=Y+2:LET I=1:GO TO 160

152 IF I=0 OR M<4 AND Y>=5 AND INKEY$="O" THEN BEEP .05,32:LET Y=Y-2:LET I=1:GO TO 160

154 IF K>0 AND Y=27 THEN LET Y=Y-K:GO TO 160

155 IF K>0 AND Y<26 THEN LET Y=Y+K

157 IF K<0 AND Y=3 THEN LET Y=Y-K:GO TO 160

158 IF K<0 AND Y>4 THEN LET Y=Y+K 160 PRINT INK 1;AT X,Y;A$;AT X+1,Y;B$

165 BEEP .05,20

166 FOR N=1 TO 100:NEXT N 170 LET M=M+1

180 IF M=6 THEN GO TO 500 190 GO TO 130

500 IF Y=5 THEN LET G=A:LET A=A+1:GO TO 530

505 IF Y=9 THEN LET G=B:LET B=B+1:GO TO 530

510 IF Y=13 THEN LET G=C:LET C=C+1:GO TO 530

515 IF Y=17 THEN LET G=0:GO TO 530

520 IF Y=21 THEN LET G=E:LET E=E+1:GO TO 530

525 IF Y=25 THEN LET G=F:LET F=F+1

530 IF G=4 THEN GO TO 600

540 FOR N=0 TO 3-G:PRINT INK 1;AT 12+2*N,Y;" ";AT 13+2*N,Y;" ";AT 14+2*N,Y;A$;AT

15+2*N,Y;B$ 550 PAUSE 20 560 NEXT N

565 IF Y=17 THEN PRINT AT 20,17;" ";AT 21,17;" ":BEEP 1,0

568 IF CR<=0 THEN GO TO 2000

570 PRINT INK 2;FLASH 1;AT 1,20;"НАЖМИТЕ A"

575 IF INKEY$="A" THEN PRINT INK 2;FLASH 1;AT 1,28;"Z":GO TO 1100

576 LET T=FN T():IF T>T1+240 THEN GO TO 1990

578 IF INKEY$="Q" AND L>40 THEN LET NW=W-L:GO TO 2000 580 GO TO 575 600 BEEP 1,40 604 FOR N=0 TO 4

606 LET W=W+10:LET NW=W-L:LET CR=NW+60

608 PRINT AT 12+2*N,Y;" ";AT 13+2*N,Y;" ":BEEP .1,30:PAUSE 20

610 PRINT AT 0,15;" "

612 PRINT BRIGHT 1;FLASH 1;AT 0,15;CR

615 NEXT N

618 IF CR<=0 THEN GO TO 2000

620 IF Y=5 THEN LET A=0

621 IF Y=9 THEN LET B=0

622 IF Y=13 THEN LET C=0

624 IF Y=21 THEN LET E=0

625 IF Y=25 THEN LET F=0

630 PRINT INK 2;FLASH 1;AT 1,20;"НАЖМИТЕ A"

635 IF INKEY$="A" THEN PRINT INK 2;FLASH 1;AT 1,28;"Z":GO TO 1100

638 IF INKEY$="Q" AND L>40 THEN GO TO 2000 640 GO TO 635

1000

LET 2*

A=INT (RND *3):FOR N=1 TO N,5;A$:BEEP .05,0:NEXT N

A:

IF

A<>0

THEN

PRINT

INK

1

AT

23-

2*N

,5;BJ

В;AT 22-

1010

LET 2*

B=INT (RND *3):FOR N=1 TO N,9;A$:BEEP .05,10:NEXT N

B:

IF

B<>0

THEN

PRINT

INK

1

AT

23-

2*N

,9;BJ

B;AT 22-

1020

LET 2*

C=INT (RND *5):FOR N=1 TO N,13;A$:BEEP .05,20:NEXT N

C:

IF

C<>0

THEN

PRINT

INK

1

AT

23-

2*N

,13;

3$;AT 22

1040

LET 2*

E=INT (RND *5):FOR N=1 TO N,21;A$:BEEP .05,30:NEXT N

E:

IF

E<>0

THEN

PRINT

INK

1

AT

23-

2*N

,21;

3$;AT 22

1050

LET

F=INT (RND *3):FOR N=1 TO

F:

IF

F<>0

THEN

PRINT

INK

1

AT

23-

2*N

,25;

3$;AT 22

2*N,25;A$:BEEP .05,30:NEXT N

1055 LET CR=60:PRINT BRIGHT 1;FLASH 1;AT 0,15;CR

1060 PRINT INK 2;FLASH 1;AT 1,20;"НАЖМИТЕ A"

1065 IF INKEY$="A" THEN PRINT INK 2;FLASH 1;AT 1,28;"Z":GO TO 1100

1068 IF INKEY$="Q" AND L>40 THEN GO TO 2000

1070 GO TO 1065

1100 LET L=L+10:LET NW=W-L:LET CR=NW+60:LET I=0

1101 PRINT AT 0,15;" "

1102 PRINT BRIGHT 1;FLASH 1;AT 0,15;CR

1104 PRINT INK 1;AT 0,3;A$;AT 1,3;B$:PAUSE 6

1105 FOR N=3 TO 27

1110 PRINT AT 0,N;" ";AT 1,N;" "

1115 IF N=27 AND CR<=0 THEN GO TO 2000

IF N=27 THEN GO TO 1060

PRINT INK 1;AT 0,N+1;A$;AT 1,N+1;B$

PAUSE 6

IF INKEY$="Z" AND INT (N/2)<>INT ((N-1)/2) THEN LET Y=N+1:PRINT AT 1,20;" ":GO

TO 1200 NEXT N

LET X=0:LET M=0

PRINT AT X,Y;" ";AT X+1,Y;" "

PRINT AT 0,15;" "

PRINT BRIGHT 1;FLASH 1;AT 0,15;CR

LET X=X+2:LET M=M+1

PRINT INK 1;AT X,Y;A$;AT X+1,Y;B$

BEEP .05,20:FOR N=1 TO 50:NEXT N

IF INT ((Y+1)/4)=INT ((Y+3)/4) THEN GO TO 1300

IF M=2 THEN GO TO 1300

GO TO 1210

PRINT AT X,Y;" ";AT X+1,Y;" " PLOT INK 3;24,159:DRAW INK 3;207,0 GO TO 135

PRINT AT 0,15;" ";AT 1,20;" "

PRINT INK 1;FLASH 1;AT 1,8;" ИГРА ОКОНЧЕНА " FOR N=0 TO 400:NEXT N PRINT AT 0,15;" ";AT 1,20;" "

LET OW=OW+NW

IF OW>=0 AND INT ((OW-10)/100)=INT (OW/100) THEN PRINT INK 7;PAPER 1;BRIGHT 1;AT

1,4;"ИТОГОВЫЙ ВЫИГРЫШ #";OW/100;"O " IF OW>=0 AND INT ((OW-10)/100)<>INT (OW/100) THEN PRINT INK 7;PAPER 1;BRIGHT 1;AT

1,4;"ИТОГОВЫЙ ВЫИГРЫШ #";OW/100;".O" IF OW<0 AND INT ((OW-10)/100)=INT (OW/100) THEN PRINT INK 7;PAPER 1;BRIGHT 1;AT

1,4;"ИТОГОВЫЙ ПРОИГРЫШ #";-OW/100;"O " IF OW<0 AND INT ((OW-10)/100)<>INT (OW/100) THEN PRINT INK 7;PAPER 1;BRIGHT 1;AT

1,4;"ИТОГОВЫЙ ПРОИГРЫШ #";-OW/100;".O" FOR N=0 TO 8 DIM I$(26)

PRINT PAPER 2;BRIGHT 1;AT 13+N,3;I$ NEXT N

PRINT INK 7;PAPER 2;AT 14,4;" ВЫ ИЗРАСХОДОВАЛИ - ";BRIGHT 1;L PRINT INK 7;PAPER 2;AT 16,7;" И ПОЛУЧИЛИ - ";BRIGHT 1;W

IF NW>=0 THEN PRINT INK 7;PAPER 2;AT 18,5;"ВАША ПРИБЫЛЬ - ";INK 7;PAPER 0;BRIGHT 1;AT 18,22;NW

IF NW<0 THEN PRINT INK 7;PAPER 2;AT 18,7;"ВАШИ ПОТЕРИ - ";INK 7;PAPER 0;FLASH 1;BRIGHT 1;-NW

PRINT INK 7;PAPER 1;BRIGHT 1;FLASH 1;AT 20,4;"СЫГРАЕТЕ ЕЩЕ РАЗ? ДА-^>" IF T>T1+240 AND INKEY$="Y" THEN LET T1=FN T():LET OW=0:GO TO 2100 IF INKEY$="Y" THEN GO TO 2100 GO TO 2040

PRINT AT 1,3;" "

FOR N=0 TO 8 DIM I$(26)

PRINT PAPER 6;AT 13+N,3;I$ NEXT N GO TO 75

DIM I$(704):PRINT AT 0,0;I$

PLOT INK 6;26,144:DRAW 0,-32,11*PI/10:BEEP .05,10 PAUSE 30

PLOT 32,112:DRAW 12,32:BEEP .05,10:DRAW 12,-32:BEEP .05,10:PLOT 35,120:DRAW 18,0:BEEP .05,10

PLOT INK 6;80,136:DRAW -8,-8,3*PI/2:BEEP .05,10:PLOT INK 6;64,120:DRAW 8,8,3*PI/2:BEEP

.05,10 PAUSE 30

PLOT 88,112:DRAW 0,32:BEEP .05,10:PLOT 104,112:DRAW 0,32:BEEP .05,10:PLOT 88,128:DRAW

16,0:BEEP .05,10 PAUSE 30

PLOT 116,128:DRAW 8,0:BEEP .05,10 PAUSE 30

FOR N=0 TO 3:PRINT INK 1: 15+2*N,Q;B$:BEEP .05,Q: I FOR N=0 TO 2:PRINT INK 1: 15+2*N,Q;B$:BEEP .05,Q:I FOR N=0 TO 1:PRINT INK 1:

15+2*N,Q;B$:BEEP .05,Q:NEXT N PRINT INK 1;AT 14,Q;A$;AT 15,Q;B$:BEEP .05,Q LET Q=Q+4:IF Q<29 THEN GO TO 2560

IF Q=29 THEN PRINT FLASH 1;BRIGHT 1;INK 1;AT 10,1;"ВАМ -НУЖНА ИНСТРУКЦИЯ? ДА - <Y>"

PAUSE 0:IF INKEY$="Y" THEN GO TO 2600

RETURN

CLS

PRINT INVERSE 1;AT 1,10;" CASH-FLOW " PRINT AT 3,0;"

ВАША ЦЕЛЬ - СОБРАТЬ 5 МОНЕТ В ОДНОМ МОНЕТОПРИЕМНИКЕ. В ЭТОМ СЛУЧАЕ ВСЕ ОНИ ДОСТАНУТСЯ ВАМ." PRINT AT 6,0;"

У ВАС ЕСТЬ 6 МОНЕТ ПО 10 ПЕНСОВ ПЛЮС ВСЕ, ВЫИГРАННЫЕ ВАМИ." PAUSE 100:PRINT INK 6;PAPER 2;FLASH 1;AT 9,4; PAUSE 500:PRINT AT 9,4;"

НАЖМИТЕ ЛЮБУЮ КЛАВИШУ

2642 2644 2650 2660 2670 3000 3005 3010 3020 3030 3040

3050

PAPER 2;AT 9,9;" УПРАВЛЕНИЕ

"A - ВСТАВИТЬ МОНЕТУ В АВТОМАТ"^ 13,0;"Z - ЗАПУСТИТЬ МОНЕТУ" "O И P - ПОДТОЛКНУТЬ МОНЕТУ ВЛЕВО ИЛИ ВПРАВО (ТОЛЬКО 1 РАЗ)"

Q - ПРЕКРАЩЕНИЕ ИГРЫ (ТОЛЬКО ПОСЛЕ ТОГО, КАК ВЫ ИЗРАСХОДУЕТЕ ПЕРВЫЕ 50 ПЕНСОВ" PAUSE 100

DIM I$(160):PRINT PAPER 6;AT 3,0;I$

PRINT INK 2;FLASH 1;AT 5,3;" НАЧИНАТЬ ИГРУ? ДА - <Y> "

IF INKEY$="Y" THEN RETURN

GO TO 2660

RESTORE :LET Н=0

POKE 23675,88:POKE 23676,255

LET U=PEEK 23675+256*PEEK 23676

READ J:IF J=.5 THEN RETURN

POKE U+N,J:LET N=N+1:GO TO 3020

DATA 7,31,63,112,119,228,239,231,224,248,252,14,230,247,247,247,231,224,231,97,112,

63,31,7,247,247,231,198,14,252,248,224 DATA 127,127,127,127,127,127,127,127,254,254,254,254,254,254,254,254,.5

PLOT 136,112:DRAW 0,32:BEEP .05,10:DRAW 16,0:BEEP .05,10:PLOT 136,128:DRAW 10,0:BEEP

.05,10 PAUSE 30

PLOT 176,112:DRAW -16,0:BEEP .05,10:DRAW 0,32:BEEP .05,10 PAUSE 30

PLOT INK 6;194,144:DRAW 0,-32,5*PI/6:BEEP .05,10:DRAW 0,32,5*PI/6:BEEP .05,10 PAUSE 30

PLOT 214,144:DRAW 8,-32:BEEP

8,32:BEEP .05,10 FOR N=13 TO 21

PRINT INK 2;AT N,3;"EF EF EF EF EF PRINT INK 4;AT N,2;"F";AT N,29;"E" NEXT N LET Q=5

AT 12+2* NEXT N AT 12+2* NEXT N AT 12+2*

2533

2534

2535

2536

2537

2538

2540 2545 2550 2555 2558

2560

2561

2562

2563 2565 2570 2575 2580 2600 2610 2615

05,10:DRAW 8,16:BEEP .05,10:DRAW 8,-16:BEEP .05,10:DRAW

EF EF"

*N,Q

AT 13+2*N,Q

AT 14+2*N,Q;

AT

*N,Q

AT 13+2*N,Q

AT 14+2*N,Q;

AT

*N,Q

AT 13+2*N,Q

AT 14+2*N,Q;

AT

2620

2622 2624 2628 2630 2635 2640

Программа русифицирована по методике, описанной выше. Автостарт программы -со строки 2, где происходит загрузка символьного набора. В строке 3 происходит включение символьного набора, а в строке 4 - формирование банка символов UDG-графики при помощи подпрограммы 3000. Формируются только символы "A" -"F", так как только они применяются в программе. После этого происходит старт программы с начальной строки. Так Вы будете запускать программу при остановке во время отладки: командой RUN.

Фактическое начало выполнения программы - строка 10. Здесь происходит принудительное включение регистра CAPS LOCK для того, чтобы упростить процедуру опроса нажатых клавишей при помощи INKEY$. Например, чтобы проверить нажатие клавиши "A", обычно применяется конструкция: IF INKEY$="a" OR INKEY$="A" ...

Включив CAPS LOCK, можно исключить первую половину этого выражения, так как невозможно будет нажатие "a".

В строке 15 обнуляется счетчик суммарного выигрыша на протяжении нескольких игр, проведенных подряд. Далее задается изображение верхней и нижней половины монеты при помощи символов UDG-графики. В строке 25 выполняются действия, связанные с прорисовкой титульной страницы игры при помощи подпрограммы 2500. В строке 2500 фактически выполняется очистка экрана, но, в отличие от CLS, это происходит плавно, для более приятного зрительного эффекта. Строки 2520 - 2538 воспроизводят название игры, причем это делается довольно оригинальный способом.

Строки 2540 - 2555 прорисовывают монетоприемники, а строки 2560 -2565 заполняют их монетами.

В строке 2570 начинаются действия, связанные с выводом на экран инструкции игры. Для этого надо нажать "Y". Если это зафиксировано, то подпрограмма переходит на строки 2600 - 2670 для вывода краткой инструкции по игре. Если нет, то подпрограмма завершается и выполняется возврат на продолжение выполнения программы со строки 30.

Строки 30 - 95 обеспечивают прорисовку игрового поля. 35 -голубые полосы слева и справа экрана. 40 - 65 - штыри для изменения направления падения монеты. 75 - 90 -монетоприемники. 95 -направляющая для движения монеты.

В строке 100 обнуляются счетчики выигрыша и проигрыша, затем происходит переход на строку 1000. Здесь монетоприемники заполняются монетами случайным образом. Ну не совсем случайным, все-таки имеются некоторые ограничения. В крайних монетоприемниках задается не более двух монет, а в третьем и пятом их количество может достигать четырех. Количество монет в монетоприемниках 1-6 определяется соответственно переменными A-F. Так как в 4-м монетоприемнике не может быть монет по условиям игры, то переменная D не задается.

Строка 1055 задает Ваш "начальный капитал". Далее выводится предписывающая надпись и автомат ждет, когда Вы опустите монету в автомат. Если Вы это сделаете (нажатием "A"), то программа переходит на строку 1100.

В строках с 1100 происходит движение монеты по направляющей, проходящей внутри автомата. Теперь Вы должны в нужный момент сбросить ее вниз, нажав "Z". Если Вы не сделаете это вовремя, пока она не докатится до конца направляющей, то Вы ее просто потеряете. При нажатии "Z" программа переходит на строку 1200. Это начало падения монеты. Дистанция по вертикали, которую монета прошла от верхней направляющей, обозначена переменной M. При достижении M=2, строки с 1300 обеспечивают "закрывание щели", через которую монета провалилась в автомат. Далее программа переходит на строку 135.

В строках 151 и 152 происходит проверка нажатия клавишей "O" или "P", при помощи которых можно подтолкнуть монету. Обратите внимание на условия, при которых возможно подталкивание монеты. Это, прежде всего, флажок, запоминающий факт подталкивания - I. Монету можно подтолкнуть только один раз. Кроме того, это дистанция, на которой монета находится от верхней направляющей. Если монета упала слишком глубоко (M больше или равно 4), то подтолкнуть монету уже не удастся. Факт подталкивания монеты сопровождается коротким звуковым сигналом. Строка 160 обеспечивает прорисовку монеты на новом месте. Строка 166 определяет скорость падения монеты.

При падении монеты, когда она достигнет уровня монетоприемников (что определяется по величине дистанции M), программа переходит на строку 500. В этих строках вычисляется, сколько же монет стало в том монетоприемнике, куда упала монета. Если там к этому времени уже находилось 4 монеты, то программа переводит на строку 600. Если монета упала в четвертый монетоприемник, то она пропадает (строка 565). Если это была последняя монета, то переход на финал игры, строку 2000 (определяется в строке 568). Строка 570 обеспечивает продолжение игры.

Если в монетоприемнике оказалось 5 монет, то программа продолжается со строки 600. Здесь Вам достаются все выигранные 5 монет, а монетоприемник освобождается. В строках 620-625 обнуляются счетчики монет в соответствующем монетоприемнике. Со строки 630 все действия повторяются.

Финальная часть программы - это строки с 2000. Здесь производится рассчет результата игры - разницы между израсходованными и выигранными монетами, рассчет суммарного результата по итогам нескольких игр и вывод всех этих данных на экран. В строке 2060 Вам предлагается продолжить игру. В том случае, если Вы согласитесь, нажав "Y", игра будет продолжена.

Начиная набивать программу, наберите строки 1-3. Потом сделайте RUN 2 и загрузите заготовленный русско-латинский символьный набор. После его включения продолжайте набивать программу. Имена переменных набирайте в режиме CAPS LOCK. Обратите внимание, что символы "A" - "O" в строке 20 набираются при помощи графического регистра. То же относится и к символам "E" - "F" в строках 80, 85 и 2545, 2550. Периодически выполняйте RUN 5 для записи результатов работы на магнитофон.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Литстраничка - Тысяча и одна ночь (Из цикла "Hовые сказки о старом").
Пикник - Впечатление от Omega Party.
Реклама - Реклама и объявления.
ТЕОРИЯ AI - Рассуждения о построении искусственого интеллекта в играх.
Отдохнем - Сифилис: Рассказ историка. Рассказ ученого. Рассказ врача. Рассказ больного. Рассказ больной.

В этот день...   19 апреля