  100 PROGRAM "game2.bas"
  110 !
  120 NUMERIC FELD(25,25),DUMMY(25,25)
  130 TEXT 40
  140 CALL ARRAYINIT
  150 CALL EROEFFNUNG
  160 CALL MENUE
  170 PRINT AT 18,27:"Menue?"
  180 PING 
  190 DO 
  200   DO 
  210     LET MENUE$=INKEY$
  220   LOOP UNTIL MENUE$<>""
  230 LOOP WHILE MENUE$<"1" OR MENUE$>"7"
  240 PING 
  250 PRINT AT 18,27:"           "
  260 ON VAL(MENUE$) GOSUB 1010,1930,1130,2740,1310,280
  270 GOTO 170
  280 !
  290 ! ************
  300 ! * Schluss  *
  310 ! ************
  320 !
  330 CLEAR SCREEN
  340 TEXT 80
  350 PRINT "Program-Ende"
  360 END  ! Spielende
  370 !
  380 ! ***************
  390 ! * Eroeffnung  *
  400 ! ***************
  410 !
  420 DEF EROEFFNUNG
  430   CLEAR SCREEN
  440   PRINT AT 4,12:"Game of life"
  450   PRINT AT 5,12:"============"
  460   PRINT AT 8,3:"REGELN:"
  470   PRINT 
  480   PRINT " 1. Jede Zelle mit 2 oder 3 Nachbarn       ueberlebt."
  490   PRINT 
  500   PRINT " 2. Jede Zelle mit mehr als 3 Nach-       barn stirbt."
  510   PRINT 
  520   PRINT " 3. Jedes leere Element mit genau          3 Nachbarn erhaelt 
eine Zelle."
  530   !
  540   INPUT AT 21,11,PROMPT "Weiter mit ENTER":DUMMY$
  550   CLEAR SCREEN
  560 END DEF 
  570 !
  580 ! **********************
  590 ! * Random-Verteilung  *
  600 ! **********************
  610 !
  620 DEF RANDOM
  630   RANDOMIZE 
  640   FOR I=1 TO ZELLEN
  650     LET ZEILE=RND(25)+1
  660     LET SPALTE=RND(25)+1
  670     LET FELD(ZEILE,SPALTE)=1
  680   NEXT I
  690   CALL FELDAUSGABE
  700 END DEF 
  710 !
  720 ! ******************
  730 ! * Menue bazzeg   *
  740 ! ******************
  750 !
  760 DEF MENUE
  770   PRINT AT 2,28:"LIFE"
  780   PRINT AT 5,27:"1:Computer"
  790   PRINT AT 7,27:"2:Joystick"
  800   PRINT AT 9,27:"3:Loeschen"
  810   PRINT AT 11,27:"4:Drucken"
  820   PRINT AT 13,27:"5:Start"
  830   PRINT AT 15,27:"6:Ende"
  840 END DEF 
  850 !
  860 ! ***************************
  870 ! * Spielfeld-Ausgabe       *
  880 ! ***************************
  890 !
  900 DEF FELDAUSGABE
  910   FOR ZEILE=1 TO 24
  920     FOR SPALTE=1 TO 24
  930       IF FELD(ZEILE,SPALTE)=1 THEN
  940         PRINT AT ZEILE,SPALTE:CHR$(142);
  950       ELSE 
  960         PRINT AT ZEILE,SPALTE:CHR$(32);
  970       END IF 
  980     NEXT SPALTE
  990   NEXT ZEILE
 1000 END DEF 
 1010 !
 1020 ! ***************************
 1030 ! * Eingabe der Zellen      *
 1040 ! ***************************
 1050 !
 1060 INPUT AT 18,27,PROMPT "Zellen":ZELLEN
 1070 IF ZELLEN>0 AND ZELLEN<626 THEN GOTO 1100
 1080 PRINT AT 18,27:"            "
 1090 GOTO 1060
 1100 CALL RANDOM
 1110 PRINT AT 18,27:"            "
 1120 RETURN 
 1130 !
 1140 ! **********************
 1150 ! * Loeschen des Feldes*
 1160 ! **********************
 1170 !
 1180 FOR ZEILE=1 TO 25
 1190   FOR SPALTE=1 TO 25
 1200     LET FELD(ZEILE,SPALTE)=0
 1210   NEXT SPALTE
 1220 NEXT ZEILE
 1230 !
 1240 FOR ZEILE=1 TO 24
 1250   FOR SPALTE=1 TO 24
 1260     PRINT AT ZEILE,SPALTE:CHR$(32);
 1270   NEXT SPALTE
 1280 NEXT ZEILE
 1290 !
 1300 RETURN 
 1310 !
 1320 ! *****************************
 1330 ! * Generationen berechnen    *
 1340 ! *****************************
 1350 !
 1360 PRINT AT 20,27:"Ich rechne !"
 1365 FOR CIK=1 TO 10
 1370   FOR ZEILE=2 TO 23
 1380     FOR SPALTE=2 TO 23
 1390       IF FELD(ZEILE,SPALTE)=1 THEN GOTO 1500
 1400       LET NACHBARN=0
 1410       CALL NACHBARNSUMME
 1420       !
 1430       ! ++++++++++++++++
 1440       ! + 3. Bedingung +
 1450       ! ++++++++++++++++
 1460       !
 1470       IF NACHBARN<>3 THEN GOTO 1640
 1480       LET DUMMY(ZEILE,SPALTE)=1
 1490       GOTO 1650
 1500       LET NACHBARN=-1
 1510       CALL NACHBARNSUMME
 1520       !
 1530       ! +++++++++++++++++++++
 1540       ! + 1.Bedingung       +
 1550       ! +++++++++++++++++++++
 1560       !
 1570       IF NACHBARN<2 OR NACHBARN>3 THEN
 1580         GOTO 1640
 1590       ELSE 
 1600         LET DUMMY(ZEILE,SPALTE)=1
 1610       END IF 
 1620       !
 1630       GOTO 1650
 1640       LET DUMMY(ZEILE,SPALTE)=0
 1650     NEXT SPALTE
 1660   NEXT ZEILE
 1670   PRINT AT 20,27:"            "
 1680   !PING 
 1690   !
 1700   ! ++++++++++++++++++++++++++++
 1710   ! + Umspeichern der Generation +
 1720   ! ++++++++++++++++++++++++++++++
 1730   !
 1740   FOR ZEILE=1 TO 24
 1750     FOR SPALTEP1 TO 24
 1760       LET FELD(ZEILE,SPALTE)=DUMMY(ZEILE,SPALTE)
 1770     NEXT SPALTE
 1780   NEXT ZILE
 1790   CALL FELDAUSGABE
 1795 NEXT CIK
 1800 RETURN 
 1810 !
 1820 ! +++++++++++++++++++++++++++++++
 1830 ! + Ermittlung der Nachbarnsumme+
 1840 ! +++++++++++++++++++++++++++++++
 1850 !
 1860 DEF NACHBARNSUMME
 1870   FOR L=ZEILE-1 TO ZEILE+1
 1880     FOR K=SPALTE-1 TO SPALTE+1
 1890       LET NACHBARN=NACHBARN+FELD(L,K)
 1900     NEXT K
 1910   NEXT L
 1920 END DEF 
 1930 !
 1940 ! *****************************
 1950 ! * Eingabe mit Joystick      *
 1960 ! *****************************
 1970 !
 1980 LET ZEILE=1:LET SPALTE=1
 1990 PRINT AT 20,27:"Zeile : ";ZEILE
 2000 PRINT AT 22,27:"Spalte: ";SPALTE
 2010 PRINT AT ZEILE,SPALTE:"";
 2020 DO 
 2030   LET TASTATUR$=INKEY$
 2040   CALL CURSORMOVE
 2050 LOOP UNTIL TASTATUR$<>""
 2060 !
 2070 ! Cursor links
 2080 !
 2090 IF TASTATUR$=CHR$(184) THEN
 2100   IF (SPALTE-1)<1 THEN
 2110     GOTO 2020
 2120   ELSE 
 2130     LET SPALTE=SPALTE-1
 2140     GOTO 1990
 2150   END IF 
 2160 END IF 
 2170 !
 2180 ! Cursor rechts
 2190 !
 2200 IF TASTATUR$=CHR$(188) THEN
 2210   IF (SPALTE+1)>24 THEN
 2220     GOTO 2020
 2230   ELSE 
 2240     LET SPALTE=SPALTE+1
 2250     GOTO 1990
 2260   END IF 
 2270 END IF 
 2280 !
 2290 ! Cursor runter
 2300 !
 2310 IF TASTATUR$=CHR$(180) THEN
 2320   IF (ZEILE+1)>24 THEN
 2330     GOTO 2020
 2340   ELSE 
 2350     LET ZEILE=ZEILE+1
 2360     GOTO 1990
 2370   END IF 
 2380 END IF 
 2390 !
 2400 ! Cursor rauf
 2410 !
 2420 IF TASTATUR$=CHR$(176) THEN
 2430   IF (ZEILE-1)<1 THEN
 2440     GOTO 2020
 2450   ELSE 
 2460     LET ZEILE=ZEILE-1


