Après OCR, application du correctif publié dans TEO n°20, correction manuelle d'erreurs d'OCR, correction manuelle de quelques fautes d'orthographe, de ponctuation et de grammaire, on arrive à la version ci-dessous. Il reste probablement des erreurs, à vous de les découvrir et de les signaler avant l'ajout du programme au site dcmoto.
Code : Tout sélectionner
5 CLEAR 5000:DIMT%(5000):DIMNU(99),VL(99),DR(8),AN(99),VR(99)
6 CO=15/16:BAS=170:DAM=2
10 PALETTE0,541:PALETTE1,1245:PALETTE2,0:PALETTE3,4095
30 CONSOLE0,24:CLS:CONSOLE,,,,2:SCREEN,,0:LOCATE,,0:ON DAM GOSUB 30000,30100
39 LOCATE,,0:GET(0,0)-(39,24),T%(5000):LOCATE17,12:COLOR2,0:ATTRBO,1:PRINT"OTHELLO":LOCATE0,24:ATTRB0,0:PRINT"(c) DRG88";:LOCATE8,22:COLOR,3:PRINT"VOULEZ-VOUS LES REGLES ?"
40 A$=INPUT$(1): IF A$="N" OR A$="n" THEN 1000
41 GOTO 600
49 'TOUR
50 L1=30*((CO)^(X-1)):X1=159+(Y-5)*L1: L2=L1*CO:Y1=BAS-(X-1)*L1: X2=159+(Y-5)*L2:Y2=BAS-X*L2
60 RETURN
69 'CASE
70 CXI1=Y2-Y1: DTI1=X1*CXI1:DTI2=-X2*CXI1 :CYI1=X2+L2-X1:CYI1=-CYI1 :TI1=DTI1+Y1*CYI1:CXI2=X1+L1-X2 :CXI2=-CXI2:TI2=DTI2+Y2*CXI2
80 DET=CXI1*(CXI2+CYI1)
90 SUP1=TI1*CXI2-TI2*CYI1:SUP2=CXI1*TI2+CXI1*TI1
100 XB1=SUP1/DET:YB1=SUP2/DET
110 RETURN
120 LINE(X1,Y1)-(X1+L1,Y1),COL:LINE-(X2+L2,Y2),COL:LINE-(X2,Y2),COL:LINE-(X1,Y1),COL
130 RETURN
139 'PIONS
140 RH=10*((CO)^(X-1)) :RV=RH*CO:RETURN
149 'BASE
150 CIRCLEF(XP,YP)RH,RV,COL :RETURN
159 'DAMES
160 GOSUB140 :GOSUB 50 :GOSUB 70:XP=XB1 :YP=YB1
170 IF -(X MOD 2) THEN ZK1=1 ELSE ZK1=0
180 IF -(Y MOD 2) THEN ZK2=1 ELSE ZK2=0
190 CL=0 :ZK=-1*ABS(ZK2-ZK1) :IF ZK AND COL=3 THEN CL=2 ELSE IF NOT Z1( AND COL=2 THEN CL=3
195 IF CL<>0 THEN SWAP CL,COL :GOSUB 150 :SWAP CL,COL ELSE GOSUB 150
200 FOR YP=YB1-1 TO YB1-2 STEP -1:GOSUB 150 :NEXT YP:CIRCLE(XP,YP)RH,RV,5-COL :RETURN
209 'OTHELLO/REVERSI
210 GOSUB140 :GOSUB 50 :GOSUB70:COL=5-COL
220 XP=XB1 :YP=YB1 :GOSUB 150:YP=YP-1 :GOSUB150 :COL=5-COL:YP=YP-1 :GOSUB150 :YP=YP-1:GOSUB150:CIRCLE(XP,YP)RH,RV,5-COL;0,3.14159:RETURN
229 'POINTE CASE
230 GOSUB 50 :GOTO 120
239 'REGENERE CASE
240 XL=X :YL=Y
250 CS=10*Y+X :IF NU(CS)=0 THEN 266
260 COL=4-NU(CS) :GOSUB 210 :X=X-1:IF X<1 THEN 270
265 GOTO 250
266 IF X=XL THEN X=X-1 :IF X>0 THEN 250
270 RETURN
300 FOR Y=1 TO 8
305 CHG=0
310 FOR X=8 TO 1 STEP -1
315 CS=10*Y+X : IF AN(CS) THEN CHG=-1
320 IF X<=4 AND NU(CS)=0 THEN CHG=0
325 IF NU(CS)=0 THEN CHG=0 ELSE IF CHG THEN COL=4-NU(CS) :GOSUB 210
330 AN(CS)=0:NEXTX,Y
340 IFNU(11)=M THENVL(12)=12:IFNU(21)=M ORNU(12)=M THENVL(22)=10ELSEIFNU(22)=J THENVL(33)=15
341 IFNU(18)=M THENVL(17)=12:IFNU(17)=M ORNU(28)=M THENVL(27)=10ELSEIFNU(27)=J THENVL(36)=15
342 IFNU(88)=M THENVL(87)=12:IFNU(87)=M ORNU(78)=M THENVL(77)=10ELSEIFNU(77)=J THENVL(66)=15
343 IFNU(81)=M THENVL(82)=12:IFNU(82)=M ORNU(71)=M THENVL(72)=10ELSEIFNU(72)=J THENVL(63)=15
344 RETURN
400 X=L:Y=C:GOSUB140:GOSUB50:GOSUB70:XP=XB1:YP=YB1
410 FORYP=YB1 TOYB1-2 STEP-1:GOSUB150:NEXTYP:CIRCLE(XP,YP)RH,RV,3
420 X=L:Y=C
430 CS=10*Y+X:IFNU(CS)=0THEN460
435 IFX=L THEN460
439 COL=4-NU(CS):IFAN(CS)THENCOL=5-COL
440 GOSUB210:X=X-1:IFX<1THEN470
450 GOTO430
460 IFX=L THENX=X-1:IFX>0THEN 430
470 RETURN
472 ' Pour Modifier L'Algorithme
473 'De Reflexion De L'Ordinateur :
474 '
475 ' Modifiez Les Lignes 500 a 599
476 '
477 ' Pour Compter Les Pions Pris
478 ' CS=6NUMERO CASEe :SF=-1:GOSUB 1700
479 ' Recuperation Dans S
480 '
481 ' Dans VR( ) Simulation Du Coup
482 ' Si CM=-1 ( LIGNE 1775 )
483 '
484 ' Dans AN() Indication D'une piece changee Si = -1
485 '
486 ' A Vous De Donner Du Genie A Votre TO
500 FOR ZI=0 TO 99 :VR(ZI)=NU(ZI):AN(ZI)=0 :NEXT ZI :'PREPARATION DU DAMIER POUR SIMULATION
501 SSV=S :SF=-1 :CM=-1 :GOSUB1700:'SIMULATION AVEC SAUVEGARDE DE S DANS SSV
502 KH=0 :MEMCS=CS :NSS=S:'SAUVEGARDE DU NOMBRE DE PIONS JOUEURS PRIS
503 FORSICS=11TO88:IFVR(SICS)<>J THEN508:'SI LA CASE NE CONTIENT PAS UN PION JOUEUR
504 SF=-1:CM=0:SAN=0:'CONTIENDRA -1 SI UN DES PIONS PRIS SERVIRA DE TREMPLEIN A UNE PRISE JOUEUR
505 CS=SICS:GOSUB1700:IFSAN=0THEN508:'SI PAS DE TREMPLIN ALORS CONTINUE
506 ' SINON
507 IFS>(NSS*2+5)THENKH=-1:'SI PIONS PRIS PAR ADVERSAIRE SUPERIEUR A PRISE*2+5 - ON PEUT CHANGER POUR MODIFIER LA REACTION- ALORS PAS FAIRE LE COUPS (KH=-1)
508 NEXTSICS:S=SSV:CS=MEMCS
599 RETURN
600 COLOR3,0:CLS:PRINT"Le jeu se déroule sur un damier 8 x 8."
610 PRINT"Les pions utilisés sont bicolores : noirs d'un côté, blancs de l'autre."
620 PRINT:PRINT"L'un des deux joueurs posera des pions côté noir, l'autre côté blanc."
630 PRINT:PRINT"A son tour un joueur doit poser un pion à sa couleur prenant en tenaille avec l'un de ses pions un ou plusieurs pions adverses. Ces pions sont retournés."
640 PRINT:PRINT"Si un joueur ne peut retourner de pions adverses, il passe son tour."
650 PRINT:PRINT"Quand le damier est plein, ou quand aucun joueur ne peut plus jouer, le gagnant est celui qui possède le plus de pions à sa couleur."
660 PRINT:PRINT"APPUYER UNE TOUCHE POUR JOUER"
670 A$=INPUT$(1):CLS:GOTO1000
800 ONCOM GOTO802,803,804,805,806,807,808,809
801 GOTO820
802 XD=XD+1:GOTO 810
803 XD=XD+1:YD=YD+1:GOTO 810
804 YD=YD+1:GOTO810
805 YD=YD+1:XD=XD-1:GOTO810
806 XD=XD-1:GOTO810
807 YD=YD-1:XD=XD-1:GOTO810
808 YD=YD-1:GOTO810
809 XD=XD+1:YD=YD-1
810 IFXD<1ORXD>8ORYD<1ORYD>8THENXD=XG:YD=YG
820 RETURN
998 END
999 'JEU
1000 CONSOLE0,24
1010 CLS:'INIT
1020 PUT(0,0),T%(5000)
1030 NR=1:BL=2:VD=0:CB=-1
1040 FORI=0TO99:NU(I)=VD:NEXT I
1050 FORI=0TO9:NU(I)=CB:NU(10*I)=CB:NU(10*1+9)=CB:NU(90+I)=CB:NEXT I
1055 NU(44)=BL:NU(55)=BL:NU(45)=NR:NU(54)=NR
1060 PO=2:PJ=2:PS=0:T=1
1070 FORI=1TO8:READ DR(I):NEXT I
1080 DATA-1,-11,-10,-9,1,11,10,9
1090 FORI=1TO99:READVL(I):NEXT I
1100 DATA0,0,0,0,0,0,0,0,0,0
1110 DATA0,40,3,15,10,10,15,3,40,0
1120 DATA0,3,0,9,12,12,9,0,3,0
1130 DATA0,15,9,11,15,15,11,9,15,0
1140 DATA0,10,12,15,18,18,15,12,10,0
1150 DATA0,10,12,15,18,18,15,12,10,0
1160 DATA0,15,9,11,15,15,11,9,15,0
1170 DATA0,3,0,9,12,12,9,0,3,0
1180 DATA0,40,3,15,10,10,15,3,40,0
1190 DATA0,0,0,0,0,0,0,0,0,0
1195 FORY=1TO8:FORX=8TO1STEP-1:IFNU(10*Y+X)<>0THENCOL=4-NU(10*Y+X):GOSUB 210
1196 NEXTX,Y:BOXF(0,0)-(55,23),1:BOX(0,0)-(55,23),2:LOCATE1,1:ATTRB0,0:COLOR0,1:PRINT"P";:COLOR2,1:PRINT"ASSE"
1200 IM=T%(5000):GET(13,12)-(27,20),T%(IM):BOXF(13,12)-(27,20)127,2:BOX(104,96)-(223,167),3:COLOR0,2:LOCATE14,13:PRINT"VOULEZ-VOUS";:LOCATE14,15:PRINT"LES NOIRS";:LOCATE14,19:PRINT"LES BLANCS":LOCATE19,17:PRINT"OU":A$="*":CP=1
1210 HX=19-(CP-1)*4:LOCATE26,HX:PRINTA$
1220 COM=STICK(0):IFCOM=0THENCOM=STICK(1):IFCOM=0THEN1240
1230 IF(COM=1ANDCP=1)OR(COM=5ANDCP=2)THENLOCATE26,HX:PRINT" ";:CP=3-CP
1240 BT=STRIG(0)ORSTRIG(1):IFBT THEN1260
1250 GOTO1210
1260 PUT(13,12),T%(IM)
1270 M=NR:J=BL:IFCP=1THENSWAPM,J:COL=3ELSECOL=2
1275 CIRCLEF(280,10)7,7,COL:CIRCLE(280,10)7,7,5-COL:LOCATE18,1:COLOR5-COL,COL:PRINT"VOUS AVEZ LES"
1280 IFJ=NR THEN1310
1290 GOSUB1570:GOSUB300
1300 IFPS=2 ORPJ=0 ORT=61THEN1330
1310 GOSUB1380:IF NOT VPAS THENCOL=0:GOSUB400:GOSUB300ELSEGOSUB300
1320 IFPS<2 ANDPO>0 ANDT<61THEN1290
1330 LOCATE0,23:COLOR2,0:PRINT"VOUS AVEZ";PJ;"PIONS,"
1340 LOCATE 20,23:PRINT"J'AI";PO;"PIONS.";
1350 IFPJ>PO THENCOLOR2,0:ATTRB1,1:LOCATE2,5:PRINT"VOUS AVEZ GAGNE !":GOTO 5000
1360 IFPJ<PO THENCOLOR2,0:ATTRB1,1:LOCATE8,5:PRINT"J'AI GAGNE !":GOTO 5000
1370 LOCATE8,5:ATTRB0,1:COLOR3,2:PRINT"NOUS SOMMES EX-AEQUOS !":GOTO 5000
1380 AD=M:TR=J
1390 LOCATE2,23:COLOR2,0:PRINT"A VOUS DE JOUER":XG=1:YG=1:COL=0:X=XG:Y=YG:GOSUB230:GOSUB240
1400 COM=STICK(0):BT=STRIG(0)ORSTRIG(1):IFCOM=0THENCOM=STICK(1)
1401 IFCOM=0ANDBT THEN1450
1405 R$=INKEY$:IFR$="P"ORR$="p"THEN1441
1410 IFCOM=0THEN1400
1420 XD=XG:YD=YG:GOSUB800:IFYD=YG ANDXG=XD THEN1400
1430 COL=2:X=XG:Y=YG:GOSUB230:GOSUB240:X=XD:Y=YD:COL=0:GOSUB230:GOSUB240:XG=XD:YG=YD
1440 GOTO1400
1441 X=XG:Y=YG:COL=2:GOSUB230:GOSUB240:VPAS=-1:GOTO1520
1450 CS=10*YG+XG:IFNU(CS)<>0THENPLAY"L24DOL3DOREDOFA":GOTO1400
1455 COL=2:X=XG:Y=YG:GOSUB230:GOSUB240
1460 C=YG:L=XG:CS=10*C+L:IFNU(CS)<>VD THENPLAY"L24SOL5REFALA":COL=0:X=XG:Y=YG:GOSUB230:GOSUB240:GOTO1400
1470 SF=-1:GOSUB1700
1480 IFS=0THENPLAY"L24SOL5REFALA":COL=0:X=XG:Y=YG:GOSUB230:GOSUB240:GOTO1400
1490 SF=1:GOSUB 1700
1500 PJ=PJ+S+1:PO=PO-S:T=T+1:PS=0
1510 RETURN
1520 FOR CS=11 TO 88
1530 IF NU(CS)<>VD THEN S=0 :GOTO 1550
1540 SF=-1 :GOSUB 1700
1550 IF S=0 THEN NEXT CS :PS=PS+1 :RETURN
1560 PLAY"L24D0" :LOCATE 12,23 :COLOR0,3 :VPAS=0 :PRINT"VOUS NE POUVEZ PAS PASSER !" :GOTO1390
1565 ' * REFLEX COMPUT UNTIL NEXT RETURN !!
1570 AD=J:TR=M:B=-100:BOXF(0,182)-(319,199),0:LOCATE2,23:COLOR 2,0:PRINT"A MOI DE JOUER":DBF=-1
1580 FORCS=11TO88
1590 IFNU(CS)<>VD THEN1650
1600 SF=-1:GOSUB 1700
1610 IFS=0THEN1650
1620 SC=VL(CS)-S:IFT>18THENSC=SC+2*S:IFPO<PJ-10THENSC=SC-2*S:SC=SC+2"S
1621 IFT<19THENIFPJ-PO>PO THENSC=SC+2*S
1622 KH=0:IFDBF THENGOSUB500:IFKH ANDSC<14THENSC=-100
1630 IFSC<=B THEN1650
1640 B=SC:MC=CS
1650 NEXTCS
1655 IFDBF ANDB=-100THENDBF=0:GOTO1580
1660 IFB=-100THENLOCATE17,23:PRINT"JE PASSE !":PLAY"L48DORED0FAL24DOREFA":BOXF(0,182)-(319,199),0:PS=PS+1:RETURN
1670 FORZI=0TO99:AN(ZI)=0:NEXTZI:C=INT(MC/10):L=MC-10*C:PLAY"L48O5DOL12O4RE":COL=0:GOSUB400
1680 SF=1:CS=MC:GOSUB1700
1690 PO=PO+S+1:PJ=PJ-S:PS=0:T=T+1:BOXF(0,182)-(319,199),0:RETURN
1700 S=0:FORK=1TO8
1710 D=DR(K):CC=CS+D:S1=0
1720 IFNU(CC)<>AD THEN1780
1725 IFAN(CC)=-1THENSAN=-1
1730 S1=S1+1:CC=CC+D
1740 IFNU(CC)=AD THEN1730
1750 IFNU(CC)<>TR THEN1780
1760 S=S+S1
1770 IFSF=1THENCC=CS:FORK1=0TOS1:NU(CC)=TR:AN(CC)=-1:CC=CC+D:NEXTK1
1772 IFSF=-1ANDCM=0THENCC=CS:FORK1=0TOS1:AN(CC)=-1:CC=CC+D:NEXTK1
1775 IFCM THENCC=CS:FORK1=0TOS1:VR(CC)=TR:AN(CC)=-1:CC=CC+D:NEXTK1
1780 NEXTK:RETURN
5000 ATTRB0,0 :AS=INPUT$(1):CONSOLE0,24 :CLS :RUN"AUTO.BAT"
29999 ' DAMIER
30000 FOR X=1 TO 8 :FOR Y=1 TO 8
30010 GOSUB 50 :IF -(X MOD 2) THEN ZK1=1 ELSE ZK1=0
30020 IF -(Y MOD 2) THEN ZK2=1 ELSE ZK2=0
30030 ZK=ABS(ZK2-ZK1) :COL=2-ZK
30040 GOSUB 120 :GOSUB70 :PAINT(XB1,YB1),COL
30050 NEXT Y,X
30060 X=1:BOXF(39,BAS)-(279,BAS+7),1:FORY= 1 TO 8
30070 GOSUB50:IF -(Y MOD 2) THEN BOXF(X1,BAS)-(X1+L1-1,BAS+4),2 ELSE LINE(X1,BAS+4)-(X1+L1,BAS+4),2:LINE(X1+1,BAS)-(X1+L1-1,BAS),2:LINE(X1+1,BAS)-(X1+L1,BAS),2
30080 NEXT Y
30090 RETURN
30099 'AIRE DE JEU
30100 FORX=1TO8:FORY=1TO8
30110 GOSUB50:COL=2:GOSUB120:COL=1:GOSUB70:PAINT(XB1,YB1),COL
30120 NEXTY,X
30130 X=1:BOXF(39,BAS)-(279,BAS+7),1:FORY=1TO8
30140 GOSUB50:LINE(X1,BAS+4)-(X1+L1,BAS+4),2:LINE-(X1+L1,BAS+1),2:LINE(X1+1,BAS)-(X1+L1-1,BAS),2:LINE(X1+1,BAS)-(X1+L1-1,BAS),2
30150 NEXTY:LINE(39,BAS+1)-(39,BAS+4),2
30160 RETURN