Traducciones de esta página:

Herramientas de usuario

Herramientas del sitio


es:backgammon

BACKGAMMON

Ficha

Backgammon_p1.jpg

Autor Ralf Thelen
Compatibilidad Amstrad PCW 8256 / 8512 / 9512
Año 1989
Género Mesa
Controles Teclado
Idioma Alemán
Estado Preservado

Capturas

Backgammon_screenshot_01.png Backgammon_screenshot_02.png Backgammon_screenshot_03.png Backgammon_screenshot_04.png

Descripción

Backgammon es un juego de inteligencia y razonamiento de origen pasatiempo-culto británico. Esta versión de PCW se acompaña de unos buenos gráficos. Es un juego bipersonal, y en él, el ordenador realiza la función de oponente.

El manejo de las fichas es muy sencillo. Como siempre, salvo en el caso de que saquemos dobles, tiraremos dos veces, y tendremos que mover también dos veces, la primera con el valor de un dado y la segunda con el del otro. Para indicar el primer movimiento nos desplazaremos con las teclas de cursor seguidamente de la tecla ENTER donde se encuentre la ficha que queramos mover y, finalmente, el número de puntos que queremos avanzar, y que deberá pertenecer al valor que nos marque uno de los dos dados. En el caso que no podamos, o no deseemos mover, pulsaremos simplemente la tecla ENTER.

La realización del programa es bastante buena y la estrategia de juego levantaría dolores de cabeza a los mejores aficionados a esta noble competición. Las instrucciones se hayan en la pantalla de presentación del mismo juego.

Listado

  • Listado 1 - BGINIT.BAS
10 ' Einschaltmeldung
20 PRINT CHR$(27)+"E"+CHR$(27)+"H"+CHR$(27)+"f"+CHR$(27)+"0"
30 PRINT TAB(30)"B i t t e.. e i n e n.. M o m e n t.. G e d u l d. !"
40 MEMORY &HF4FF
50 RESTORE 260
60 Codestart=&HF500
70 Tabstart=&HF515
80 FOR i=0 TO 20
90 READ x:POKE Codestart+i,x
100 NEXT i
110 RESTORE 380
120 READ Zeichencode
130 IF Zeichencode<0 OR Zeichencode>255 THEN 960
140 FOR i=0 TO 7
150 READ x:POKE Tabstart+i,x
160 NEXT i
170 Charstart=Zeichencode*8+&HB800+2^16
180 Highaddr=INT(Charstart/256)
190 Lowaddr=Charstart-Highaddr*256
200 POKE &HF510,Lowaddr
210 POKE &HF511,Highaddr
220 CALL Codestart
230 GOTO 120
240 '
250 ' Maschinencode
260 DATA &H01,&H09,&HF5
270 DATA &HCD,&H5A,&HFC
280 DATA &HE9,&H00
290 DATA &HC9
300 DATA &H21,&H15,&HF5
310 DATA &H01,&H08,&H00
320 DATA &H11,&H00,&H00
330 DATA &HED,&HB0
340 DATA &HC9
350 '
360 ' Daten für Zeichen
370 ' Ascii-code,8* Reihen-Bytes
380 DATA 255,24,24,24,24,36,36,36,36
390 DATA 254,66,66,66,66,129,129,129,129
400 DATA 253,1,1,1,1,2,2,2,2
410 DATA 252,128,128,128,128,64,64,64,64
420 DATA 251,32,32,32,32,16,16,16,16
430 DATA 250,4,4,4,4,8,8,8,8
440 DATA 249,17,17,17,17,34,34,34,34
450 DATA 248,136,136,136,136,68,68,68,68
460 DATA 247,68,68,68,68,136,136,136,136
470 DATA 246,34,34,34,34,17,17,17,17
480 DATA 245,16,16,16,16,32,32,32,32
490 DATA 244,8,8,8,8,4,4,4,4
500 DATA 243,64,64,64,64,128,128,128,128
510 DATA 242,2,2,2,2,1,1,1,1
520 DATA 35,255,255,255,255,255,255,255,255
530 DATA 241,24,24,24,24,60,60,60,60
540 DATA 240,126,126,126,126,255,255,255,255
550 DATA 239,17,17,17,17,35,35,35,35
560 DATA 238,136,136,136,136,196,196,196,196
570 DATA 237,71,71,71,71,143,143,143,143
580 DATA 236,226,226,226,226,241,241,241,241
590 DATA 235,31,31,31,31,63,63,63,63
600 DATA 234,248,248,248,248,252,252,252,252
610 DATA 233,127,127,127,127,255,255,255,255
620 DATA 232,254,254,254,254,255,255,255,255
630 DATA 231,129,129,129,129,66,66,66,66
640 DATA 230,36,36,36,36,24,24,24,24
650 DATA 229,255,255,255,255,127,127,127,127
660 DATA 228,255,255,255,255,254,254,254,254
670 DATA 227,63,63,63,63,31,31,31,31
680 DATA 226,252,252,252,252,248,248,248,248
690 DATA 225,143,143,143,143,71,71,71,71
700 DATA 224,241,241,241,241,226,226,226,226
710 DATA 223,35,35,35,35,17,17,17,17
720 DATA 222,196,196,196,196,136,136,136,136
730 DATA 221,255,255,255,255,126,126,126,126
740 DATA 220,60,60,60,60,24,24,24,24
750 DATA 219,170,85,170,85,170,85,170,85
760 DATA 218,0,127,112,96,96,99,99,99
770 DATA 217,0,255,0,0,0,255,0,0
780 DATA 216,0,254,14,6,6,198,198,198
790 DATA 215,99,99,99,96,96,112,127,0
800 DATA 214,0,0,255,0,0,0,255,0
810 DATA 213,198,198,198,6,6,14,254,0
820 DATA 212,0,127,112,96,96,99,99,99
830 DATA 211,0,255,0,0,0,255,255,255
840 DATA 210,0,254,14,6,6,198,198,198
850 DATA 209,99,99,99,96,96,112,127,0
860 DATA 208,255,255,255,0,0,0,255,0
870 DATA 207,198,198,198,6,6,14,254,0
880 DATA 206,0,0,0,0,0,0,0,60
890 DATA 205,60,0,0,0,0,0,0,0
900 DATA 204,0,0,0,60,60,0,0,0
910 DATA 203,0,24,24,24,24,126,60,24
920 DATA 202,255,231,231,231,231,129,195,231
930 DATA 201,231,195,129,231,231,231,231,255
940 DATA -1
950 '
960 cls$=CHR$(27)+"H"+CHR$(27)+"E":PRINT cls$
970 ' Spielanleitung
980 PRINT".... B A C K G A M M O N" 
990 PRINT:PRINT "by. Ralf Thelen " 
1000 PRINT"... 3507  Wachtberg"  
1010 PRINT:PRINT:PRINT:PRINT"Brauchen Sie eine Spielanleitung ?"
1020 PRINT:PRINT"..... ( J / n)"
1030 a$=UPPER$(INKEY$):WHILE a$="":a$=UPPER$(INKEY$):WEND 
1040 IF a$="J" THEN 1070
1050 IF a$="N" THEN 1620
1060 GOTO 1030
1070 PRINT cls$
1080 PRINT "Backgammon - Spielregeln"
1090 PRINT:PRINT "Gespielt wird aud einem Brett mit 24 Feldern"
1100 PRINT "Davon sind 12 oben und 12 unten angeordnet"
1110 PRINT "Jeder Spieler hat 15 Steine"
1120 PRINT "Durchnummeriert würde das Spielfeld etwa so aussehen :"
1130 PRINT
1140 PRINT ".... 12.. 11.. 10.. 09.. 08.. 07.. 06.. 05.. 04.. 03.. 02.. 01"
1150 PRINT
1160 PRINT ".... 13.. 14.. 15.. 16.. 17.. 18.. 19.. 20.. 21.. 22.. 23.. 24"
1170 PRINT:PRINT" Der Computer zieht von. 1 nach 24"
1180 PRINT "Sie ziehen von. 24 nach 1"
1190 PRINT" Das erste Ziel ist seine Steine in die letzten 6 Felder zu bringen"
1200 PRINT" Für SIE sind das die Felder. 1 bis 6"
1210 PRINT" Für den COMPUTER die Felder 19 bis 24"
1220 GOSUB 1580
1230 PRINT cls$
1240 PRINT "Gespielt wird mit zwei würfeln"
1250 PRINT "Der Computer stellt Sie am rechten Rand dar !"
1260 PRINT "Sie Züge müßen entsprechend der Augenzahl ausgeführt werden!"
1270 PRINT "Dabei kann man nur auf Felder setzen die entweder schon von eigenen Steinen"
1280 PRINT "besetzt, frei oder von maximal einem gegnerischen Stein besetzt sind" 
1290 PRINT "Im letzten Fall wird der gegnerische Stein geschlagen, und muß beim nächsten"
1300 PRINT "mal wieder eingesetzt werden"
1310 PRINT "D.h. er wird entsprechend der Augenzahl wieder ins jeweilige Ausgagsfeld"
1320 PRINT "gesetzt. (Für SIE Felder 19-24)"
1330 PRINT "Sind die Felder schon besetzt, so kannder Zug nicht ausgeführt werden und"
1340 PRINT "der Gegner ist an der Reihe !"
1350 GOSUB 1580
1360 PRINT "Werden zwei gleiche Zahlen gewürfelt (Pasch), so kann man die entsprechende"
1370 PRINT "Zahl. vier. mal ziehen !"
1380 PRINT:PRINT "Ist es einem Spieler gelungen alle 15 Steine in die letzten 6 Felder zu"
1390 PRINT "bringen, so kann er mit dem rauswürfeln beginnen!"
1400 PRINT "Dabei muß er die richtige Augenzahl werfen."
1410 PRINT "Der Stein auf diesem Feld wird dann ausdem Spiel genommen."
1420 PRINT "Sieger ist er als erster keine Steine mehr hat !"
1430 GOSUB 1580
1440 PRINT cls$
1450 PRINT " BEDIENUNG"
1460 PRINT " Setzen sie mit Hilfe der Cursortasten den Pfeil unter den Stein den Sie."
1470 PRINT " nehmen wollen."
1480 PRINT " Druecken Sie RETURN. ---> Der Pfeil wird invertiert !"
1490 PRINT " Setzen Sie den Pfeil unter das Feld auf welches der Stein gesetzt werden soll"
1500 PRINT " Druecken Sie Return. ---> Der Zug wird ausgefuehrt"
1510 PRINT " Koennen Sie einen Zug nicht ausfuehren so Druecken Sie. > n <"
1520 PRINT " Die entsprechende Zahl wird dann geloescht !"
1530 PRINT " Beim raus oder reinwuerfeln gehen sie auf das entsprechende Feld"
1540 PRINT " und druecken zweimal RETURN."
1550 PRINT:PRINT ".......... V i e l. S p a s s "
1560 GOSUB 1580
1570 GOTO 960
1580 PRINT:PRINT"Weiter mit. > Space <. Taste !"
1590 a$=INKEY$:WHILE a$<>" ":a$=INKEY$:WEND
1600 PRINT cls$
1610 RETURN
1620 RUN "backgam
  • Listado 2 - BACKGAM.BAS
10 DEFINT a-z
20 OPTION BASE 1
30 DIM zahl(4):DIM flagz(4):DIM flag(4):DIM bew(24):DIM walt(24):DIM wneu(24):DIM swalt(24):DIM swneu(24)
40 DEF FNloc$(u,v)=CHR$(27)+"Y"+CHR$(32+u)+CHR$(32+v)
50 DEF FNr2$=CHR$(27)+"C"+CHR$(27)+"C"
60 DEF FNraussw$(raussw)=CHR$(27)+"X"+CHR$(31+2*raussw)+CHR$(119)+CHR$(35)+CHR$(34)
70 DEF FNrausw$(rausw)=CHR$(27)+"X"+CHR$(63-2*rausw)+CHR$(119)+CHR$(35)+CHR$(34)
80 DEF FNmat$(i,k,po)=CHR$(27)+"X"+CHR$(32+2*k+(po*(30-4*k)))+CHR$(117-7*i+(po*(-91+7*(i+(i-12)))))+CHR$(34)+CHR$(39)
90 zaehl=10:weg=1:zu=0:mal=0:posi=4:po=0:rausw=0:raussw=0
100 zahl1$=CHR$(27)+"X"+CHR$(44)+CHR$(119)+CHR$(34)+CHR$(34)
110 zahl2$=CHR$(27)+"X"+CHR$(50)+CHR$(119)+CHR$(35)+CHR$(34)
120 meld1$=CHR$(27)+"X"+CHR$(63)+CHR$(32)+CHR$(32)+CHR$(120)
130 meld2$=CHR$(27)+"X"+CHR$(32)+CHR$(32)+CHR$(32)+CHR$(120)
140 cls$=CHR$(27)+"E"+CHR$(27)+"H"
150 PRINT cls$+CHR$(27)+"o"+CHR$(27)+"f"
160 '
170 ' Umrabdung zeichnen
180 PRINT STRING$(86,CHR$(219))
190 FOR i=1 TO 28:PRINT CHR$(219);STRING$(84," ");CHR$(219):NEXT i
200 PRINT STRING$(86,CHR$(219))
210 '
220 ' Felder zeichnen (unten)
230 FOR i=1 TO 12 STEP 2
240 PRINT CHR$(27)+"X"+CHR$(50)+CHR$(33+(i-1)*7)+CHR$(43)+CHR$(39);
250 GOSUB 770:GOSUB 810:GOSUB 840:GOSUB 870:GOSUB 900:GOSUB 930
260 PRINT CHR$(27)+"X"+CHR$(50)+CHR$(33+(i)*7)+CHR$(43)+CHR$(39);
270 GOSUB 970:GOSUB 1010:GOSUB 1040:GOSUB 1070:GOSUB 1100:GOSUB 1130
280 NEXT i
290 ' Felder zeichnen (oben)
300 FOR i=13 TO 24 STEP 2
310 PRINT CHR$(27)+"X"+CHR$(34)+CHR$(33+(i-13)*7)+CHR$(43)+CHR$(39);
320 GOSUB 1370:GOSUB 1410:GOSUB 1440:GOSUB 1470:GOSUB 1500:GOSUB 1530
330 PRINT CHR$(27)+"X"+CHR$(34)+CHR$(33+(i-12)*7)+CHR$(43)+CHR$(39);
340 GOSUB 1170:GOSUB 1210:GOSUB 1240:GOSUB 1270:GOSUB 1300:GOSUB 1330
350 NEXT i
360 '
370 ' Grundposition festlegen !
380 wneu(24)=2:wneu(13)=5:wneu(8)=3:wneu(6)=5:GOSUB 2020
390 swneu(1)=2:swneu(12)=5:swneu(17)=3:swneu(19)=5:GOSUB 2230
400 '
410 ' Zug Spieler ausführen
420 GOTO 440
430 PRINT meld1$:PRINT:PRINT meld2$:PRINT:GOSUB 1570:GOSUB 3650
440 PRINT meld2$;:PRINT:PRINT meld1$;:PRINT
450 PRINT TAB(25)"... w ü r f e l n.. m i t.. T a s t e... > w <";
460 pos$=UPPER$(INKEY$):IF pos$="" GOTO 460
470 IF pos$="W" THEN GOSUB 1570 ELSE GOTO 460
480 IF po=1 THEN 610
490 PRINT meld1$;:PRINT:po=0
500 IF zu=0 THEN PRINT FNloc$(32,posi);"^"; ELSE PRINT FNloc$(32,posi);CHR$(201);
510 pos$=UPPER$(INKEY$):IF pos$="" GOTO 510
520 IF pos$=CHR$(6) THEN posi=posi+7
530 IF pos$=CHR$(1) THEN posi=posi-7
540 IF pos$=CHR$(31) THEN 610 
550 IF pos$=CHR$(13) THEN 2540
560 IF pos$="N" THEN 3210
570 IF posi<4 THEN posi=4:GOTO 610
580 IF posi>81 THEN posi=81
590 PRINT
600 GOTO 500
610 PRINT
620 PRINT meld2$;:po=1
630 IF zu=0 THEN PRINT FNloc$(1,posi);CHR$(203); ELSE PRINT FNloc$(1,posi);CHR$(202);
640 pos$=UPPER$(INKEY$):IF pos$="" GOTO 640
650 IF pos$=CHR$(6) THEN posi=posi+7
660 IF pos$=CHR$(1) THEN posi=posi-7
670 IF pos$=CHR$(30) THEN PRINT:GOTO 490
680 IF pos$=CHR$(13) THEN 2540
690 IF pos$="N" THEN 3210
700 IF posi<4 THEN posi=4:PRINT:GOTO 490
710 IF posi>81 THEN posi=81
720 PRINT
730 GOTO 630
740 '
750 ' U N T E R P R O G R A M M E
760 '
770 ' Schwarzes Feld ohne Steine zeichnen (v.unten)
780 PRINT "   "+CHR$(255)"   "
790 PRINT"   "+CHR$(254)"   "
800 RETURN
810 PRINT "  "+CHR$(253)+CHR$(255)+CHR$(252)"  "
820 PRINT "  "+CHR$(250)+CHR$(254)+CHR$(251)"  "
830 RETURN
840 PRINT"  "+CHR$(249)+" "+CHR$(248)"  "
850 PRINT"  "+CHR$(247)+" "+CHR$(246)"  "
860 RETURN
870 PRINT " "+CHR$(253)+CHR$(245)+" " +CHR$(244)+CHR$(252)" "
880 PRINT " "+CHR$(250)+CHR$(243)+" "+CHR$(242)+CHR$(251)" "
890 RETURN
900 PRINT" "+CHR$(249)+"   "+CHR$(248)" "
910 PRINT" "+CHR$(247)+"   "+CHR$(246)" "
920 RETURN
930 PRINT CHR$(253)+CHR$(245)+"   "+CHR$(244)+CHR$(252)
940 PRINT CHR$(250)+CHR$(243)+"   "+CHR$(242)+CHR$(251);
950 RETURN
960 '
970 ' weißes Feld ohne Steine zeichnen (v.unten)
980 PRINT "   "+CHR$(255)"   "
990 PRINT"   "+CHR$(254)"   "
1000 RETURN
1010 PRINT "  "+CHR$(253)+CHR$(241)+CHR$(252)"  "
1020 PRINT "  "+CHR$(250)+CHR$(240)+CHR$(251)"  "
1030 RETURN
1040 PRINT "  "+CHR$(239)+"#"+CHR$(238)"  "
1050 PRINT "  "+CHR$(237)+"#"+CHR$(236)"  "
1060 RETURN
1070 PRINT " "+CHR$(253)+CHR$(235)+"#"+CHR$(234)+CHR$(252)" "
1080 PRINT" "+CHR$(250)+CHR$(233)+"#"+CHR$(232)+CHR$(251)" "
1090 RETURN
1100 PRINT" "+CHR$(239)+"###"+CHR$(238)" "
1110 PRINT" "+CHR$(237)+"###"+CHR$(236)" "
1120 RETURN
1130 PRINT CHR$(253)+CHR$(235)+"###"+CHR$(234)+CHR$(252)
1140 PRINT CHR$(250)+CHR$(233)+"###"+CHR$(232)+CHR$(251);
1150 RETURN
1160 '
1170 ' Schwarzes Feld ohne Steine zeichnen (v.oben)
1180 PRINT CHR$(244)+CHR$(252)+"   "+CHR$(253)+CHR$(245)
1190 PRINT CHR$(242)+CHR$(251)+"   "+CHR$(250)+CHR$(243)
1200 RETURN
1210 PRINT " "+CHR$(248)+"   "+CHR$(249)+" "
1220 PRINT " "+CHR$(246)+"   "+CHR$(247)+" "
1230 RETURN
1240 PRINT " "+CHR$(244)+CHR$(252)+" "+CHR$(253)+CHR$(245)+" "
1250 PRINT " "+CHR$(242)+CHR$(251)+" "+CHR$(250)+CHR$(243)+" "
1260 RETURN
1270 PRINT "  "+CHR$(248)+" "+CHR$(249)+"  "
1280 PRINT "  "+CHR$(246)+" "+CHR$(247)+"  "
1290 RETURN
1300 PRINT "  "+CHR$(244)+CHR$(231)+CHR$(245)+"  "
1310 PRINT "  "+CHR$(242)+CHR$(230)+CHR$(243)+"  "
1320 RETURN
1330 PRINT "   "+CHR$(231)+"   "
1340 PRINT "   "+CHR$(230)+"   ";
1350 RETURN
1360 '
1370 ' Weißes Feld ohne Steine zeichnen (v.oben)
1380 PRINT CHR$(244)+CHR$(229)+"###"+CHR$(228)+CHR$(245)
1390 PRINT CHR$(242)+CHR$(227)+"###"+CHR$(226)+CHR$(243)
1400 RETURN
1410 PRINT " "+CHR$(225)+"###"+CHR$(224)" "
1420 PRINT " "+CHR$(223)+"###"+CHR$(222)" "
1430 RETURN
1440 PRINT " "+CHR$(244)+CHR$(229)+"#"+CHR$(228)+CHR$(245)+" "
1450 PRINT " "+CHR$(242)+CHR$(227)+"#"+CHR$(226)+CHR$(243)+" "
1460 RETURN
1470 PRINT "  "+CHR$(225)+"#"+CHR$(224)"  "
1480 PRINT "  "+CHR$(223)+"#"+CHR$(222)"  "
1490 RETURN
1500 PRINT "  "+CHR$(244)+CHR$(221)+CHR$(245)"  "
1510 PRINT "  "+CHR$(242)+CHR$(220)+CHR$(243)"  "
1520 RETURN
1530 PRINT"   "+CHR$(231)"   "
1540 PRINT "   "+CHR$(230)"   ";
1550 RETURN
1560 '
1570 ' Würfeln und Würfel darstellen
1580 zaehl=zaehl+1
1590 PRINT CHR$(7);:PRINT
1600 IF zaehl<=10 THEN 1630 ELSE zaehl=0
1610 zufall=VAL(HEX$(PEEK(&HFBF8)))
1620 RANDOMIZE zufall
1630 zahl(1)=INT(6*RND)+1
1640 zahl(2)=INT(6*RND)+1
1650 IF zahl(1)=zahl(2) THEN pasch=4 ELSE pasch=2
1660 IF pasch=4 THEN zahl(3)=zahl(1):zahl(4)=zahl(1)
1670 PRINT zahl1$;
1680 ON zahl(1) GOSUB 1720,1750,1780,1810,1840,1870
1690 PRINT zahl2$;
1700 ON zahl(2) GOSUB 1720,1750,1780,1810,1840,1870
1710 RETURN
1720 PRINT " "+CHR$(206)+" ";
1730 PRINT " "+CHR$(205)+" ";
1740 RETURN
1750 PRINT CHR$(204)+"  ";
1760 PRINT "  "+CHR$(204);
1770 RETURN
1780 PRINT CHR$(204)+CHR$(206)+" ";
1790 PRINT " "+CHR$(205)+CHR$(204);
1800 RETURN
1810 PRINT CHR$(204)+" "+CHR$(204);
1820 PRINT CHR$(204)+" "+CHR$(204);
1830 RETURN
1840 PRINT CHR$(204)+CHR$(206)+CHR$(204);
1850 PRINT CHR$(204)+CHR$(205)+CHR$(204);
1860 RETURN
1870 PRINT CHR$(204)+CHR$(204)+CHR$(204);
1880 PRINT CHR$(204)+CHR$(204)+CHR$(204);
1890 RETURN
1900 '
1910 ' Stein ( sw ) zeichnen
1920 PRINT FNr2$+CHR$(218)+CHR$(217)+CHR$(216)
1930 PRINT FNr2$+CHR$(215)+CHR$(214)+CHR$(213)
1940 RETURN
1950 '
1960 ' Stein ( w ) zeichnen
1970 PRINT FNr2$+CHR$(212)+CHR$(211)+CHR$(210)
1980 PRINT FNr2$+CHR$(209)+CHR$(208)+CHR$(207)
1990 RETURN
2000 PRINT CHR$(27)+"X"+CHR$(32)+CHR$(32)+CHR$(63)+CHR$(121):PRINT CHR$(27)+"E"+CHR$(27)+"H":PRINT CHR$(27)+"e":STOP
2010 '
2020 ' Neue Position zeichnen für Spieler
2030 FOR i=24 TO 1 STEP -1
2040 IF i>12 THEN poruf=1 ELSE poruf=0
2050 erg=wneu(i)-walt(i)
2060 IF erg=0 THEN 2170
2070 IF erg<0 THEN 2120
2080 FOR k=walt(i)+1 TO wneu(i)
2090 PRINT FNmat$(i,k,poruf);:GOSUB 1960
2100 NEXT k
2110 GOTO 2170
2120 PRINT FNmat$(i,walt(i),poruf);
2130 IF i/2<>INT(i/2) AND i<13 THEN ON walt(i) GOSUB 1180,1210,1240,1270,1300:GOTO 2170
2140 IF i/2<>INT(i/2) AND i>12 THEN ON walt(i) GOSUB 930,900,870,840,810:GOTO 2170
2150 IF i<13 THEN ON walt(i) GOSUB 1380,1410,1440,1470,1500:GOTO 2170
2160 ON walt(i) GOSUB 1130,1100,1070,1040,1010
2170 NEXT i
2180 FOR i=1 TO 24
2190 walt(i)=wneu(i)
2200 NEXT i
2210 RETURN
2220 '
2230 PRINT CHR$(7);:' SNeue Position zeichnen für Computer
2240 FOR i=1 TO 24
2250 IF i>12 THEN poruf=1 ELSE poruf=0
2260 erg=swneu(i)-swalt(i)
2270 IF erg=0 THEN 2390
2280 IF erg<0 THEN 2330
2290 FOR k=swalt(i)+1 TO swneu(i)
2300 PRINT FNmat$(i,k,poruf);:GOSUB 1910
2310 NEXT k
2320 GOTO 2390
2330 PRINT FNmat$(i,swalt(i),poruf);
2340 PRINT FNmat$(i,swalt(i),poruf);
2350 IF i/2<>INT(i/2) AND i<13 THEN ON swalt(i) GOSUB 1180,1210,1240,1270,1300:GOTO 2390
2360 IF i/2<>INT(i/2) AND i>12 THEN ON swalt(i) GOSUB 930,900,870,840,810 :GOTO 2390
2370 IF i<13 THEN ON swalt(i) GOSUB 1380,1410,1440,1470,1500:GOTO 2390
2380 ON swalt(i) GOSUB 1130,1100,1070,1040,1010
2390 NEXT i
2400 FOR i=1 TO 24
2410 swalt(i)=swneu(i)
2420 NEXT i
2430 '
2440 ' Weißer Stein raus eintragen
2450 FOR i=1 TO 24
2460 IF swneu(i)>0 AND wneu(i)=1 THEN 2490
2470 NEXT i
2480 RETURN
2490 wraus=wraus+1
2500 PRINT FNrausw$(wraus);:PRINT CHR$(212)+CHR$(211)+CHR$(210);:PRINT CHR$(209)+CHR$(208)+CHR$(207);
2510 walt(i)=walt(i)-1 : wneu(i)=wneu(i)-1
2520 RETURN
2530 '
2540 ' Zug Spieler eintragen
2550 IF weg=1 GOTO 2600
2560 IF po=1 GOTO 2580
2570 nzpos=(posi+3)/7+12:wneu(nzpos)=wneu(nzpos)+1:GOTO 2630
2580 nzpos=13-((posi+3)/7):wneu(nzpos)=wneu(nzpos)+1
2590 GOTO 2630
2600 IF po=1 GOTO 2620
2610 nwpos=(posi+3)/7+12:wneu(nwpos)=wneu(nwpos)-1:GOTO 2630
2620 nwpos=13-((posi+3)/7):wneu(nwpos)=wneu(nwpos)-1
2630 SWAP zu,weg
2640 mal=mal+1:IF mal=2*pasch THEN mal=0
2650 IF zu=0 THEN GOTO 2710
2660 IF zu=0 THEN GOSUB 2020:GOSUB 3450
2670 IF mal=0 THEN 430
2680 IF po=0 GOTO 490
2690 GOTO 620
2700 '
2710 ' Zug auf Gültigkeit prüfen
2720 endph=0
2730 FOR i=24 TO 7 STEP -1
2740 endph=endph+walt(i)
2750 NEXT i
2760 IF wraus>0 THEN 3550
2770 IF nwpos-nzpos<0 THEN 2930
2780 IF nwpos-nzpos=0 AND endph=0 THEN 3040
2790 IF nwpos-nzpos=0 THEN 2950
2800 FOR i=1 TO 24
2810 IF wneu(i)<0 AND swneu(i)>0 THEN 2940
2820 IF wneu(i)<0 THEN 2900
2830 IF wneu(i)>5 THEN 2910
2840 IF wneu(i)>0 AND swneu(i)>1 THEN 2920
2850 NEXT i
2860 FOR i=1 TO pasch
2870 IF nwpos-nzpos=zahl(i) THEN zahl(i)=0:GOTO 2660
2880 NEXT i
2890 GOTO 2950
2900 PRINT:PRINT "Es liegt kein Stein mehr auf dem Ausgangsfeld !";:GOTO 2960
2910 PRINT:PRINT "Nicht mehr als 5 Steine auf ein Feld legen !";:GOTO 2960
2920 PRINT:PRINT "Das ist. m e i n. Feld !";:GOTO 2960
2930 PRINT:PRINT "Nicht Rückwärts ziehen !";:GOTO 2960
2940 PRINT:PRINT "Das ist. m e i n. Stein";:GOTO 2960
2950 PRINT:PRINT "Falsche Augenzahl !";:GOTO 2960
2960 wneu(nzpos)=wneu(nzpos)-1
2970 wneu(nwpos)=wneu(nwpos)+1
2980 FOR i=1 TO 2000
2990 NEXT i
3000 PRINT:mal=mal-2
3010 IF po=0 GOTO 490
3020 GOTO 620
3030 '
3040 ' Endphase für Spieler
3050 FOR i=1 TO pasch
3060 IF nwpos=zahl(i) THEN zahl(i)=0 : wneu(nwpos)=wneu(nwpos)-1 : GOTO 3090
3070 NEXT i
3080 PRINT:PRINT "Falsche Augenzahl !";:GOTO 2980
3090 sieg=0
3100 FOR i=1 TO 6 : sieg=sieg+wneu(i) : NEXT i
3110 IF sieg<>0 THEN 2660
3120 PRINT meld1$;:PRINT:PRINT meld2$;:PRINT" SIE. haben. g e w o n n e n. !!!";
3130 PRINT "... Noch ein Speil.. (J/N) ?";:INPUT ent$
3140 ent$=UPPER$(ent$):IF ent$="J" THEN 10
3150 PRINT CHR$(27)+"X"+CHR$(32)+CHR$(32)+CHR$(62)+CHR$(121)
3160 PRINT CHR$(27)+"e"
3170 PRINT CHR$(27)+"E"+CHR$(27)+"H"
3180 PRINT "Auf Wiedersehen ";
3190 STOP
3200 '
3210 ' Zahl nicht setzbar
3220 FOR i=1 TO pasch
3230 IF zahl(i)<>0 THEN zahlx=zahl(i):GOTO 3250
3240 NEXT i
3250 FOR i=24 TO 1 STEP -1
3260 IF wraus>0 AND swneu(25-zahlx)<2 THEN 3340
3270 IF wraus>0 THEN  3320
3280 IF endph=0 AND i-zahlx=0 AND wneu(zahlx) >0 THEN 3340
3290 IF i-zahlx=0 THEN 3380
3300 IF wneu(i)=0 THEN 3320
3310 IF wneu(i-zahlx)<5 AND swneu(i-zahlx) <2 THEN 3340
3320 NEXT i
3330 GOTO 3380
3340 PRINT:PRINT "Die Zahl kann gesetzt werden !";
3350 FOR i=1 TO 2000:NEXT i
3360 IF po=0 THEN 490
3370 GOTO 610
3380 FOR i=1 TO 4
3390 IF zahl(i)<>0 THEN zahl(i)=0 : GOTO 3410
3400 NEXT i
3410 PRINT CHR$(7);CHR$(7);:mal=mal+2:IF mal=2*pasch THEN mal=0:GOTO 430
3420 IF po=0 THEN 490
3430 GOTO 620
3440 '
3450 ' Schwarzer Stein raus eintragen
3460 FOR i=1 TO 24
3470 IF swneu(i)=1 AND wneu(i)>0 THEN 3500
3480 NEXT i
3490 RETURN
3500 swraus=swraus+1
3510 PRINT FNraussw$(swraus);:PRINT CHR$(218)+CHR$(217)+CHR$(216);:PRINT CHR$(215)+CHR$(214)+CHR$(213);
3520 swalt(i)=swalt(i)-1:swneu(i)=swneu(i)-1
3530 RETURN
3540 '
3550 ' weißen Stein erst einsetzen !
3560 IF nwpos-nzpos<>0 THEN 3600
3570 FOR i=1 TO pasch
3580 IF nwpos=25-zahl(i) AND swneu(nwpos)<2 THEN zahl(i)=0 : GOTO 3610
3590 NEXT i
3600 PRINT:PRINT"Erst Stein wieder einsetzen !";:GOTO 2960
3610 wneu(nwpos)=wneu(nwpos)+1:PRINT FNrausw$(wraus);:PRINT "   ";:PRINT "   ";
3620 wraus=wraus-1
3630 GOTO 2660
3640 '
3650 bewalt=-10000:bewmal=0:flaglz=25:fla2z=25: ' .. Zug Computer. -------------
3660 FOR i=1 TO 24:bew(i)=swalt(i):NEXT i
3670 coendph=0
3680 FOR i=1 TO 18
3690 coendph=coenph+swalt(i)
3700 NEXT i
3710 IF swraus>0 THEN 3950
3720 IF coendph=0 THEN 4250
3730 IF pasch=4 THEN 4370
3740 IF zahl(1)=0 AND zahl(2)=0 THEN RETURN
3750 IF zahl(1)=0 OR zahl(2)=0 THEN 4670
3760 FOR i=1 TO 24-zahl(1)
3770 IF bew(i)=0 OR bew(i+zahl(1))=5 OR wneu(i+zahl(1))>1 THEN 3870
3780 bew(i)=bew(i)-1 : bew(i+zahl(1))=bew(i+zahl(1))+1
3790 FOR j=1 TO 24-zahl(2)
3800 IF bew(j)=0 OR bew(j+zahl(2))=5 OR wneu(j+zahl(2))>1 THEN 3840
3810 bew(j)=bew(j)-1 : bew(j+zahl(2))=bew(j+zahl(2))+1
3820 GOSUB 4110
3830 bew(j)=bew(j)+1:bew(j+zahl(2))=bew(j+zahl(2))-1
3840 NEXT j
3850 IF flag2z=25 THEN GOSUB 4110
3860 bew(i)=bew(i)+1 : bew(i+zahl(1))=bew(i+zahl(1))-1
3870 NEXT i
3880 bewmal=bewmal+1
3890 IF bewmal=2 THEN 3910
3900 SWAP zahl(1),zahl(2) : GOTO 3750
3910 IF flag1z<25 THEN swneu(flag1w)=swneu(flag1w)-1:swneu(flag1z)=swneu(flag1z)+1:GOSUB 2230
3920 IF flag2z<25 THEN swneu(flag2w)=swneu(flag2w)-1:swneu(flag2z)=swneu(flag2z)+1:GOSUB 2230
3930 RETURN
3940 '
3950 ' sw-Steine wieder einsetzen
3960 FOR i=1 TO 6
3970 FOR j=1 TO pasch
3980 IF wneu(i)=1 AND zahl(j)=i THEN zahl(j)=0:GOTO 4070
3990 NEXT j
4000 NEXT i
4010 FOR i=1 TO 6
4020 FOR j=1 TO pasch
4030 IF swneu(i)<5 AND wneu(i)=0 AND zahl(j)=i THEN zahl(j)=0:GOTO 4070
4040 NEXT j
4050 NEXT i
4060 PRINT CHR$(7)+CHR$(7);:RETURN
4070 PRINT FNraussw$(swraus);:PRINT"   ";:PRINT"   ";
4080 swneu(i)=swneu(i)+1 : bew(i)=bew(i)+1 : GOSUB 2230 : swraus=swraus-1
4090 GOTO 3710
4100 '
4110 'CBewertung
4120 bewneu=0
4130 FOR q=1 TO 24
4140 IF bew(q)=1 THEN bewneu=bewneu-10
4150 NEXT q
4160 IF i+zahl(1)>24 THEN 4180
4170 IF wneu(i+zahl(1))=1 THEN bewneu=bewneu+9
4180 IF j+zahl(2)>24 THEN 4200
4190 IF wneu(j+zahl(2))=1 THEN bewneu=bewneu+9
4200 IF bewneu<=bewalt THEN RETURN
4210 flag1w=i : flag1z=i+zahl(1)
4220 flag2w=j : flag2z=j+zahl(2)
4230 bewalt=bewneu
4240 RETURN
4250 '
4260 ' Endphase für Computer
4270 FOR a=19 TO 24
4280 FOR b=1 TO pasch
4290 IF swalt(a)>0 AND zahl(b)=25-a THEN zahl(b)=0:swneu(a)=swneu(a)-1:bew(a)=bew(a)-1 : GOSUB 2230
4300 NEXT b
4310 NEXT a
4320 cosieg=0
4330 FOR i=19 TO 24: cosieg=cosieg+swalt(i) : NEXT i
4340 IF cosieg<>0 THEN 3730
4350 PRINT meld1$;:PRINT:PRINT meld2$;:PRINT " ICH.. habe. g e w o n n e n !!!";
4360 GOTO 3130
4370 ' p a s c h --
4380 FOR q=1 TO 4 : flag(q)=0 : NEXT q
4390 ma=MAX(zahl(1),zahl(2),zahl(3),zahl(4))
4400 IF ma=0 THEN RETURN
4410 anzahl=(zahl(1)+zahl(2)+zahl(3)+zahl(4))/ma
4420 IF anzahl=1 THEN 4670
4430 IF anzahl=2 THEN zahl(1)=ma : zahl(2)=ma : GOTO 3760
4440 FOR xyz=0 TO 23
4450 FOR i=1 TO 24:bew(i)=swalt(i):NEXT i
4460 FOR i=1 TO anzahl
4470 FOR j=1 TO 24-(ma+xyz)
4480 IF bew(j)=0 OR bew(j+ma)=5 OR wneu(j+ma)>1 THEN 4500
4490 bew(j)=bew(j)-1 : bew(j+ma)=bew(j+ma)+1 : flag(i)=j : GOTO 4510
4500 NEXT j
4510 NEXT i
4520 bewneu=0
4530 FOR q=1 TO 24
4540 IF bew(q)=1 THEN bewneu=bewneu-10
4550 IF bew(q)>0 AND wneu(q)=1 THEN bewneu=bewneu+9
4560 NEXT q
4570 IF bewneu<=bewalt THEN 4620
4580 bewalt=bewneu
4590 FOR q=1 TO anzahl
4600 flagz(q)=flag(q)
4610 NEXT q
4620 NEXT xyz
4630 FOR q=1 TO anzahl
4640 IF flag(q)<>0 THEN swneu(flagz(q))=swneu(flagz(q))-1 : swneu(flagz(q)+ma)=swneu(flagz(q)+ma)+1:GOSUB 2230
4650 NEXT q
4660 RETURN
4670 ' Einen Zug ausführen
4680 zahl(1)=MAX(zahl(1),zahl(2))
4690 IF pasch=4 THEN zahl(1)=ma
4700 FOR i=1 TO 24-zahl(1)
4710 IF bew(i)=0 OR bew(i+zahl(1))=5 OR wneu(i+zahl(1))>1 THEN 4750
4720 bew(i)=bew(i)-1 : bew(i+zahl(1))=bew(i+zahl(1))+1
4730 GOSUB 4110
4740 bew(i)=bew(i)+1 : bew(i+zahl(1))=bew(i+zahl(1))-1
4750 NEXT i
4760 IF flag1z<25 THEN swneu(flag1w)=swneu(flag1w)-1:swneu(flag1z)=swneu(flag1z)+1:GOSUB 2230
4770 RETURN

Controles

      ↑ = ARRIBA
      ↓ = ABAJO
      → = DERECHA
      ← = IZQUIERDA
  ENTER = SELECCIONAR

Carga del programa

1.- Introducir el disco CP/M por la cara 2
2.- Escribir BASIC y esperar a que cargue
3.- Retirar el disco CP/M e introducir el disco que contiene el juego Backgammon
4.- Teclear run "Bginit" y pulsar la tecla "ENTER"

Extras

Backgammon_programa_01.jpg Backgammon_programa_02.jpg Backgammon_programa_03.jpg Backgammon_programa_04.jpg Backgammon_programa_05.jpg Backgammon_programa_06.jpg Backgammon_programa_07.jpg

Descarga

Enlaces

es/backgammon.txt · Última modificación: 2017/02/08 17:15 por robcfg