ZX-Ревю 1994 №4 1993 г.

Сделай сам - игра "Минер".


МИНЕР

© Александр Белозеров, Москва, 1994.

Сегодня мыы предлагаем программу на Бейсике "МИНЁР". Автор пишет, что программирует на Pascal и Fortran на IBM-PC, а с Бейсиком приходится сталкиваться только по необходимости, поэтому эта программа -далеко не образец программирования. Самы,ш главныш недостаток - убийственно долгий предварительный расчет -около 40 сек! Но в то же время, по словам Александра, отнимать у других возможность усовершенствовать программу - кощунство.

Программа нам понравилась своей "игручестью", и мыы (по совету автора) немного её усовершенствовали: максимально увеличили размер "минного" поля, ввели несколько жизней и изменяемыми уровень игрыг, а также изменили цвета и русифицировали программу. Но основа осталась та же, что и в оригинале автора. В таком виде и предлагаем программу читателям. Кто захочет, сможет продолжить усовершенствования. Итак, слово автору.

Правила игры.

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

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

Вы можете облегчить себе задачу, сделав игру более наглядной и уменьшив число "несчастных случаев. Для этого можно использовать флажки-маркеры. Их у Вас точно по числу мин. Ставятся они на закрытые квадраты и снимаются клавишей "1". Чтобы открыть помеченный флажком квадрат, надо сначала снять флажок (который действует как предохранитель). Флажком-маркером помечается квадрат, если Вы подозреваете или рассчитали, что в квадрате - мина. Число оставшихся флажков-паркеров также отображается в правой части экрана (указатель "МИНЫ"). Конечно, разминировать всё поле не используя маркеры сложнее, но и интереснее.

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

Управление - клавишами Q, A, O, P, SPACE. Кроме того, правый SINCLAIR-джойстик и клавиша 1.

Листинг программы,1 приводится в варианте для дисковода. Для магнитофонного варианта надо исправить строки 3, 9900, 9910.

жизни 0 ПОЛЯ 128

ццццщ ццццщ

SHIHHHi SHIHHHi nHIHHHi

мины 39

■I i| i| i| i| i|

ИИИИИИ

ииииии ииииии ииииии ииииии

F -вниз

О -ВЛЕВО

Р -ВПРАВО 1 -ФЛПМОК

5РЯСЕ --ОТКРЫТЬ

GO TO 5 0

BORDER 0: PAPER 0: INK 7: CLEAR 645 99: RANDOMIZE RANDOMIZE USR 15619: REM : LOAD "chr"CODE 64600 POKE 23675,88: POKE 23676,255: RUN GO TO 9900

1

2

3

4

5 8 9

19

20 21 22

23

24

25

26

27

28 29

39

40

41

42

43

GO SUB 39

POKE 23606,88: POKE 23607,251: RETURN : REM RUS POKE 23606,0: POKE 23607,60: RETURN : REM LAT DATA 129,254,194,194,194,194,254,255 129,254,194,218,218,194,254,255 0,8,24,8,8,8,28,0 0,24,36,4,8,16,60,0 0,24,36,8,4,36,24,0 0,36,36,36,60,4,4,0 0,60,32,56,4,36,24,0 0,28,32,56,36,36,24,0 0,60,4,8,16,32,32,0 0,24,36,24,36,36,24,0 0,24,52,114,126,60,24,0

DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA FOR N=0

NEXT NEXT NEXT NEXT NEXT

TO TO TO TO TO

RO RO RO RO RO

POKE POKE POKE POKE POKE

USR USR USR USR USR

READ READ READ READ READ

N=0 N=0 N=0 N=0

FOR FOR FOR FOR

"A"+N,RO "N"+N,RO "Q"+N,RO "S"+N,RO "E"+N,RO

N=0 N=0 N=0 N=0 N=0 N=0 SUB

INK 7: BORDER DIM A$(20,20): I(20,20): DIM GO SUB 6000 FOR L=2 TO 20 FOR K=2 TO 20 LET A$(L,K)= "A" NEXT K NEXT L

FOR L=2 TO 20 FOR K=2 TO 20 PRINT AT L,K; NEXT K NEXT L

NEXT NEXT NEXT NEXT NEXT NEXT

44

45

46

47

48

49

50 60 61

62

63

64

65

66 67

7 7 7 7 7 7

LET

"R"+N,RO "T"+N,RO "H"+N,RO "U"+N,RO " I"+N,RO "O"+N,RO

FOR FOR FOR FOR FOR FOR GO

TO TO TO TO TO TO 8:

READ RO: POKE READ RO: POKE READ RO: POKE READ RO: POKE READ RO: POKE READ RO: POKE LEV=1

0: PAPER 0: CLS DIM S$(20,20): C (20, 20)

USR USR USR USR USR USR

RETURN

GO SUB 9500: GO SUB 8500

DIM Q(21,21): DIM D$(20,20): DIM P(20,20): DIM

LET P(L,K)=5: LET C(20,20)=0

PAPER 5; INK 0;A$(L,K)

70

75

76

77

78 80 83

90

91

92

93 95 97 100

BEEP .3,10: BEEP .3,10: LET DV=0: LET DG=0 LET G=2: LET V=2: PRINT

BEEP .6,14

AT 2,2; PAPER 1; INK 0; FLASH 1;"A"

1;ST: POKE 23658,8: PAUSE 0

GO GO

PRINT AT 4,28; IF (INKEY$="P" IF (INKEY$ = "Q" IF (INKEY$ = "O" IF (INKEY$ = "A" IF INKEY$=" " IF INKEY$ = "1" GO TO 83

1000 1000 1000 1000

SUB SUB SUB SUB

GO GO

INK 4; PAPER 2; BRIGHT OR INKEY$="7") AND G<2 0 THEN LET DG=1 OR INKEY$="9") AND V>2 THEN LET DV=-1 OR INKEY$="6") AND G>2 THEN LET DG=-1 OR INKEY$="8") AND V<2 0 THEN LET DV=1 OR INKEY$="0" THEN GO SUB 2000 THEN GO SUB 9000

1000 BEEP .01,18: PRINT AT V,G; PAPER P(V,G); INK C(V,G); G=G+DG: LET DG=0: LET V=V+DV: LET DV=0: PRINT AT V,G; 1;a$(V,G)

1001 RETURN

2000 IF A$(V,G)<>"A" THEN RETURN

2002 BEEP .1,5

2005 LET P(V,G)=4: LET C(V,G)=I(V,G) 2010 IF S$(V,G)="O" THEN GO TO 7000 2015 LET ST=ST-1 2020 LET A$(V,G)=D$(V,G)

2030 PRINT AT V,G; PAPER P(V,G); INK 1; FLASH 1;A$(V,G) 2 04 0 PRINT AT 4,28; PAPER 2; INK 4; BRIGHT 1;"0 " 2050 IF ST=0 THEN GO TO 7900 2500 RETURN 6000 RANDOMIZE 6100 FOR J=1 TO B 6200 LET GI=2+INT (RND*19) 6210 IF S $(VI,GI)= "O" THEN 6220 LET S $(VI,GI)="O" 6230 NEXT J

6250 FOR K=2 TO 20

6251 FOR Y=2 TO 20

6260 IF S$(K,Y)<>"O" THEN GO TO 6400

6270 LET Q(K-1,Y)=Q(K-1,Y)+1

6271 LET Q(K+1,Y)=Q(K+1,Y)+1

6272 LET Q(K,Y+1)=Q(K,Y+1)+1

6273 LET Q(K-1,Y-1)=Q(K-1,Y-1)+1

6274 LET Q(K+1,Y-1)=Q(K+1,Y-1)+1

6275 LET Q(K+1,Y+1)=Q(K+1,Y+1)+1

6276 LET Q(K-1,Y+1)=Q(K-1,Y+1)+1

6277 LET Q(K,Y-1)=Q(K,Y-1)+1 6400 NEXT Y

LET VI=2+INT GO TO 6200

(RND *19)

FLASH 0;A$(V,G): LET PAPER P(V,G); INK 1; FLASH

6410 NEXT K

6450 FOR K=2 TO 20

6455 FOR Y=2 TO 20

6460 IF Q(K,Y)=0 THEN LET D$(K,Y)=" "

6465 IF Q(K,Y)=1 THEN LET D$(K,Y)="O"

6467 IF Q(K,Y)=2 THEN LET D$(K,Y)="S"

6469 IF Q(K,Y)=3 THEN LET D$(K,Y)="E"

IF Q(K,Y)=4 THEN LET D$(K,Y)="R"

IF Q(K,Y)=5 THEN LET D$(K,Y)="T"

IF Q(K,Y)=6 THEN LET D$(K,Y)="H"

IF Q(K,Y)=7 THEN LET D$(K,Y)="U"

IF Q(K,Y)=8 THEN LET D$(K,Y)="I"

INK 2;AT V,G;"O" INK 4; PAPER 1;

7002 FOR L=25 TO -25

PRINT PAPER 4;

LET P(V,G) =4: LET C(V,G)=2: STEP -1: BEEP .01,L: NEXT L 7 004 LET LIV=LIV-1: LET B=B-1: PRINT AT 2,29; INK 1; PAPER 7;LIV;

BRIGHT 1;AT 6,28;B: IF LIV>0 THEN GO TO 83 7 010 PRINT AT 0,5; INK 6; FLASH 1; BRIGHT 1;"ВЫ ПРОИГРАЛИ !"; INK 4; PAPER 0;AT

7,0;"H";AT 8,0;"A";AT 9,0;"6";AT 10,0;"M";AT 11,0;"3";AT 12,0;" ";AT 13,0;"0";AT 14,0;"Г";AT 15,0;"0";AT 16,0;"H";AT 17,0;"b" 7020 IF INKEY$="0" OR INKEY$=" " THEN GO TO 60 7030 GO TO 7020

7900 FOR L=-25 TO 25: BEEP .01,L: NEXT L

7905 PRINT AT 6,28; INK 4; PAPER 1; BRIGHT 1;"0 ": GO SUB 8000

7910 PRINT AT 0,5; INK 6; FLASH 1; BRIGHT 1;"ВЫ ПОБЕДИЛИ !"; INK 4; PAPER 0;AT

7,0;"H";AT 8,0;"A";AT 9,0;"6";AT 10,0;"M";AT 11,0;"3";AT 12,0;" ";AT 13,0;"0";AT 14,0;"Г";AT 15,0;"0";AT 16,0;"H";AT 17,0;"b" 7920 GO TO 7020 8000 FOR K=2 TO 20 8010 FOR Y=2 TO 20

8020 IF S$(K,Y)="O" THEN PRINT AT K,Y; PAPER 4; INK 2;S$(K,Y) 8030 NEXT Y 8050 NEXT K

8060 LET LEV=LEV+(LEV<5) 8070 RETURN 8500 CLS

8504 LET B=45+5*LEV

8505 LET ST=361-B

8506 LET LIV=6-LEV

8507

PRINT

AT

2,

23;

INK

6;

"ЖИ3HИ

";

PAPER 7

;

INK

8510

PRINT

AT

4,

23;

INK

6;

"П0ЛЯ"

8520

PRINT

AT

6,

23;

INK

6;

"MИHЫ"

8530

PRINT

AT

4,

28;

INK

4;

PAPER

2;

BRIGHT

1;

ST

8540

PRINT

AT

6,

28;

INK

4;

PAPER

1;

BRIGHT

1;

B

8600 PRINT AT 1,1; PAPER 2; INK 6;CHR$ 139;AT 1,21;CHR$ 135;AT 21,1;CHR$ 142;AT 21,21;CHR$ 141

8610 FOR L=2 TO 20: PRINT AT L,1; INK 6; PAPER 2;CHR$ 138;AT L,21;CHR$ 133;AT

1,L;CHR$ 131;AT 21,L;CHR$ 140: NEXT L 8620 PRINT AT 9,23; INK 4;"Q -ВВЕРХ";AT 11,23;"F -BH33";AT 13,23;"O -ВЛЕВО";AT

15,23;"P -ВПРАВО";AT 17,23;"1 -®5A60K";AT 19,23;" SPACE -";AT 20,24;"-0ТКРЫТЬ" 8630 PRINT AT 19,3; INK 1; PAPER 5; FLASH 1;"П0ЖАЛУЙСТА, ЖДИТЕ" 8700 RETURN

9000 IF A$(V,G)="A" AND B>0 THEN BEEP .1,-10: LET B=B-1: LET A$ (V,G)="N": GO TO 9099 9010 IF A$(V,G)="N" THEN BEEP .1,-10: LET B=B+1: LET A$(V,G)="A"

9099 PRINT AT V,G; PAPER P(V,G); INK 1; FLASH 1;A$(V,G)

9100 PRINT AT 6,28; PAPER 1; INK 4; BRIGHT 1;" ";AT 6,28;B 9110 RETURN

9500 PRINT INK 4; BRIGHT 1;AT 11,10;"УР0BЕHЬ ИГРЫ:"^ 13,4;"1-H0BИЧ0K ... 5-ЭКСПЕРТ" 9510 LET L$=STR$ LEV: INPUT (L$;" : ";);LINE L$: IF L$<>"" THEN LET LEV=VAL L$ 9520 IF LEV>5 OR LEV<1 THEN BEEP 1,0: GO TO 9510 9530 RETURN

9900 RANDOMIZE USR 15619: REM : ERASE "MINER" 9910 RANDOMIZE USR 15619: REM : SAVE "MINER"LINE 2

GO TO 6490

LET I(K,Y)=0

LET I(K,Y)=1

LET I(K,Y)=3

LET I(K,Y)=2

LET I(K,Y)=2

LET I(K,Y)=2

LET I(K,Y)=2

LET I(K,Y)=2

GO TO 6490 GO TO 6490 GO TO 6490 GO TO 6490 GO TO 6490 GO TO 6490 GO TO 6490 GO TO 6490

6471 6473 6475 6477 6479

6490 NEXT Y

6491 NEXT K 6500 RETURN

7000 LET A$(V,G)="O":

Программа русифицирована при помощи загружаемого в строке 3 русско-латинского символьного набора.

Подчеркнутые символы являются UDG-символами и набираются в графическом регистре.

Из-за полиграфических ограничений строки с символами блочной графики набраны при помощи CHR$. Это строки 8600, 8610. Несмотря на то, что такой вариант полностью работоспособен, логичнее было бы набрать эхйи команды, пользуясь вместо CHR$ графическим регистром и цифровыми клавишами.

Автостарт программы происходит со 2 строки. Набирая программу, наберите вначале строки 5, 9900, 9910. Тогда Вы сможете при наборе периодически пользоваться командой RUN 5 для сохранения того, что уже набрано.

УРОВЕНЬ 1

'A'A'A'A

I,'/,'/,'/,

iii

* * *




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
О людях... - О истории создания и планах Virt group.
Что нового? - свежий wareZ: Shashki, Towdie_Russian,IzhNews#10, Marazm #21-#22,ZX-Power #4,BGE 2.40, HorrorWord 1.00, SHU 3.01, HRiP 0.98, PSV 1.0.
От авторов - Оживление в RU.ZXNET.GENERAL.
23 Things Which You Can Do If A Program Crashes
Разное - результаты опроса общественного мнения Спектрумистов.

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