Д.Ю. Усенков


ИГРА "ЖИЗНЬ"


Игра "Жизнь" (известная и под другим названием "Эволюция"), -придуманная американским математиком Конуэем, сегодня реализована на многих компьютерах от "Микроши" до 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 г