[Thomson] Othello (TEO n°19)

Tout ce qui concerne le logiciel original et sa sauvegarde avec entre autre la régénération des disquettes ou autres supports physiques.

Modérateurs : Papy.G, fneck, Carl

Répondre
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

[Thomson] Othello (TEO n°19)

Message par Daniel »

Cette version d'Othello a été publiée dans TEO n°19.
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.

othello.png
othello.png (291.58 Kio) Consulté 3309 fois

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                           
Daniel
L'obstacle augmente mon ardeur.
jvernet
Messages : 2454
Inscription : 12 avr. 2007 10:59
Localisation : France 69
Contact :

Re: [Thomson] Othello (TEO n°19)

Message par jvernet »

Globalement, ça fonctionne, il y a un bug sur l'affichage des pièces noires avec un contour qui est décalé (voir copie d'écran). Et la détection de fin de partie est douteuse, voir ci dessous, les blancs n'avaient pas fini de jouer....
Il y a un TYPE MISMATCH ligne 5000 en fin de partie, aussi. A$ et pas AS. Il faut enlever le RUN "AUTO.BAT" d'ailleurs. Sinon, on perd les modifs...

Capture.PNG
Capture.PNG (48.81 Kio) Consulté 3262 fois
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Othello (TEO n°19)

Message par Daniel »

Merci pour le test !

J'avais aussi constaté l'annonce un peu rapide de la fin de partie, je crois que c'est un bug mais il n'est pas simple à corriger.
Je n'ai pas compris la raison du RUN"AUTO.BAT", d'autant plus que ce programme AUTO.BAT n'est mentionné nulle part.
Je vais corriger l'erreur d'OCR ligne 5000 et remplacer RUN"AUTO.BAT" par END.

Après je ne sais pas ce qu'il faut faire. Ces programmes sont tellement mal programmés et lents qu'on a envie de tout modifier. Faut-il le corriger ou le laisser dans son jus ? Pour l'instant je n'ai pas trop envie de perdre du temps sur un programme qui n'en vaut pas la peine.

J'ai remarqué aussi un truc curieux dans le damier en perspective. J'ai l'impression qu'il n'est pas plat. Le voyez-vous aussi bombé ?

dcmoto01.png
dcmoto01.png (2.28 Kio) Consulté 3253 fois
Daniel
L'obstacle augmente mon ardeur.
jvernet
Messages : 2454
Inscription : 12 avr. 2007 10:59
Localisation : France 69
Contact :

Re: [Thomson] Othello (TEO n°19)

Message par jvernet »

Oui, il y a un défaut de perspective, et de dessin aussi du bord. Et la méthode pour le dessiner est assez inefficace (il faudrait faire un grand tour, peindre d'un seul coup puis dessiner les dalles.
Le scan des TEO est dispo ?

Sur mes premiers tests réalisés dans DCMOTO en émulation TO9+, les couleurs ne sont pas bonnes (les pions sont rosâtres). Pas sûr de la version DCMOTO utilisée, qui peut dater....
Il faudrait aussi, soit utiliser la souris, soit le crayon optique pour jouer, avec le STICK c'est pas trop jouable....

L'algo de réflexion va de 500 à 599 et est TRES loin d'être efficace -si j'ai compris, il cherche à prendre un max de pions, ce qui n'est pas bon du tout? Et du coup il triche pour gagner, donc, parce que sur la partie précédente, il était battu.

Ce n'est jouable qu'en poussant DCMOTO à 150%, sinon c'est trop lent !

messieurs, à vos algos (CF Sudoku) pour faire mieux !
jvernet
Messages : 2454
Inscription : 12 avr. 2007 10:59
Localisation : France 69
Contact :

Re: [Thomson] Othello (TEO n°19)

Message par jvernet »

Il y a une erreur de syntaxe en 1620: un " qui remplace un * dans le dernier SC+2*S

Code : Tout sélectionner

1620 SC=VL(CS)-S:IFT>18THENSC=SC+2*S:IFPO<PJ-10THENSC=SC-2*S:SC=SC+2*S  
C'est avec le BASIC 128 sur TO9 que les couleurs ne vont pas:
Capture.PNG
Capture.PNG (39.03 Kio) Consulté 3233 fois
Dernière modification par jvernet le 30 nov. 2021 19:25, modifié 1 fois.
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Othello (TEO n°19)

Message par Daniel »

Il y a quelques scans de TEO ici --> http://dcmoto.free.fr/documentation/revues.html
La collection complète de serveur87 doit être disponible sur internet, mais avec la disparition progressive des anciens sites thomsonistes c'est de plus en plus difficile à trouver. S'il manque un numéro je peux le fournir, mais ce sont des scans d'époque pas très bons et incomplets.

Avec dcmoto il ne devrait pas y avoir de différence de couleur entre le TO8, le TO8D et le TO9+. Le TO9 est différent, ces couleurs bizarres sont peut-être normales, mais c'est étonnant car le BASIC devrait être à peu près compatible. C'est un sujet à creuser...

Je joue avec dcmoto à 8000 kHz (8 fois plus vite). C'est presque supportable, mais il faut de l'adresse pour jouer car les déplacements sont un peu rapides. Le temps de réflexion n'est pas négligeable pour autant.

Correction de trois autres erreurs d'OCR :

Code : Tout sélectionner

en 1050: 10*1    --> 10*I
en 1620: SC+2"S  --> SC+2^S
en 1660: DORED0  --> DOREDO
Nouvelle version avec toutes les corrections. C'est mieux, mais pas encore garanti à 100%.

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*I+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 IFNU(CS)<>VD THENS=0:GOTO 1550                              
1540 SF=-1:GOSUB 1700             
1550 IFS=0 THENNEXTCS:PS=PS+1:RETURN                           
1560 PLAY"L24D0":LOCATE12,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"L48DOREDOFAL24DOREFA":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:A$=INPUT$(1):CONSOLE0,24:CLS:END 
29999 ' DAMIER
30000 FOR X=1TO8:FORY=1TO8 
30010 GOSUB50:IF-(X MOD 2)THENZK1=1 ELSEZK1=0
30020 IF-(Y MOD 2)THENZK2=1 ELSEZK2=0
30030 ZK=ABS(ZK2-ZK1):COL=2-ZK 
30040 GOSUB 120:GOSUB70:PAINT(XB1,YB1),COL
30050 NEXTY,X
30060 X=1:BOXF(39,BAS)-(279,BAS+7),1:FORY=1TO8
30070 GOSUB50:IF-(Y MOD 2)THENBOXF(X1,BAS)-(X1+L1-1,BAS+4),2 ELSELINE(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                           
Daniel
L'obstacle augmente mon ardeur.
jvernet
Messages : 2454
Inscription : 12 avr. 2007 10:59
Localisation : France 69
Contact :

Re: [Thomson] Othello (TEO n°19)

Message par jvernet »

J'ai retrouvé dans mes Go d'archives et des docs glanées depuis des années les TEO 1 à 20, les Theophiles 1 à 13, les Microtom 1 à 10, au format PDF, au cas où.
Il en manque beaucoup sur https://www.abandonware-magazines.org/
Dernière modification par jvernet le 01 déc. 2021 22:44, modifié 1 fois.
jvernet
Messages : 2454
Inscription : 12 avr. 2007 10:59
Localisation : France 69
Contact :

Re: [Thomson] Othello (TEO n°19)

Message par jvernet »

Une version antérieure du même programme, pour CPC, avec quelques explications sur le fonctionnement de l'algo:

https://cpcrulez.fr/GamesTest/othello-j ... ategie.htm
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Othello (TEO n°19)

Message par Daniel »

C'est bien de pouvoir reconstituer l'histoire !
L'auteur de la version Thomson a utilisé l'algorithme de Jeux & Stratégie n°35 et a programmé l'interface utilisateur et le dessin du damier en perspective. Malheureusement il n'a réussi ni l'un ni l'autre : jeu pénible au joystick, erreur de perspective, couleur du fond contestable.
Le curseur ne devrait pas revenir dans l'angle avant chaque coup, il pourrait être sur une case jouable suggérée par le programme.
Il pourrait aussi sauter automatiquement les cases déjà occupées où il est interdit de jouer, et ne pas rafraîchir toute la colonne à chaque déplacement.

Un passage de l'article de la revue m'a fait pensé irrésistiblement à un membre du forum grand amateur de Thomson.
Ce n'est pas lui, mais c'est bien son style :wink:

extrait.png
extrait.png (44.34 Kio) Consulté 3122 fois
Daniel
L'obstacle augmente mon ardeur.
Zebulon
Messages : 2788
Inscription : 02 nov. 2020 14:03

Re: [Thomson] Othello (TEO n°19)

Message par Zebulon »

Oui merci à vous pour ce sujet. J'avais un peu joué à ce jeu durant mes longues heures de vol pour des missions en Asie orientale. Un collègue m'avait dit de tout faire pour ne jamais être le premier à poser un pion dans les quatre cases des quatre coins du plateau. Ce qui s'est effectivement avéré judicieux. Je n'imaginais pas une telle complexité pour évaluer une position.
jvernet
Messages : 2454
Inscription : 12 avr. 2007 10:59
Localisation : France 69
Contact :

Re: [Thomson] Othello (TEO n°19)

Message par jvernet »

La base est justement de forcer ton opposant à poser un pion dans une des 3 cases jouxtant un coins de manière à ce que, toi, tu puisse poser ton pion dans la case du coin. car ce coin est imprenable et contrôle les 2 bords adjacents !

La stratégie est plutôt, en début de jeu, de ne pas prendre beaucoup de pions, et de jouer au centre du plateau au plus possible. De manière à ce que toi, tu puisse toujours jouer (chercher à faire Passer le joueur adverse). Ne jamais jouer un coup qui va faire que toute les pions d'un coté soit de ta couleur, aussi. Sur la fin, privilégier au max les bords. Il faut aussi savoir parfois laisser les coins à l'opposant, parceque plus tard tu pourras poser un pion qu'il ne pourra plus retourner.

Je suis pas très clair....
Dernière modification par jvernet le 02 déc. 2021 11:33, modifié 1 fois.
Zebulon
Messages : 2788
Inscription : 02 nov. 2020 14:03

Re: [Thomson] Othello (TEO n°19)

Message par Zebulon »

Si si je vois. C'est un jeu qui a été assez démocratisé car il était sorti comme un "simple" jeu de société mais en fait je me rends compte qu'il est bien plus stratégique et tactique que je le pensais. :wink:
Répondre