Приложение 1 - игровая программа "МИНЫ".

Как написать игру для ZX Spectrum

ПРИЛОЖЕНИЕ 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