Die Suche ergab 53 Treffer

von ein Thüringer
02.10.2026, 20:31
Forum: Spiele
Thema: ein einfaches Schachspiel
Antworten: 1
Zugriffe: 88735

ein nützliches Update

.
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.
von ein Thüringer
21.08.2026, 19:16
Forum: Spiele
Thema: Tic Tac Toe nach 44 Jahren korrigiert
Antworten: 0
Zugriffe: 1227

Tic Tac Toe nach 44 Jahren korrigiert

.
2014 wurden in der JUAG-Klubzeitung Programme einer BasiCode-2-Diskette von 1982 vorgestellt. Die Tic Tac Toe - Version arbeitete nicht korrekt.
.
Als ich es mir dieser Tage mal wieder anschaute, fand ich endlich die Ursache: zwei Variablen wurden falsche Werte zugewiesen.

Code: Alles auswählen

   falsch:
3800 F=5:E=1:I=3
3810 GOSUB 3900:IF R=V THEN RETURN

   korrigiert:
3800 F=2:E=8:I=3
3810 GOSUB 3900:IF R=V THEN RETURN
.
Hier ist nun die korrigierte Version (wie gewohnt zum Bascoder hinzuzuladen).
.
BOKA-EI.png
BOKA-EI.png (15.88 KiB) 1227 mal betrachtet
.
BOKA-EI.ZIP
in .BC3 umbenennen
(4.98 KiB) 75-mal heruntergeladen
Mit "0" kann dem Computer der erste Zug überlassen werden.
.
EDIT 17.IX.'26: Durch Einfügen bzw. Ändern folgender zwei Zeilen wird das Programm etwas weniger vorhersehbar: beginnt der Spieler mit der 5, wählt der Computer nicht mehr zwingend die 1, sondern nach Zufall irgendeine der vier Ecken.
.
BOKA-EI2.png
BOKA-EI2.png (10.66 KiB) 576 mal betrachtet
von ein Thüringer
21.08.2026, 16:24
Forum: Programmierung
Thema: BASICODE in Java
Antworten: 63
Zugriffe: 461264

Tic Tac Toe nach 44 Jahren korrigiert

.
2014 wurden in der JUAG-Klubzeitung Programme einer BasiCode-2-Diskette von 1982 vorgestellt. Die Tic Tac Toe - Version arbeitete nicht korrekt:.
.
Homepage.png
Homepage.png (86.61 KiB) 1265 mal betrachtet
.
Als ich es mir dieser Tage mal wieder anschaute, fand ich endlich die Ursache: zwei Variablen wurden falsche Werte zugewiesen:
.

Code: Alles auswählen

   falsch:
3800 F=5:E=1:I=3
3810 GOSUB 3900:IF R=V THEN RETURN

   korrigiert:
3800 F=2:E=8:I=3
3810 GOSUB 3900:IF R=V THEN RETURN
.
Hier ist nun die neue Version, auf Farb-BasiCode erweitert:
BOKA-EI.ZIP
in .BAS umbenennen
(5.51 KiB) 89-mal heruntergeladen
.
BOKA-EI.png
BOKA-EI.png (142.68 KiB) 1265 mal betrachtet
.
Mit "0" kann dem Computer der erste Zug überlassen werden.
Das Programm läuft nicht besonders schnell - unter Michaels Bascoder natürlich doch.
.
EDIT 17.IX.'26: Durch Einfügen bzw. Ändern folgender zwei Zeilen wird das Programm etwas weniger vorhersehbar: beginnt der Spieler mit der 5, wählt der Computer nicht mehr zwingend die 1, sondern nach Zufall irgendeine der vier Ecken.
.
BOKA-EI2.png
BOKA-EI2.png (10.66 KiB) 522 mal betrachtet
von ein Thüringer
04.06.2026, 11:02
Forum: Spiele
Thema: Bounce - nun auch für Linkshänder
Antworten: 0
Zugriffe: 4247

Bounce - nun auch für Linkshänder

Auf der JUAG-Webste finden wir ( https://joyce.de/software/spiele/bounce.htm ) ein interessantes und fesselndes Spiel von Hannes Geyer.
.
.
.
bounce.jpg
bounce.jpg (108.03 KiB) 4247 mal betrachtet
.
.
.

Leider kann ich es weder auf dem Elliott- noch auf dem HabiSoft-Emulator spielen - geht es Euch auch so? Das Problem ist, dass ich mit SHIFT+Cursortaste keinen anderen Code als nur mit der Cursortaste erhalte - das Spiel geht aber davon aus, dass beim zusätzlichen Drücken der SHIFT-Taste die Codes 252 bis 255 erzeugt werden. Weiß jemand, ob man das irgendwo in den Optionen einstellen kann?

Ich behalf mir damit, in den betreffenden Zeilen die Abfragen zu erweitern:

Code: Alles auswählen

1230 IF ta=1 OR ta$="j" OR ta$="a" THEN ax=ax-1:GOTO 1350
1240 IF ta=6 OR ta$="l" OR ta$="d" THEN ax=ax+1:GOTO 1350
1250 IF ta=30 OR ta$="k" OR ta$="s" THEN ay=ay+1:GOTO 1350
1260 IF ta=31 OR ta$="i" OR ta$="w" THEN ay=ay-1:GOTO 1350
1270 IF ta=252 OR ta$="I" OR ta$="W" THEN ay=ay-2:GOTO 1350
1280 IF ta=253 OR ta$="K" OR ta$="S" THEN ay=ay+2:GOTO 1350
1290 IF ta=254 OR ta$="J" OR ta$="A" THEN ax=ax-2:GOTO 1350
1300 IF ta=255 OR ta$="L" OR ta$="D" THEN ax=ax+2:GOTO 1350
Nun kann es auch mit den Tasten I, J, K und L bedient werden. Für Linkshänder ist vermutlich A, D, S und W angenehmer.
von ein Thüringer
31.10.2025, 11:38
Forum: Spiele
Thema: SUDOKU, Fehler korrigiert
Antworten: 0
Zugriffe: 6695

SUDOKU, Fehler korrigiert

Auf einer Klubdiskette wie auch auf der Homepage https://joyce.de/software/spiele/sudoku.htm haben wir das Programm "Das Sudoku-Puzzle". Es stammt von ZX81-Programmierern der Meisterklasse http://zx81.ordi5.free.fr/andre/andre.htm#sudoku und es hat mich damals so beeindruckt, dass ich es für die Joyce umgeschrieben habe. Das Programm löst nicht selbst die Sudokus, es assistiert nur dabei, indem es für jedes Feld die dort noch möglichen Ziffern anzeigt. Damit werden Flüchtigkeitsfehler vermieden.
.
Jetzt habe ich entdeckt, dass ich dabei einen kleinen Fehler hineingebracht hatte (siehe letzte Zeile des unteren Bilds): statt des zweiten Minus stand dort ein Plus, was in einer bestimmten Situation zu einem Fehler in der Ausgabe führte.
.
SUDOKU.png
SUDOKU.png (17.15 KiB) 6695 mal betrachtet
.
Hier ist das Listing des korrigierten Programms (wegen der Umlaute sollte der deutsche Zeichensatz eingestellt sein):
.

Code: Alles auswählen

1 Y$="00``A```D`FC```F``E`IG``E````HC```G`F```````````E`H```CA````C``GI`I``B```DB`C```F``"
3 PRINT CHR$(27)"b"CHR$(9)
4 DEF FNC$(X,Y)=CHR$(27)+"Y"+CHR$(32+X)+CHR$(32+Y):PRINT CHR$(27)"f"
5 PRINT CHR$(27)"E"
10 GOTO 9000
30 I$=INKEY$:IF I$="" THEN 30
35 RETURN
100 REM:FAST 
110 LET N$="123456789"
120 LET L=16
130 FOR X=1 TO 9
140 IF A(X,X1) THEN MID$(N$,A(X,X1),1)="0"
150 IF A(Y1,X) THEN MID$(N$,A(Y1,X),1)="0"
160 NEXT X
170 FOR R=Y2 TO Y2+2
180 FOR C=X2 TO X2+2
190 IF A(R,C) THEN MID$(N$,A(R,C),1)="0"
200 NEXT C
210 NEXT R
220 FOR X=1 TO 9
230 IF MID$(N$,X,1)="0" THEN LET L=L-1
240 NEXT X
250 IF L=7 THEN PRINT FNC$(21,7);"      NICHTS       "
260 REM SLOW 
270 IF L=7 THEN 320
280 PRINT FNC$(21,6);E$;"  ";
285 PRINT FNC$(21,7);E$;FNC$(21,24-L);
290 FOR X=1 TO 9
300 IF MID$(N$,X,1)>"0" THEN PRINT MID$(N$,X,1);" ";
310 NEXT X
320 RETURN 
400 PRINT FNC$(21,7);"  AUGENBLICK BITTE "; 
410 LET Y=1
420 FOR X=6 TO 16
430 IF X=9 OR X=13 THEN LET X=X+1
440 PRINT FNC$(X,10);
450 FOR B=1 TO 7 STEP 3
460 PRINT CHR$(27)"C";
461 IF A(Y,B)=0 THEN PRINT " "; ELSE PRINT CHR$(A(Y,B)+48);
463 IF A(Y,B+1)=0 THEN PRINT " "; ELSE PRINT CHR$(A(Y,B+1)+48);
465 IF A(Y,B+2)=0 THEN PRINT " "; ELSE PRINT CHR$(A(Y,B+2)+48);
470 NEXT B
480 LET Y=Y+1
490 NEXT X
500 RETURN 
1000 LET ER1=0
1010 FOR C=1 TO 9
1020 PRINT FNC$(21,7);"    PR]FE ZEILEN   "
1030 IF A(Y1,C)=K THEN GOTO 1300
1040 NEXT C
1050 FOR R=1 TO 9
1060 PRINT FNC$(21,7);"   PR]FE SPALTEN   "
1070 IF A(R,X1)=K THEN GOTO 1400
1080 NEXT R
1090 PRINT FNC$(21,7);"   PR]FE 3X3-FELD  "
1100 FOR C=X2 TO X2+2
1110 FOR R=Y2 TO Y2+2
1120 IF A(R,C)=K THEN GOTO 1200
1130 NEXT R
1140 NEXT C
1150 RETURN 
1200 PRINT FNC$(21,7);"ZWEI";K;FNC$(21,13);"EN IM 3ERFELD"
1210 LET R=-(R>3)-(R>6)+R+5
1220 LET C=-(C>3)-(C>6)+C+10
1230 FOR X=1 TO 9
1240 PRINT FNC$(R,C);CHR$(27)"p";CHR$(K+48);CHR$(27)"q";FNC$(R,C);CHR$(K+48);FNC$(RD,CD);CHR$(27)"p";CHR$(K+48);CHR$(27)"q";FNC$(RD,CD);CHR$(K+48)
1250 NEXT X
1260 LET ER1=-1
1270 RETURN 
1300 PRINT FNC$(21,7);" DOPPELTE IN ZEILE "
1310 LET R=RD
1320 GOTO 1220
1400 PRINT FNC$(21,7);"DOPPELTE IN SPALTE "
1410 LET R=-(R>3)-(R>6)+R+5
1420 LET C=CD
1430 GOTO 1230
1610 IF CD<>21 THEN 1612
1611 LET CD=11:LET X1=1:LET X2=1:GOTO 1615
1612 IF NOT(CD=13 OR CD=17) THEN 1614
1613 LET X2=X2+3:LET CD=CD+1
1614 LET C1=1:LET CD=C1+CD:LET X1=X1+1
1615 LET K=0
1616 PRINT FNC$(RD,CD);CHR$(27)"p";:IF NOT A(Y1,X1) THEN PRINT " ";CHR$(27)"q"; ELSE PRINT CHR$(A(Y1,X1)+48);CHR$(27)"q";
1617 PRINT FNC$(RD,CD);:IF NOT A(Y1,X1) THEN PRINT " "; ELSE PRINT CHR$(A(Y1,X1)+48);
1618 IF K=6 THEN GOTO 1610
1620 RETURN 
1630 IF CD<>11 THEN 1632
1631 LET CD=21:LET X2=7:LET X1=9:GOTO 1635
1632 IF NOT(CD=15 OR CD=19) THEN 1634
1633 LET X2=X2-3:LET CD=CD-1
1634 LET C1=-1:LET CD=CD-0+C1:LET X1=X1-1
1635 LET K=0
1636 PRINT FNC$(RD,CD);CHR$(27)"p";:IF NOT A(Y1,X1) THEN PRINT " ";CHR$(27)"q"; ELSE PRINT CHR$(A(Y1,X1)+48);CHR$(27)"q";
1637 PRINT FNC$(RD,CD);:IF NOT A(Y1,X1) THEN PRINT " "; ELSE PRINT CHR$(A(Y1,X1)+48);
1638 IF K=1 THEN GOTO 1630
1640 RETURN 
1650 IF RD<>6 THEN 1652
1651 LET RD=16:LET Y1=9:LET Y2=7:GOTO 1655
1652 IF RD<>10 AND RD<>14 THEN 1654
1653 LET Y2=Y2-3:LET RD=RD-1
1654 LET R1=-1:LET RD=RD+R1:LET Y1=Y1-1
1655 LET K=0
1656 PRINT FNC$(RD,CD);CHR$(27)"p";:IF NOT A(Y1,X1) THEN PRINT " ";CHR$(27)"q"; ELSE PRINT CHR$(A(Y1,X1)+48);CHR$(27)"q";
1657 PRINT FNC$(RD,CD);:IF NOT A(Y1,X1) THEN PRINT " "; ELSE PRINT CHR$(A(Y1,X1)+48);
1658 IF K=31 THEN GOTO 1650
1660 RETURN 
1670 IF RD<>16 THEN 1672
1671 LET RD=6:LET Y1=1:LET Y2=1:GOTO 1675
1672 IF RD<>8 AND RD<>12 THEN 1674
1673 LET Y2=Y2+3:LET RD=RD+1
1674 LET R1=1:LET RD=R1+RD:LET Y1=Y1+1
1675 LET K=0
1676 PRINT FNC$(RD,CD);CHR$(27)"p";:IF NOT A(Y1,X1) THEN PRINT " ";CHR$(27)"q"; ELSE PRINT CHR$(A(Y1,X1)+48);CHR$(27)"q";
1677 PRINT FNC$(RD,CD);:IF NOT A(Y1,X1) THEN PRINT " "; ELSE PRINT CHR$(A(Y1,X1)+48);
1678 IF K=30 THEN 1670
1680 RETURN 
2000 IF T=1 THEN GOTO 2007
2006 WON=0:FOR V=1 TO 9:FOR U=1 TO 9:X=ASC(MID$(Y$,(V-1)*9+U+2)):MID$(Z$(V),U,1)=CHR$(32-44*(X<94)):A(V,U)=X-96-32*(X<96):WON=WON-(A(V,U)>0):NEXT U:NEXT V
2007 T=0
2008 GOSUB 400
2009 LET GO=-1
2010 REM LET GO=-1
2015 GOSUB 100
2020 MID$(U$,2,1)=CHR$(A(Y1,X1)+48)
2030 PRINT FNC$(RD,CD);CHR$(27)"p";:IF A(Y1,X1) THEN PRINT MID$(U$,2,1);CHR$(27)"q"; ELSE PRINT MID$(U$,1,1);CHR$(27)"q";:REM U$(-(A(Y1,X1)>0)+1)
2035 PRINT FNC$(RD,CD);:IF A(Y1,X1) THEN PRINT MID$(U$,2,1); ELSE PRINT MID$(U$,1,1);:REM U$(-(A(Y1,X1)>0)+1)
2040 LET K$=INKEY$
2050 IF K$="" THEN GOTO 2030
2060 LET K=ASC(K$)
2070 IF K=6 THEN GOSUB 1618
2080 IF K=1 THEN GOSUB 1638
2090 IF K=31 THEN GOSUB 1658
2100 IF K=30 THEN GOSUB 1678
2110 IF K=83 OR K=115 THEN GOTO 9400
2120 IF GO THEN IF (K=73 OR K=105) THEN GOSUB 9500
2125 LET K=K-48
2130 IF K<0 OR K>9 THEN GOTO 2010
2140 IF K AND NOT A(Y1,X1) THEN PRINT FNC$(RD,CD);CHR$(27)"p"CHR$(K+48)CHR$(27)"q"
2150 IF MID$(Z$(Y1),X1,1)="L" THEN PRINT FNC$(21,7);" "CHR$(27)"p-*"CHR$(27)"q "CHR$(27)"pBLOCKIERT "CHR$(27)"q "CHR$(27)"p*-"CHR$(27)"q ";FNC$(21,7);E$;:GOSUB 100
2160 IF NOT GO THEN RETURN 
2200 IF A(Y1,X1) AND K OR MID$(Z$(Y1),X1,1)="L" THEN GOTO 2020
2210 IF K=0 AND A(Y1,X1)=0 THEN GOTO 2020
2220 IF K=0 THEN GOTO 2260
2230 GOSUB 1000
2240 IF ER1 THEN GOTO 2010
2250 LET WON=WON+1
2260 IF K=0 THEN LET WON=WON-1
2270 LET A(Y1,X1)=K
2280 IF WON<=80 THEN GOTO 2010
6000 PRINT FNC$(RD,CD);CHR$(A(Y1,X1)+48);FNC$(21,7);"  DU BIST FERTIG!  ";:GOSUB 30:PRINT FNC$(21,7);"   "CHR$(27)"pS"CHR$(27)"qPIELEN  "CHR$(27)"pE"CHR$(27)"qNDE   "
6010 IF UPPER$(INKEY$)="S" THEN RUN 
6020 IF UPPER$(INKEY$)<>"E" THEN GOTO 6010
6030 GOTO 9800
7000 PRINT FNC$(21,6)" "CHR$(27)"pS"CHR$(27)"qTART  /  "CHR$(27)"pE"CHR$(27)"qINGEBEN  "
7010 LET C$=INKEY$
7020 IF UPPER$(C$)="S" THEN GOTO 2000
7025 IF C$=" " THEN PRINT CHR$(27)"1";:RETURN
7030 IF UPPER$(C$)<>"E" THEN GOTO 7010
7035 T=1
7040 LET GO=0
7100 GOSUB 2010
7110 IF K AND MID$(Z$(Y1),X1,1)="L" THEN GOTO 7100
7120 PRINT FNC$(21,6);CHR$(27)"pF"CHR$(27)"qERTIG "CHR$(27)"pB"CHR$(27)"qLOCKEN ";CHR$(27)"pZ"CHR$(27)"qUR]CK";
7130 IF MID$(Z$(Y1),X1,1)="L" AND NOT K THEN PRINT FNC$(21,7);" "CHR$(27)"pF"CHR$(27)"qERTIG "CHR$(27)"pL"CHR$(27)"q\SEN "CHR$(27)"pZ"CHR$(27)"UR]CK ";
7140 GOSUB 30:IF UPPER$(I$)="Z" THEN GOTO 7100
7150 IF UPPER$(I$)="F" THEN GOTO 7000
7160 IF UPPER$(I$)<>"L" AND UPPER$(I$)<>"B" THEN GOTO 7140
7170 IF A(Y1,X1)=0 AND K=0 THEN GOTO 7100
7200 IF NOT K THEN 7210
7204 REM PRINT FNC$(21,7);E$;"  ";
7207 PRINT FNC$(21,7);" "CHR$(27)"p-*"CHR$(27)"q "CHR$(27)"p BLOCKIERT"CHR$(27)"q "CHR$(27)"p*-"CHR$(27)"q ";:REM FNC$(21,7);E$;
7210 LET WON=-(K<>0)+WON+(K=0)
7220 LET A(Y1,X1)=K
7230 IF K THEN MID$(Z$(Y1),X1,1)="L" ELSE MID$(Z$(Y1),X1,1)=" "
7240 GOTO 7100
9000 REM POKE 16418,0
9005 PRINT CHR$(27)+"X"+CHR$(35)+CHR$(60)+CHR$(56)+CHR$(63);
9010 REM DIM A$(4,14)
9012 LET A$(1)="–šššžšššžšššœ"
9014 LET A$(2)="•   •   •   •#"
9016 LET A$(3)="—šššŸšššŸššš#"
9017 LET A$(4)="“ššš›ššš›ššš™#"
9018 LET A$(5)=" "+STRING$(13,"#")
9020 PRINT "    ";CHR$(27);"p";STRING$(25,32);CHR$(27);"q":PRINT "    ";CHR$(27);"p ** DAS SUDOKU-PUZZLE ** ";CHR$(27);"q";CHR$(35):PRINT "    ";CHR$(27);"p";STRING$(25,32);CHR$(27);"q";CHR$(35):PRINT "     ";STRING$(25,35)		
9025 PRINT:PRINT TAB(11);A$(1)
9030 FOR I=1 TO 11
9040 PRINT TAB(11);A$(-((I=4 OR I=8))+2)
9050 NEXT I
9055 PRINT TAB(11);A$(4):PRINT TAB(11);A$(5)
9060 PRINT FNC$(20,0);"     –";STRING$(21,"š");"œ":PRINT TAB(6);"•"STRING$(21,32);"•#":PRINT TAB(6);"“";STRING$(21,"š");"™#":PRINT TAB(6);" ";STRING$(23,35)
9100 DIM A(9,9)
9110 FOR I=1 TO 9:LET Z$(I)=STRING$(9,32):NEXT I
9120 LET Y1=5
9130 LET X1=Y1
9140 LET Y2=4
9150 LET X2=Y2
9160 LET RD=11
9170 LET CD=16
9180 LET GO=0
9190 LET ER1=GO
9200 LET WON=GO
9210 LET U$="  "
9220 LET E$=STRING$(19,32)
9230 LET L$=STRING$(22,35)
9240 LET SAVED=GO
9250 GOSUB 9500
9260 GOTO 7000
9400 FOR V=1 TO 9:FOR U=1 TO 9:POKE &H7A98+V*9+U,A(V,U)+96+32*(MID$(Z$(V),U,1)="L"):NEXT U:NEXT V
9401 NR=10*(PEEK(&H7AA0)-48)+PEEK(&H7AA1)-47:POKE &H7AA0,INT(NR*0.1)+48:POKE &H7AA1,(NR MOD 10)+48
9410 PRINT FNC$(21,6);CHR$(27)"pSAVED AS SUDOKU"+LEFT$(Y$,2)+".BAS"CHR$(27)"q";
9415 SAVE "SUDOKU"+LEFT$(Y$,2)+".BAS"
9418 PRINT FNC$(21,6);"                     ";
9420 GOTO 7000
9500 PRINT FNC$(5,0)"     –"STRING$(21,"š")"œ":PRINT "     •   SUDOKU ANLEITUNG  •#":PRINT "     •  .................  •#"
9501 PRINT "     •"STRING$(21,32)"•#":PRINT "     • JEDES SUDOKU HAT 9  •#":PRINT "     •ZEILEN UND 9 SPALTEN •#"
9502 PRINT "     •UND HAT AUCH 9 FELDER•#":PRINT "     •  MIT JE 9 PL[TZEN.  •#":PRINT "     • SETZE DIE ZAHLEN 1  •#"
9503 PRINT "     •BIS 9 IN JEDE ZEILE, •#":PRINT "     •SPALTE UND JEDES FELD•#":PRINT "     •OHNE WIEDERHOLUNGEN. •#"
9504 PRINT "     “"STRING$(21,"š")"™#":PRINT "      "STRING$(23,35)
9505 PRINT FNC$(21,7)" DR]CKE EINE TASTE "
9510 IF INKEY$<>"" THEN GOTO 9510
9520 IF INKEY$="" THEN GOTO 9520
9599 PRINT FNC$(6,1)"    •PFEILTASTEN      "CHR$(27)"p´"CHR$(27)"q   •#":PRINT "     •   ZUM BEWEGEN: "CHR$(27)"p<"CHR$(27)"q "CHR$(27)"p>"CHR$(27)"q  •#"
9600 PRINT "     •"STRING$(17,32)CHR$(27)"pv"CHR$(27)"q   •#":PRINT"     •"STRING$(21,32)"•#"
9601 PRINT "     •DR]CKE "CHR$(34)"S"CHR$(34)" F]R SAVEN •#":PRINT "     •"STRING$(21,32)"•#":PRINT "     •DR]CKE "CHR$(34)"I"CHR$(34)" F]R INFO  •#"
9602 PRINT "     •"STRING$(21,32)"•#":PRINT "     •  GESCHRIEBEN VON:   •#"
9603 PRINT "     •STAFFORD WHITE / 2006•#":PRINT "     •  GE[NDERT:  "CHR$(27)"pANDR"CHR$(193)CHR$(27)"q***•#"
9605 PRINT FNC$(21,7)"  TASTE F]R START  "
9610 IF INKEY$<>"" THEN GOTO 9610
9620 IF INKEY$="" THEN GOTO 9620
9630 PRINT FNC$(17,5)"     ";A$(4);"     ":PRINT "          ";A$(5);"      "
9640 FOR X=16 TO 6 STEP -1
9650 PRINT FNC$(X,5);L$:PRINT FNC$(X,5);"     ";A$(-((X=9) OR (X=13))+2);"     "
9660 NEXT X
9670 PRINT FNC$(5,5);L$:PRINT FNC$(5,5);"     ";A$(1);"     "
9680 IF NOT GO THEN RETURN 
9690 GOTO 400
9800 PRINT CHR$(27)"E"CHR$(27)"H"; 
9990 PRINT "9990"CHR$(27)"p>"CHR$(27)"qSAVE "CHR$(34)"SUDOK"CHR$(27)"pU"CHR$(27)"q"CHR$(34)"  2006/10 (C)":PRINT " –ššššššššššššššššššššššššššššœ –™   IDEE VON STAFFORD WHITE  “œ•  GRAFIK VON STAFFORD WHITE   ••PROGRAMM VON STAFFORD WHITE   •"
9991 PRINT CHR$(27)"A•     UND VON "CHR$(27)"pANDR"CHR$(193)CHR$(27)"q***         •":PRINT CHR$(27)"A"CHR$(149)"  DEUTSCH: JOYCE-USER-AG E.V. "CHR$(149):PRINT CHR$(27)"A• –šššššššššœ                  •"
9992 PRINT CHR$(27)"A•–™         “œ WILLST DU MEHR? ••• F"CHR$(27)"pR"CHR$(27)"qE"CHR$(27)"pE"CHR$(27)"q-"CHR$(27)"pW"CHR$(27)"qA"CHR$(27)"pR"CHR$(27)"qE •                 •":PRINT CHR$(27)"A•“œ         –™ HOL DIR MEHR... •"
9993 PRINT CHR$(27)"A• “ššššššššš™                  ••     SPEICHERN: RUN 9990      •":PRINT CHR$(27)"A•  "CHR$(27)"p  PROGRAMM  NICHT [NDERN  "CHR$(27)"q  •":PRINT CHR$(27)"A•       STARTEN: RUN           •"
9994 PRINT CHR$(27)"A• STAFFORDWHITE2002"CHR$(166)"YAHOO.COM  •":PRINT CHR$(27)"A“œ      ZX81AB"CHR$(166)"GMAIL.COM      –™ “šššššššššššššššššššššššššššš™ 9992 RUN":PRINT:PRINT:PRINT CHR$(27)"pK"CHR$(27)"q"
9995 PRINT CHR$(27)"1"
9996 A$=INKEY$:IF A$="" THEN 9996
9998 PRINT CHR$(27)"e"CHR$(27)"b"CHR$(0)CHR$(27)"H"CHR$(27)"J"
9999 STOP
11100 Y$="00B````I``FADC```````F`HB`````````C`H```G`E"
11101 Y$=Y$+"`D```I`B`````````IF`E```````CBGD``G````H"
11102 Y$="00````H`D```DFG``I``C``B```H`E`CADB`I`BI`FG"
11103 Y$=Y$+"H`EC`H`CEIF`B`B```G``H``G``EBA```H`B````"
11104 Y$="00`I`CH`FB`B``A```IG````I`A````DHC``G`CEH`B"
11105 Y$=Y$+"`DAF`A``DFC````B`G````HC```I``A`GI`AH`F`"
11106 Y$="00H````G```FB`````HC```HFD`B`DEH``B`F````E`"
11107 Y$=Y$+"H````G`F``EIH`I`DAF```BD`````AE```G````I"
11108 Y$="00`B`FA`ED````B```FH``H`D`B````BIC``A`FCD`B"
11109 Y$=Y$+"`HIE`G``HFD````G`E`C``EA```B````HF`IC`E`"
11110 Y$="00``EA`DHIF```BH`````A``E`D``B`I```AH``C```"
11111 Y$=Y$+"``B``HA```F`C``B`D``E`````BC```IDCH`EB``"
11112 Y$="00DH``I```E```E``G`B`E`D`F`````E```HB`B````"
11113 Y$=Y$+"```F`CH```E`````F`D`G`I`D``H```H```E``CD"
11114 Y$="00````G```CH``C`B``EEB`FIH``AD`F`HC`B``C`I`"
11115 Y$=Y$+"D`A``A`BE`C`DA``GDF`CBG``E`A``FC```B````"
11116 Y$="00I`CE```F`AG````EC`D```G``BH`````BGIC`````"
11117 Y$=Y$+"`F`A`I`F``BD`ECAB`````B````E`A```IA`GD`B"
11118 Y$="00D`I```F`E````G`````CHB`IAD```F`A`E`````E`"
11119 Y$=Y$+"D`````D`H`C```HEC`ABI`````F````B`A```D`H"
11120 Y$="00B````I``FADC```````F`HB`````````C`H```G`E"
11121 Y$=Y$+"`D```I`B`````````IF`E```````CBGD``G````H"
11122 Y$="00D`I```F`E````G`````CHB`IAD```F`A`E`````E`"
11123 Y$=Y$+"D`````D`H`C```HEC`ABI`````F````B`A```D`H"


.
Als “Radiergummi“ fungiert die 0, damit können Ziffern wieder gelöscht werden: im Eingabe-Modus jede, aber im Spiel-Modus nur die, die nicht geblockt sind. Beim Eingeben muss Sorgfalt walten – hier wird noch nicht überprüft, ob eine Ziffer in Zeile, Spalte oder 9erfeld bereits gesetzt wurde und es wird später im Spiel-Modus auch nicht erkannt.
.
Als Bonus habe ich zwölf Rätsel ergänzt - die Zuweisung in Zeile 1 muss durch ein Zeilenpaar aus den Zeilen ab 11100 ersetzt werden. Ihr könnt auch eigene Aufgaben codieren: das "`" steht für ein leeres Feld, die Buchstaben A bis I für die Ziffern 1 bis 9.
.
Viel Spaß beim Knobeln!

.

EDIT 9.11.‘25
.
Im Kasten steht eine neue Version des Programms. Man kann jetzt über eine Seite hinaustreten und kommt auf der anderen Seite wieder herein. Außerdem ist jetzt der bisher versteckte Menüpunkt “ZURÜCK“ sichtbar: eine falsch eingetippte Ziffer kann damit sofort (und nicht mehr nur durch Blockieren, Überschreiben mit 0 und Lösen) zurückgenommen werden.

Übrigens trat bei mir ein Fehler auf (vom unteren Rahmen wird im Verlauf des Spiels die untere linke Ecke mit Leerzeichen überschrieben), dessen Ursache ich nicht finden kann. Doch nach dem Abspeichern ohne Option “,A“ und Laden dieser Token-Form war der Fehler verschwunden. Hat jemand eine Erklärung für so ein Phänomen?
von ein Thüringer
21.09.2025, 10:11
Forum: Verschiedenes
Thema: JOYCE Klubtreffen 2025 in Philippinenburg
Antworten: 1
Zugriffe: 20760

JOYCE Klubtreffen 2025 in Philippinenburg

In Hessen steppte wieder der Bär!

Am neuen Veranstaltungsort machte es nicht weniger Spaß als in den vorangegangenen Jahren.

.
KT_2025.png
KT_2025.png (358.53 KiB) 20760 mal betrachtet
.


.

KT__2025.png
KT__2025.png (325.55 KiB) 20759 mal betrachtet

.


Modell.JPG
Modell.JPG (777.83 KiB) 20654 mal betrachtet

.

Auf bewährte Weise hier wieder eine Fotoserie in Joyce-Form, zu betrachten mit Bernds Programm PBMREAD 3.4 .
2025.zip
(536.26 KiB) 1722-mal heruntergeladen
von ein Thüringer
10.08.2025, 17:59
Forum: Programmierung
Thema: BASICODE in Java
Antworten: 63
Zugriffe: 461264

Kunst aus Frankreich

.
Hier ist ein Programm, bei dem der Java-Bascoder wieder den Vorteil seiner hohen Geschwindigkeit ausspielen kann. Es werden drei Werke der Künstlerin Vera Molnár nachempfunden.
.
.
3MOLNAR.BC3.ZIP
" .ZIP " entfernen
(3.78 KiB) 196-mal heruntergeladen
.
.
Bei "Duerer" und "Transformations" wird auf Tastendruck jeweils eine neue Variante des Motivs erzeugt.
.
.
3MOLNAR.png
3MOLNAR.png (28.3 KiB) 3033 mal betrachtet
.
.
Eine für den Amstrad PCW angepasste Variante ist im Thread "Grafik - Kurven" zu finden.
.
von ein Thüringer
18.02.2025, 21:15
Forum: Programmierung
Thema: BASICODE in Java
Antworten: 63
Zugriffe: 461264

BASICODE in Java

Bei aller Begeisterung für BasiCode muss ich ehrlicherweise einräumen, dass die Programme recht langsam arbeiten. Ein Basic-Interpreter ist natürlich nicht fesselnd schnell — und hier werden zu allem Übel noch (eigentlich vorhandene) Befehle durch GOSUB-Aufrufe ersetzt …

Doch nun fällt dieser Nachteil weg: Michaels in Java geschriebener Interpreter arbeitet wirklich irrsinnig schnell! Anlässlich der Veröffentlichung von Version 0.12 https://github.com/mhaupt/basicode/releases/tag/v0.12 Anfang dieser Woche möchte ich das an zwei Programmen demonstrieren.

https://github.com/robhagemans/basicode ... vlucht.bc3 wurde, wie man den Informationen am Programm-Ende

Code: Alles auswählen

30000 REM RONDVLUCHT V1.0
30010 REM
30020 REM WEERGAVE VAN EEN
30030 REM VOORWERP OF GEBOUW
30040 REM IN PERSPECTIEF.
30050 REM
32000 REM GESCHREVEN DOOR
32010 REM
32020 REM HENK VAN DEELEN
32030 REM
32040 REM (C) HVD OKT 1989
32050 REM
32060 REM TROS-RADIO dd 900321




entnehmen kann, im Herbst 1989 fertiggestellt und im Frühjahr 1990 über den Rundfunk ausgesendet und schließlich auf die "BASICODE-3 Verzamelcassette" Nr. 7 (von insgesamt 9) übernommen.
RONDVLU1.ZIP
das erste "Rundflug"-Programm (in .BAS umbennen)
(8.65 KiB) 11988-mal heruntergeladen
Ein perspektivisch dargestellter Körper kann auf unterschiedlichste Weise gedreht, verschoben und in der Größe verändert werden.

Der Autor arbeitete an dem Programm weiter, doch BasiCode büßte rasant an Popularität ein, es gab keine Rundfunkausstrahlungen mehr, stattdessen kam das Internet auf und Henk konnte seine Fortschritte 1992 auf www.nostalgia8.nl präsentieren.

In der Zwischenzeit kann das Paket nur noch unter http://web.archive.org/web/201701031528 ... c3logo.zip gefunden werden. Als Sahnehäubchen enthält es ein Programm, das die Sprache LOGO simuliert, zumindest die Steuerung der "Schildkröte" zum Zeichnen von Linien. Allerdings muss man sich dafür erst an die niederländischen Befehle gewöhnen... vgl. https://www.robotrontechnik.de/bilder/U ... ld_0g7.png , http://www.robotrontechnik.de/bilder/Up ... ld_4w5.png und http://forum.system-cfg.com/viewtopic.p ... 12#p243712 .


Aus dem Paket, das (für die Joyce) hier bereits hier https://joyce.de/basicode/joyce/bc3logo.htm vorgestellt wurde, greife ich ANIMATIO.BC3
ANIMATION.zip
das Programm und drei Datensätze
(8.46 KiB) 12303-mal heruntergeladen
heraus. Einzelbilder werden hier zusammengestellt und als Film abgespielt. Mit mehrfachem Drücken von “-“ kann das Tempo wenigstens etwas gedrosselt werden (erwähnte ich schon das irrwitzige Tempo des Java-Interpreters :lol: ?), mit “P“ kann angehalten und eine Zwischenphase betrachtet werden und “E“ beendet das Programm. Zur Auswahl gibt es LOGOFL, RONDFL und ANIMAFL.


In einem Artikel von 1985 schätzte ein gewisser Bill Bolton, CP/M-Nutzer aus Australien, ein “… BASICODE was really an idea whose time had yet to come“. Diese Programme bestätigen es, sie waren ihrer Zeit deutlich voraus, sinnvoll nutzen konnte man sie mit damaliger Technik (Größe des Arbeitsspeichers, Geschwindigkeit des Prozessors) noch nicht.

Screenshots der beiden Programme
Screenshots der beiden Programme
ANIMATIE.png (23.07 KiB) 56104 mal betrachtet
von ein Thüringer
27.01.2025, 14:17
Forum: Programmierung
Thema: BASICODE in Java
Antworten: 63
Zugriffe: 461264

BASICODE in Java

Kurz vor Jahresende veröffentlichte Michael eine neue Version seines BasiCode-Interpreters in Java: https://github.com/mhaupt/basicode/releases/tag/v0.11 . Eines der Programme, die nun auch laufen, ist "Notenbalk", ein Programm, das wir auf der Diskette zum Klubtreffen 2020 haben. Mich begeistert es, weil es (bis auf Drucken und die Nutzung von acht Farben) alle Features der aktuellsten Version von BasiCode ausnutzt: die hochauflösende Grafik, das Nachladen von Daten und das Abspielen von Musik. Beim online-Browser von Rob Hagemans finden wir das Programm auch https://robhagemans.github.io/basicode/ ... enbalk.bc3 , die drei Beispielsdatensätze liegen aber nicht mit unter dem Reiter Programme, sondern können hier heruntergeladen werden: https://github.com/robhagemans/basicode ... omboot.dat https://github.com/robhagemans/basicode ... erkens.dat https://github.com/robhagemans/basicode ... Moskou.dat , ich habe sie hier
MUZDATA.zip
drei Beispielsdatensätze zum Programm
(945 Bytes) 11912-mal heruntergeladen
zusammengefasst.

vier Screenshots des Programms
vier Screenshots des Programms
NOTENBAL.png (27.01 KiB) 57681 mal betrachtet
Für die damalige Zeit ist es ein recht aufwendiges Projekt, erstaunlich, dass es auf den unterschiedlichsten Computern funktioniert. Im Java-Bascoder wollte es zunächst zwar nicht laufen - doch mit einiger Knobelei fanden wir das verursachende Problem heraus. Zu den für BasiCode zulässigen Befehlen (die also nicht durch ein GOSUB zeilennummer ersetzt werden müssen) zählt VAL(stringausdruck), also das Umwandeln einer Zeichenkette in eine Zahl. Beinhaltet die Zeichenkette nur Vorzeichen, Dezimalpunkt und Ziffern, gibt es keine Schwierigkeiten. Sind jedoch auch Buchstaben enthalten, reagieren die Interpreter unterschiedlich. Manche reagieren mit einer Errormeldung, andere wandeln wenigstens die Zeichen vor dem ersten Buchstaben um bzw. erzeugen den Wert 0, wenn schon an erster Stelle ein Buchstabe steht. In Zeile 5020 des Programms stand bisher IF NO$(N)="" THEN 5040. Ändern wir es so ab, wie rechts unten im Bild zu sehen ist, läuft es auch im Java-Bascoder.

Sind jemandem bei irgendwelchen Programmen andere Inkompatibilitäten untergekommen? Michael freut sich über solche Hinweise, sie helfen ihm, den Interpreter weiter zu perfektionieren.

Hier noch die nötigsten Bedienhinweise für nicht-Niederländer ;-) :

Im Titel-Screen (links oben) zweimal * drücken, nach dem ersten Mal werden vier leere Notenlinien gezeichnet, nach dem zweiten sehen wir das Menü (rechts unten). Hier wählen wir den Punkt 7 und geben den Namen (z.B. MUZDAT1) ein. Dann werden wieder die Notenlinien gezeichnet und die Noten usw. eingezeichnet. Mit S kann nun die Musik abgespielt werden, mit * wird ins Menü zurückgekehrt.
  • Übersetzung der Anleitung

    An den Anfang kannst du als Kennzeichnung ein # oder b schreiben und mit / und zwei Ziffern eine Taktangabe.

    Gib die Noten wie folgt ein: erst einen der Buchstaben ABCDEFGabcdefg - nach Änderung laut EDIT AHCDEFGahcdefg - (Höhe), danach ggf. ein # oder ein b (dann wird statt C-Dur G-Dur bzw. F-Dur verwendet), danach die Länge mit EINER Ziffer 1 2 4 8 oder 6 für eine 1/1, 1/2, 1/4, 1/8 oder 1/16 Note.

    Danach kann noch ein Punkt (Vergrößerung der Notenlänge um die Hälfte) oder ein M (= Taktstrich) eingegeben werden, sonst gib ein Leerzeichen ein. Ein + macht einen Bindebogen.

    Der CURSOR geht von allein an die nächste Position. Der Cursor kann auch mit den Cursortasten bewegt werden.

    Eine PAUSE wird mit einem R und einer Ziffer 1 2 4 8 6 gesetzt. Das M setzt einen Taktstrich.

    Das S lässt die Musik spielen und das T frischt die Zeichnung auf.

    Die Lautstärke der Musik kannst du mit V und einer Ziffer von 1 bis 7 ändern, sie gilt für alle danach eingegebenen Noten.

    MIT EINEM * ERHÄLTST DU DAS MENÜ MIT DEN ANWEISUNGEN FÜR DAS SPEICHERN UND LADEN DER MUSIK NACH ODER VON KASSETTE ODER DISKETTE.

    Mit W kannst du eine Note löschen, die du mit dem Cursor auswählst.

    Mit I kannst du Platz schaffen, um eine Note einzufügen und mit U kannst du eine Note löschen und alles, was danach in der Zeile steht, nach links aufrücken. So kannst du nachträglich die Musik noch bequem ändern.

Es können auch eigene Musikstücke eingegeben und auch gespeichert werden - hierfür gibt es mehrere Seiten Hinweise, wenn ganz am Anfang J, im Menü 1 oder im Screen mit dem Notenlinien H (bzw. B, siehe EDIT) eingegeben wird.


EDIT 14. Februar ‘25:. Mich hat ziemlich irritiert, dass das (weil niederländische) Programm “B“ verwendet, wo wir “H“ gewohnt sind. Abhilfe schaffen diese paar Zeilen:

Code: Alles auswählen

 1180 IF IN=66 THEN GOSUB 8120:IN=84
 1205 IF IN=72 THEN IN=66:IN$=CHR$(ASC(IN$)-6)
 8590 PRINT"DIT KOMT WEER ALS JE EEN B TIKT"
 8600 GOSUB 210:IF IN=66 THEN 8120
Sie vertauschen die Verwendung von B (jetzt Beschreibung) und H (vorher Hilfe).

EDIT 18. Februar '25: Nachdem ich die Benennung der Noten “eingedeutscht“ hatte, habe ich nun alle Bildschirmausgaben auf Deutsch umgestellt. Hier ist die sonst funktional gleiche Version:
NOTENB_D.ZIP
das Programm mit deutscher Bedienung (in .BAS umbennen)
(16.25 KiB) 12475-mal heruntergeladen

EDIT 17. März '25: Hier https://joyce.de/basicode/diesunddas/notenblatt.htm gibt es das Programm mit einem weiteren Extra: wenn das gewünschte Stück zu hohe Töne enthält, notiert man es eine Oktave tiefer und spielt es über die neue Funktion Korrektur höher ab. Dann stimmt zwar die Optik nicht, aber man erreicht auch Töne über dem g. Ebenso kann über die neue Funktion das Abspieltempo verändert werden.

Viel Spaß damit!
von ein Thüringer
21.10.2024, 17:21
Forum: Programmierung
Thema: Raytracing
Antworten: 10
Zugriffe: 238121

Re: Raytracing v3.0

Durch Variieren der x-Position der Kamera in Schritten der Größe 0.2 habe ich eine Serie
serie.png
(84.18 KiB) Noch nie heruntergeladen
von Bildern errechnen lassen. Man kann nun zwei davon nebeneinander 1) stellen (oder wie hier viewtopic.php?p=1015#p1015 erwähnt übereinander) und kann dann mit dem Schielblick die Szene plastisch sehen. Tipp: das Smartphone quer halten und das Bild auf Screenbreite ziehen ergibt ein annehmbares Resultat.

Danke an Bernd für dieses schöne Stück Software!


paar.png
paar.png (107.7 KiB) 45635 mal betrachtet
3dKugeln.zip
(481.86 KiB) 6434-mal heruntergeladen
1) links ein Bild von weiter links aus der Serie, rechts eins mehr oder weniger weiter rechts davon, am besten das unmittelbar benachbarte, sonst könnte das Betrachten zu anstrengend werden