ПРИЛОЖЕНИЕ 1. НЕСКОЛЬКО ИГРОВЫХ ПРОГРАММ
После того, как вы немало потрудились, изучая совсем не простые вопросы создания игровых программ, неплохо было бы теперь поиграть, введя в компьютер одну из таких программ. Предлагаем несколько игр, к каждой из которых даются правила, и листинги программ, а для некоторых - еще и краткие пояснения на тот случай, если вы захотите более глубоко изучить особенности их построения и использовать в собственных разработках.
Если программа любой из предлагаемых игр будет набрана без ошибок, в нее сразу можно начинать играть, однако, если вы хотите навести окончательный блеск, советуем проделать небольшую, но очень полезную работу - ввести в игру ее правила на русском языке, воспользовавшись программами 10 или 11.
Для этого предлагаем такую последовательность действий:
1. Введите в компьютер бейсик-программу нового набора символов и запустите ее оператором RUN. B результате этого в памяти компьютера образуется кодовый блок, содержащий русские буквы.
2. Запишите этот кодовый блок на ленту с помощью оператора
SAVE "NEW_SYMBOL"CODE 64256,768
3. Загрузите игровую бейсик-программу с ленты или введите ее из книги, после чего добавьте в текст строки:
1 CLEAR 64255
2 LOAD ""CODE: POKE 23607,250
и запустите оператором RUN. При этом с ленты потребуется ввести записанную ранее программу NEW_SYMBOL.
4. После окончания загрузки на свободные строки игровой программы можно вводить русский текст. Но лучше всего образовать отдельную подпрограмму «Правила» где-нибудь в конце программы.
МИНЫ
Цель игры состоит в том, чтобы пройти по полю, на котором случайным образом расставлены мины. Количество мин вы задаете сами в начале игры, после того как появится надпись RANG [10-150].
Пройти необходимо из левого нижнего угла экрана в правый верхний угол по любой траектории, управляя человечком с помощью следующих клавиш: 2 - вверх, 3 - вверх и вправо, S - вниз, 1 - вверх и влево, Е - вправо, D - вниз и вправо, Q - влево, А - вниз и влево.
В процессе игры в верхней части экрана выводится общее число пройденных шагов, а в нижней - количество мин в клетках вокруг человечка.
Программа 34. МИНЫ.
30 POKE 23658,8 50 FOR N=0 TO 23 60 READ S
70 POKE USR "A"+N,S 80 NEXT N
90 DATA 56,56,16,254,56,56,40,40 100 DATA 129,90,36,90,90,36,90,129 110 DATA 170,85,170,170,170,85,170,170 115 BORDER 1: PAPER 1: INK 6: CLS 117 DIM P(30,18)
120 PRINT AT 3,6;"********************"
130 PRINT AT 7 6;"********************"
140 FOR N=4 TO'6'
150 PRINT AT N,6;"*"
160 PRINT AT N,25;"*"
170 NEXT N
180 PRINT AT 5,11; INK 3;"M I N Y"
190 LET A$="PRESS ANY KEY TO CONTINUE"
195 LET C=2
200 FOR N=1 TO 25
205 IF INKEY$<>"" THEN GO TO 250
210 LET C=C+1: IF C>7 THEN LET C=2
220 PRINT AT 18,N+2; INK C;A$(N TO N)
230 NEXT N
240 IF INKEY$="" THEN GO TO 200 250 CLS
260 INPUT AT 13,0;AT 0,8;"RANG (10-150):";MIN
270 IF MIN<10 OR MIN>150 THEN GO TO 250
280 PRINT AT 11,10; INK 6;"PLEASE WAIT!"
300 FOR N=1 TO MIN
310 LET V=INT (RND*18+1)
320 LET H=INT (RND*30+1)
330 IF P(H,V)=1 THEN GO TO 310
340 LET P(H,V)=1
350 NEXT N
355 LET P(1,18)=0: LET P(30,1)=0 360 FOR N=1 TO 18
370 PRINT AT N,2; INK 4;PAPER 0;"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" 380 NEXT N
390 LET SA=0: LET X=1: LET Y=18: LET X1=X: LET Y1=Y
400 PRINT AT 1,31; INK 6;"C"
410 IF INKEY$="2" THEN LET Y=Y-1: GO TO 500
415 IF INKEY$="S" THEN LET Y=Y+1: GO TO 500
420 IF INKEY$="Q" THEN LET X=X-1: GO TO 500
425 IF INKEY$="E" THEN LET X=X+1: GO TO 500
430 IF INKEY$="1" THEN LET X=X-1: LET Y=Y-1: GO TO 500
435 IF INKEY$="3" THEN LET X=X+1: LET Y=Y-1: GO TO 500
440 IF INKEY$="D" THEN LET X=X+1: LET Y=Y+1: GO TO 500
445 IF INKEY$="A" THEN LET X=X-1: LET Y=Y+1: GO TO 500
450 GO TO 510
500 LET SA=SA+1: PRINT AT 0,14; INK 7; PAPER 1;"SHAG:";SA:BEEP 0.01,-5 502 IF X>30 OR X<1 OR Y>18 OR Y<1 THEN LET X=X1: LET Y=Y1:GO TO 410 505 PRINT AT Y1,X1+1; INK 1; PAPER 4;"C"
510 IF X>30 OR X<1 OR Y>18 OR Y<1 THEN LET X=X1: LET Y=Y1:GO TO 410 512 LET KOL=0
515 IF X>1 THEN IF P(X-1,Y)=1 THEN LET KOL=KOL+1 520 IF X<30 THEN IF P(X+1,Y)=1 THEN LET KOL=KOL+1
525 IF Y>1 THEN IF P(X,Y-1)=1 THEN LET KOL=KOL+1
530 IF Y<18 THEN IF P(X,Y+1)=1 THEN LET KOL=KOL+1
535 IF X>1 THEN IF Y>1 THEN IF P(X-1,Y-1)=1 THEN LET KOL=KOL+1
540 IF X<30 THEN IF Y>1 THEN IF P(X+1,Y-1)=1 THEN LET KOL=KOL+1
545 IF X<30 THEN IF Y<18 THEN IF P(X+1,Y+1)=1 THEN LET KOL= KOL+1
550 IF X>1 THEN IF Y<18 THEN IF P(X-1,Y+1)=1 THEN LET KOL=KOL+1
570 IF KOL<>O THEN PRINT AT 21,10; INK 2;"RADOM ";KOL;" MIN !": GO TO 590
580 PRINT AT 21,0;"ППППППППППППППППППППППП"
590 PRINT AT Y,X+1; INK 2; PAPER 5;"A"
600 IF P(X,Y)=1 THEN GO TO 650
605 LET X1=X: LET Y1=Y
610 IF X=30 AND Y=1 THEN GO TO 1000
615 GO TO 410
620 REM ------------------
650 FOR N=0 TO 7
655 BEEP 0.01,-10: BEEP 0.01,-10: BEEP 0.01,-1:BEEP 0.01,10
660 PAUSE 10: BORDER N
670 NEXT N
680 BORDER 1
690 PAUSE 50
700 FOR N=1 TO 30
710 FOR M=1 TO 18
720 IF P(N,M)=1 THEN PRINT AT M,N+1; PAPER 0; INK 3;"B"
730 NEXT M
740 NEXT N
750 PAUSE 500
755 PAPER 0: BRIGHT 1
760 FOR N=0 TO 10
770 PRINT AT N,0; INK 1;"ПППППППППППППGAME "
780 PRINT AT 20-N,18; INK 2;"OVERПППППППППП"
790 PAUSE 5: BEEP 0.01,N*3
800 NEXT N
810 BRIGHT 0
820 FOR N=0 TO 9
830 PRINT AT N,13;"ППППППППППППППППППП"
840 PRINT AT 20-N,0;"ППППППППППППППППППП"
850 PAUSE 5: BEEP 0.01,30-N*3
860 NEXT N
870 PRINT AT 21,0;" "
880 FOR M=1 TO 5
890 FOR N=1 TO 7
900 PRINT AT 10,13; INK N;"GAME OVER"
910 BEEP 0.01,RND*40
920 NEXT N: NEXT M
930 GO TO 115
990 REM --------------------
1000 FOR N=1 TO 15 1010 FOR M=1 TO 18
1020 IF P(N,M)=1 THEN PRINT AT M,N+1; INK 3; PAPER 0;"B"
1030 IF P(31-N,M)=1 THEN PRINT AT M,32-N; INK 3; PAPER 0;"B"
1040 NEXT M
1050 NEXT N
1060 PAUSE 0
1070 GO TO 115