10 '########################################################################## 20 '##### L O K O M O T I V E ##### 30 '##### ##### 40 '##### ##### 50 '##### Joyce Adaption by Eberhard Fischer ##### 60 '##### ##### 70 '##### (c) by DMV ##### 80 '##### ##### 90 '########################################################################## 100 ' 110 '###################### Benutzerfunktionen definieren #################### 120 ' 130 escape$ = CHR$(27) 140 home$ = escape$ + "H" 150 cls$ = escape$ + "E" + home$ 160 DEF FNloc$(x,y) = escape$ + "Y" + CHR$(32 + y) + CHR$(32 + x) 170 window$ = escape$ + "X" + CHR$(32 + n)+CHR$(32 + n) + CHR$(32 + n)+ CHR$(32 + n) 180 inkan$ = escape$ + "p" 190 inkaus$ = escape$ + "q" 200 ' 210 '------------------------- Bildschirm - Anweisungen ---------------------- 220 ' 230 B1$ = escape$ + "1" :'Statuszeile an 240 B2$ = escape$ + "0" :'statuszeile aus 250 B3$ = escape$ + "K" :' Zeile L|schen 260 B4$ = escape$ + "A" :' Cursor hoch 270 B5$ = escape$ + "B" :' Cursor runter 280 B6$ = escape$ + "f" :' Cursor unsichtbar 290 B7$ = escape$ + "e" :' Cursor sichtbar 300 B8$ = escape$ + "C" :' Cursor um 1 nach Rechts 310 B9$ = escape$ + "D" :' Cursor um 1 nach Links 320 B10$ = escape$ + "c" + CHR$(0) + escape$ + "b" + CHR$(63):' Bildschirm hell 330 B11$ = escape$ + "c" + CHR$(63) + escape$ + "b" + CHR$(0):' Bildschirm dunkel 340 B12$ = escape$ + "y" :' Bildschirm normal Modus 350 ' 360 '####################### Zeichen {ndern ######################### 370 ' 380 PRINT cls$ 390 GOSUB 4810:GOSUB 4410 400 ' 410 '############################## Initialisieren ################################ 420 ' 430 DEFINT a - y 440 DIM strecke(70):posi(1) = 0:posi(2) = 0:strecke(70) = 1 450 zurueck = 20:' gegnerische Lok zur}cksetzen 460 rz$ = "+-*/" 470 RANDOMIZE Time 480 GOSUB 4280 490 ' 500 '--------------------------------- Titelbild ---------------------------------- 510 ' 520 x$ = lokl$ + " L O K O M O T I V E " + b4$ + lokl$ 530 x = 4 540 FOR sz = 1 TO 150:OUT 248,11:NEXT:OUT 248,12 550 FOR sz = 80 TO 32 STEP - 1 560 PRINT FNLOC$(sz,3);LEFT$(x$,x) 570 PRINT FNLOC$(sz+2,3);" ";FNloc$(sz+25,3);" ";FNloc$(sz+25,4);" " 580 x = x + 1 :IF x > 29 THEN x = 37 590 FOR sx = 1 TO 100:NEXT 600 FOR sx = 1 TO 20:OUT 248,11:OUT 248,12:NEXT 610 NEXT 620 ' 630 PRINT FNLOC$(30,15);" Tabelle sehen.....< J - N >" 640 t$ = INKEY$ 650 IF UPPER$(t$) ="J" THEN GOSUB 2970:GOSUB 2250:GOTO 680 660 IF UPPER$(t$) ="N" THEN PRINT FNLOC$(1,15);b3$:GOTO 740 670 IF t$ ="" THEN GOTO 640 680 PRINT FNLOC$(30,25);" Spiel weiterspielen.....<1>" 690 PRINT FNLOC$(30,27);" Neues Spiel.............<2>" 700 t$ = INKEY$ 710 t = VAL(t$):IF t < 1 OR t > 2 THEN 700 720 IF t = 1 AND name$(1)<>"" THEN zei = 30:rei = 23:FOR sz = 23 TO 27 STEP 2:PRINT FNLOC$(1,sz);b3$:NEXT:name1$ = name$(1):name2$ = name$(2):punkte1 = punkte(1):punkte2 = punkte(2):GOTO 1120 ELSE PRINT cls$ 730 IF t = 2 THEN PRINT cls$ 740 '######################### Namen Eingeben ################################## 750 ' 760 PRINT FNLOC$(10,7);" Den Namen bitte f}r Spieler 1 " 770 PRINT FNLOC$(10,9);prb$:xp = 12:yp = 9:lang = 15:lasc = 32:hasc = 122:GOSUB 3700 780 name1$ = UPPER$(LEFT$(tx$,1)) + LOWER$(MID$(tx$,2)) 790 IF name1$="" THEN name1$ = "Spieler 1" 800 PRINT FNLOC$(10,11);" Den Namen bitte f}r Spieler 2 " 810 PRINT FNLOC$(10,13);prb$:yp = 13:GOSUB 3700 820 name2$ = UPPER$(LEFT$(tx$,1)) + LOWER$(MID$(tx$,2)) 830 IF name2$="" THEN name2$ = "Spieler 2" 840 PRINT FNloc$(15,15);" Braucht Ihr Spielregeln ? "; 850 PRINT " J - N ? "; 860 xp = 37:yp$ = CHR$(27)+"j":yp = ASC(yp$)-10:lang = 1:lasc = 74:hasc = 110:GOSUB 3700 870 IF LOWER$(tx$) = "n" THEN zei = 25:rei = 21:GOTO 1120 880 IF LOWER$(tx$) <>"j" THEN 860 890 ' 900 '########################### Spielregeln ################################## 910 ' 920 PRINT cls$:PRINT FNLOC$(30,5);lokl$;" S P I E L R E G E L N ";b4$;lokl$ 930 PRINT:PRINT " Eure Aufgabe besteht darin, eine Lokomotive }ber Schinen bis auf " 940 PRINT " die Zahl 70 zu fahren.":PRINT 950 PRINT " Die Lokomotive bewegt sich, wenn Ihr die Rechenzeichen ' + - * / ' zwischen " 960 PRINT " die drei zuf{llig gezogenen Zahlen setzt. ":PRINT 970 PRINT " Die ";inkan$;" invers ";inkaus$;" dargestellten Zahlen m}~en genau erreicht werden.!":PRINT 980 PRINT " Ist das Ergebniss der Rechnung keine ganze Zahl, dann bleibt" 990 PRINT" die Lok stehen und der andere Spieler ist an der Reihe." 1000 PRINT " Ist die Zahl negativ, dann f{hrt die Lok zur}ck. " 1010 PRINT " Wenn die Lok auf das ";inkan$;" XX ";inkaus$;" kommt, dann f{hrt sie automatisch 10 Felder in " 1020 PRINT " Richtung Ziel. ":PRINT:PRINT 1030 PRINT" Kommt eine Lok auf ein Feld, auf dem bereits die andere Lok steht, so" 1040 PRINT" mu~ die letztere 20 Felder zur}ck. 1050 PRINT FNLOC$(25,26);" > Starten mit SPACE - Taste < " 1060 x$ = INKEY$:IF x$ ="" THEN 1060 1070 IF ASC(x$)<> 32 THEN 1060 1080 PRINT cls$:zei = 25:rei = 10 1090 ' 1100 '############################ Level ################################# 1110 ' 1120 FOR x = 0 TO 69:strecke(x) = 0:NEXT 1130 PRINT FNLOC$(zei,rei);" Welcher Schwierigkeitsgrad ? 1140 PRINT FNLOC$(zei,rei+2);" 1 = LEICHT":PRINT FNLOC$(zei,rei+4);" 2 = MITTEL":PRINT FNLOC$(zei,rei+6);" 3 = SCHWER" 1150 x$ = INKEY$:IF x$ ="" THEN 1150 1160 x = ASC(x$):IF x < 49 OR x > 51 THEN 1150 1170 IF x = 49 THEN level = 1:strecke(20) = 1:strecke(28) = 2:strecke(41) = 2:strecke(50) = 1 1180 IF x = 50 THEN level = 2:strecke(20) = 1:strecke(26) = 2:strecke(35) = 1:strecke(38) = 2:strecke(50) = 1:strecke(60) = 1 1190 IF x = 51 THEN level = 3:strecke(10) = 1:strecke(20) = 1:strecke(40) = 1:strecke(23)=2:strecke(50) = 1:strecke(60) = 1 1200 ' 1210 '############################ Spieler 1 ################################## 1220 ' 1230 PRINT cls$:GOSUB 3830 1240 PRINT FNLOC$(4,4);lokr$ 1250 GOSUB 4200 1260 PRINT FNLOC$(47,21);inkan$;" ";name1$;" ";inkaus$ 1270 PRINT FNloc$(47,26);STRING$(10," ");FNLOC$(47,26);name2$ 1280 GOSUB 3110 1290 GOSUB 3310 1300 GOSUB 3500:IF dezimal THEN dezimal = 0:GOSUB 1660:GOTO 1440 1310 IF falsch THEN falsch = 0:GOSUB 1720:GOTO 1440 1320 FOR x = posi(1) + 1 TO posi(1) + summe-1 1330 IF strecke(x) = 1 THEN merker=-1:GOSUB 1820:x = posi(1) + summe 1340 NEXT x 1350 IF merker THEN merker = 0:GOTO 1440 1360 IF SGN(summe) < 0 THEN st =-1:summe =-MIN(ABS(posi(1)),ABS(summe)) ELSE st = 1 1370 y = posi(1):posi(1) = posi(1) + summe:GOSUB 1940:summe = 0:y = posi(2):GOSUB 1940 1380 PRINT FNLOC$(51,23);USING"####";posi(1) 1390 IF posi(1) = 70 THEN 2050 1400 IF strecke(posi(1)) = 2 THEN GOSUB 1870:summe = 10:GOTO 1360 1410 IF posi(1) <> 0 THEN IF posi(1) = posi(2) THEN GOSUB 1770:summe =-MIN(posi(1),zurueck):y = posi(2):posi(2) = posi(2) + summe:st =-1:GOSUB 1940:PRINT FNLOC$(51,28);USING"####";posi(2) 1420 ' 1430 '######################### Spieler 2 ######################################### 1440 ' 1450 GOSUB 4200 1460 PRINT FNLOC$(47,26);inkan$;" ";name2$;" ";inkaus$ 1470 PRINT FNLOC$(47,21);STRING$(10," ");FNloc$(47,21);name1$ 1480 GOSUB 3110 1490 GOSUB 3310 1500 GOSUB 3500:IF dezimal THEN dezimal = 0:GOSUB 1660:GOTO 1250 1510 IF falsch THEN falsch = 0:GOSUB 1720:GOTO 1250 1520 FOR x = posi(2) + 1 TO posi(2) + summe-1 1530 IF strecke(x)=1 THEN merker =-1:GOSUB 1820:x = posi(2) + summe 1540 NEXT x 1550 IF merker THEN merker = 0:GOTO 1250 1560 IF SGN(summe) < 0 THEN st =-1:summe =-MIN(ABS(posui(2)),ABS(summe)) ELSE st = 1 1570 y = posi(2):posi(2) = posi(2) + summe:GOSUB 1940:summe = 0:y = posi(1):GOSUB 1940 1580 PRINT FNLOC$(51,28);USING"####";posi(2) 1590 IF posi(2) = 70 THEN 2050 1600 IF strecke(posi(2)) = 2 THEN GOSUB 1870:summe = 10:GOTO 1560 1610 IF posi(2)<> 0 THEN IF posi(2) = posi(1) THEN GOSUB 1770:summe =-MIN(posi(2),zurueck):y = posi(1):posi(1) = posi(1) + summe:st =-1:GOSUB 1940:summe = 0:y = posi(2):GOSUB 1940:PRINT FNLOC$(51,23);USING"####";posi(1) 1620 GOTO 1250 1630 ' 1640 '############################## Meldung #################################### 1650 ' 1660 PRINT FNLOC$(65,5);"Das Ergebniss ist nicht ";FNloc$(70,7);"ganzzahlig!!":PRINT FNLOC$(65,10);" Ergebniss = ";USING"##.###";summe 1670 PRINT CHR$(7) 1680 FOR p = 1 TO 5000:NEXT 1690 FOR sz = 5 TO 10:PRINT FNLOC$(65,sz);STRING$(24," "):NEXT 1700 RETURN 1710 ' 1720 PRINT FNLOC$(65,5);" Das Ergebniss ist nicht ";FNloc$(70,7);"Richtig!";FNloc$(65,10);" Ergebniss = ";USING"####";summe:PRINT CHR$(7) 1730 FOR p = 1 TO 5000:NEXT 1740 FOR sz = 5 TO 10:PRINT FNLOC$(65,sz);STRING$(24," "):NEXT 1750 RETURN 1760 ' 1770 PRINT FNLOC$(65,5);zurueck;" Felder zur}ck! ";CHR$(7) 1780 FOR p = 1 TO 3000:NEXT 1790 FOR sz = 5 TO 10:PRINT FNLOC$(65,sz);STRING$(24," "):NEXT 1800 RETURN 1810 ' 1820 PRINT FNLOC$(65,5);"Du willst doch nicht die":PRINT FNLOC$(65,7);"n{chste Haltestelle";FNloc$(70,9);" }berfahren ?";CHR$(7) 1830 FOR p = 1 TO 3000:NEXT 1840 FOR sz = 5 TO 10:PRINT FNLOC$(65,sz);STRING$(24," "):NEXT 1850 RETURN 1860 ' 1870 PRINT FNLOC$(65,5);" 10 Felder vorr}cken!";CHR$(7) 1880 FOR p = 1 TO 3000:NEXT 1890 FOR sz = 5 TO 10:PRINT FNLOC$(65,sz);STRING$(24," "):NEXT 1900 RETURN 1910 ' 1920 '############################## Lok bewegen ##################################### 1930 ' 1940 lok$ = lokr$:FOR x = y TO y + summe STEP st 1950 IF (x > 9 AND x < 20) OR (x>29 AND x < 40) OR (x > 49 AND x < 60) OR x > 69 THEN xp = 31 - VAL(RIGHT$(STR$(x),1))*3:lok$ = lokl$:GOTO 1970 1960 xp = VAL(RIGHT$(STR$(x),1))*3+4:lok$ = lokr$ 1970 yp = INT(x/10)*3+4:PRINT FNLOC$(xp,yp);lok$:FOR p = 1 TO 200:NEXT:PRINT FNLOC$(xp,yp);loesch$ 1980 FOR sz = 1 TO 20:OUT 248,11:OUT 248,12:NEXT 1990 NEXT 2000 PRINT FNLOC$(xp,yp);lok$ 2010 RETURN 2020 ' 2030 '########################## Spiel-Ende ######################################### 2040 ' 2050 punkte1 = punkte1 + posi(1) 2060 punkte2 = punkte2 + posi(2) 2070 punkte(1) = punkte(1) + punkte1:punkte(2) = punkte(2) + punkte2:name$(1) = name1$:name$(2) = name2$:rz = rz + 1 2080 PRINT FNLOC$(51,24);USING"####";punkte1 2090 PRINT FNLOC$(51,29);USING"####";punkte2 2100 IF punkte1 > punkte2 THEN PRINT FNLOC$(65,7);name1$;" hat gewonnen " 2110 IF punkte2 > punkte1 THEN PRINT FNLOC$(65,7);name2$;" hat gewonnen " 2120 FOR p = 1 TO 8000:NEXT 2130 zei = 65:rei = 10 2140 PRINT FNLOC$(zei,rei);" 1 = Spiel fortsetzen " 2150 PRINT FNLOC$(zei,rei + 2);" 2 = Neues Spiel " 2160 PRINT FNLOC$(zei,rei + 4);" 3 = Spiel speichern " 2170 PRINT FNLOC$(zei,rei + 6);" 4 = Ende ";CHR$(7) 2180 x$ = INKEY$:IF x$ = "" THEN 2180 2190 x = ASC(x$):IF x < 49 OR x > 52 THEN 2180 2200 IF x = 50 THEN posi(1) = 0:posi(2) = 0:FOR sz = 1 TO 2:name$(sz)="":punkte(sz)=0:NEXT:rz = 0:GOTO 760 2210 IF x = 51 THEN GOSUB 2250:zei = 35:rei = 23:GOTO 2140 2220 IF x = 52 THEN PRINT cls$:END 2230 posi(1) = 0:posi(2) = 0:punkte1 = 0:punkte2 = 0:rz = rz + 1:GOTO 1230 2240 ' 2250 '##################### Highscore - Tafel ################################### 2260 ' 2270 PRINT cls$ 2280 PRINT FNLOC$(5,5);inkan$;STRING$(81," ") 2290 zei = 6: 2300 FOR sz = 10 TO 14 2310 PRINT FNLOC$(sz,zei);CHR$(197)+CHR$(198) 2320 PRINT FNLOC$(sz+60,zei);CHR$(197)+CHR$(198) 2330 zei = zei + 1 2340 NEXT 2350 ' 2360 zei = 10 2370 FOR sz = 15 TO 19 2380 PRINT FNLOC$(sz,zei);CHR$(196)+CHR$(195) 2390 PRINT FNLOC$(sz+60,zei);CHR$(196)+CHR$(195) 2400 zei = zei - 1 2410 NEXT 2420 ' 2430 FOR sz = 6 TO 20 2440 PRINT FNLOC$(15,sz);" ";FNloc$(75,sz);" " 2450 NEXT 2460 ' 2470 PRINT FNLOC$(1,20);STRING$(88,149) 2480 PRINT inkaus$ 2490 ' 2500 lang = 20 2510 oben$ = CHR$(150)+STRING$(3,CHR$(154))+CHR$(155)+STRING$(lang,CHR$(154))+CHR$(155)+STRING$(3,CHR$(154))+CHR$(156) 2520 mitte$ = CHR$(149) + STRING$(lang+8," ")+CHR$(149) 2530 unten$ = CHR$(147) + STRING$(lang+8,CHR$(154)) + CHR$(153) 2540 zei = 6 2550 PRINT FNLOC$(45-LEN(oben$)/2,zei);oben$ 2560 FOR sz = zei+1 TO zei + 3 2570 PRINT FNLOC$(45-LEN(oben$)/2,sz);mitte$ 2580 NEXT 2590 PRINT FNLOC$(45-LEN(oben$)/2,sz);unten$ 2600 PRINT FNLOC$(39,zei + 1);"HAUPTBAHNHOF" 2610 PRINT FNLOC$(35,zei + 3);"H I G H - S C O R E" 2620 ' 2630 lang = 32 2640 oben$ = CHR$(150) + STRING$(lang+8,CHR$(154)) + CHR$(156) 2650 mitte$ = CHR$(149) + STRING$(lang+8," ")+CHR$(149) 2660 unten$ = CHR$(147)+STRING$(3,CHR$(154))+CHR$(158)+STRING$(lang,CHR$(154))+CHR$(158)+STRING$(3,CHR$(154))+CHR$(153) 2670 zei = 13 2680 PRINT FNLOC$(45-LEN(oben$)/2,zei);oben$ 2690 FOR sz = zei+1 TO zei + 5 2700 PRINT FNLOC$(45-LEN(oben$)/2,sz);mitte$ 2710 NEXT 2720 PRINT FNLOC$(45-LEN(oben$)/2,sz);unten$ 2730 PRINT inkaus$ 2740 PRINT FNLOC$(45-LEN(oben$)/2+4,sz+1);CHR$(149);STRING$(lang," ");CHR$(149) 2750 PRINT FNLOC$(45-8/2,zei+1);"FAHRPLAN" 2760 PRINT FNLOC$(26,zei+3);"Gleis 1 :" 2770 PRINT FNLOC$(36,zei+3);UPPER$(name$(1)) 2780 PRINT FNLOC$(46,zei+3);USING"#### Pkt.";punkte(1) 2790 PRINT FNLOC$(56,zei+3);USING"## Runden";rz 2800 PRINT FNLOC$(26,zei+5);"Gleis 2 :" 2810 PRINT FNLOC$(36,zei+5);UPPER$(name$(2)) 2820 PRINT FNLOC$(46,zei+5);USING"#### Pkt.";punkte(2) 2830 PRINT FNLOC$(56,zei+5);USING"## Runden";rz 2840 RETURN 2850 ' 2860 '######################### Tabelle saven ########################### 2870 ' 2880 OPEN "O",1,"lokomo.dat" 2890 FOR sz = 1 TO 2 2900 WRITE #1,name$(sz) 2910 WRITE #1,punkte(sz) 2920 NEXT 2930 WRITE #1,rz 2940 CLOSE 2950 RETURN 2960 ' 2970 '######################### tabelle laden ########################## 2980 ' 2990 IF FIND$("lokomo.dat") = "" THEN RETURN 3000 OPEN "I",1,"lokomo.dat" 3010 FOR sz = 1 TO 2 3020 INPUT #1,name$(sz) 3030 INPUT #1,punkte(sz) 3040 NEXT 3050 INPUT #1,rz 3060 CLOSE 3070 RETURN 3080 ' 3090 '########################### Zufallszahlen #################################### 3100 ' 3110 zahl(1) = INT(RND*3)+1:zahl(2) = INT(RND*5):zahl(3) = INT(RND*6)+1:lauf = 12:z = lauf-5 3120 FOR y = 1 TO lauf 3130 FOR x = 1 TO 3 3140 PRINT FNLOC$(47+x,7);inkan$;RIGHT$(STR$(x),1);inkaus$:PRINT FNLOC$(47+x,7);:FOR p = 1 TO y*12:NEXT:PRINT RIGHT$(STR$(x),1):IF y > z AND x = zahl(1) THEN x = 3:y = lauf 3150 NEXT x:NEXT y 3160 PRINT FNLOC$(47+zahl(1),7);inkan$;RIGHT$(STR$(zahl(1)),1);inkaus$ 3170 FOR y = 1 TO lauf 3180 FOR x = 0 TO 4 3190 PRINT FNLOC$(48+x,10);inkan$;RIGHT$(STR$(x),1);inkaus$:PRINT FNLOC$(48+x,10);:FOR p = 1 TO y*8:NEXT p:PRINT RIGHT$(STR$(x),1):IF y > z AND x = zahl(2) THEN x = 4:y = lauf 3200 NEXT x:NEXT y 3210 PRINT FNLOC$(48+zahl(2),10);inkan$;RIGHT$(STR$(zahl(2)),1);inkaus$ 3220 FOR y = 1 TO lauf 3230 FOR x = 1 TO 6 3240 PRINT FNLOC$(47+x,13)inkan$;RIGHT$(STR$(x),1);inkaus$:PRINT FNLOC$(47+x,13);:FOR p = 1 TO y*6:NEXT p:PRINT RIGHT$(STR$(x),1):IF y > z AND x = zahl(3) THEN x = 6:y = lauf 3250 NEXT x:NEXT y 3260 PRINT FNLOC$(47+zahl(3),13);inkan$;RIGHT$(STR$(zahl(3)),1);inkaus$ 3270 PRINT FNLOC$(47,17);zahl(1):PRINT FNLOC$(51,17);zahl(2):PRINT FNLOC$(55,17);zahl(3) 3280 PRINT FNLOC$(49,19);"=" 3290 RETURN 3300 ' 3310 '########################## Eingabe Rechenzeichen ############################## 3320 ' 3330 xp = 50:yp = 17:lasc =42:hasc = 47:lang = 1:tx$ = " ":GOSUB 3700 3340 IF INSTR(rz$,tx$) = 0 THEN 3330 3350 IF zahl(2) = 0 AND tx$ ="/" THEN 3330 3360 rz1$ = tx$ 3370 xp = 54:GOSUB 3700 3380 IF INSTR(rz$,tx$) = 0 THEN 3330 3390 rz2$ = tx$ 3400 ' 3410 '############################## Eingabe Ergebniss ############################### 3420 ' 3430 xp = 51:yp = 19:lasc = 45:hasc = 57:lang = 2:GOSUB 3700 3440 IF INSTR(tx$,"/") <> 0 THEN 3430 3450 IF INSTR(tx$,".") <> 0 THEN 3430 3460 ergebnis = VAL(tx$) 3470 ' 3480 '############################## Berechnung #################################### 3490 ' 3500 IF rz2$="/" AND rz1$ ="/" THEN summe = zahl(1)/zahl(2)/zahl(3):GOTO 3640 3510 IF rz2$="/" AND rz1$ <>"*" THEN zwsumme = zahl(2)/zahl(3):GOTO 3610 3520 IF rz2$="*" AND rz1$ ="/" THEN summe = zahl(1)/zahl(2)*zahl(3):GOTO 3640 3530 IF rz2$="*" THEN zwsumme = zahl(2)*zahl(3):GOTO 3610 3540 IF rz1$="+" THEN zwsumme = zahl(1)+zahl(2):GOTO 3580 3550 IF rz1$="-" THEN zwsumme = zahl(1)-zahl(2):GOTO 3580 3560 IF rz1$="*" THEN zwsumme = zahl(1)*zahl(2):GOTO 3580 3570 zwsumme = zahl(1)/zahl(2) 3580 IF rz2$="+" THEN summe = zwsumme + zahl(3):GOTO 3640 3590 IF rz2$="-" THEN summe = zwsumme - zahl(3):GOTO 3640 3600 summe = zwsumme/zahl(3):GOTO 3640 3610 IF rz1$="+" THEN summe = zahl(1)+zwsumme:GOTO 3640 3620 IF rz1$="-" THEN summe = zahl(1)-zwsumme:GOTO 3640 3630 summe = zahl(1)*zwsumme:GOTO 3640 3640 IF INT(summe) <> summe THEN dezimal =-1:GOTO 3660 3650 IF summe <> ergebnis THEN falsch = -1 3660 RETURN 3670 ' 3680 '############################ Eingaberoutine ################################ 3690 ' 3700 WHILE INKEY$ <>"":WEND:PRINT FNLOC$(xp,yp);SPACE$(LEN(tx$)):tx$="":PRINT FNLOC$(xp,yp);: 3710 x$ = INKEY$:IF x$ ="" THEN 3710 3720 x = ASC(x$):IF x = 13 AND tx$ ="" THEN 3790 3730 IF x = 127 AND LEN(tx$) = 0 THEN GOTO 3790 3740 IF x = 13 THEN RETURN 3750 IF x = 127 THEN tx$ = LEFT$(tx$,LEN(tx$)-1):PRINT b9$;" ";b9$;:GOTO 3710 3760 IF LEN(tx$) = lang THEN 3790 3770 IF x < lasc OR x > hasc THEN 3790 3780 tx$ = tx$ + x$:PRINT x$;:GOTO 3710 3790 GOTO 3710 3800 ' 3810 '########################## Bildschirmmaske ################################ 3820 ' 3830 FOR y = 5 TO 29:PRINT FNLOC$(45,y);CHR$(149);:NEXT 3840 FOR y = 15 TO 26 STEP 5:PRINT FNLOC$(45,y);CHR$(151);STRING$(10,CHR$(154)):NEXT 3850 PRINT FNLOC$(33,1);lokl$;" L O K O M O T I V E ";b4$;lokl$ 3860 PRINT FNLOC$(47,5);"LEVEL = ";level 3870 PRINT FNLOC$(47,6);CHR$(185);STRING$(3,CHR$(186));CHR$(187):PRINT FNLOC$(47,7);CHR$(188);"123";CHR$(192):PRINT FNLOC$(47,8);CHR$(189);STRING$(3,190);CHR$(191) 3880 PRINT FNLOC$(47,9);CHR$(185);STRING$(5,186);CHR$(187):PRINT FNLOC$(47,10);CHR$(188);"01234";CHR$(192):PRINT FNLOC$(47,11);CHR$(189);STRING$(5,190);CHR$(191) 3890 PRINT FNLOC$(47,12);CHR$(185);STRING$(6,186);CHR$(187):PRINT FNLOC$(47,13);CHR$(188);"123456";CHR$(192):PRINT FNLOC$(47,14);CHR$(189);STRING$(6,190);CHR$(191) 3900 PRINT FNLOC$(47,16);"+ - * /" 3910 PRINT FNLOC$(47,21);name1$:PRINT FNLOC$(47,23);"Pos:";USING"####";posi(1):PRINT FNLOC$(47,24);"Pkt:";USING"####";punkte1 3920 PRINT FNLOC$(47,26);name2$:PRINT FNLOC$(47,28);"Pos:";USING"####";posi(1):PRINT FNLOC$(47,29);"Pkt:";USING"####";punkte2 3930 PRINT FNLOC$(5,6);"0";:FOR x = 1 TO 9:PRINT CHR$(154);CHR$(154);RIGHT$(STR$(x),1);:NEXT:PRINT vbr$ 3940 PRINT FNLOC$(3,12);vbl$;:PRINT"19";:FOR x = 18 TO 10 STEP -1:PRINT CHR$(154)RIGHT$(STR$(x),2);:NEXT 3950 PRINT FNLOC$(4,12);"20";:FOR x = 21 TO 29:PRINT CHR$(154)RIGHT$(STR$(x),2);:NEXT:PRINT vbr$ 3960 PRINT FNLOC$(3,18);vbl$;:PRINT"39";:FOR x = 38 TO 30 STEP -1:PRINT CHR$(154)RIGHT$(STR$(x),2);:NEXT 3970 PRINT FNLOC$(4,18);"40";:FOR x = 41 TO 49:PRINT CHR$(154)RIGHT$(STR$(x),2);:NEXT:PRINT vbr$ 3980 PRINT FNLOC$(3,24);vbl$;:PRINT"59";:FOR x = 58 TO 50 STEP-1:PRINT CHR$(154)RIGHT$(STR$(x),2);:NEXT 3990 PRINT FNLOC$(4,24);"60";:FOR x = 61 TO 69:PRINT CHR$(154)RIGHT$(STR$(x),2);:NEXT:PRINT vbr$ 4000 PRINT FNLOC$(31,27);"70" 4010 ' 4020 '########################## Bahnh|fe markieren ############################# 4030 ' 4040 fl = 0:xp = 31:yp = 9:PRINT inkan$ 4050 FOR x = 10 TO 70 4060 IF fl THEN 4110 4070 PRINT FNLOC$(xp,yp);:IF strecke(x) = 1 THEN PRINT USING"##";x 4080 PRINT FNLOC$(xp,yp);:IF strecke(x) = 2 THEN PRINT "XX"; 4090 IF RIGHT$(STR$(x),1) ="9" THEN fl = NOT fl:yp = yp + 3:GOTO 4150 4100 xp = xp - 3:GOTO 4150 4110 PRINT FNLOC$(xp,yp);:IF strecke(x) = 1 THEN PRINT USING"##";x; 4120 PRINT FNLOC$(xp,yp);:IF strecke(x) = 2 THEN PRINT"XX"; 4130 IF RIGHT$(STR$(x),1) ="9" THEN fl = NOT fl:yp = yp + 3:GOTO 4150 4140 xp = xp + 3 4150 NEXT:PRINT inkaus$ 4160 RETURN 4170 ' 4180 '######################## Anzeige l|schen ############################## 4190 ' 4200 PRINT FNLOC$(48,7);"123" 4210 PRINT FNLOC$(48,10);"01234" 4220 PRINT FNLOC$(48,13);"123456" 4230 PRINT FNLOC$(48,17);" " 4240 PRINT FNLOC$(48,19);" " 4250 RETURN 4260 END 4270 ' 4280 '####################### Symbole zusammenstellen ############################# 4290 ' 4300 lokr$ = CHR$(176) + CHR$(177) + CHR$(8) + CHR$(8) + CHR$(10) + CHR$(178) + CHR$(179) 4310 lokl$ = CHR$(180) + CHR$(181) + CHR$(8) + CHR$(8) + CHR$(10) + CHR$(182) + CHR$(183) 4320 loesch$ = CHR$(32) + CHR$(32) + CHR$(8) + CHR$(8) + CHR$(10) + CHR$(32) + CHR$(32) 4330 vbr$ = CHR$(156) + CHR$(8) + CHR$(10) + CHR$(149) + CHR$(8) + CHR$(10) + CHR$(149) + CHR$(8) + CHR$(10) + CHR$(153) 4340 vbl$ = CHR$(147) + b4$ + b9$ + CHR$(149) + b4$ + b9$ + CHR$(149) + b4$ + b9$ + CHR$(150) 4350 prb$ = CHR$(193) + CHR$(194) 4360 RETURN 4370 END 4380 ' 4390 '######################### Symbol - MC ####################################### 4400 ' 4410 RESTORE 4570 4420 READ zeichencode 4430 IF zeichencode < 0 OR zeichencode > 255 THEN RETURN 4440 FOR i = 0 TO 7 4450 READ x:POKE tabstart+i,x 4460 NEXT i 4470 charstart = zeichencode * 8 + &HB800+2^16 4480 highaddr = INT(charstart/256) 4490 lowaddr = charstart-highaddr*256 4500 POKE &HF510,lowaddr 4510 POKE &HF511,highaddr 4520 CALL codestart 4530 GOTO 4420 4540 ' 4550 '########################### Zeichen definieren ######################## 4560 ' 4570 DATA 176,&h00,&h00,&h00,&h00,&h00,&hFE,&h42,&h5A 4580 DATA 177,&h00,&h00,&h00,&h3e,&h22,&h1c,&h14,&h15 4590 DATA 178,&h5a,&h5b,&h58,&h40,&h4c,&h52,&h73,&h0c 4600 DATA 179,&h97,&hf5,&h04,&h02,&h32,&h49,&hcf,&h30 4610 DATA 180,&h00,&h00,&h00,&h7c,&h44,&h38,&h28,&ha8 4620 DATA 181,&h00,&h00,&h00,&h00,&h00,&h7f,&h42,&h5a 4630 DATA 182,&he9,&haf,&h20,&h40,&h4c,&h92,&hf3,&h0c 4640 DATA 183,&h5a,&hda,&h1a,&h02,&h32,&h4a,&hce,&h30 4650 DATA 185,&h00,&h00,&h3f,&h1f,&h2f,&h17,&h2b,&h14 4660 DATA 186,&h00,&h00,&hff,&hff,&hff,&hff,&hff,&h00 4670 DATA 187,&h00,&h00,&hfc,&hf4,&hec,&hdc,&hbc,&h7c 4680 DATA 188,&h2a,&h14,&h2a,&h14,&h2a,&h14,&h2a,&h14 4690 DATA 189,&h2b,&h16,&h2d,&h1a,&h35,&h00,&h00,&h00 4700 DATA 190,&h55,&haa,&h55,&haa,&h55,&h00,&h00,&h00 4710 DATA 191,&h7c,&hbc,&h5c,&hac,&h54,&h00,&h00,&h00 4720 DATA 192,&h7c,&h7c,&h7c,&h7c,&h7c,&h7c,&h7c,&h7c 4730 DATA 193,&h00,&h00,&h00,&h07,&h0c,&h18,&h30,&hff 4740 DATA 194,&h00,&h00,&h06,&hfe,&h36,&h30,&h30,&hf0 4750 DATA 195,&h01,&h03,&h07,&h0f,&h1f,&h3f,&h7f,&hff 4760 DATA 196,&hff,&hfe,&hfc,&hf8,&hf0,&he0,&hc0,&h80 4770 DATA 198,&hff,&h7f,&h3f,&h1f,&h0f,&h07,&h03,&h01 4780 DATA 197,&h80,&hc0,&he0,&hf0,&hf8,&hfc,&hfe,&hff 4790 DATA -1 4800 ' 4810 MEMORY &HF4FF 4820 RESTORE 4910 4830 codestart = &HF500 4840 tabstart = &HF515 4850 FOR i = 0 TO 20 4860 READ x:POKE codestart+i,x 4870 NEXT i 4880 RETURN 4890 ' 4900 ' 4910 DATA &H01,&H09,&HF5 4920 DATA &HCD,&H5A,&HFC 4930 DATA &HE9,&H00 4940 DATA &HC9 4950 DATA &H21,&H15,&HF5 4960 DATA &H01,&H08,&H00 4970 DATA &H11,&H00,&H00 4980 DATA &HED,&HB0 4990 DATA &HC9 5000 ' 5010 END