САПЕР
© Вадим Пыльцов, г. Надым, 1994.
Цель игры - пройти из правого верхнего угла игрового поля в левый нижний угол. При этом надо рассчитывать, где находятся мины и не наступить на них. После каждого хода Вам сообщается, сколько мин находится вокруг (на прилегающих восьми квадратах вокруг Вашего положения). Игра представляет собой всего лишь маленький макет, который предназначен в основном для того, чтобы "обкатать" игру, оценить "играбельность" конкретной программы. Он может служить основой для полноценной программы (и не обязательно на Бейсике), необходимо только придать этому макету необходимый дизайн.
Программа русифицирована при помощи догружаемого символьного набора, хотя для макета, может быть, это и излишняя роскошь.
1 GO TO 10
2 BORDER 0: PAPER 0: INK 7: CLEAR 645 99
3 RANDOMIZE USR 15619: REM : LOAD "chr"CODE 64600
4 POKE 23675,88: POKE 23676,255: GO SUB 600: RUN
5 GO TO 9900
8 POKE 23606,88: POKE 23607,251: RETURN : REM RUS
9 POKE 23606,0: POKE 23607,60: RETURN : REM LAT
10 POKE 23658,8: GO SUB 8
20 INPUT "ВВЕДИТЕ УРОВЕНВ ИГРЫ (1-5): ";A 30 INPUT "ПОKAЗAТB СЛЕДЫ (Y/N) ";LINE A$ 40 PRINT AT 1,9;"УРОВЕНЬ ";A;AT 1,21;"НАДЫМ'1992";AT 2,21;"ПЫЛЬЦОВ B.";AT
14,6;"ВОКРУГ ВАС МИН" 50 LET K=88: PLOT 68,155: DRAW K,0: DRAW 0,-K: DRAW -K,0: DRAW 0,K: PLOT 164,171:
DRAW K,0: DRAW 0,-2 4: DRAW -K,0: DRAW 0,2 4 55 DIM M(10,10): FOR I=1 TO A*7: LET M(INT (RND*10)+1,INT (RND*10)+1)=1: NEXT I: LET
M(1,10)=0 : LET X=18: LET Y=3: PRINT AT Y,X;"A";AT 12,9;"B": GO SUB 500 60 LET I$=INKEY$: IF I$="" THEN GO TO 60 70 IF A$="Y" THEN PRINT AT Y,X;"C" 75 IF A$<>"Y" THEN PRINT AT Y,X; " "
80 LET X=X-(1 AND I$="O" AND X>=10)+(1 AND I$="P" AND X<=17) 90 LET Y=Y-(1 AND I$="Q" AND Y>=4)+(1 AND I$="A" AND Y<=11)
100 BEEP .01,-15: IF X=9 AND Y=12 THEN PRINT AT 7,21; FLASH 1;" БАНЗАЙ! ": FOR I=1 TO 300: NEXT I: RUN
110 IF M(Y-2,X-8)=1 THEN PRINT AT Y,X;"D";AT 7,20; FLASH 1;" ВЫ ПОГИБЛИ ": FOR I=1 TO
300: NEXT I: PAUSE 0: RUN 120 PRINT AT Y,X;"A": GO SUB 500: GO TO 60
500 LET K=0: FOR I=X-9 TO X-7: IF I<1 OR I>10 THEN GO TO 540 510 FOR J=Y-3 TO Y-1: IF J<1 OR J>10 THEN GO TO 530 520 IF M(J,I)=1 THEN LET K=K+1 530 NEXT J
540 NEXT I: PRINT AT 14,17;K: RETURN
БЫ ПОБЕДИЛИ
ЖИЗНИ □
F —ВНИЗ
0 -ВЛЕВО Р -ВПРНВО
1 -ФЛНМОК
SPRCE --ОТКРЫТЬ
600 RESTORE 600: FOR I=USR "A" TO USR "A"+31
610 READ K: POKE I,K: NEXT I: RETURN
620 DATA 16,56,56,16,124,16,40,68
630 DATA 16,40,68,130,186,186,130,254
640 DATA 0,18,36,72,18,36,72,0
650 DATA 16,146,84,9,52,238,60,24
9900 RANDOMIZE USR 15619: REM : ERASE "SAPER"
9910 RANDOMIZE USR 15619: REM : SAVE "SAPER"LINE 2
* * *