Д.Ю. Усенков
ИГРА "ЖИЗНЬ"
Игра "Жизнь" (известная и под другим названием "Эволюция"), -придуманная американским математиком Конуэем, сегодня реализована на многих компьютерах от "Микроши" до IBM. Листинги этой игры для "Искры-1256" и "Микроши" были опубликованы в журнале "Вычислительная техника и ее применение" N12 за 1989 год ("Искра-1256") и N9 за 1991 год ("Микроша").
Теперь предлагаем читателям вариант этой довольно увлекательной игры для БК-0010.
Вкратце напомню правила игры. Все пространство поля игры разбито на клетки - ячейки, которые могут быть пустыми или содержать в себе "бактерии" (по одной в ячейке). Все "бактерии", расположенные в ячейках, могут иметь от 1 до 8 "соседок" или не иметь "соседей" вовсе. Если "бактерия" имеет менее 2 "соседок" или больше 3, то она погибает от одиночества или от перенаселенности соответственно. Если пустую клетку окружают ровно 3 "бактерии", то в ней рождается новая "бактерия". Пользователь в начале игры задает исходное положение "бактерий" и затем ему остается только наблюдать за ходом "эволюции".
Приведенная программа на Бейсик-Вильнюсе реализует эти правила с одним единственным ограничением: игровое поле в ней небольшое, всего 10x10 клеток.
10 ' ИГРА - ДЕМОНСТРАЦИЯ
20 ' BIO <ЖИЗНЬ>
30 ' Усенков Д.Ю.,МОСКВА,1989 г.
130 DIM A(11,11)
140 COLOR 1,3
150 CLS
160 GOSUB 1310
170 ? АТ(10,10);"В1О <ЖИЗНЬ>."
180 FOR I=0 ТО 990
190 IF (I MOD 50)=0 THEN CIRCLE (50+I/10,50+I/10),I/10,2,,,1.3
200 NEXT
210 FOR I=1 TO 500
220 NEXT
230 COLOR 1,4
240 FOR I=1 TO 200
250 NEXT
260 CLS
270 GOSUB 1390
280 IF INKEY$="" GOTO 280
290 CLS
300 ? АТ(3,15);"Вводите координаты клетки"
310 ? " или <К>.чтобы закончить ввод"
320 ? АТ(1,0);"1234567890"
330 FOR I=1 ТО 9
340 ? MID$(STR$(I),2,LEN(STR$(I))-1)
350 NEXT
360 ? "0"
370 ? АТ(5,20);"Вводите Х(по горизонтали):''
380 CH$=INKEY$
390 IF CH$="" GOTO 380
400 IF СН$="К" GOTO 610
410 GOSUB 430
420 GOTO 490
430 IK=1
440 FOR I=0 TO 9
450 IF VAL(CH$)=I GOTO 480
460 NEXT
470 IK=0
480 RETURN
490 IF IK=1 THEN X=VAL(CH$) ELSE 370
500 ? АТ(5,20);"Вводите Y:
510 CH$=INKEY$
520 IF CH$="" GOTO 510
530 IF CH$="K" GOTO 610
540 GOSUB 430
550 IF IK=1 THEN Y=VAL(CH$) ELSE 500
560 IF X=0 THEN X=10
570 IF Y=0 THEN Y=10
580 A(X,Y)=1
590 ? AT(X,Y);KL$
600 GOTO 370
610 CLS
620 ? АТ(10,10);"Пуск процесса?"
630 IF INKEY$="" GOTO 630
640 BEEP
650 FOR I=1 TO 100
660 NEXT
670 BEEP
680 FOR I=1 TO 100
690 NEXT
700 BEEP
710 FOR I=1 TO 50
720 NEXT
730 BEEP
740 FOR I=1 TO 100
750 NEXT
760 CLS
770 ? AT(10,8); " I-------~~—I"
780 ? AT(10,19);" 1_________I"
790 FOR I=9 TO 18
800 ? AT(10,I);"| I"
810 NEXT
820 ? AT(9,0);CHR$(156);" BIO <ЖИЗНЬ>. ";CHR$(156)
830 FOR I=1 TO 10
840 FOR J=l TO 10
850 IF A(I,J)=1 THEN ?AT(10+I,8+J);KL$
860 NEXT J,I
870 BEEP
880 FOR I=1 TO 10
890 FOR J=l TO 10
900 GOSUB 920
910 GOTO 1000
920 К=0
930 FOR IB=I-1 TO I+1
940 IF A(IB,J-1)=1 OR A(IB,J-1)=2 THEN K=K+1
950 IF A(IB,J+1)=1 OR A(IB,J+1)=2 THEN K=K+1
960 NEXT
970 IF A(I-1,J)=1 OR A(I-1,J)=2 THEN K=K+1
980 IF A(I+1,J)=1 OR A(I+1,J)=2 THEN K=K+1
990 RETURN
1000 IF (K<2 OR K>3) AND A(I,J)=1 THEN A(I,J)=2
1010 NEXT J,I
1020 BEEP
1030 FOR I=1 TO 10
1040 FOR J=l TO 10
1050 GOSUB 920
1060 IF K=3 AND A(I,J)=0 THEN A(I,J)=3
1070 NEXT J,I
1080 BEEP
1090 FOR I=1 TO 10
1100 FOR J=1 T0 10
1110 IF A(I,J)=2 THEN A(I,J)=0
1120 IF A(I,J)=3 THEN A(I,J)=1
1130 NEXT J,I
1140 BEEP
1150 BEEP
1160 FOR I=1 TO 10
1170 FOR J=l TO 10
1180 IF A(I,J)=1 THEN ?AT(10+I,8+J);KL$ ELSE ?AT(10+I,8+J);"
1190 NEXT J,I
1200 IF INKEY$<>"S" GOTO 870
1210 ? АТ(5,5);"ЕЩЕ РАЗ? <D/N>."
1220 CH$=INKEY$
1230 IF CH$="" GOTO 1220
1240 IF CH$="N" GOTO 1280
1250 IF CH$<>"D" GOTO 1220
1260 GOSUB 1620
1270 GOTO 290
1280 ? AT(5,5);" GOOD-BYE!
1290 ? AT(l,21);"Programed by Usenkow D., 1989"
1300 END
1310 X=INT(RND(1)*10+1)
1320 RESTORE
1330 FOR I=1 TO X-l
1340 READ I$
1350 NEXT
1360 READ KL$
1370 RETURN
1380 DATA о,О,0,$,*,+,%,#,@,Х
1390 ? TAB(10);"BIO <ЖИЗНЬ>."
1400 ?
1560 ? " Демонстрация непрерывная."
1570 ? " Для' окончания нажмите <S>."
1610 RETURN
1620 FOR I=0 ТО 11
1630 FOR J=0 TO 11
1640 A(I,J)=0
1650 NEXT J,I
1660 RETURN
Распознавание и преобразование в гипертекст: Владислав М. Антонов
2004 г