ГЛАВА ИЗ КНИГИ "ИГРАЕМ САМИ,
ИГРАЕМ С КОМПЬЮТЕРОМ"
ИГРА "КАЛАХ"
Древняя игра
"Калах" подробно описана в журнале "Наука и жизнь", № 12,
В каждую из 12
коробочек – 6 своих и 6 противника – кладут по 6 камней. Затем игроки по
очереди из любой своей коробочки берут все лежащие там камни, раскладывают их
по одному в свои и чужие коробочки, начиная с соседней, обходя их против
часовой стрелки, не пропуская и свой калах – седьмую коробочку, находящуюся
справа от шестой коробочки каждого игрока. Калах противника пропускается. Если
последний камень попадает в калах, игрок получает право ещё одного хода, в
противном случае ход передаётся партнёру. Когда последний камень попадает в
свою пустую коробочку, игрок забирает его и все камни противника, лежащие в
коробочке противника напротив, если она не пуста, и кладёт их в свой калах.
Если коробочка противника пуста, то камень остаётся на месте, перекладывания в
калах не делается. Выигрывает тот, кто соберёт в своём калахе более 36 камней.
Если к моменту хода одного из игроков все его коробочки пусты, а в его калахе
менее 36 камней, он проиграл. Если же в его калахе ровно 36 камней, то по
договору игроков такой исход партии можно считать ничейным.
Ниже дано
схематическое изображение игрового поля игры:
|
|
|
|
|
|
|
|
||||||||||||
Калах |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
|
|
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
|
|
|
|
|
|
|
||||||||||||||
|
|||||||||||||||||||
|
|
|
|
|
|
|
|
||||||||||||
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
Калах |
|
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
|
|
|
|
|
|
|
|
Вам предлагается программа
для игры в Калах. В игре компьютер – ваш равноправный партнёр. Правда, не
исключено, что он будет играть несколько слабее вас. Дело в том, что
предлагаемая программа плохо "учит" его играть. В шахматах о плохом
игроке говорят: "Дальше одного хода ничего не видит". Вот так и
компьютер "обучен" видеть только на один ход. Более того: даже один
ход он не всегда делает оптимальным образом, так как варианты хода
анализируются в программе последовательно и результаты анализа не сопоставляются.
Автор ставил перед собой минимальную задачу: составить программу, по которой
компьютер мог бы элементарно играть в игру с учётом всех её правил. Такая
программа перед вами. Для тех, кто хочет попробовать свои силы в
программировании, эта программа предоставляет большие возможности. Первый этап
усовершенствования программы – выбор оптимального варианта одного хода. Второй
этап – увеличение глубины просмотра на два и более ходов. Другой путь:
запрограммировать предложенные в журнале "Наука и жизнь" стратегии
игры.
Итак, если игра с
компьютером по предложенной программе вас не устраивает, у вас есть два выхода:
либо "научить" компьютер играть лучше, либо найти партнёра – человека
– для игры.
Комплект для игры
можно сделать следующим образом: начертить коробочки на листе картона или любом
плотном материале, либо просто на поверхности стола. Камнями могут служить
пуговицы, фишки для игры "го" и т. д. Желательно, чтобы они были
примерно одинакового размера и формы, цвет не имеет значения. Если есть
материал (пластмасса, дерево и т. п.) и немного изобретательности, то коробочки
можно смастерить.
Несколько слов о
программе. Ниже изображено игровое поле, как оно выглядит на экране монитора
перед началом партии.
КАЛАХ № 6 № 5 №
4 № 3 № 2 № 1
6 6 6 6 6 6
№
1 № 2 № 3 № 4 № 5 №
6 КАЛАХ
6 6 6 6 6 6
Перед
началом игры компьютер предлагает человеку определить, кто будет начинать игру.
Первые два хода компьютер (если он начинает) делает всегда одинаково. Далее
игра развивается по своим правилам. После каждого хода на экран монитора
выводится новый вид игрового поля с новым содержимым коробочек и калахов
(количество камней в коробочках и калахах обозначается числом). Человек
сообщает свой ход вводом номера коробочки, из которой он хочет разложить камни.
Если в указанной коробочке нет камней, то компьютер возвращает игрока на
повторный ввод хода, сделав замечание: "Нет камней!" Коробочки
человека расположены сверху, а коробочки компьютера – внизу.
Если к моменту хода
одного из игроков все его коробочки пусты, а в его калахе ровно 36 камней, то
исход партии считается ничейным. Если в его калахе в этот момент меньше 36
камней, то он проиграл.
Ведётся счёт игры,
после каждой партии сообщается, сколько партий выиграл человек и сколько – компьютер.
ТЕКСТ ПРОГРАММЫ
10 DIM L(7), M(7)
12 S1 = 0: S2 = 0
15 FOR I = 1 TO 6
25 NEXT I
35 GOSUB 500
40 PRINT "Vy budete hodit
pervym? (da – Y, net - N)"
45 INPUT B$
50 IF B$ = "Y" THEN
100
55 IF B$ = "N" THEN
120
60 PRINT "Veedite
pravilno otvet!": GOTO 45
100 GOSUB 200
102 IF L (7) > 36 THEN 1000
112 IF P = 1 THEN 100
120 GOSUB 622
122 IF M (7) > 36 THEN 1200
130 IF P = 1 THEN 120
140 GOTO 100
200 PRINT: PRINT "Vash
hod!"
202 P = 0: Q = 0
204 FOR K = 1 TO 6
206 IF L (K) > 0 THEN Q = 1
207 NEXT K
208 IF Q <> 1 THEN IF L
(7) <> 36 THEN 1200
209 IF Q <> 1 THEN 1250
210 INPUT I
212 IF I > 6 THEN 210
214 IF I < 1 THEN 210
215 IF L (I) = 0 THEN 1220
220 IF L (I) < (7 - I) THEN
300
225 IF L (I) = (7 - I) THEN 320
227 IF L (I) < 13 THEN 360
230 IF L (I) = 13 THEN 325
235 IF L (I) < (20 - I)
THEN 335
240 IF L (I) = (20 - I) THEN
350
245 GOTO 380
300 D = L (I): L (I) = 0
305 FOR K = 1 TO D
310 J = I + K: L (J) = L(J) +
1
315 NEXT K
317 IF L (J) = 1 THEN IF M (7 -
J) > 0 THEN L (7) = L (7) + 1 + M (7 - J): M (7 - J) = 0: L (J) = 0
319 GOTO 395
320 P = 1
324 GOTO 395
325 D = L (I): L (I) = 0
327 GOSUB 605
329 GOSUB 615
331 FOR K = 1 TO I: L (K) = L
(K) + 1: NEXT K
333 IF M (7 - I) > 0 THEN L
(7) = L (7) + 1 + M (7 - I): M (7 - I) = 0: L (I) = 0
334 GOTO 395
335 D = L(I): L(I) = 0
337 GOSUB 605
339 GOSUB 615
341 D = D - (13 - I)
343 FOR K = 1 TO D: L (K) = L
(K) + 1: NEXT K
345 GOTO 395
350 P = 1: D = L(I): L(I) = 0
352 GOSUB 605
354 GOSUB 615
356 FOR K = 1 TO 7: L (K) = L
(K) + 1: NEXT K
358 GOTO 395
360 D = L (I): L (I) = 0
362 GOSUB 605
364 D = D - (7 - I)
366 IF D <= 6 THEN 374
367 GOSUB 615
368 D = D - 6
369 FOR K = 1 TO D: L (K) = L
(K) + 1: NEXT K
370 K = K - 1: IF L (K) = 1 THEN
IF M (7 - K) > 0 THEN L (7) = L (7) + 1 + M (7 - K): M (7 - K) = 0: L (K) =
0
372 GOTO 395
374 FOR K = 1 TO D: M (K) = M
(K) + 1: NEXT K
376 GOTO 395
380 D = L (I): L (I) = 0
381 GOSUB 605
382 GOSUB 615
383 FOR K = 1 TO 7: L (K) = L
(K) + 1: NEXT K
384 D = D - (20 - I)
385 IF D <= 6 THEN 393
386 GOSUB 615
387 D = D - 6
388 IF D > 6 THEN 391
389 FOR K = 1 TO D: L (K) = L
(K) + 1: NEXT K
390 GOTO 395
391 FOR K = 1 TO 7: L (K) = L
(K) + 1: NEXT K
392 D = D - 7
393 FOR K = 1 TO D: M (K) = M
(K) + 1: NEXT K
395 GOSUB 500
400 RETURN
500 PRINT : PRINT " KALAH"; " #6"; " #5"; " #4"; " #3"; " #2"; " #1"
510 PRINT : PRINT
515 FOR I = 0 TO 6
520 J = 7 - I
525 PRINT " "; L (J);
530 NEXT I
535 PRINT : PRINT : PRINT "__________________________________________________________________________"
540 PRINT " "; " #1"; " #2"; " #3"; " #4"; " #5"; " #6"; " KALAH"
545 PRINT : PRINT
555 PRINT " ";
560 FOR I = 1 TO 7
565 PRINT " "; M (I);
570 NEXT I
575 PRINT : PRINT : PRINT
580 RETURN
605 FOR K = I + 1 TO 7: L (K)
= L (K) + 1: NEXT K
610 RETURN
615 FOR K = 1 TO 6: M (K) = M
(K) + 1: NEXT K
620 RETURN
622 P = 0: Q = 0
624 FOR K = 1 TO 6
626 IF M (K) > 0 THEN Q = 1
627 NEXT K
628 IF Q <> 1 THEN IF M
(7) <> 36 THEN 1000
629 IF Q <> 1 THEN 1250
630 PRINT : PRINT "MOJ
HOD! NAJMITE KLAVISHU H"
632 INPUT B$
634 IF B$ = "H" THEN
652
636 GOTO 630
652 FOR J = 1 TO 6
654 K = 7 - J
656 IF M (K) = J THEN P = 1: I
= K: GOTO 680
658 NEXT J
660 FOR J = 1 TO 6
662 K = 7 - J
664 IF M (K) = (13 + J) THEN P
= 1: I = K: GOTO 684
666 NEXT J
668 FOR J = 1 TO 6
670 IF M (J) = 13 THEN I = J:
GOTO 692
672 NEXT J
674 GOTO 712
681 FOR K = I + 1 TO 7: M (K)
= M (K) + 1: NEXT K
682 GOTO 395
685 FOR K = I + 1 TO 7: M (K)
= M (K) + 1: NEXT K
686 FOR K = 1 TO 6: L (K) = L
(K) + 1: NEXT K
688 FOR K = 1 TO 7: M (K) = M
(K) + 1: NEXT K
690 GOTO 395
692 IF L (7 - I) = 0 THEN 712
696 FOR K = I + 1 TO 7: M (K) =
M (K) + 1: NEXT K
698 FOR K = 1 TO 6: L (K) = L
(K) + 1: NEXT K
700 FOR K = 1 TO I: M (K) = M
(K) + 1: NEXT K
702 IF L (7 - I) > 0 THEN M
(7) = M (7) + 1 + L (7 - I): M (I) = 0: L (7 - I) = 0
704 GOTO 395
712 FOR K = 1 TO 5
713 FOR J = 1 TO 6 - K
714 IF L (K) = J THEN IF L (K
+ J) = 0 THEN IF M (7 - K - J) > 0 THEN I = 7 - K - J: GOTO 718
715 NEXT J
716 NEXT K: GOTO 754
718 D = M (I): M (I) = 0
720 IF D > (7 - I) THEN 728
722 FOR K = 1 TO D
724 J = I + K: M (J) = M (J) +
1
726 NEXT K: GOTO 750
728 FOR K = I + 1 TO 7: M (K)
= M (K) + 1: NEXT K
730 D = D - (7 - I)
732 IF D > 6 THEN 738
734 FOR K = 1 TO D: L (K) = L
(K) + 1: NEXT K
736 GOTO 395
738 FOR K = 1 TO 6: L (K) = L
(K) + 1: NEXT K
740 D = D - 6: IF D > 7
THEN 744
742 FOR J = 1 TO D: M (J) = M
(J) + 1: NEXT J
743 J = J - 1: GOTO 750
744 FOR K = 1 TO 7: M (K) = M
(K) + 1: NEXT K
746 D = D - 7: IF D > 6
THEN 738
748 GOTO 734
750 IF M (J) = 1 THEN IF L (7
- J) > 0 THEN M (7) = M (7) + 1 + L (7 - J): M (J) = 0: L (7 - J) = 0
752 GOTO 395
754 FOR K = 1 TO 6
756 IF L (K) = 13 THEN IF M (7
- K) > 0 THEN I = 7 - K: GOTO 718
758 NEXT K
760 FOR K = 1 TO 6
762 IF L (K) > 7 THEN IF L
(K) < (20 - K) THEN 766
764 NEXT K: GOTO 776
766 FOR K = 2 TO 6
768 FOR J = (13 - (K - 1)) TO
12
770 IF L (K) = J THEN IF L (K
- (13 - J)) = 0 THEN IF M (20 - K - J) > 0 THEN I = 20 - K - J: GOTO 718
772 NEXT J
774 NEXT K
776 FOR K = 1 TO 5
778 FOR J = 1 TO 6 - K
780 IF M (K) = J THEN IF M (K
+ J) = 0 THEN IF L (7 - K - J) > 0 THEN I = K: GOTO 718
781 NEXT J
782 NEXT K
784 FOR K = 2 TO 6
786 FOR J = (13 - (K - 1)) TO
12
788 IF M (K) = J THEN IF M (K
- (13 - J)) = 0 THEN IF L (20 - K - J) > 0 THEN I = K: GOTO 718
790 NEXT J
792 NEXT K
794 FOR K = 2 TO 6
796 IF M (K) = 12 THEN IF L (7
- K) > 0 THEN J = K: GOTO 802
798 NEXT K
800 GOTO 808
802 FOR K = J - 1 TO 1 STEP -1
804 IF M (K) > 0 THEN I =
K: GOTO 718
806 NEXT K
808 FOR K = 5 TO 1 STEP -1
810 FOR J = 1 TO 6 - K
812 IF M (K) = J THEN IF M (K
+ J) > 0 THEN IF L (7 - K - J) > 0 THEN IF M (K + J) < (13 - J) THEN I
= K + J: GOTO 718
814 NEXT J
816 NEXT K
818 FOR K = 1 TO 6
820 IF M (K) > 0 THEN I =
K: GOTO 718
822 NEXT K
1000 PRINT : PRINT
"POZDRAVLYAYU! VY VYIGRALI"
1010 S1 = S1 + 1
1015 GOSUB 1270
1020 PRINT : PRINT
"Sygraem eshe raz? Y-da, N-net"
1025 INPUT B$
1030 IF B$ = "Y"
THEN 15
1035 IF B$ = "N"
THEN 1290
1040 GOTO 1020
1200 PRINT : PRINT "Vy
proigrali!"
1210 S2 = S2 + 1
1215 GOSUB 1270
1217 GOTO 1020
1220 PRINT : PRINT "Net
kamnej!"
1225 GOTO 210
1250 PRINT : PRINT
"Nichjya!"
1260 GOTO 1020
1270 PRINT : PRINT "Schet
igry: CHELOVEK -"; S1; " KOMPYUTER -"; S2
1275 PRINT : PRINT
1280 RETURN
1290 END
________
Уважаемые
посетители сайта! Вы любите играть? Я очень люблю. Недаром в лучшие времена я
занималась составлением игровых программ. Прошли многие годы с того хорошего
времени. Мою старушку ЭВМ, наверное, давно сдали в утиль. Пришли на смену ЭВМ
персональные компьютеры. Вот у меня
теперь тоже есть компьютер – персональный! Но он “не умеет” играть. Программа –
вот она, перед вами, но она не работает на современном компьютере. Её надо
преобразовать для современной версии языка Бейсик (Basic). Я хотела, чтобы
этим преобразованием занялись юные программисты, о чём и написала на странице “Школа юного программиста”.
Однако юные программисты мне ничего не ответили. То ли задача эта им не по
зубам, то ли у них есть более интересные и важные задачи… Может быть, программа
для игры в калах есть в Интернете. Я искала (правда, очень мало). Нашла один
сайт по ключевому слову “калах”. На этом сайте написано много всякого, но нет
самого главного – программы для игры!
Может
быть, кто-нибудь заинтересуется этой задачей и поможет бабушке (то есть – мне)
получить из старой программы новую, работающую. Очень хочется бабушке поиграть.
Помогите!
В моей
книге “Играем сами, играем с компьютером” есть и другие игровые программы,
например, для игр реверси, рэндзю. Если вас заинтересует эта проблема, я могу
предоставить книгу в ваше распоряжение для доработки и, возможно, издания,
конечно, в соавторстве со мной. Жду ваших предложений! Пишите в Гостевую книгу,
а также по адресу: natalimak1@yandex.ru
Добавление (23 марта
Один древний философ сказал: “Всё течёт, всё
меняется”. В самом деле! Вот и мне удалось преобразовать программу для игры в
Калах для моего персонального компьютера. Я теперь уже играю со своим
компьютером в эту игру! Как оказалось, он играет удовлетворительно. Но,
конечно, можно “научить” его играть лучше. Об этом было сказано выше.
Как же мне удалось преобразовать программу?
Очень просто. Один виртуальный знакомый прислал по электронной почте
современный интерпретатор QBASIC (свет не без добрых людей!). Двоюродный брат, который тоже
математик и программист, подсказал, что в современной версии разделитель между
операторами не наклонная черта (как это было в моей старой программе), а
двоеточие. Ну, а дальше была введена программа и – интерпретатор её понял!
Я заменила здесь старый вариант программы
на новый. Так что, если у вас есть интерпретатор языка Basic, то вы тоже можете поиграть в игру по предложенной
программе. Желаю приятной игры!
Добавление: (28 марта
Я вспомнила, как когда-то очень давно играла в эту игру
на ЭВМ, но с партнёром. Это было тоже очень интересно. Игроки сами делали свои
ходы, а ЭВМ только раскладывала камни по коробочкам (и калахам) и отображала
результат каждого хода. Мы сражались очень увлечённо. Сейчас я решила сделать
для вас, дорогие мои посетители, такой вариант программы. Если у вас есть
партнёр (а комплекта для игры нет), то сыграйте с ним по этой программе.
Небольшие пояснения к игре с партнёром: игроки названы
“первый игрок” и “второй игрок”. Когда выводится сообщение “Ход первого
игрока”, надо нажать клавишу A (прописная латинская) и клавишу “ввод”. После этого надо ввести номер
коробочки, из которой первый игрок хочет разложить камни. Если последний камень
попал в калах и игроку предоставляется ещё один ход, то опять введите номер коробочки, из которой вы делаете ещё
один ход. Если же ход переходит ко второму игроку, то появляется сообщение “Ход
второго игрока”. Теперь надо (для подтверждения того, что второй игрок начал
свой ход) нажать клавишу W и клавишу
“ввод”, после чего ход второго игрока подтверждён и запрашивается номер
коробочки, из которой этот игрок хочет разложить камни. Далее всё аналогично
ходу первого игрока. Коробочки первого игрока находятся сверху, а коробочки второго игрока – внизу.
Кто из вас будет первым игроком, а кто вторым, решите вы сами. В конце каждой
партии выводится счёт, показывающий, сколько партий выиграли игроки. При новой
загрузке программы счёт начинается с нуля.
ТЕКСТ ПРОГРАММЫ
10 DIM L (7), M (7)
12 S1 = 0: S2 = 0
15 FOR I = 1 TO 6
25 NEXT I
35 GOSUB 500
40 PRINT "HOD PERVOGO IGROKA - klavisha
A"
45 INPUT B$
50 IF B$ = "A" THEN 100
55 GOTO 40
60 PRINT "HOD VTOROGO IGROKA - klavisha
W"
65 INPUT B$
70 IF B$ = "W" THEN 120
75 GOTO 60
100 GOSUB 200
102 IF L (7) > 36 THEN 1000
112 IF P = 1 THEN 100
115 GOTO 60
120 GOSUB 622
122 IF M (7) > 36 THEN 1200
130 IF P = 1 THEN 120
140 GOTO 40
200 P = 0: Q = 0
204 FOR K = 1 TO 6
206 IF L (K) > 0 THEN Q = 1
207 NEXT K
208 IF Q <> 1 THEN IF L (7) <> 36
THEN 1200
209 IF Q <> 1 THEN 1250
210 INPUT I
212 IF I > 6 THEN 210
214 IF I < 1 THEN 210
215 IF L (I) = 0 THEN 1220
220 IF L (I) < (7 - I) THEN 300
225 IF L (I) = (7 - I) THEN 320
227 IF L (I) < 13 THEN 360
230 IF L (I) = 13 THEN 325
235 IF L (I) < (20 - I) THEN 335
240 IF L (I) = (20 - I) THEN 350
245 GOTO 380
300 D = L (I): L (I) = 0
305 FOR K = 1 TO D
310 J = I + K: L (J) = L (J) + 1
315 NEXT K
317 IF L (J) = 1 THEN IF M (7 - J) > 0 THEN
L (7) = L (7) + 1 + M (7 - J): M (7 - J) = 0: L (J) = 0
319 GOTO 395
320 P = 1
324 GOTO 395
325 D = L (I): L (I) = 0
327 GOSUB 605
329 GOSUB 615
331 FOR K = 1 TO I: L (K) = L (K) + 1: NEXT K
333 IF M (7 - I) > 0 THEN L (7) = L (7) + 1
+ M (7 - I): M (7 - I) = 0: L (I) = 0
334 GOTO 395
335 D = L(I): L(I) = 0
337 GOSUB 605
339 GOSUB 615
341 D = D - (13 - I)
343 FOR K = 1 TO D: L (K) = L (K) + 1: NEXT K
345 GOTO 395
350 P = 1: D = L (I): L (I) = 0
352 GOSUB 605
354 GOSUB 615
356 FOR K = 1 TO 7: L (K) = L (K) + 1: NEXT K
358 GOTO 395
360 D = L (I): L (I) = 0
362 GOSUB 605
364 D = D - (7 - I)
366 IF D <= 6 THEN 374
367 GOSUB 615
368 D = D - 6
369 FOR K = 1 TO D: L (K) = L (K) + 1: NEXT K
370 K = K - 1: IF L (K) = 1 THEN IF M (7 - K)
> 0 THEN L (7) = L (7) + 1 + M (7 - K): M (7 - K) = 0: L (K) = 0
372 GOTO 395
374 FOR K = 1 TO D: M (K) = M (K) + 1: NEXT K
376 GOTO 395
380 D = L (I): L (I) = 0
381 GOSUB 605
382 GOSUB 615
383 FOR K = 1 TO 7: L (K) = L (K) + 1: NEXT K
384 D = D - (20 - I)
385 IF D <= 6 THEN 393
386 GOSUB 615
387 D = D - 6
388 IF D > 6 THEN 391
389 FOR K = 1 TO D: L (K) = L (K) + 1: NEXT K
390 GOTO 395
391 FOR K = 1 TO 7: L (K) = L (K) + 1: NEXT K
392 D = D - 7
393 FOR K = 1 TO D: M (K) = M (K) + 1: NEXT K
395 GOSUB 500
400 RETURN
500 PRINT : PRINT " KALAH"; " #6"; " #5"; " #4"; " #3"; " #2"; " #1"
510 PRINT : PRINT
515 FOR I = 0 TO 6
520 J = 7 - I
525 PRINT " "; L(J);
530 NEXT I
535 PRINT : PRINT : PRINT
"__________________________________________________________________________"
540 PRINT " "; " #1"; " #2"; " #3"; " #4"; " #5"; " #6"; " KALAH"
545 PRINT : PRINT
555 PRINT " ";
560 FOR I = 1 TO 7
565 PRINT " "; M(I);
570 NEXT I
575 PRINT : PRINT : PRINT
580 RETURN
585 FOR K = I + 1 TO 7: M (K) = M (K) + 1: NEXT
K
587 RETURN
590 FOR K = 1 TO 6: L (K) = L (K) + 1: NEXT K
595 RETURN
605 FOR K = I + 1 TO 7: L (K) = L (K) + 1: NEXT
K
610 RETURN
615 FOR K = 1 TO 6: M (K) = M (K) + 1: NEXT K
620 RETURN
622 P = 0: Q = 0
624 FOR K = 1 TO 6
626 IF M (K) > 0 THEN Q = 1
627 NEXT K
628 IF Q <> 1 THEN IF M (7) <> 36
THEN 1000
629 IF Q <> 1 THEN 1250
632 INPUT I
634 IF I > 6 THEN 632
636 IF I < 1 THEN 632
652 IF M (I) = 0 THEN 1230
654 IF M (I) < (7 - I) THEN 670
656 IF M (I) = (7 - I) THEN 686
658 IF M (I) < 13 THEN 725
660 IF M (I) = 13 THEN 690
662 IF M (I) < (20 - I) THEN 702
664 IF M (I) = (20 - I) THEN 716
666 GOTO 750
670 D = M (I): M (I) = 0
672 FOR K = 1 TO D
674 J = I + K: M (J) = M (J) + 1
680 NEXT K
681 IF M (J) = 1 THEN IF L (7 - J) > 0 THEN
M (7) = M (7) + 1 + L (7 - J): L (7 - J) = 0: M (J) = 0
682 GOTO 780
686 P = 1
689 GOTO 780
690 D = M (I): M (I) = 0
694 GOSUB 585
696 GOSUB 590
698 FOR K = 1 TO I: M (K) = M (K) + 1: NEXT K
700 IF L (7 - I) > 0 THEN M (7) = M (7) + 1
+ L (7 - I): L (7 - I) = 0: M (I) = 0
701 GOTO 780
702 D = M(I): M(I) = 0
704 GOSUB 585
706 GOSUB 590
708 D = D - (13 - I)
710 FOR K = 1 TO D: M (K) = M (K) + 1: NEXT K
712 GOTO 780
716 P = 1: D = M (I): M (I) = 0
718 GOSUB 585
720 GOSUB 590
722 FOR K = 1 TO 7: M (K) = M (K) + 1: NEXT K
724 GOTO 780
725 D = M (I): M (I) = 0
726 GOSUB 585
727 D = D - (7 - I)
728 IF D <= 6 THEN 746
729 GOSUB 590
730 D = D - 6
731 FOR K = 1 TO D: M (K) = M (K) + 1: NEXT K
732 K = K - 1: IF M (K) = 1 THEN IF L (7 - K)
> 0 THEN M (7) = M (7) + 1 + L (7 - K): L (7 - K) = 0: M (K) = 0
733 GOTO 780
746 FOR K = 1 TO D: L (K) = L (K) + 1: NEXT K
747 GOTO 780
750 D = M (I): M (I) = 0
752 GOSUB 585
754 GOSUB 590
756 FOR K = 1 TO 7: M (K) = M (K) + 1: NEXT K
758 D = D - (20 - I)
760 IF D <= 6 THEN 776
762 GOSUB 590
764 D = D - 6
766 IF D > 6 THEN 772
768 FOR K = 1 TO D: M (K) = M (K) + 1: NEXT K
770 GOTO 780
772 FOR K = 1 TO 7: M (K) = M (K) + 1: NEXT K
774 D = D - 7
776 FOR K = 1 TO D: L (K) = L (K) + 1: NEXT K
780 GOSUB 500
785 RETURN
1000 PRINT : PRINT "VYIGRAL PERVYJ
IGROK!"
1010 S1 = S1 + 1
1015 GOSUB 1270
1020 PRINT : PRINT "Sygraem eshe raz? Y-da, N-net"
1025 INPUT B$
1030 IF B$ = "Y" THEN 15
1035 IF B$ = "N" THEN 1290
1040 GOTO 1020
1200 PRINT : PRINT "VYIGRAL VTOROJ
IGROK!"
1210 S2 = S2 + 1
1215 GOSUB 1270
1217 GOTO 1020
1220 PRINT : PRINT "Net kamnej!"
1225 GOTO 210
1230 PRINT : PRINT "Net kamnej!"
1235 GOTO 632
1250 PRINT : PRINT "Nichjya!"
1260 GOTO 1020
1270 PRINT : PRINT "Schet igry: PERVYJ
IGROK -"; S1; " VTOROJ IGROK
-"; S2
1275 PRINT : PRINT
1280 RETURN
1290 END
Приятной
вам игры!
_______
Завершая
страницу о древней и интересной игре Калах, скажу ещё, что игру можно сделать в
виде электронной игрушки! Очень давно (лет 20 назад) я читала в журнале “Наука
и жизнь” об электронных игрушках, которые делаются на Западе. Что может быть
интереснее такой игры для ребёнка?! На нашем рынке игрушек я встречала всего
одну электронную игрушку, которая абсолютно не требовала никакого мышления. С
двух лотков, расположенных слева и справа, падали яйца, которые надо было
собирать в корзину, вовремя нажимая нужные кнопки. Корзину держал в руках волк,
который и бегал с ней от лотка к лотку при нажатии на соответствующие кнопки.
Возможно, наша промышленность выпускала и другие, более интересные, электронные
игрушки, но мне они не попадались. А теперь, когда моя дочь давно выросла, я
уже перестала интересоваться рынком игрушек.
А теперь
представьте, что на поле, подобном тому, по которому бегал волк с корзиной для
яиц (но чуть больше), изображено поле для игры в Калах. Причём игрушка
запрограммирована в двух вариантах: игра с партнёром и игра с
самой игрушкой, как с мини-компьютером! Интересно? По-моему, очень!
Так что,
предлагаю подумать об этом господам бизнесменам от электронной промышленности.
Могу предложить ещё программы для игр “Реверси” и “Рэндзю”.
Добавление (27
мая
Мне тут
на одном форуме сказали ссылку, где есть игра Калах для современного
компьютера. Действительно, очень красиво! Если кто хочет поиграть, скачайте
программу, и вы получите возможность играть на красивом игровом поле с помощью
мышки. Вот ссылка:
http://www.takegame.com/logical/htm/kalahru.htm