ein einfaches Schachspiel

Spielprogramme für den Zeitvertreib
Antworten
Benutzeravatar
ein Thüringer
Beiträge: 53
Registriert: 29.08.2021, 11:04

ein einfaches Schachspiel

Beitrag von ein Thüringer »

Auf unserer Homepage gibt es jetzt ein Schachspiel in ASCII - Grafik. https://joyce.de/basicode/joyce/schach.htm Es ist mehr auf Angriff als auf Verteidigung ausgerichtet, daher hat man gute Chancen, einen Sieg zu erreichen.

Viel Spaß damit!
eingedeutschte Version auf der JOYCE
eingedeutschte Version auf der JOYCE
schachmatt_kl.jpg (37.8 KiB) 88590 mal betrachtet
EDIT: Es lässt sich (natürlich) auch im Hagemans-online-Browser https://robhagemans.github.io/basicode/ spielen, dort läuft es flott und kann auch noch schneller eingestellt werden.

Das Programm liegt hier: https://robhagemans.github.io/basicode/ ... CHAKEN.BAS (oder man sucht es selbst unter dem Reiter "Programs"). Es stammt ursprünglich aus diesem. https://archive.org/details/mit-basic-r ... mmodore-64 Buch von 1984 und wurde 1990 von P. J. van der Mespel an BasiCode angepasst, damit auch für andere Computer als den Commodore VC20 und 64 zugänglich gemacht. In dem Buch werden alle Teilfunktionen ausführlich erläutert und es werden Anregungen zur Erweiterung gegeben.

Um die Optik etwas angenehmer zu gestalten, kann in den Settings der Zeichensatz des coco eingestellt werden, dann sind die Kleinbuchstaben invertierte Großbuchstaben. Nun noch auf den Reiter "Listing" gehen und Zeile 1170 wie folgt abändern:

Code: Alles auswählen

F$="kkdttlsbb BBSLTTDKK"


Nun haben wir deutsche Abkürzungen für die Spielfiguren und die Kleinbuchstaben (sprich Großbuchstaben auf weißem Hintergrund) landen unten, oben stehen die Buchstaben auf schwarzem Hintergrund - so kann man die Figuren gut unterscheiden.

Durch Klick auf den Screen startet das Spiel, die Eingaben erfolgen über die virtuelle Tastatur unter dem Reiter "Keyboard".

hier <P>ferd statt <S>pringer
hier <P>ferd statt <S>pringer
Schachmatt.jpg (84.69 KiB) 88590 mal betrachtet
Benutzeravatar
ein Thüringer
Beiträge: 53
Registriert: 29.08.2021, 11:04

ein nützliches Update

Beitrag von ein Thüringer »

.
Hier ist eine kleine Erweiterung des Schachspiels: es können jetzt Aufgaben aus Zeitungen oder noch nicht beendete eigene Spiele eingegeben werden.
.

Code: Alles auswählen

150 PRINT CHR$(27)"p ";SR$;" "CHR$(27)"q";:RETURN
1000 A=200:GOTO 20:REM SCHAKEN
1010 GOSUB 20000:REM UITLEG
1020 REM INITIALISATIE
1030 DIM FW(10),F(99),F$(18),BS(132)
1040 DIM SK(132),ZK(132),FA(8)
1050 AL=ASC("a"):AH=ASC("A"):OB$=" "
1055 SK=0:ZK=0:RO=0:PA=0:MT=0
1060 REM WAARDE VAN DE STUKKEN
1070 FOR A=0 TO 9:READ FW(A):NEXT A
1080 REM VIRTUELE STUKKEN
1090 FOR A=1 TO 9:F(A)=10:F(A+89)=10:NEXT A
1100 FOR A=0 TO 80 STEP 10:F(A)=10:F(A+19)=10:NEXT A
1110 REM REELE STUKKEN
1120 FOR A=18 TO 88 STEP 10
1130 READ F(A):F(A-7)=-F(A):NEXT A
1140 FOR A=12 TO 82 STEP 10
1150 F(A)=-1:F(A+5)=1:NEXT A
1152 PRINT:PRINT "Stellung eingeben?":GOSUB 210
1154 IF IN$="J" OR IN$="j" THEN GOSUB 9000
1160 REM STUKKEN OP HET BORD
1170 F$="KKDTTLSBB bbslttdkk"
1180 FOR A=0 TO 18
1190 F$(A)=MID$(F$,A+1,1)
1200 NEXT A
1210 REM VELDAFSTANDEN
1220 FOR A=1 TO 8:READ FA(A):NEXT A
1230 REM SCHAAKBORD
1240 GOSUB 100:VE=1
1250 FOR A=1 TO 4
1260 HO=8:GOSUB 110
1270 FOR B=1 TO 2:FOR C=1 TO 4
1280 GOSUB 120:GOSUB 110:SR$=" ":GOSUB 150:PRINT "   ";
1290 NEXT C
1300 HO=8:VE=VE+1:GOSUB 110
1310 NEXT B
1320 FOR B=1 TO 2:FOR C=1 TO 4
1330 PRINT "   ";:GOSUB 120:GOSUB 110:SR$=" ":GOSUB 150
1340 NEXT C
1350 HO=8:VE=VE+1:GOSUB 110
1360 NEXT B:NEXT A
1370 HO=9:VE=0:GOSUB 110
1380 FOR A=0 TO 7
1390 PRINT CHR$(AH+A);"  ";
1400 NEXT A
1410 VE=0:FOR A=8 TO 1 STEP-1
1420 HO=6:VE=VE+2:GOSUB 110:PRINT A:NEXT A
1430 REM EINDE INITIALISATIE
1440 REM SPEL-GEDEELTE
1450 GOSUB 1640:REM STUKKEN PLAATSEN
1460 GOSUB 1830:REM INVOER SPELER
1470 GOSUB 3730:REM ZET UITVOEREN
1480 GOSUB 1640:REM STUKKEN PLAATSEN
1490 GOSUB 3860:REM ZET COMPUTER
1500 IF(MT=1) OR(PA=1) THEN 1530
1510 GOSUB 3730:REM ZET UITVOEREN
1520 GOTO 1450
1530 GOSUB 7420
1540 IF PA<>1 THEN 1580
1550 HO=17:GOSUB 110:PRINT"Patt !!"
1560 VE=VE+1:GOSUB 110:PRINT"======="
1570 GOTO 1610
1580 HO=14:GOSUB 110:PRINT"Schachmatt !"
1590 HO=11:VE=VE+2:GOSUB 110:PRINT"Du hast gewonnen"
1600 VE=VE+1:GOSUB 110:PRINT"================"
1610 PZ=0:GOSUB 210:GOTO 950
1620 REM EINDE SPEL-GEDEELTE
1630 REM HULPPROGRAMMA
1640 REM STUKKEN PLAATSEN
1650 IF SK>0 THEN GOSUB 7500
1660 VE=0
1670 FOR A=0 TO 6 STEP 2
1680 HO=8:VE=VE+2:GOSUB 110
1690 FOR B=(18-A) TO(88-A) STEP 20
1700 F$=F$(F(B)+9):IF F$=" " THEN F$=OB$
1710 GOSUB 120:GOSUB 110:SR$=F$:GOSUB 150
1720 PRINT " ";F$(F(B+10)+9);" ";
1730 NEXT B
1740 HO=8:VE=VE+2:GOSUB 110
1750 FOR B=(18-A) TO(88-A) STEP 20
1760 PRINT " ";F$(F(B-1)+9);" ";
1770 F$=F$(F(B+9)+9):IF F$=" " THEN F$=OB$
1780 GOSUB 120:GOSUB 110:SR$=F$:GOSUB 150
1790 NEXT B
1800 PRINT
1810 NEXT A
1820 RETURN
1830 REM INVOER VAN DE SPELER
1840 REM INVOER VAN DE ZET
1850 GOSUB 7420
1860 HO=10:VE=VE+1:GOSUB 110:PRINT"Dein Zug: ";
1870 PRINT"*";
1880 PRINT"- : -- ";
1890 HO=20:GOSUB 110
1900 GOSUB 20540:I$=IN$
1910 IF IN$=WI$ THEN 2010
1920 IF(IN$="O") AND(F(51)=-8) THEN 2230
1930 IF(IN$<"A") OR(IN$>"H") THEN 1900
1940 PRINT IN$;
1950 PRINT"*":HO=21:GOSUB 110
1960 GOSUB 210
1970 IF IN$=WI$ THEN 2010
1980 IF(IN$<"1") OR(IN$>"8") THEN 1960
1990 SK=10*(ASC(I$)-AH+1)+VAL(IN$)
2000 IF F(SK)<0 THEN 2020
2010 VE=VE-1:GOSUB 110:GOTO 1860
2020 PRINT IN$;" : ";
2030 PRINT"*":HO=25:GOSUB 110
2040 GOSUB 20540:I$=IN$
2050 IF IN$=WI$ THEN 2010
2060 IF(IN$<"A") OR(IN$>"H") THEN 2040
2070 PRINT IN$;
2080 PRINT"*":HO=26:GOSUB 110
2090 GOSUB 210:IP$=IN$
2100 IF IN$=WI$ THEN 2010
2110 IF(IN$<"1") OR(IN$>"8") THEN 2090
2120 PRINT IN$;
2130 PRINT"*":HO=27:GOSUB 110
2140 GOSUB 210
2150 IF IN$=WI$ THEN 2010
2160 IF IN$<>CHR$(13) THEN 2140
2170 ZK=10*(ASC(I$)-AH+1)+VAL(IP$)
2180 PRINT" ";
2190 IF F(ZK)>=0 THEN 2760
2200 HO=25:GOSUB 110
2210 PRINT"*-":GOSUB 110
2220 GOTO 2040
2230 REM ROKADE MET CONTROLE
2240 RO=1
2250 PRINT" O-O   ";
2260 HO=24:GOSUB 110
2270 PRINT"*":GOSUB 110
2280 GOSUB 20540
2290 IF IN$=WI$ THEN 2010
2300 IF IN$=CHR$(13) THEN 2370
2310 IF IN$<>"O" THEN 2280
2320 PRINT"-O";:RO=-1
2330 PRINT"*":HO=26:GOSUB 110
2340 GOSUB 210
2350 IF IN$=WI$ THEN 2010
2360 IF IN$<>CHR$(13) THEN 2340
2370 IF F(46+RO*35)<>-5 THEN 2690
2380 IF F(51+RO*10)<>0 THEN 2690
2390 IF F(51+RO*20)<>0 THEN 2690
2400 IF(RO=-1) AND(F(21)<>0) THEN 2690
2410 PRINT" ";:B=51
2420 A=B+1
2430 IF F(A)=0 THEN A=A+1:IF A<=78 THEN 2430
2440 IF(F(A)=6) OR(F(A)=7) THEN 2690
2450 IF F(B+1)=9 THEN 2930
2460 A=B+11
2470 IF F(A)=0 THEN A=A+11:IF A<=86 THEN 2470
2480 IF(F(A)=4) OR(F(A)=7) THEN 2690
2490 IF F(B+11)=9 THEN 2690
2500 A=B+10
2510 IF F(A)=0 THEN A=A+10:IF A<=81 THEN 2510
2520 IF(F(A)=6) OR(F(A)=7) THEN 2690
2530 IF F(B+10)=9 THEN 2690
2540 A=B-10
2550 IF F(A)=0 THEN A=A-10:IF A>=11 THEN 2550
2560 IF(F(A)=6) OR(F(A)=7) THEN 2690
2570 IF F(B-10)=9 THEN 2690
2580 A=B-9
2590 IF F(A)=0 THEN A=A-9:IF A>=13 THEN 2590
2600 IF(F(A)=4) OR(F(A)=7) THEN 2690
2610 IF F(B-9)=9 THEN 2690
2620 IF F(B-19)=3 THEN 2690
2630 IF F(B-8)=3 THEN 2690
2640 IF F(B+12)=3 THEN 2690
2650 IF F(B+21)=3 THEN 2690
2660 IF(F(B-9)=2) OR(F(B+11)=2) THEN 2690
2670 IF B=51+RO*20 THEN 2710
2680 B=B+RO*10:GOTO 2420
2690 RO=0
2700 GOTO 2010:REM ROKADE ONMOGELIJK
2710 REM UITVOERING ROKADE
2720 F(51)=0:F(51+RO*20)=-9
2730 F(46+RO*35)=0:F(51+RO*10)=-6
2740 GOTO 3690
2750 REM EINDE ROKADE
2760 REM INVOER CONTROLE
2765 AF=ABS(F(SK)+1)+1
2770 ON AF GOTO 2780,2820,2890,2940,3090,3090,3240,3310,3310
2780 REM PION TWEE VELDEN
2790 IF ZK-SK<>2 THEN 2820
2800 IF(F(SK+1)=0) AND(F(ZK)=0) THEN 3350
2810 GOTO 2200
2820 REM PION ALGEMEEN
2830 IF(SK-ZK<>9) AND(ZK-SK<>11) THEN 2860
2840 IF F(ZK)>0 THEN 3350
2850 GOTO 2200
2860 IF ZK-SK<>1 THEN 2200
2870 IF F(ZK)<>0 THEN 2200
2880 GOTO 3350
2890 REM PAARD
2900 A=1
2910 IF ABS(ZK-SK)=FA(A) THEN 3350
2920 A=A+1:IF A<=4 THEN 2910
2930 GOTO 2200
2940 REM LOPER/DAME
2950 DL=ABS(ZK-SK):V=SGN(ZK-SK)
2960 IF DL/11=INT(DL/11) THEN 2990
2970 IF DL/9=INT(DL/9) THEN 3040
2980 GOTO 2200
2990 IF DL=11 THEN 3350
3000 A=SK+11*V
3010 IF F(A)<>0 THEN 2200
3020 A=A+11*V:IF A<>ZK THEN 3010
3030 GOTO 3350
3040 IF DL=9 THEN 3350
3050 A=SK+9*V
3060 IF F(A)<>0 THEN 2200
3070 A=A+9*V:IF A<>ZK THEN 3060
3080 GOTO 3350
3090 REM TOREN/DAME
3100 DL=ABS(ZK-SK):V=SGN(ZK-SK)
3110 IF DL<8 THEN 3140
3120 IF DL/10=INT(DL/10) THEN 3190
3130 GOTO 2200
3140 IF DL=1 THEN 3350
3150 A=SK+V
3160 IF F(A)<>0 THEN 2200
3170 A=A+V:IF A<>ZK THEN 3160
3180 GOTO 3350
3190 IF DL=10 THEN 3350
3200 A=SK+10*V
3210 IF F(A)<>0 THEN 2200
3220 A=A+10*V:IF A<>ZK THEN 3210
3230 GOTO 3350
3240 REM DAME
3250 DL=ABS(ZK-SK):V=SGN(ZK-SK)
3260 IF DL/11=INT(DL/11) THEN 2990
3270 IF DL/10=INT(DL/10) THEN 3190
3280 IF DL/9=INT(DL/9) THEN 3040
3290 IF DL<8 THEN 3140
3300 GOTO 2200
3310 REM KONING
3320 DL=ABS(ZK-SK)
3330 IF(DL=10) OR(DL=11) THEN 3350
3340 IF(DL<>1) AND(DL<>9) THEN 2200
3350 REM INTERNE ZET-UITVOERING
3360 REM STAAT DE KONING SCHAAK
3370 FZ=F(ZK):F(ZK)=F(SK):F(SK)=0
3380 PK=11
3390 IF(F(PK)=-8) OR(F(PK)=-9) THEN 3410
3400 PK=PK+1:IF PK<=88 THEN 3390
3410 B=-1
3420 MW=11+77*SGN(B+1)
3440 C=1:GOSUB 8000:IF Q=1 THEN 3480
3450 IF(F(A)>=5) AND(F(A)<=7) THEN 3700
3460 IF(F(PK+B)=8) OR(F(PK+B)=9) THEN 3700
3480 C=11:GOSUB 8000:IF Q=1 THEN 3520
3490 IF(F(A)=4) OR(F(A)=7) THEN 3700
3500 IF(F(PK+B*11)=8) OR(F(PK+B*11)=9) THEN 3700
3520 C=10:GOSUB 8000:IF Q=1 THEN 3560
3530 IF(F(A)>=5) AND(F(A)<=7) THEN 3700
3540 IF(F(PK+B*10)=8) OR(F(PK+B*10)=9) THEN 3700
3560 C=9:GOSUB 8000:IF Q=1 THEN 3590
3570 IF(F(A)=4) OR(F(A)=7) THEN 3700
3580 IF(F(PK+B*9)=8) OR(F(PK+B*9)=9) THEN 3700
3590 A=1
3600 S=PK+FA(A)*B
3610 IF(S<11) OR(S>88) THEN 3630
3620 IF F(S)=3 THEN 3700
3630 A=A+1:IF A<=4 THEN 3600
3640 IF B=-1 THEN B=1:GOTO 3420
3650 IF(F(PK-9)=1) OR(F(PK+11)=1) THEN 3700
3660 IF(F(PK-9)=2) OR(F(PK+11)=2) THEN 3700
3670 IF(F(ZK)=-2) AND(ZK-INT(ZK/10)*10=8) THEN F(ZK)=-7
3680 H=F(ZK):IF(H=-1) OR(H=-5) OR(H=-8) THEN F(ZK)=H-1
3690 RETURN
3700 F(SK)=F(ZK):F(ZK)=FZ:GOTO 2200
3710 REM EINDE INVOERCONTROLE
3720 REM EINDE INVOER SPELER
3730 REM ZETAANDUIDING
3740 HO=33:VE=9:GOSUB 110
3750 IF RO=0 THEN 3800
3760 IF RO=1 THEN PRINT" ";
3770 IF RO=-1 THEN PRINT"O-";
3780 PRINT"O-O "
3790 RO=0:SK=0:GOTO 3840
3800 PRINT CHR$(AH-1+INT(SK/10));
3810 SR=SK:GOSUB 300:PRINT RIGHT$(SR$,1);":";
3820 PRINT CHR$(AH-1+INT(ZK/10));
3830 SR=ZK:GOSUB 300:PRINT RIGHT$(SR$,1)
3840 RETURN
3850 REM EINDE ZETAANDUIDING
3860 REM ZET COMPUTER
3870 GOSUB 7420
3880 HO=14:VE=19:GOSUB 110:PRINT"Moment bitte"
3890 PRINT
3900 HO=12:VE=21:GOSUB 110:PRINT"Stellungsanalyse"
3910 PRINT
3920 HO=13:VE=23:GOSUB 110:PRINT"80 bis zum Zug";
3930 ZN=0:BZ=1
3940 IF F(58)=8 THEN GOSUB 5830
3950 SK=11
3960 HO=13:VE=23:GOSUB 110
3970 SR=91-SK:CN=0:CT=2:GOSUB 310:PRINT SR$;
3980 IF(F(SK)<=0) OR(F(SK)=10) THEN 4000
3990 GOSUB 5190
4000 IF SK<88 THEN SK=SK+1:GOTO 3960
4010 FOR A=1 TO ZN-1:FOR B=A+1 TO ZN
4020 IF BS(A)>=BS(B) THEN 4060
4030 BS(0)=BS(A):BS(A)=BS(B):BS(B)=BS(0)
4040 SK(0)=SK(A):SK(A)=SK(B):SK(B)=SK(0)
4050 ZK(0)=ZK(A):ZK(A)=ZK(B):ZK(B)=ZK(0)
4060 NEXT B:NEXT A
4070 HO=14:GOSUB 110:PRINT"2";
4080 IF BZ<ZN+1 THEN 4110
4090 IF MT=1 THEN PA=1:GOTO 4180
4100 MT=1:BZ=1
4110 SK=SK(BZ):ZK=ZK(BZ)
4120 IF ZK>1 THEN 4170
4130 RO=ZK
4140 ZK=58+RO*10
4150 F(58)=0
4160 F(58+RO*20)=9
4170 FZ=F(ZK):F(ZK)=F(SK):F(SK)=0
4180 REM STAAT DE KONING SCHAAK
4190 PK=11
4200 IF(F(PK)=8) OR(F(PK)=9) THEN 4220
4210 PK=PK+1:IF PK<=88 THEN 4200
4220 B=-1
4230 MW=11+77*SGN(B+1)
4250 C=1:GOSUB 8000:IF Q=1 THEN 4290
4260 IF(F(A)>=-7) AND(F(A)<=-5) THEN 5120
4270 IF(F(PK+B)=-8) OR(F(PK+B)=-9) THEN 5120
4290 C=11:GOSUB 8000:IF Q=1 THEN 4330
4300 IF(F(A)=-4) OR(F(A)=-7) THEN 5120
4310 IF(F(PK+B*11)=-8) OR(F(PK+B*11)=-9) THEN 5120
4330 C=10:GOSUB 8000:IF Q=1 THEN 4370
4340 IF(F(A)>=-7) AND(F(A)<=-5) THEN 5120
4350 IF(F(PK+B*10)=-8) OR(F(PK+B*10)=-9) THEN 5120
4370 C=9:GOSUB 8000:IF Q=1 THEN 4400
4380 IF(F(A)=-4) OR(F(A)=-7) THEN 5120
4390 IF(F(PK+B*9)=-8) OR(F(PK+B*9)=-9) THEN 5120
4400 A=1
4410 S=PK+FA(A)*B
4420 IF(S<11) OR(S>88) THEN 4440
4430 IF F(S)=-3 THEN 5120
4440 A=A+1:IF A<=4 THEN 4410
4450 IF B=-1 THEN B=1:GOTO 4230
4460 IF(F(PK+9)=-1) OR(F(PK-11)=-1) THEN 5120
4470 IF(F(PK+9)=-2) OR(F(PK-11)=-2) THEN 5120
4480 GOSUB 110:PRINT"1";
4490 IF PA=1 THEN 5100
4500 IF MT=1 THEN 5070
4510 IF F(ZK)=7 THEN 4530
4520 IF FW(F(ZK))<=FW(-FZ) THEN 5070
4530 REM DEKKING VAN DE STUKKEN
4540 REM STUK AANGEVALLEN?
4550 B=-1
4560 MW=11+77*SGN(B+1)
4580 C=1:GOSUB 8100:IF Q=1 THEN 4620
4590 IF(F(A)>=-7) AND(F(A)<=-5) THEN 4820
4600 IF(F(ZK+B)=-8) OR(F(ZK+B)=-9) THEN 4820
4620 C=11:GOSUB 8100:IF Q=1 THEN 4660
4630 IF(F(A)=-4) OR(F(A)=-7) THEN 4820
4640 IF(F(ZK+B*11)=-8) OR(F(ZK+B*11)=-9) THEN 4820
4660 C=10:GOSUB 8100:IF Q=1 THEN 4700
4670 IF(F(A)>=-7) AND(F(A)<=-5) THEN 4820
4680 IF(F(ZK+B*10)=-8) OR(F(ZK+B*10)=-9) THEN 4820
4700 C=9:GOSUB 8100:IF Q=1 THEN 4730
4710 IF(F(A)=-4) OR(F(A)=-7) THEN 4820
4720 IF(F(ZK+B*9)=-8) OR(F(ZK+B*9)=-9) THEN 4820
4730 A=1
4740 S=ZK+FA(A)*B
4750 IF(S<11) OR(S>88) THEN 4770
4760 IF F(S)=-3 THEN 4820
4770 A=A+1:IF A<=4 THEN 4740
4780 IF B=-1 THEN B=1:GOTO 4560
4790 IF(F(ZK+9)=-1) OR(F(ZK-11)=-1) THEN 4820
4800 IF(F(ZK+9)=-2) OR(F(ZK-11)=-2) THEN 4820
4810 GOTO 5070
4820 IF F(ZK)=7 THEN 5120
4830 REM STAAT HET STUK GEDEKT?
4840 B=-1
4850 MW=11+77*SGN(B+1)
4870 C=1:GOSUB 8100:IF Q=1 THEN 4900
4880 IF(F(A)>=5) AND(F(A)<=7) THEN 5070
4900 C=11:GOSUB 8100:IF Q=1 THEN 4930
4910 IF(F(A)=4) OR(F(A)=7) THEN 5070
4930 C=10:GOSUB 8100:IF Q=1 THEN 4960
4940 IF(F(A)>=5) AND(F(A)<=7) THEN 5070
4960 C=9:GOSUB 8100:IF Q=1 THEN 4980
4970 IF(F(A)=4) OR(F(A)=7) THEN 5070
4980 A=1
4990 S=ZK+FA(A)*B
5000 IF(S<11) OR(S>88) THEN 5020
5010 IF F(S)=3 THEN 5070
5020 A=A+1:IF A<=4 THEN 4990
5030 IF B=-1 THEN B=1:GOTO 4850
5040 IF(F(ZK-9)=1) OR(F(ZK+11)=1) THEN 5070
5050 IF(F(ZK-9)=2) OR(F(ZK+11)=2) THEN 5070
5060 GOTO 5120
5070 REM EINDE DEKKING STUKKEN
5080 IF(F(ZK)=1) OR(F(ZK)=5) OR(F(ZK)=8) THEN F(ZK)=F(ZK)+1
5090 IF(F(ZK)=2) AND(ZK-INT(ZK/10)*10=1) THEN F(ZK)=7
5100 GOSUB 110:PRINT"0";
5110 RETURN
5120 IF PA=1 THEN PA=0:GOTO 5100
5130 F(SK)=F(ZK):F(ZK)=FZ:BZ=BZ+1
5140 IF RO=0 THEN 4080
5150 F(58)=8:F(58+RO*20)=0
5160 RO=0
5170 GOTO 4080
5180 REM EINDE COMPUTERZET
5190 REM ZETUITVOERING
5195 H=F(SK)
5200 ON H GOTO 5210,5260,5450,5540,5640,5640,5540,5740,5740
5210 REM PION TWEE VELDEN
5220 IF F(SK-2)<>0 THEN 5260
5230 IF F(SK-1)<>0 THEN 5260
5240 ZK=SK-2
5250 F(SK)=2:GOSUB 6250:F(SK)=1
5260 REM PION ALGEMEEN
5270 FS=F(SK):F(SK)=2
5280 IF F(SK-11)>=0 THEN 5330
5290 ZK=SK-11
5300 IF SK-INT(SK/10)*10=2 THEN F(SK)=7
5310 GOSUB 6250
5320 IF SK-INT(SK/10)*10=2 THEN F(SK)=2
5330 IF F(SK-1)<>0 THEN 5380
5340 ZK=SK-1
5350 IF SK-INT(SK/10)*10=2 THEN F(SK)=7
5360 GOSUB 6250
5370 IF SK-INT(SK/10)*10=2 THEN F(SK)=2
5380 IF F(SK+9)>=0 THEN 5430
5390 ZK=SK+9
5400 IF SK-INT(SK/10)*10=2 THEN F(SK)=7
5410 GOSUB 6250
5420 IF SK-INT(SK/10)*10=2 THEN F(SK)=2
5430 F(SK)=FS
5440 GOTO 5810
5450 REM PAARD
5460 FOR B1=-1 TO 1 STEP 2
5470 FOR A1=1 TO 4
5480 ZK=SK+B1*FA(A1)
5490 IF ZK<0 THEN ZK=ZK+100
5500 IF ZK>99 THEN ZK=ZK-100
5510 IF F(ZK)<=0 THEN GOSUB 6250
5520 NEXT A1:NEXT B1
5530 GOTO 5810
5540 REM LOPER/DAME
5550 FOR B1=-1 TO 1 STEP 2
5560 FOR C1=5 TO 6
5570 FOR A1=SK+B1*FA(C1) TO 50+B1*39 STEP B1*FA(C1)
5580 IF F(A1)<=0 THEN 5600
5590 A1=50+B1*39:GOTO 5620
5600 ZK=A1:GOSUB 6250
5610 IF F(A1)<0 THEN 5590
5620 NEXT A1:NEXT C1:NEXT B1
5630 IF F(SK)<>7 THEN 5810
5640 REM TOREN/DAME
5650 FOR B1=-1 TO 1 STEP 2
5660 FOR C1=7 TO 8
5670 FOR A1=SK+B1*FA(C1) TO 50+B1*39 STEP B1*FA(C1)
5680 IF F(A1)<=0 THEN 5700
5690 A1=50+B1*39:GOTO 5720
5700 ZK=A1:GOSUB 6250
5710 IF F(A1)<0 THEN 5690
5720 NEXT A1:NEXT C1:NEXT B1
5730 GOTO 5810
5740 REM KONING
5750 FOR B1=-1 TO 1 STEP 2
5760 FOR A1=5 TO 8
5770 ZK=SK+B1*FA(A1)
5780 IF F(ZK)>0 THEN 5800
5790 GOSUB 6250
5800 NEXT A1:NEXT B1
5810 RETURN
5820 REM EINDE ZETUITVOERING
5830 REM ROKADE MET CONTROLE
5840 RO=-1:B=58
5850 IF F(53+RO*35)<>5 THEN 6210
5860 IF F(58+RO*10)<>0 THEN 6210
5870 IF F(58+RO*20)<>0 THEN 6210
5880 IF(RO=-1) AND(F(28)<>0) THEN 6210
5890 A=B-1
5900 IF F(A)=0 THEN A=A-1:IF A>=31 THEN 5900
5910 IF(F(A)=-6) OR(F(A)=-7) THEN 6210
5920 IF F(B-1)=-9 THEN 6210
5930 A=B-11
5940 IF F(A)=0 THEN A=A-11:IF A>=13 THEN 5940
5950 IF(F(A)=-4) OR(F(A)=-7) THEN 6210
5960 IF F(B-11)=-9 THEN 6210
5970 A=B+10
5980 IF F(A)=0 THEN A=A+10:IF A<=88 THEN 5980
5990 IF(F(A)=-6) OR(F(A)=-7) THEN 6210
6000 IF F(B+10)=-9 THEN 6210
6010 A=B-10
6020 IF F(A)=0 THEN A=A-10:IF A>=18 THEN 6020
6030 IF(F(A)=-6) OR(F(A)=-7) THEN 6210
6040 IF F(B-10)=-9 THEN 6210
6050 A=B+9
6060 IF F(A)=0 THEN A=A+9:IF A<=87 THEN 6060
6070 IF(F(A)=-4) OR(F(A)=-7) THEN 6210
6080 IF F(B+9)=-9 THEN 6210
6090 IF F(B+19)=-3 THEN 6210
6100 IF F(B+8)=-3 THEN 6210
6110 IF F(B-12)=-3 THEN 6210
6120 IF F(B-21)=-3 THEN 6210
6130 IF(F(B+9)=-2) OR(F(B-11)=-2) THEN 6210
6140 IF B=58+RO*20 THEN 6160
6150 B=B+RO*10:GOTO 5890
6160 F(58)=0:F(58+RO*20)=9
6170 SK=53+RO*35:ZK=58+RO*10
6180 GOSUB 6250
6190 F(58)=8:F(58+RO*20)=0
6200 ZK(ZN)=RO:BS(ZN)=BS(ZN)+100
6210 IF RO=-1 THEN RO=1:GOTO 5850
6220 RO=0
6230 RETURN
6240 REM EINDE ROKADE
6250 REM WAARDEBEPALING
6260 FZ=F(ZK):F(ZK)=F(SK):F(SK)=0
6270 ZN=ZN+1:SW=0
6280 FOR P=11 TO 88
6290 IF(F(P)=0) OR(F(P)=10) THEN 7370
6300 IF F(P)>0 THEN 6840
6310 REM WAARDE TEGENSTANDER
6320 SW=SW-3*FW(-F(P)):H=-F(P)
6330 ON H GOTO 6340,6340,6430,6520,6630,6630,6520,6740,6740
6340 REM PION ALGEMEEN
6350 IF F(P+1)=0 THEN SW=SW-3
6360 IF F(P-9)>0 THEN SW=SW-FW(F(P-9))
6370 IF F(P+11)>0 THEN SW=SW-FW(F(P+11))
6380 IF F(P)=-2 THEN 7370
6390 REM PION TWEE VELDEN
6400 IF F(P+1)<>0 THEN 6420
6410 IF F(P+2)=0 THEN SW=SW-3
6420 GOTO 7370
6430 REM PAARD
6440 A=-1
6450 FOR B=1 TO 4
6460 SP=P+A*FA(B)
6470 IF(SP<11) OR(SP>88) THEN 6490
6480 IF F(SP)>=0 THEN SW=SW-FW(F(SP))
6490 NEXT B
6500 IF A=-1 THEN A=1:GOTO 6450
6510 GOTO 7370
6520 REM LOPER/DAME
6530 B=-1
6540 FOR C=5 TO 6
6550 A=P+B*FA(C)
6560 IF F(A)>=0 THEN SW=SW-FW(F(A))
6570 IF F(A)<>0 THEN 6600
6580 A=A+B*FA(C)
6590 GOTO 6560
6600 NEXT C
6610 IF B=-1 THEN B=1:GOTO 6540
6620 IF F(P)<>-7 THEN 7370
6630 REM TOREN/DAME
6640 B=-1
6650 FOR C=7 TO 8
6660 A=P+B*FA(C)
6670 IF F(A)>=0 THEN SW=SW-FW(F(A))
6680 IF F(A)<>0 THEN 6710
6690 A=A+B*FA(C)
6700 GOTO 6670
6710 NEXT C
6720 IF B=-1 THEN B=1:GOTO 6650
6730 GOTO 7370
6740 REM KONING
6750 B=-1
6760 FOR C=5 TO 8
6770 SP=F(P+B*FA(C))
6780 IF(SP<0) AND(RO=0) THEN 6800
6790 SW=SW-FW(ABS(SP))
6800 NEXT C
6810 IF B=-1 THEN B=1:GOTO 6760
6820 GOTO 7370
6830 REM EINDE WAARDE TEGENSTANDER
6840 REM WAARDE COMPUTER
6850 SW=SW+3*FW(F(P))
6860 ON F(P) GOTO 6870,6870,6970,7060,7170,7170,7060,7280,7280
6870 REM PION ALGEMEEN
6880 IF F(ZK)<=2 THEN SW=SW+3
6890 IF F(P-1)=0 THEN SW=SW+3
6900 IF F(P+9)<0 THEN SW=SW+FW(-F(P+9))
6910 IF F(P-11)<0 THEN SW=SW+FW(-F(P-11))
6920 IF F(P)=2 THEN 7370
6930 REM PION TWEE VELDEN
6940 IF F(P-1)<>0 THEN 6960
6950 IF F(P-2)=0 THEN SW=SW+3
6960 GOTO 7370
6970 REM PAARD
6980 A=-1
6990 FOR B=1 TO 4
7000 SP=P+A*FA(B)
7010 IF(SP<11) OR(SP>88) THEN 7030
7020 IF F(SP)<=0 THEN SW=SW+FW(-F(SP))
7030 NEXT B
7040 IF A=-1 THEN A=1:GOTO 6990
7050 GOTO 7370
7060 REM LOPER/DAME
7070 B=-1
7080 FOR C=5 TO 6
7090 A=P+B*FA(C)
7100 IF F(A)<=0 THEN SW=SW+FW(-F(A))
7110 IF F(A)<>0 THEN 7140
7120 A=A+B*FA(C)
7130 GOTO 7100
7140 NEXT C
7150 IF B=-1 THEN B=1:GOTO 7080
7160 IF F(P)<>7 THEN 7370
7170 REM TOREN/DAME
7180 B=-1
7190 FOR C=7 TO 8
7200 A=P+B*FA(C)
7210 IF F(A)<=0 THEN SW=SW+FW(-F(A))
7220 IF F(A)<>0 THEN 7250
7230 A=A+B*FA(C)
7240 GOTO 7210
7250 NEXT C
7260 IF B=-1 THEN B=1:GOTO 7190
7270 GOTO 7370
7280 REM KONING
7290 B=-1
7300 FOR C=5 TO 8
7310 SP=F(P+B*FA(C))
7320 IF(SP>0) AND(RO=0) THEN 7340
7330 SW=SW+FW(ABS(SP))
7340 NEXT C
7350 IF B=-1 THEN B=1:GOTO 7300
7360 REM EINDE WAARDE COMPUTER
7370 NEXT P
7380 F(SK)=F(ZK):F(ZK)=FZ
7390 BS(ZN)=SW:SK(ZN)=SK:ZK(ZN)=ZK
7400 RETURN
7410 REM EINDE WAARDEBEPALING
7420 REM 5 REGELS WISSEN
7430 FOR A=1 TO 5
7440 HO=10:VE=18+A:GOSUB 110:PRINT"                     ";
7450 NEXT A
7460 VE=19:GOSUB 110
7470 RETURN
7480 REM EINDE REGELS WISSEN
7490 REM EINDE HULP-PROGRAMMA
7500 REM SCHAAKSTUK KNIPPERT
7510 VE=2*(9-SK+10*INT(SK/10))
7520 HO=INT(SK/10)*3+6
7530 FOR A=1 TO 5
7540 GOSUB 110:PRINT F$(F(ZK)+9)
7550 FOR B=1 TO 100:NEXT B
7560 GOSUB 110:PRINT" "
7570 FOR B=1 TO 100:NEXT B
7580 NEXT A
7590 VE=2*(9-ZK+10*INT(ZK/10))
7600 HO=INT(ZK/10)*3+6
7610 FOR A=1 TO 5
7620 GOSUB 110:PRINT" "
7630 FOR B=1 TO 100:NEXT B
7640 GOSUB 110:PRINT F$(F(ZK)+9)
7650 FOR B=1 TO 100:NEXT B
7660 NEXT A
7670 RETURN
8000 REM ZOEK STUK
8010 A=PK
8020 A=A+B*C
8030 IF SGN(A-MW)=B THEN Q=1:RETURN
8040 IF F(A)=0 THEN 8020
8050 Q=0:RETURN
8100 A=ZK:GOTO 8020
9000 GOSUB 100:HO=8:GOSUB 110:SR$="Stellungseingabe"
9001 GOSUB 150:VE=VE+1:GOSUB 110:SR$="================"
9002 FOR A=18 TO 88 STEP 10
9004 F(A)=0:F(A-7)=0:NEXT A
9006 FOR A=12 TO 82 STEP 10
9008 F(A)=0:F(A+5)=0:NEXT A
9010 GOSUB 150:PRINT:PRINT:PRINT "Beispiele:" 
9015 PRINT:PRINT "WTTH1 - weisser Turm":PRINT "   (rochadefaehig) auf H1"
9020 PRINT "STD7  - schwarzer Turm":PRINT "   (nicht rochadefaehig) auf D7"
9025 PRINT "SKKE8 - schwarzer Koenig":PRINT "   (rochadefaehig) auf E8"
9030 PRINT "WKE3  - weisser Koenig":PRINT "   (nicht rochadefaehig) auf E3"
9035 PRINT "SBBB7 - schwarzer Bauer":PRINT "   (noch nicht bewegt) auf B7"
9040 PRINT "SBF5  - schwarzer Bauer":PRINT "   (bereits bewegt) auf F5"
9045 PRINT "WLC5  - weisser Laeufer auf C5"
9050 PRINT "     usw.   - Q fuer Beenden":PRINT
9060 PRINT "   Achtung: beide Koenige setzen!":PRINT
9065 INPUT A$:IF LEFT$(A$,1)="Q" OR LEFT$(A$,1)="q" THEN 9200
9070 B$=MID$(A$,LEN(A$)-1,1):R=ASC(B$)-64:IF R>8 THEN R=R-32
9071 R=10*R+VAL(RIGHT$(A$,1))
9072 T=ASC(MID$(A$,2,1))-64:IF T>27 THEN T=T-32
9073 IF LEN(A$)=4 THEN 9078
9074 IF T=2 THEN T=1
9075 IF T=11 THEN T=8
9076 IF T=20 THEN T=5
9077 GOTO 9084
9078 IF T=2 THEN T=2
9079 IF T=4 THEN T=7
9080 IF T=20 THEN T=6
9084 IF T=19 THEN T=3
9085 IF T=12 THEN T=4
9086 IF T=11 THEN T=9
9088 F=1:IF LEFT$(A$,1)="W" OR LEFT$(A$,1)="w" THEN F=-1
9090 F(R)=F*T:GOTO 9065
9200 RETURN
20000 PZ=10:REM UITLEG
20010 GOSUB 100
20020 HO=15:VE=1:GOSUB 110:SR$="SCHACH":GOSUB 150
20030 VE=VE+1:GOSUB 110:SR$="======":GOSUB 150
20040 PRINT:PRINT
20050 PRINT "In diesem Schachprogramm wird nach "
20060 PRINT "den bekannten Regeln gespielt. Wenn"
20070 PRINT "du z.B. eine Figur von C3 nach E5 "
20080 PRINT "ziehen willst, gibst du C3:E5 ein und"
20090 PRINT "drueckst dann auf <RETURN>."
20100 PRINT "Bei einem Tippfehler drueckst du "
20105 PRINT "die Loeschtaste."
20110 PRINT "Dann kannst du den Zug neu eingeben."
20120 PRINT "Fuer die kleine Rochade gib ";
20130 PRINT "einmal ";:GOSUB 120:GOSUB 110:SR$="o":GOSUB 150
20150 PRINT ",":PRINT "fuer die grosse ";
20152 PRINT "Rochade ";:GOSUB 120:GOSUB 110:SR$="oo"
20154 GOSUB 150:PRINT " und dann":PRINT "<RETURN> ein."
20170 PRINT "Die Spielfiguren werden wie folgt "
20180 PRINT "als Buchstaben dargestellt: ";
20182 GOSUB 120:GOSUB 110:SR$="B":GOSUB 150:PRINT "auer, "
20190 GOSUB 120:GOSUB 110:SR$="T":GOSUB 150:PRINT "urm, ";
20192 GOSUB 120:GOSUB 110:SR$="S":GOSUB 150
20194 PRINT "pringer, ";:GOSUB 120:GOSUB 110
20196 SR$="L":GOSUB 150:PRINT "aeufer, ";
20198 GOSUB 120:GOSUB 110:SR$="D":GOSUB 150:PRINT "ame"
20200 PRINT "und ";:GOSUB 120:GOSUB 110:SR$="K"
20210 GOSUB 150:PRINT "oenig."
20220 GOSUB 20450
20230 HO=15:VE=1:GOSUB 110:SR$="SCHACH":GOSUB 150
20240 VE=VE+1:GOSUB 110:SR$="======":GOSUB 150
20250 PRINT:PRINT
20260 PRINT "Der Computer spielt mit den kleinen "
20270 PRINT "Buchstaben (schwarz) und du spielst"
20280 PRINT "mit den grossen Buchstaben (weiss)."
20290 REM PRINT
20300 PRINT "Ein Nachteil dieses Schachprogramms "
20310 PRINT "ist die lange Bedenkzeit des Com-"
20320 PRINT "puters. Selbst die meist einfachen "
20330 PRINT "Eroeffnungszuege sind fuer den Com-"
20340 PRINT "modore 64 eine Aufgabe, fuer die er "
20350 PRINT "fast vier Minuten braucht."
20355 PRINT "Unter dem Emulator ";
20356 PRINT CHR$(34);"CP/M Box";CHR$(34)
20357 PRINT "bietet die F11-Taste einen Ausweg."
20360 PRINT "Doch lasse dich dadurch nicht davon "
20370 PRINT "abhalten, mit dem Computer eine"
20380 PRINT "gute Partie Schach zu spielen.":PRINT
20381 PRINT "                   Viel Erfolg!"
20390 GOSUB 20450
20400 HO=5:VE=5:GOSUB 110
20410 PRINT "Druecke die Loeschtaste: ";
20420 GOSUB 210:WI$=IN$
20430 PRINT"Danke ..."
20440 PZ=20:RETURN
20450 REM DRUK TOETS
20460 HO=22:VE=22
20470 GOSUB 110:PRINT "          TASTE >";
20480 FOR P=1 TO 200:NEXT P
20490 GOSUB 110:PRINT "          TASTE  ";
20500 GOSUB 210
20510 IF IN$<>"" THEN GOSUB 100:RETURN
20520 FOR P=1 TO 100:NEXT P
20530 GOTO 20470
20540 REM INVOER
20550 GOSUB 210
20560 IF(IN$<"a") OR(IN$>"z") THEN RETURN
20570 IN$=CHR$(ASC(IN$)-AL+AH)
20580 RETURN
25000 DATA 3,10,10,30,30,50,50,110,999,999
25010 DATA 5,3,4,7,8,4,3,5,21,19,12,8,11,9,10,1
30000 REM Quelle: https://robhagemans.github.io/basicode
30010 REM /basicode/Best_of_BasiCode_6/SCHAKEN.BAS
30291 REM ==  DEUTSCHE AUSGABE  ==
30292 REM ==   ANPASSUNG FUER   ==
30293 REM ==     AMSTRAD PCW    ==
30294 REM ==  STELLUNGSEINGABE  ==
30295 REM ==   TH. RADEMACHER   ==
30296 REM == JOYCE-USER-AG E.V. ==
30297 REM == 29. SEPTEMBER 2026 ==
.
Für die inverse Darstellung von Buchstaben wird nun ein anderes Verfahren angewendet. GOSUB 150 wird so modifiziert, dass nicht mehr je drei, sondern nur noch ein Zeichen vor und nach dem Text ausgegeben werden, deswegen beginnt das Listing hier mit dieser Zeile. Lässt man sie weg, kann das Programm auch auf anderen Computern genutzt werden, allerdings nur, wenn deren Bascoder nicht als Maschinencode, sondern als Programmzeilen vorliegt, also auch dort diese Modifikation vorgenommen werden kann.
.
SCHACH.png
SCHACH.png (25.03 KiB) 12 mal betrachtet
.
Wie auch im Bild zu sehen muss erst der Bascoder gestartet werden und auf Abfrage der Programmname eingegeben werden.
Antworten