1 REM ***************************** 2 REM * LIFE6 .BAS / Minne 32K * 3 REM * VER 6.0 / 1982-??-?? * 4 REM * (c) Alf Wirdling / <4230> * 5 REM * Tel : 0470-26277 / V[XJ\ * 6 REM ***************************** 100 REM  GAME OF LIFE - VERSION 6.0  102 REM * INITIERING * 104 DIM M%(68%,79%) : RANDOMIZE 106 H1%=2% : H2%=3% : H3%=3% : H4%=3% 108 REM * INSTRUKTIONER * 110 ; CHR$(12%);TAB(5%);"THE GAME OF LIFE - VERSION 6.0" 112 ; TAB(4%);CHR$(151%);"##############################" 114 FOR I%=31761% TO 31764% : POKE I%,PEEK(I%)+128% : NEXT I% 116 ; : ; "Detta {r spelet om 'livet' i en 67x76-" 118 ; "matris, d{r celler f|ds och d|r, och" 120 ; "d{r varje cell omges av 8 grann-celler." 122 ; : ; "Detta h{nder med en cell, om den har:" 124 ; : ; "0 eller 1 granne = d|r av isolering." 126 ; "fler {n 3 grannar = d|r av tr{ngsel." 128 ; "2 eller 3 grannar = |verlever cellen." 130 ; : ; "Om en tom cell har precis 3 grannar," 132 ; "f|ds d{r en ny cell." 134 ; : ; "Om start-generationen l{ggs upp i data-" 136 ; "satser, l{ggs de med b|rjan p} rad 1000" 138 ; "En etta betecknar liv och en nolla d|d." 140 ; : ; "Tryck RETURN f|r generations-v{xlingar," 142 ; "eller bara 'N' f|r n{sta generation." 144 ; : ; "Tryck RETURN n{r du l{st f{rdigt "; : GET R$ 146 ; CHR$(12);"Om bilden 'drar sig' }t n}got h}ll, kan" 148 ; "man beg{ra CENTRERING (C)." 150 ; : ; "Tryck 'A' f|r AUTO-CENTRERING." 152 ; : ; "Om sk{rm-bilden inte har 'r{ckt till'," 154 ; "blinkar den nedre raden." 156 ; : ; "G=gen. F=f|dda D=d|da L=levande" 158 ; : ; "Det g}r ocks} att spara en generation" 160 ; "p} datafil och l{sa in efter pgm-start." 162 ; "En generation sparas med kommandot 'S'." 164 ; : ; "Tryck 'L' f|r AUTO-SAVE." 166 ; : ; "SPECIAL-SIMULATION OF LIFE (Y) "; 168 GET R$ : ; R$ : IF R$<>"Y" AND R$<>"y" THEN 178 170 REM * [NDRING LIFE-SIM. * 172 ONERRORGOTO 172 174 ; : ; "Antal grannar f|r \VERLEVNAD (,) "; : INPUT H1%,H2% 176 ; "Antal grannar f|r F\DELSE (,) "; : INPUT H3%,H4% 178 REM * GRUND-GENERATION * 180 ; : ; "GRUND-GENERATION h{mtas fr}n:" 182 ; : ; "1 - Datasatser (rad 1000)" 184 ; "2 - Sk{rm" 186 ; "3 - Datafil" 188 ; "4 - Slumpgenerator" 190 ; : ; "Val "; : GET R$ : ; R$ 192 ONERRORGOTO 190 194 I%=VAL(R$) : IF I%<1% OR I%>4% THEN 190 196 ON I% GOTO 198,218,254,292 198 REM * INL. DATASATSER * 200 GOSUB 520 : REM * GRAF MOD * 202 ONERRORGOTO 216 : READ G% 204 FOR R%=1% TO 67% : READ R$ 206 IF R$="." THEN 216 208 IF LEN(R$)>E% E%=LEN(R$) 210 FOR C%=1% TO LEN(R$) 212 IF MID$(R$,C%,1%)="1" SETDOT R%,C%+2% 214 NEXT C% : NEXT R% 216 GOTO 318 : REM * KONV * 218 REM * INL. SK[RM * 220 ONERRORGOTO 220 222 ; : ; "Start-generation "; : INPUT G% 224 ; : ; "Hit RETURN when enough" 226 ; "Enter / to rewind" 228 ; : ; "11 rows at most !!! (1=ALIVE, 0=DEAD) " : ; 230 FOR J%=0% TO 10% 232 ; J%+1%;TAB(4%); : INPUT R$(J%) 234 IF R$(J%)="/" J%=J%-2% : GOTO 238 236 IF LEN(R$(J%))=0% THEN 240 238 NEXT J% 240 GOSUB 520 : REM * GRAF MOD * 242 FOR R%=0% TO J%-1% 244 IF LEN(R$(R%))>E% E%=LEN(R$(R%)) 246 FOR C%=1% TO LEN(R$(R%)) 248 IF MID$(R$(R%),C%,1%)="1" SETDOT R%+1%,C%+2% 250 NEXT C% : NEXT R% 252 R%=R%+1% : GOTO 318 : REM * KONV * 254 REM * INL. DATAFIL * 256 ; : ; "UPDATE CONDITION OF LIFE (Y) "; 258 GET R$ : ; R$ : IF R$="Y" OR R$="y" H%=1% 260 ONERRORGOTO 262 : GOTO 264 262 ; : ; "FILE ";S$;" NOT FOUND !" : GOTO 254 264 ; : ; "FILE NAME "; : INPUT S$ 266 OPEN S$ ASFILE 1% 268 GOSUB 520 : REM * GRAF MOD * 270 ONERRORGOTO 286 272 INPUT #1%,G%,F%,D%,B%,H5%,H6%,H7%,H8% 274 FOR R%=1% TO 67% : INPUT #1%,R$ 276 IF R$="." THEN 286 278 IF LEN(R$)>E% E%=LEN(R$) 280 FOR C%=1% TO LEN(R$) 282 IF MID$(R$,C%,1%)="1" SETDOT R%,C%+2% 284 NEXT C% : NEXT R% 286 CLOSE 1% 288 IF H% H1%=H5% : H2%=H6% : H3%=H7% : H4%=H8% 290 GOTO 318 : REM * KONV * 292 REM * INL. RND * 294 ONERRORGOTO 294 296 ; : ; "Number of rows "; : INPUT I2% 298 IF I2%>67% THEN 296 300 ; "Number of columns "; : INPUT E% 302 IF E%>78% THEN 300 304 ; "Dot % "; : INPUT J2% 306 IF J2%>100% THEN 304 308 GOSUB 520 : REM * GRAF MOD * 310 FOR R%=1% TO I2% : FOR C%=1% TO E% 312 IF INT(RND*100+1)<=J2% SETDOT R%,C%+2% 314 NEXT C% : NEXT R% 316 G%=0% : REM * START GEN. * 318 REM * KONVERTERING * 320 R1%=1% : R2%=R%-1% : C1%=3% : C2%=E%+2% 322 GOSUB 526 : REM * CENT * 324 GOSUB 544 : REM * UTL. BILD * 326 REM * MAIN LOOP * 328 GET R$ 330 IF R$<>"C" AND R$<>"c" THEN 342 332 REM * CENTRERING * 334 GOSUB 560 : REM * NOLLST. * 336 GOSUB 526 : REM * CENT * 338 GOSUB 544 : REM * UTL. BILD * 340 GOTO 326 : REM * MAIN LOOP * 342 IF R$<>"A" AND R$<>"a" THEN 356 344 REM * AUTO-CENTRERING * 346 ; CUR(23%,0%);SPACE$(39%); : ; CUR(23%,0%); 348 IF A%=1% ; "AUTO-CENT OFF "; ELSE ; "AUTO-CENT ON "; 350 GET R$ : IF A%=1% A%=0% ELSE A%=1% 352 GOSUB 572 : REM * STAT * 354 GOTO 326 : REM * MAIN LOOP * 356 IF R$<>"S" AND R$<>"s" THEN 376 358 REM * SAVE BILD * 360 GOSUB 586 : REM * SAVE NAME * 362 GOSUB 594 : REM * SAVE * 364 IF K%<>1% THEN 372 366 ; CUR(23%,0%);SPACE$(39%); 368 ; CUR(23%,0%);"FILE ";S$;" NOT SAVED !"; 370 FOR F=1 TO 5000 : NEXT F 372 GOSUB 572 : REM * STAT * 374 GOTO 326 : REM * MAIN LOOP * 376 IF R$<>"L" AND R$<>"l" THEN 392 378 REM * AUTO SAVE * 380 ; CUR(23%,0%);SPACE$(39%); : ; CUR(23%,0%); 382 IF S%>0% ; "AUTO-SAVE OFF "; ELSE ; "AUTO-SAVE ON "; 384 GET R$ : IF S%>0% S%=0% : GOTO 388 ELSE S%=1% 386 GOSUB 586 : REM * SAVE NAME * 388 GOSUB 572 : REM * STAT * 390 GOTO 326 : REM * MAIN LOOP * 392 IF R$<>"N" AND R$<>"n" THEN 400 394 REM * NEXT GENERATION * 396 N%=G%+1% 398 GOTO 422 : REM * NEXT GEN. * 400 IF ASC(R$)<>13% THEN 326 402 REM * GEN. FORWARD * 404 ; CUR(23%,0%);SPACE$(39%); 406 ; CUR(23%,0%);"NUMBER OF GENERATIONS (0=END)? "; : INPUTLINE R$ 408 ONERRORGOTO 402 410 N%=G%+VAL(LEFT$(R$,LEN(R$)-2%)) 412 IF N%=G% ; CUR(23%,0%);"END OF LIFE " : END 414 ; CUR(23%,0%);SPACE$(39%); 416 ; CUR(23%,0%);"STOP WHEN DOT OUT OF RANGE (Y) "; : GET R$ 418 IF R$="Y" OR R$="y" B2%=1% ELSE B2%=0% 420 GOSUB 572 : REM * STAT * 422 REM * NEXT GEN * 424 FOR G%=G%+1% TO N% 426 F%=0% : D%=0% 428 IF R1%>1% R1%=R1%-1% ELSE B%=1% 430 IF R2%<67% R2%=R2%+1% ELSE B%=1% 432 IF C1%>3% C1%=C1%-1% ELSE B%=1% 434 IF C2%<78% C2%=C2%+1% ELSE B%=1% 436 I%=R2% : I2%=R1% : J%=C2% : J2%=C1% 438 GOSUB 566 : REM * ALT. NOLLST. * 440 FOR R%=R1% TO R2% : FOR C%=C1% TO C2% : E%=0% 442 IF DOT(R%-1%,C%-1%) E%=E%+1% 444 IF DOT(R%-1%,C%) E%=E%+1% 446 IF DOT(R%-1%,C%+1%) E%=E%+1% 448 IF DOT(R%,C%-1%) E%=E%+1% 450 IF DOT(R%,C%+1%) E%=E%+1% 452 IF DOT(R%+1%,C%-1%) E%=E%+1% 454 IF DOT(R%+1%,C%) E%=E%+1% 456 IF DOT(R%+1%,C%+1%) E%=E%+1% 458 IF DOT(R%,C%) THEN 470 460 REM * F\DAS ELLER INTE ? * 462 IF E%H4% THEN 478 464 M%(R%,C%)=1% : F%=F%+1% 466 GOSUB 616 : REM * GR[NS JUST. * 468 GOTO 478 : REM * NEXT DOT * 470 REM * LEVA ELLER D\ ? * 472 IF E%H2% D%=D%+1% : GOTO 478 474 M%(R%,C%)=1% 476 GOSUB 616 : REM * GR[NS JUST. * 478 REM * NEXT DOT * 480 NEXT C% : NEXT R% 482 REM * GEN. KLAR * 484 REM * NYA GR[NSER * 486 R1%=I% : R2%=I2% : C1%=J% : C2%=J2% 488 IF A%=0% THEN 494 490 GOSUB 560 : REM * NOLLST. * 492 GOSUB 526 : REM * CENT * 494 GOSUB 544 : REM * UTL. BILD * 496 IF S%=0% THEN 506 : REM * CHECK * 498 REM * AUTO SAVE * 500 S$=S$+"."+RIGHT$(NUM$(S%),2%) 502 GOSUB 594 : REM * SAVE * 504 S$=LEFT$(S$,INSTR(1%,S$,".")-1%) : S%=S%+1% 506 REM * HAR INGEN F\R. SKETT ? * 508 IF (F%=0% AND D%=0%) OR L%=0% THEN 518 510 REM * DOT UTANF\R SK[RM ? * 512 IF B%=1% AND B2%=1% THEN 518 514 NEXT G% : REM * NEXT GEN. * 516 G%=G%-1% : REM * R[TT GEN. * 518 GOTO 326 : REM * MAIN LOOP * 520 REM * GRAF MOD * 522 ; CHR$(12%) : FOR I%=0% TO 22% 524 ; CUR(I%,0%);CHR$(151%); : NEXT I% : RETURN 526 REM * CENT * 528 R%=(67%-(R2%-R1%+1%))/2% 530 C%=(76%-(C2%-C1%+1%))/2%+2% 532 I2%=0% : FOR I%=R1% TO R2% 534 J2%=0% : FOR J%=C1% TO C2% 536 IF DOT(I%,J%) M%(R%+I2%,C%+J2%)=1% 538 J2%=J2%+1% : NEXT J% : I2%=I2%+1% : NEXT I% 540 R1%=R% : R2%=R%+I2%-1% : C1%=C% : C2%=C%+J2%-1% 542 RETURN 544 REM * UTL. BILD * 546 GOSUB 520 : REM * GRAF MOD * 548 L%=0% : FOR R%=R1% TO R2% 550 FOR C%=C1% TO C2% 552 IF M%(R%,C%)=1% SETDOT R%,C% : L%=L%+1% 554 NEXT C% : NEXT R% 556 GOSUB 572 : REM * STAT * 558 RETURN 560 REM * NOLLST. * 562 FOR R%=1% TO 67% : FOR C%=3% TO 78% 564 M%(R%,C%)=0% : NEXT C% : NEXT R% : RETURN 566 REM * ALT. NOLLST. * 568 FOR R%=R1% TO R2% : FOR C%=C1% TO C2% 570 M%(R%,C%)=0% : NEXT C% : NEXT R% : RETURN 572 REM * STAT * 574 ; CUR(23%,0%);SPACE$(39%); 576 ; CUR(23%,0%);"G=";G%;TAB(10%);"F=";F%;TAB(20%);"D=";D%; 578 ; TAB(30%);"L=";L%;" "; 580 IF B%=0% THEN 584 582 FOR I%=32720% TO 32756% : POKE I%,PEEK(I%)+128% : NEXT I% 584 RETURN 586 REM * SAVE NAME * 588 ; CUR(23%,0%);SPACE$(39%); 590 ; CUR(23%,0%);" SAVE NAME? "; : INPUTLINE S$ 592 S$=LEFT$(S$,LEN(S$)-2%) : RETURN 594 REM * SAVE * 596 K%=0% : ONERRORGOTO 612 598 PREPARE S$ ASFILE 2% 600 ; #2%,G% : ; #2%,F% : ; #2%,D% : ; #2%,B% 602 ; #2%,H1% : ; #2%,H2% : ; #2%;H3% : ; #2%,H4% 604 FOR R%=R1% TO R2% : R$="" 606 FOR C%=C1% TO C2% 608 IF M%(R%,C%)=1% R$=R$+"1" ELSE R$=R$+"0" 610 NEXT C% : ; #2%,R$ : NEXT R% : GOTO 614 612 K%=1% 614 CLOSE 2% : RETURN 616 REM * GR[NS JUST. * 618 IF R%I2% I2%=R% 622 IF C%J2% J2%=C% 626 RETURN 1000 REM * PLATS F\R GENERATION * 1010 REM * START-GENERATION = 0 * 1020 DATA 0 1030 DATA 111 1040 DATA 101 1050 DATA 111,.