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

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


AFRICAN SEEDS

Уважаемые читатели! Мы получаем массу писем с просьбой больше давать программ на БЕЙСИКе для самостоятельного набора начинающими. Многие полагают, причем совершенно справедливо, что это является прекрасной школой обучения программированию. Мы с этим утверждением полностью солидарны. И дело даже не в том, что при наборе программы начинающий программист осваивает клавиатуру, использует новые для себя операторы и конструкции языка, узнает новые приемы. Основная прелесть состоит в том, что как бы ни старался читатель набрать программу без ошибок, в 99 случаях из 100 у него это не выйдет. Практически все при любом опыте наделают ошибок. А вот поиск этих ошибок и отладка программы и являются по-настоящему ценной школой начинающего программиста.

Интерпретатор БЕЙСИКа устроен так, что от большинства ошибок он Вас застрахует. Если при наборе строки Вы нарушите синтаксис языка, он Вас немедленно предупредит и строка не будет введена в программу клавишей ENTER до тех пор, пока Вы эту ошибку не исправите. Тем не менее, существуют еще сотни возможных видов ошибок, которые он не увидит. Например, он ничего не сможет поделать, если Вы пропустите какую-либо строку. Об этом Вы узнаете только запустив программу, причем ошибка проявится совсем не в том месте, в котором Вы пропустили строку. Она проявится там, где компьютеру надо будет воспользоваться данными, содержавшийся в пропущенной строке.

Поэтому прежде, чем Вы приступите к набору программы, нам хотелось бы дать Вам некоторые приемы, которые помогут сделать мучительный процесс отладки чуть менее мучительным. Тем не менее, настройтесь все-таки на тяжелую и кропотливую работу.

Во-первых, когда программу набирают со страниц журнала или книги, большой процент ошибок возникает в связи с плохой различимостью символов. Так, например, часто путают буквы "i", "I", "l" и цифру "1". Путают букву "O" и цифру "0". Можно спутать букву "B" и цифру "8". Имея дело с этими символами относитесь к ним предельно осторожно.

Теперь о ходе отладки. Вы, конечно понимаете, что предусмотреть все возможные виды ошибок, которые Вы наделаете, заранее никто не сможет, хотя кое-какая статистика у нас имеется. Можно сказать, что до 90 процентов самых больших неприятностей связано с тремя видами ошибок:

Variable not found (переменная не найдена).

Out of screen (печать вне пределов экрана).

End of DATA (нехватка данных).

Что касается Variable not found, - это наиболее часто встречающаяся неприятность. К ней, как правило, и приводит путаница в символах, о которой мы писали выше. Хотя это, конечно, не единственный способ напороться на данную ошибку.

Когда компьютер сообщает об этой ошибке, он указывает и номер строки, в которой она произошла. Внимательно сверьте эту строку с исходным текстом. Если все в порядке, попробуйте распечатать переменные "подозрительного" выражения прямой командой. Та, которая ошибочна, распечатана не будет и Вы опять получите сообщение "Variable not found". Теперь надо найти программную строку, в которой эта переменная была в первый раз определена. Может быть эту строку Вы и пропустили или неправильно набрали переменную.

Иногда эта ошибка появляется не тогда, когда Вы что то пропустили, а наоборот набрали что-то лишнее, что было воспринято, как имя переменной.

Ошибка Out of screen возникает при печати (PRINT, PLOT, DRAW, CIRCLE), если координаты печати выходят за пределы экрана. Бороться с этой ошибкой весьма трудно, поскольку ошибка возникает в тех случаях, когда параметры координат позиции печати выражены не числом, а переменными, распечатайте их прямой командой PRINT.

Посмотрите, какой параметр "врет". Вернитесь по программе назад, найдите строку, в которой этот параметр вычисляется. Пусть это будет например строка 5550. Поставьте после нее отладочную строку: 5551 PRINT <имя перем.>: PAUSE 0

Так, постепенно "раскручивая" эту переменную, Вы и найдете в какой строке вычисления с ней портят Вашу программу.

Ошибка "Out of DATA" возникает в случае несоответствия количества данных, прочитанных программой по оператору READ и имеющихся в строках DATA. Борьба с ней довольно проста и требует только внимательности и точности.

А теперь, закончив с этим затянувшимся вступлением, мы предлагаем нашим читателям старинную африканскую игру "AFRICAN SEEDS". Игра относится к направлению, называемому "Манкала". В этом семействе имеются сотни разных игр. Выбранная нами игра отличается относительной простотой правил и несложной алгоритмизацией. Несмотря на свою простоту, компьютерная версия игры отличается тем, что победить ее непросто. Мы не будем здесь рассказывать правил игры, Вы их прочитаете непосредственно после запуска программы. Укажем только, что играть можно не только с компьютером. Воспользовавшись камешками или ракушками Вы можете играть с друзьями на пляже или с помощью сосновых шишек в лесу. В связи с приближением отпускного сезона, Вам это может пригодиться.

Программа переведена на русский язык. Если Ваш "Спектрум" имеет русский регистр, то набор русского текста не вызовет у Вас трудностей. Но, учитывая тот факт, что большинство компьютеров у наших пользователей нерусифицированные, мы использовали в программе загружаемый символьный набор "НС" в кодах КОИ-7 в стандарте ASCII (он приведен ниже). Это "утолщенный" русско-латинский символьный набор, предложенный для русификации программы "MF-09" (см. статью Алексеева А.Г. в "ZX-РЕВЮ" N 1-2 за 1992 г. стр. 29). Для тех читателей, которые подписались на "РЕВЮ" только в этом году, мы повторяем этот способ русификации. Мы будем всякий раз ссылаться на него при публикации в дальнейшем БЕЙСИК-программ для самостоятельного набора.

Для формирования символьного набора используется программа для шестнадцатиричного ввода (см. "ZX-РЕВЮ"-93, N 1-2, стр. 5-7).

СИМВОЛЬНЫЙ НАБОР "НС" КОИ-7

FC58

00

00

00

00

00

00

00

00

54

FD10

00

7E

66

0C

18

30

30

00

75

FC60

00

18

18

18

18

00

18

00

D4

FD18

00

3C

66

3C

66

66

3C

00

FB

FC68

00

6C

6C

6C

00

00

00

00

A8

FD20

00

3C

66

66

3E

06

3C

00

A5

FC70

00

6C

FE

6C

6C

FE

6C

00

18

FD28

00

00

18

18

00

18

18

00

85

FC78

00

18

7E

58

7E

1A

7E

18

90

FD30

00

00

18

18

00

18

18

30

BD

FC80

00

62

64

08

10

26

46

00

C6

FD38

00

00

0C

18

30

18

0C

00

AD

FC88

00

30

58

30

7A

CC

76

00

F8

FD40

00

00

00

7C

00

7C

00

00

35

FC90

00

18

30

00

00

00

00

00

D4

FD48

00

00

30

18

0C

18

30

00

E1

FC98

00

0C

18

18

18

18

0C

00

0C

FD50

00

3C

66

0C

18

00

18

00

2B

FCA0

00

30

18

18

18

18

30

00

5C

FD58

00

7C

CE

D6

DE

C0

7C

00

8F

FCA8

00

00

6C

38

FE

38

6C

00

EA

FD60

00

3C

66

66

7E

66

66

00

AF

FCB0

00

00

18

18

7E

18

18

00

8A

FD68

00

7C

66

7C

66

66

7C

00

0B

FCB8

00

00

00

00

00

18

18

30

14

FD70

00

3C

66

60

60

66

3C

00

71

FCC0

00

00

00

00

7C

00

00

00

38

FD78

00

7C

66

66

66

66

7C

00

05

FCC8

00

00

00

00

00

18

18

00

F4

FD80

00

7E

60

7C

60

60

7E

00

15

FCD0

00

00

06

0C

18

30

60

00

86

FD88

00

7E

60

7C

60

60

60

00

FF

FCD8

00

3C

66

6E

76

66

3C

00

FC

FD90

00

3C

66

60

6E

66

3C

00

9F

FCE0

00

18

38

18

18

18

3C

00

B0

FD98

00

66

66

7E

66

66

66

00

11

FCE8

00

3C

66

06

3C

60

7E

00

A6

FDA0

00

3C

18

18

18

18

3C

00

75

FCF0

00

3C

66

0C

06

66

3C

00

42

FDA8

00

0E

06

06

66

66

3C

00

C7

FCF8

00

0C

1C

2C

4C

7E

0C

00

1E

FDB0

00

66

6C

78

78

6C

66

00

41

FD00

00

7E

60

7C

06

66

3C

00

FF

FDB8

00

60

60

60

60

60

7E

00

13

FD08

00

3C

60

7C

66

66

3C

00

25

FDC0

00

C6

EE

D6

D6

C6

C6

00

A9

FDC8

00

66

66

76

6E

66

66

00

41

FE90

00

00

3E

30

30

30

30

00

8C

FDD0

00

3C

66

66

66

66

3C

00

DD

FE98

00

00

66

3C

18

3C

66

00

F2

FDD8

00

7C

66

66

7C

60

60

00

59

FEA0

00

00

66

66

6E

76

66

00

B4

FDE0

00

3C

66

66

6E

6E

3E

00

FF

FEA8

00

18

66

66

6E

76

66

00

D4

FDE8

00

7C

66

66

7C

6C

66

00

7B

FEB0

00

00

66

6C

78

6C

66

00

CA

FDF0

00

3C

60

3C

06

66

3C

00

60

FEB8

00

00

1E

36

36

36

66

00

DC

FDF8

00

7E

18

18

18

18

18

00

EB

FEC0

00

00

C6

EE

D6

C6

C6

00

D4

FE00

00

66

66

66

66

66

3C

00

38

FEC8

00

00

66

66

7E

66

66

00

DC

FE08

00

66

66

66

66

3C

18

00

F2

FED0

00

00

3C

66

66

66

3C

00

78

FE10

00

C6

C6

D6

D6

FE

44

00

88

FED8

00

00

7E

66

66

66

66

00

EC

FE18

00

66

3C

18

18

3C

66

00

8A

FEE0

00

00

3E

66

3E

36

66

00

5C

FE20

00

66

3C

18

18

18

18

00

20

FEE8

00

00

7C

66

66

7C

60

00

0A

FE28

00

7C

0C

18

30

60

7C

00

D2

FEF0

00

00

3C

66

60

66

3C

00

92

FE30

00

1E

18

18

18

18

1E

00

CA

FEF8

00

00

7E

18

18

18

18

00

D4

FE38

00

C0

60

30

18

0C

06

00

B0

FF00

00

00

66

66

3E

06

3C

00

4B

FE40

00

78

18

18

18

18

78

00

8E

FF08

00

00

D6

D6

7C

D6

D6

00

DB

FE48

00

18

3C

5A

18

18

18

00

3C

FF10

00

00

7C

66

7C

66

7C

00

4F

FE50

00

00

00

00

00

00

00

FF

4D

FF18

00

00

60

60

7C

66

7C

00

35

FE58

00

00

DC

F6

F6

F6

DC

00

F0

FF20

00

00

C6

C6

F6

DE

F6

00

75

FE60

00

00

3C

66

7E

66

66

00

4A

FF28

00

00

3C

66

0C

66

3C

00

77

FE68

00

00

7C

60

7C

66

7C

00

A0

FF30

00

00

C6

D6

D6

D6

FE

00

75

FE70

00

00

6C

6C

6C

6C

7E

06

A2

FF38

00

00

78

0C

3C

0C

78

00

7B

FE78

00

00

3C

6C

6C

6C

FE

C6

BA

FF40

00

00

C6

D6

D6

D6

FF

03

89

FE80

00

00

7E

60

7C

60

7E

00

B6

FF48

00

00

66

66

3E

06

06

00

5D

FE88

00

00

7C

D6

D6

7C

10

00

3A

FF50

00

00

70

30

3C

36

3C

00

9D

После того, как работа по вводу этих кодов будет завершена, запишите полученный символьный набор на магнитную ленту: SAVE "chr" CODE 61600,768. Он пригодится Вам и для других программ.

Перед тем, как набирать текст БЕЙСИК-программы, сделайте следующее: CLEAR 64599: LOAD "chr"CODE POKE 23606,88: POKE 23607,251

Теперь включен загруженный символьный набор. Попробуйте набирать БЕЙСИК программу. Токены ключевых слов "Спектрума", состоящие из заглавных латинских букв, будут печататься как обычно. Текст, набираемый при помощи буквенных клавишей при отключенном режиме CAPS LOCK, будет набираться русскими буквами. Так же он будет выглядеть и на экране. При включений регистра CAPS LOCK, текст будет набираться латинскими буквами. При этом, правда, придется обходиться только заглавными русскими и латинскими буквами, но зато это позволит легко совмещать русский и английский текст внутри одного оператора PRINT. Имена переменных для удобства чтения набираются заглавными латинскими буквами.

Кроме формирования самого символьного набора, в программу вводятся дополнительные строки. Это строка 2, загружающая символьный набор. С нее должен происходить автостарт программы. Еще это переключатели шрифта, строки 8 и 9 (могут быть любые другие номера, такие, какие удобно вписываются в программу). Используя команду GO SUB 8, можно включить загруженный символьный набор, а командой GO SUB 9 -выключить его. Эти команды можно как включать в БЕЙСИК-строки, так и подавать напрямую, находясь в режиме редактирования БЕЙСИК-строк.

**** RFRICRH SEEDS ****

К*******************************

ВПЫ ХОД. ЧКПЖНТЕ лчнкч.с

Следует также предупредить тех пользователей, которые имеют БЕТА-ДИСК

I I I I I ^МНИ I I I ■!■ I I I I I I I I I

П В С □ Е F ХОД G Н I J К L

интерфейс. В программах, в которых используется блок UDG-графики, стандартно расположенный после рестарта компьютера с адреса 65368, полезно бывает перед стартом программы включать еще и конструкцию, задающую системную переменную UDG: POKE 23675,88: POKE 23676,255

Это, казалось бы лишнее, так как после рестарта компьютера в указанные ячейках и так находятся указанные числа. Дело в том, что значения этих ячеек могли быть изменены в процессе работы дискового загрузчика "boot". Так некорректно ведет себя, например, в общем-то очень хороший и широко распространенный загрузчик "MOA-SERVICE". Эта рекомендация убережет Вас от возможных "накладок" и в других случаях.

А теперь, когда есть определенность с вопросом русификации, можно переходить непосредственно к тексту программы "AFRICAN SEEDS".

1 GO TO 1000

2 CLEAR 64599:LOAD "CHR" CODE 64600

3 POKE 23675,88:POKE 23676,255:RESTORE 2100:FOR P=0 TO 95:READ G:POKE USR "A"+P,G:NEXT P

4 RUN

5 SAVE "AFRICA"LINE 2:SAVE "CHR" CODE 64600,768:STOP

8 POKE 23606,88:POKE 23607,251:RETURN:REM RUS

9 POKE 23606,0:POKE 23607,60:RETURN:REM LAT

100 PRINT AT 17, CODE A$(H);BRIGHT 1;PAPER 2;SCREEN$(17, CODE A$(H)):LET S=H(H):LET H(H)=0:LET D=D+1

110 IF S THEN LET S=S-1:LET H=H+1-12*(H=12):LET H(H)=H(H)+1:GO TO 110

200 PRINT AT 17, CODE A$(H);BRIGHT 1;INK 0;PAPER 2;SCREEN$(17, CODE A$(H)):IF H(H)<>1 THEN

FOR B=10 TO 10+H(H):BEEP .002,B+D:NEXT B:RETURN 210 PRINT AT 17, CODE A$(H);BRIGHT 1;PAPER 5;SCREEN$(17, CODE A$(H));:LET END=1:LET OP=13-H:FOR B=20 TO 20+H(OP):BEEP .02,B:NEXT B:IF (NOT ZX AND OP<7) OR (ZX AND OP>6) OR NOT H(OP) THEN RETURN

220 LET WIN=H(OP):LET H(OP)=0:LET S(2-ZX)=S(2-ZX)+WIN*SC:PRINT AT 17, CODE A$(OP);FLASH 1;BRIGHT 1;PAPER 5;SCREEN$(17, CODE A$(OP)):FOR B=30 TO 30+WIN:BEEP .025,B:NEXT B:RETURN

300 PRINT AT 19,25;" ";AT 19,11;BRIGHT 1;PAPER (D-8*INT (D/8));INK 9;" ХОД ";D;"

";:FOR P=1 TO 12:RESTORE 2300+B(P):READ N$ 330 PRINT AT CODE X$(P), CODE Y$(P);N$:LET H(P)=B(P):BEEP .005,D+B(P):NEXT P 340 PRINT AT 15,11;S(2);:PRINT AT 15,20;S(1):PRINT AT 19,11;L$:RETURN 400 BRIGHT 0:PRINT AT 17,0;PAPER 4;"A B C D E F ХОД G H I J K L":RETURN 500 PRINT ("ЧИСЛО ПРОИГРАННЫХ ВАМИ ОЧКОВ: "+STR$ (S(1)-S(2)) AND S(1)>S(2))+("ЧИСЛО

ВЫИГРАННЫХ ВАМИ ОЧКОВ: "+STR$ (S(2)-S(1)) AND S(1)<S(2)) 510 GO SUB 400

520 PRINT AT 0,0:INPUT "ХОТИТЕ СЫГРАТЬ ЕЩЕ РАЗ? (Y) ";LINE U$:IF CODE U$=121-32*(U$="Y")

THEN GO TO 1040 530 STOP

580 PRINT AT 18,0;"ЛУНКИ ПРОТИВНИКА ПУСТЫ. ВСЕ ОС-ТАВШИЕСЯ ФИШКИ ПЕРЕШЛИ К НЕМУ." 600 PRINT AT 20,0;"ИГРА ";("ПРОДОЛЖАЕТСЯ." AND S(1)=S(2));("ЗАКОНЧЕНА." AND S(1)<>S(2)):GO TO 500

700 IF S(1)>24 OR S(2)>24 THEN GO TO 600

710 IF S(1)+S(2)>39 AND NOT WIN THEN LET C=C+1:IF C>10 THEN GO TO 600 720 RETURN

1000 GO SUB 8:POKE 23658,8:LET D=0:DIM S(2):DIM B(12):DIM H(12):DIM A$(12):DIM C$(12):DIM X$(12):DIM Y$(12)

1020 GO SUB 2000:PRINT AT 19,1;INK 0;"ВЫ БУДЕТЕ СМОТРЕТЬ ИНСТРУКЦИЮ?"^ 21,4;"(ЕСЛИ ДА, ТО

ВВЕДИТЕ Y)":INPUT LINE U$:IF CODE U$+32*(U$="Y")=121 THEN GO SUB 2400

1030 RESTORE 2160:FOR N=1 TO 12:READ A:LET A$(N)=CHR$ A:NEXT N 1040 GO SUB 2020

1060 GO SUB 2080:INPUT LINE U$:IF U$<"0" OR U$>"9" THEN GO TO 1060

1070 LET L=VAL U$+20*(U$="0"):PRINT AT 15,0;" ":FOR P=15 TO 21 STEP

2:PRINT AT P,17;" ":NEXT P:LET L$="УРОВЕНЬ "+U$+" "

1080 RESTORE 3000:FOR N=1 TO 12:READ X,Y:PRINT AT X,Y;" ";AT X+2-4*(N>6),Y+1;INK 7;PAPER

0;BRIGHT 1;CHR$ (64+N):LET X$(N)=CHR$ X:LET Y$(N)=CHR$ Y:NEXT N 1090 PRINT AT 15,0;BRIGHT 1;PAPER 1;INK 7;"ИГРОК СЧЕТ КОМПЬЮТЕР"

1100 DIM M(12):LET D=0:LET T=0:LET SC=0:LET C=0:LET S(1)=0:LET S(2)=0:FOR P=1 TO 12:LET

B(P)=4:LET H(P)=4:NEXT P 1110 RANDOMIZE :LET ZX=INT (RND *2)

GO SUB 300:GO SUB 400

IF ZX THEN PRINT AT 17,19;BRIGHT 1;INK 7;PAPER 1;">":INPUT "ПЕРВЫЙ ХОД ВЫПАЛ КОМПЬЮТЕРУ. НАЖМИТЕ ENTER, ЕСЛИ ГОТОВЫ. ";LINE U$:LET PREF=INT (RND *7+6):GO TO 1400

IF NOT ZX THEN GO TO 1500 GO SUB 700

IF NOT (B(7)+B(8)+B(9)+B(10)+B(11)+B(12)) THEN LET S(1)=S(1)+48-S(1)-S(2):GO TO 580 LET OP=0:LET SC=0:LET WIN=0:DIM M(12)

PRINT AT 17,19;BRIGHT 1;INK 7;PAPER 1;">":INPUT "НАЖМИТЕ ENTER, ПОЖАЛУЙСТА.";LINE U$:GO

SUB 400:IF U$=" STOP " THEN GO TO 600 PRINT AT 19,26;"АНАЛИЗ":FOR P=7 TO 12:LET D=0:LET END=0:LET WIN=0:LET OP=0:IF NOT B(P)

THEN GO TO 1350 LET H=P:LET M=P:FOR K=1 TO 12:LET H(K)=B(K):NEXT K GO SUB 400:GO SUB 100:IF D<1 AND NOT END THEN GO TO 1330 LET M(P)=WIN*END NEXT P

LET PREF=7:PRINT AT 19,26;"ОЦЕНКА"^ P=7 TO 12:IF M(P)>M(PREF) THENLET PREF=P NEXT P

LET B=0:FOR P=7 TO 12:IF P<>PREF THEN IF B(P)>0 THEN IF M(P)=M(PREF) THEN LET B=B+1:LET M(B)=P

NEXT P:IF B THEN LET PREF=M(INT (RND *B)+1)

LET END=0:LET D=0:LET OP=0:LET SC=1:LET H=PREF:LET WIN=0:GO SUB 400:FOR P=1 TO 12:LET H(P)=B(P):NEXT P

PRINT AT 17, CODE A$(H);BRIGHT 1;PAPER 2;SCREEN$(17, CODE A$(H)):GO SUB 100

FOR P=1 TO 12:LET B(P)=H(P):NEXT P:GO SUB 300:IF NOT END THEN GO SUB 400:GO TO 1410

GO SUB 700

IF NOT (B(1)+B(2)+B(3)+B(4)+B(5)+B(6)) THEN LET S(2)=S(2)+48-S(1)-S(2):GO TO 580 PRINT AT 17,12;BRIGHT 1;INK 7;PAPER 1;"<":POKE 23658,8:INPUT "ВАШ ХОД. УКАЖИТЕ

ЛУНКУ/'^^ U$:IF U$=" STOP " THEN GO TO 600 LET H= CODE U$-64-32*(U$>"Z"):GO SUB 400:IF H<0 OR H>6 THEN PRINT #0;"ЗАПРЕЩЕННЫЙ

ХОД......ПОВТОРИТЕ, ПОЖАЛУЙСТА.":BEEP 1.5,0:GO TO 1500

LET D=0:LET ZX=0:LET SC=1:LET WIN=0:LET OP=0:IF NOT B(H) THEN GO TO 1500

PRINT AT 17, CODE A$(H);BRIGHT 1;PAPER 2;SCREEN$(17, CODE A$(H)):GO SUB 100

FOR P=1 TO 12:LET B(P)=H(P):NEXT P:IF NOT OP THEN GO SUB 300:GO SUB 400:GO TO 1560

GO SUB 300:LET ZX=1

GO TO 1200

BORDER 4:PAPER 4:INK 2:CLS:PRINT " "

■ I ■ HH H I

I I I ■ ■ I ■■ I

IIII I I I I II I I I I

PRINT "

II

II I I

III

III

II I IIII

I

I

II I II

PRINT AT 16,3;INK 0;"MIKE EDWARDS + ""ИНФОРКОМ......:RETURN

BORDER 6:PAPER 6:INK 0:CLS:PRINT PAPER 4;"**** AFRICAN SEEDS ************************************

PRINT ' "

■■■■■■■■■■■■В

IIKHLIIKHLIIKHLIIKHLIIKHLIIKHLI

PRINT PAPER 1'"

PRINT ' "

■ ■■■■■■■■■■■I

|KhLHKhLIIKhLIIKhLIIKhLIIKhLI

RETURN

PRINT AT 15,0;"ВВЕДИТЕ УРОВЕНЬ: 9=ТЯЖЕЛЫЙ""TAB19;"0=ЭКСПЕРТ" RETURN

DATA 0,0,0,24,24,0,0,0 DATA 0,24,24,0,0,24,24,0 DATA 24,24,0,24,24,0,24,24 DATA 0,102,102,0,0,102,102,0 24,24,0,195,195

DATA 195,195,0

DATA 102,102,0

DATA 102,102,0

DATA 219,219,0

2420

2430 2440

102,102,0,102,102 219,219,0,102,102 102,102,0,219,219 DATA 255,255,255,255,31,7,3,1 DATA 255,255,255,255,248,224,192,128 DATA 128,192,224,248,255,255,255,255 DATA 1,3,7,31,255,255,255,255 DATA 0,2,4,6,8,10,21,23,25,27,29,31 DATA " DATA " A DATA " B DATA "AAA DATA " D DATA " E DATA "BBB DATA "BCB DATA "BDB DATA "CCC DATA "CDC DATA "CEC DATA "DDD DATA "DED DATA "EDE DATA "FCF DATA "FDF DATA "GCG DATA "FFF DATA "HCH DATA "HDH DATA "GGG DATA "HFH DATA "HGH DATA "HHH DATA " 25 DATA " 26 DATA " 27 DATA " 28 DATA " 29 DATA " 30

BORDER 4:PAPER 4:INK 0:CLS:PRINT "**** ************************************"

PRINT ""

ИГРА ОСНОВАНА НА АФРИКАНСКИХ ИГРАХ ТИПА ""МАНКАЛА"", ХОТЯ ЕЕ ПРАВИЛА ПРОЩЕ, ЧЕМ У БОЛЬШИНСТВА ЕЕ ПРЕДШЕСТВЕННИЦ." PRINT '"

ИМЕЕТСЯ 12 ЛУНОК С ЧЕТЫРЬМЯ ФИШКАМИ КАЖДАЯ. ОНИ ПОРОВНУ РАЗДЕЛЕНЫ МЕЖДУ ИГРОКАМИ. ВАША ЦЕЛЬ - НАБРАТЬ ОЧКИ, СОБИРАЯ КАК МОЖНО БОЛЬШЕ ФИШЕК. 25 ОЧКОВ ОБЕСПЕЧИВАЕТ ПОБЕДУ." INPUT "ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ ENTER " BORDER 4:PAPER 4:INK 0:CLS:PRINT "****

2080

2090 2100 2101 2102

2103

2104

2105

2106

2107

2108

2109

2110 2111 2160

2300

2301

2302

2303

2304

2305

2306

2307

2308

2309

2310

2311

2312

2313

2314

2315

2316

2317

2318

2319

2320

2321

2322

2323

2324

2325

2326

2327

2328

2329

2330 2400

2410

AFRICAN SEEDS

LINE U$

AFRICAN SEEDS

1-3=НОВИЧОК""TAB17;"4-6=ЛЕГКИЙ""TAB17;"7-

************************************

PRINT ""

ИГРОКИ ПО ОЧЕРЕДИ БЕРУТ ФИШКИ ИЗ ЛЮБОЙ СВОЕЙ ЛУНКИ И РАССЫПАЮТ ИХ ПО ОДНОЙ В СОСЕДНИЕ ЛУНКИ ПРОТИВ ЧАСОВОЙ СТРЕЛКИ, НАЧИНАЯ С ЛУНКИ, НАХОДЯЩЕЙСЯ ПО-СОСЕД-СТВУ С НАЧАЛЬНОЙ."

PRINT '"

ЕСЛИ ПОСЛЕДНЯЯ ФИШКА ОКАЖЕТСЯ В ЗАНЯТОЙ ЛУНКЕ, ТО ИГРОК БЕРЕТ ФИШКИ ИЗ НЕЕ И ПРОДОЛЖАЕТ ХОД В ТОМ ЖЕ ПОРЯДКЕ. ТАК ПРОДОЛЖАЕТСЯ, ПОКА ХОД НЕ ЗАВЕРШИТСЯ В ПУСТОЙ ЛУНКЕ."

PRINT '"

ЕСЛИ ХОД ЗАКАНЧИВАЕТСЯ В ПУСТОЙ ЛУНКЕ ПРОТИВОПОЛОЖНОГО РЯДА, ИЛИ НАПРОТИВ ПУСТОЙ ЛУНКИ, ТО ХОД ПЕРЕХОДИТ К ПРОТИВНИКУ."

INPUT "ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ ENTER ";LINE U$

BORDER 4:PAPER 4:INK 0:CLS:PRINT "**** AFRICAN SEEDS ************************************"

PRINT ""

ЗАХВАТ ФИШЕК ВОЗМОЖЕН ТОЛЬКО ЕСЛИ ПОСЛЕДНЯЯ ФИШКА В ХОДЕ ПОПАДАЕТ В ПУСТУЮ ЛУНКУ СВОЕГО РЯДА, НАПРОТИВ ЗАНЯТОЙ ЛУНКИ ПРОТИВНИКА. ТОГДА ФИШКИ ПРОТИВНИКА ИЗЫМАЮТСЯ, А СЧЕТ УВЕЛИЧИВАЕТСЯ."

PRINT ' "

ИГРА ПРОДОЛЖАЕТСЯ, ПОКА ОДИН ИЗ ИГРОКОВ НЕ НАБЕРЕТ БОЛЕЕ 24 ОЧКОВ ИЛИ ОБА ПАРТНЕРА НЕ СОГЛАСЯТСЯ НА НИЧЬЮ."

PRINT ' "

ВНИМАНИЕ! ЕСЛИ ВЫ ОСТАВИТЕ СВОЕГО ПРОТИВНИКА БЕЗ ФИШЕК И БЕЗ ХОДА, ТО ВСЕ ФИШКИ, ИМЕЮЩИЕСЯ НА ДОСКЕ, ПЕРЕХОДЯТК НЕМУ."

INPUT "ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ ENTER ";LINE U$

BORDER 4:PAPER 4:INK 0:CLS:PRINT "**** AFRICAN SEEDS ************************************"

PRINT " "

ПРАВО ПЕРВОГО ХОДА ОПРЕДЕЛЯЕТ

КОМПЬЮТЕР СЛУЧАЙНЫМ ОБРАЗОМ.......

ВЫ ИМЕЕТЕ ЛУНКИ ОТ A ДО F. КОМ ПЬЮТЕР ИМЕЕТ ЛУНКИ ОТ G ДО L."

PRINT ' "

КОГДА БУДЕТ ВАШ ХОД, ВВЕДИТЕ СИМВОЛ ТОЙ ЛУНКИ, ИЗ КОТОРОЙ ВЫ ХОТИТЕ СДЕЛАТЬ ХОД. КОМПЬЮТЕР ЖДЕТ НАЖАТИЯ ENTER ДЛЯ НАЧАЛА СВОЕГО ХОДА."

PRINT ' "

КОГДА ИГРА БУДЕТ ЗАВЕРШЕНА, КОМПЬЮТЕР ПОДСЧИТАЕТ И ОБЪЯВИТ РЕЗУЛЬТАТ. МОЖНО ПРЕРВАТЬ ИГРУ В ЛЮБОЕ ВРЕМЯ, ВВЕДЯ: "" STOP ""."

INPUT "

ВВЕДИТЕ R ДЛЯ ПОВТОРА ИНСТРУКЦИИ ИЛИ ENTER, ЧТОБЫ НАЧАТЬ ИГРУ. ";LINE З$:IF

RETURN

DATA 11,2,11,7,11,12,11,17,11,22,11,27,5,27

CODE З$=114-32*(З$="R") THEN GO TO 2400 ,5,22,5,17,5,12,5,7,5,2

Набирая программу, Вы периодически можете записывать результат на магнитную ленту, выполняя: RUN 5. При наборе программы обратите внимание, пожалуйста, на те места, где набор происходит с использованием графического регистра. Это строки 20002005, в которых используется символ с кодом 143 (регистр [G], затем CS+8). Это также символы с кодами 131, 140, 143 блочной графики и символы "I"-"L" UDG-графики в строках 2030, 2050. Символы UDG-грaфики "A"-"H" используются при наборе строк 2300-2324.

Автостарт программы происходит со строки 2, где прежде всего резервируется место дли расположения загружаемого символьного набора, путем переустановки значения RAMTOP оператором CLEAR. После загрузки символьного набора происходит задание банка символов UDG-графики. На этом подготовку можно считать законченной. Далее строка 4 передает управление на начало программы. При отладке, после остановки программы, ее можно запустить командой RUN c начальной строки.

Так как мы используем русско-латинский символьный набор, то перед тем, как будет произведен ввод параметров при помощи оператора INPUT, корректно будет принудительно включать режим CAPS LOCK (устанавливать курсор [C]), так как вводиться должны параметры в виде английских букв. Это происходит, например, в начале выполнения программы, в строке 1000 подачей команды POKE 23658,6, а также в других местах.

Подпрограмма GO SUB 2000 в строке 1020 - это вывод на экран титульной заставки. После этого происходит запрос для вывода инструкции. Результат запроса (переменная U$) анализируется, причем результат не зависит от того, нажата ли клавиша "Y" в режиме CAPS LOCK или нет. В том случае, если нажата клавиша "Y", происходит вызов подпрограммы GO SUB 2400, которая выводит на экран инструкцию с правилами игры.

Подпрограмма GO SUB 2020 в строке 1040 обеспечивает прорисовку игрового поля -игровые лунки играющего и компьютера.

В строке 1060 происходит ввод уровня сложности игры. Кстати, при тестировании программы выяснилось, что эта величина нигде дальше в программе не участвует. Непонятно, для чего автор ввел этот параметр. Может быть, рассчитывая в дальнейшем на усовершенствование игры, или на то, что "пытливые умы" сами сделают такое усовершенствование. В общем, есть простор для творческого поиска. А можно пойти по другому пути: просто исключить все, что касается ввода уровня. Но нам кажется, что вариант с заданием уровня (пусть фиктивным) смотрится динамичнее.

Далее идет подготовка игрового поля и предустановка исходных данных. В строке 1110 происходит определение того, кто делает первый ход. Если право первого хода выпало компьютеру, тогда после нажатия ENTER программа переходит на строку 1400. Кстати, свой первый ход компьютер делает случайным образом выбирая одну из своих лунок. Это происходит путем задания переменной PREF в строке 1150. Но это касается только первого хода. В дальнейшем, перед тем, как сделать ход, компьютер рассчитывает наиболее удачный вариант. Это осуществляется в строках, начиная с 1200. В этой строке, если право очередного хода имеет человек, то происходит переход на строку 1500. Если ход принадлежит компьютеру, то ожидается нажатие ENTER, после чего ситуация анализируется (со строки 1300) а затем, в строке 1360, выбирается наиболее предпочтительный вариант PREF. Далее, со строки 1400 происходят действия, непосредственно связанные с выполнением кода.

Если очередной ход делает человек, то происходит переход на строку 1500. На эту строку мы попадаем сразу после того, как будет закончен ход компьютера (в строках с 1400) или в начале игры, в случае первого хода, (см. строки 1110-1200). В конце этой части программы происходит передача хода компьютеру (строка 1580) и повторение цикла со строки 1200.

И, в заключение, предлагаем еще одну игру для тех, кто любит программы, развивающие внимательность, наблюдательность и быстроту реакции.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Анкета - Резyльтаты анкетирования.
Поздравления - Поздравления с Новым Годом!
Этюды - Процедура рисования линии.
Почта - Письма и объявления.
Советы экспертов - Total Eclipse 2.

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