ГЛАВА ИЗ КНИГИ "ИГРАЕМ САМИ, ИГРАЕМ С КОМПЬЮТЕРОМ"

 

ИГРА "КАЛАХ"

 

Древняя игра "Калах" подробно описана в журнале "Наука и жизнь", № 12, 1971 г. Там можно найти и стратегии игры. Повторно описание правил игры приведено в журнале "Наука и жизнь", № 5, 1974 г. Это описание воспроизводится здесь.

В каждую из 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

20 L (I) = 6: M (I) = 6

25 NEXT I

30 L (7) = 0: M (7) = 0

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

322 L (I) = 0: GOSUB 605

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

680 M (K) = 0

681 FOR K = I + 1 TO 7: M (K) = M (K) + 1: NEXT K

682 GOTO 395

684 M (K) = 0

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

694 M (I) = 0

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 марта 2007 г.):

 

Один древний философ сказал: “Всё течёт, всё меняется”. В самом деле! Вот и мне удалось преобразовать программу для игры в Калах для моего персонального компьютера. Я теперь уже играю со своим компьютером в эту игру! Как оказалось, он играет удовлетворительно. Но, конечно, можно “научить” его играть лучше. Об этом было сказано выше.

Как же мне удалось преобразовать программу? Очень просто. Один виртуальный знакомый прислал по электронной почте современный интерпретатор QBASIC (свет не без добрых людей!). Двоюродный брат, который тоже математик и программист, подсказал, что в современной версии разделитель между операторами не наклонная черта (как это было в моей старой программе), а двоеточие. Ну, а дальше была введена программа и – интерпретатор её понял!

Я заменила здесь старый вариант программы на новый. Так что, если у вас есть интерпретатор языка Basic, то вы тоже можете поиграть в игру по предложенной программе. Желаю приятной игры!

 

Добавление: (28 марта 2007 г.)

 

Я вспомнила, как когда-то очень давно играла в эту игру на ЭВМ, но с партнёром. Это было тоже очень интересно. Игроки сами делали свои ходы, а ЭВМ только раскладывала камни по коробочкам (и калахам) и отображала результат каждого хода. Мы сражались очень увлечённо. Сейчас я решила сделать для вас, дорогие мои посетители, такой вариант программы. Если у вас есть партнёр (а комплекта для игры нет), то сыграйте с ним по этой программе.

Небольшие пояснения к игре с партнёром: игроки названы “первый игрок” и “второй игрок”. Когда выводится сообщение “Ход первого игрока”, надо нажать клавишу A (прописная латинская) и клавишу “ввод”. После этого надо ввести номер коробочки, из которой первый игрок хочет разложить камни. Если последний камень попал в калах и игроку предоставляется ещё один ход, то опять введите номер коробочки, из которой вы делаете ещё один ход. Если же ход переходит ко второму игроку, то появляется сообщение “Ход второго игрока”. Теперь надо (для подтверждения того, что второй игрок начал свой ход) нажать клавишу W и клавишу “ввод”, после чего ход второго игрока подтверждён и запрашивается номер коробочки, из которой этот игрок хочет разложить камни. Далее всё аналогично ходу первого игрока. Коробочки первого игрока находятся сверху, а коробочки второго игрока – внизу. Кто из вас будет первым игроком, а кто вторым, решите вы сами. В конце каждой партии выводится счёт, показывающий, сколько партий выиграли игроки. При новой загрузке программы счёт начинается с нуля.

 

ТЕКСТ ПРОГРАММЫ

 

10 DIM L (7), M (7)

12 S1 = 0: S2 = 0

15 FOR I = 1 TO 6

20 L (I) = 6: M (I) = 6

25 NEXT I

30 L (7) = 0: M (7) = 0

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

322 L (I) = 0: GOSUB 605

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

688 M (I) = 0: GOSUB 585

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 мая 2007 г.):

 

Мне тут на одном форуме сказали ссылку, где есть игра Калах для современного компьютера. Действительно, очень красиво! Если кто хочет поиграть, скачайте программу, и вы получите возможность играть на красивом игровом поле с помощью мышки. Вот ссылка:

 

http://www.takegame.com/logical/htm/kalahru.htm

 

       Пишите мне!

Рейтинг@Mail.ru

На главную страницу

 



Hosted by uCoz