PUISSANCE 4 Le programme comprend une partie Basic et une partie Assembleur The program has a Basic language part and a ASM part. BASIC : 10 CLS:GOSUB 6000 12 pv=0:pm=0:REM les points 15 DIM A(200) 20 SP=0:SJ=0:A=0:CU=0:DE=80 30 GR=140:E=INT(RAN#*3)+1 35 IF E=3 THEN E=0.5 40 GOSUB 1000 60 Q=42:G=0 62 FOR J=1 TO 7:A(J+90)=6:NEXT J 65 FOR I=1 TO 6:A(I+100)=7:NEXT I 70 FOR I=1 TO 6:FOR J=1 TO 7:A(I*9+J)=-1:NEXT J:NEXT I 75 FOR I=0 TO 7:A(I*9)=-2:A(I*9+8)=-2:NEXT I 80 FOR J=0 TO 8:A(J)=-2:A(63+J)=-2:NEXT J 90 IF FL=0 THEN ZJ=INT(RAN#*3)-1 100 IF FL=0 THEN FL=1 ELSE ZJ=(ZJ=1)+1 110 IF ZJ=1 THEN Z=1:GOTO 130 115 IF Z=0 THEN Z=2 120 J=4:GOTO 180 130 GOSUB 1100 140 J=CU+1 150 IF A(J+90)=0 THEN 130 160 A=J:Z=1:GOSUB 1500:IF G=1 THEN LOCATE 1,3:PRINT "Vous gagnez!";:GOSUB 500:PV=PV+1:GOTO 10 170 LOCATE 1,3:PRINT "Je reflechis"; 172 GOSUB 1600 175 LOCATE 1,3:PRINT "A vous ! "; 180 Z=0:GOSUB 1500:IF G=1 THEN LOCATE 1,3:PRINT "Je gagne! ";:PM=PM+1:GOSUB 500: GOTO 10 310 IF Q<>0 THEN 130 320 LOCATE 1,3:PRINT "Egalite !";:GOSUB 500:GOTO 10 500 REM ATTENTE TOUCHE 510 IF INKEY$="" THEN 500 520 RETURN 990 REM ---------------- 1000 REM GRILLE 1005 FOR NU=0 TO 6 1010 x1=DE+NU*5:y1=0:x2=DE+NU*5:y2=30:d=0:ee=19:GOSUB 5000 1020 x1=DE:y1=NU*5:x2=DE+35:y2=NU*5:GOSUB 5000 1030 NEXT NU 1040 x1=DE+35:y1=NU*5:x2=DE+35:y2=0:GOSUB 5000 1050 RETURN 1090 REM --------------- 1100 REM "SAISIE" 1105 GOSUB 1200 1110 FE$=INKEY$ :IF ASC(FE$)<>28 AND ASC(FE$)<>29 AND ASC(FE$)<>13 THEN 1110 1120 IF ASC(FE$)=28 THEN GOSUB 1210:CU=CU+1:IF CU>6 THEN CU=0 1130 IF ASC(FE$)=29 THEN GOSUB 1210:CU=CU-1:IF CU<0 THEN CU=6 1140 GOSUB 1200 1150 IF ASC(FE$)=13 THEN RETURN 1160 GOTO 1110 1190 REM --------------- 1200 REM "CURAFFI" 1205 DRAW (CU*5+DE,31)-(CU*5+DE+5,31):RETURN 1210 REM "CURCACH" 1215 DRAWC (CU*5+DE,31)-(CU*5+DE+5,31):RETURN 1290 REM --------------- 1300 REM "PION" 1310 GOSUB 1210 1320 CU=J-1:GOSUB 1200 1350 FOR NU=0 TO I-1 1352 x1=DE+CU*5+1:y1=NU*5+1:x2=x1+3:y2=y1+3:d=0:ee=20 1353 IF Z=1 THEN x1=x1+1:y1=y1+1:x2=x2-1:y2=y2-1 1355 REM dessin du pion 1360 GOSUB 5000 1365 REM effacement du pion 1370 IF NU>0 THEN d=1:y1=y1-5:y2=y2-5:GOSUB 5000 1380 NEXT NU 1385 LOCATE 20,3:PRINT "Dernier:";CU+1; 1390 RETURN 1490 REM --------------- 1500 REM "VERIF" 1505 I=A(J+90):GOSUB 1300:A(A(J+90)*9+J)=Z 1510 R=A(J+90):S=J:A(A(J+90)+100)=A(A(J+90)+100)-1:A(J+90)=A(J+90)-1:Q=Q-1 1520 IF Z=0 THEN RETURN 1530 M=0:O=0:N=4:GOSUB 2000:IF D=0 THEN G=0:RETURN 1540 G=1:RETURN 1590 REM --------------- 1600 REM "PC" 1605 N=4:S=1:O=2:M=45 1610 R=A(S+90):IF R=0 THEN 1640 1620 A(R*9+S)=0:GOSUB 2000:IF D=0 THEN A(R*9+S)=-1:GOTO 1640 1630 J=S:G=1:RETURN 1640 S=S+1:IF S<8 THEN 1610 1650 N=4:S=1 1660 R=A(S+90):IF R=0 THEN 1690 1670 A(R*9+S)=1:GOSUB 2000:IF D=0 THEN A(R*9+S)=-1:GOTO 1690 1680 J=S:G=0:RETURN 1690 S=S+1:IF S<8 THEN 1660 1700 FOR J=111 TO 117:A(J)=0:NEXT J:N=3:S=1 1710 R=A(S+90):IF R=0 THEN 1730 1720 A(R*9+S)=0:GOSUB 2000 1725 A(S+110)=D/E:A(R*9+S)=-1 1730 S=S+1:IF S<8 THEN 1710 1740 N=3:S=1 1750 R=A(S+90):IF R=0 THEN 1770 1760 A(R*9+S)=1:GOSUB 2000:A(S+110)=A(S+110)+D*E:A(R*9+S)=-1 1770 S=S+1:IF S<8 THEN 1750 1780 N=3:S=1 1790 R=A(S+90):IF R<2 THEN 1840 1800 A(R*9+S)=0:R=R-1:A(R*9+S)=1:GOSUB 2000:IF D=0 THEN 1830 1810 A(S+110)=-D 1830 A(R*9+S)=-1:R=R+1:A(R*9+S)=-1 1840 S=S+1:IF S<8 THEN 1790 1850 K=-50:L=0:FOR J=111TO 117:IF A(J)>K THEN K=A(J):L=J-110 1860 NEXT J:IF A(L+90)=0 THEN A(L+110)=-60:GOTO 1850 1870 J=INT(RAN#*8):IF A(J+90)=0 THEN 1870 1880 IF A(J+110)=K THEN RETURN 1890 J=L:RETURN 1990 REM --------------- 2000 REM "CALCUL" 2005 Z=A(R*9+S):IF A(S+90)>=5 THEN D=0:GOTO 2050 2010 I=R+1:J=S:P=1 2020 IF A(I*9+J)=Z THEN P=P+1:I=I+1:GOTO 2020 2030 IF P=6 THEN 2120 2060 I=R:V=1 2070 J=V+S:P=1 2080 IF A(I*9+J)=Z THEN P=P+1:J=J+V:GOTO 2080 2090 IF V<>-1 THEN V=-1:U=P:GOTO 2070 2100 P=P+U-1:IF P-1 THEN V=-1:W=-W:U=P:GOTO 2130 2160 P=P+U-1:IF P1 THEN V=1:GOTO 2130 2190 RETURN 5000 REM dessin assembleur 5010 POKE &H2003,x1 5020 POKE &H2004,y1 5030 POKE &H2005,x2 5040 POKE &H2006,y2 5050 POKE &H2007,d 5060 POKE &H2008,ee 5070 CALL &H2000 5080 RETURN 6000 REM INITIALISATIONS 6010 LOCATE 1,1:PRINT "Puissance 4" 6020 x1=2:y1=6:x2=75:y2=16:d=0:ee=20:GOSUB 5000 6030 LOCATE 20,0:PRINT "Points:" 6040 LOCATE 20,1:PRINT "-Vous :";PV 6050 LOCATE 20,2:PRINT "-Moi :";PM 6090 RETURN Assembleur : ORG 2000H JMP START XD DB 0 YD DB 0 XF DB 0 YF DB 0 D DB 0 E DB 0 START: MOV BL,XD MOV BH,YD MOV CL,XF MOV CH,YF MOV DL,D MOV AH,E INT 41H IRET