PAUSE 1 ' Sous XP vaut mieux avec les chaines de caractères CMD$ = _dosCmd$ PAUSE 1 CMD$ = ZTRIM$(CMD$) PAUSE 1 CMD$ = UCASE$(CMD$) Version$ = "Puissance 4 Version 2.2006" ficstat$ = "statv2.dat" ficini$ = "puiss4v2.ini" scrx% = _X scry% = _Y Ecriture% = TRUE Humain% = 1 Ordi% = 2 AFFSTAT% = TRUE'FALSE ' Afficher le fichier stat en dessous MFP% = TRUE ' Message en fin de partie Player1% = Humain% 'Player1% = Ordi% Player2% = Ordi% 'Player2% = Humain% 'Afficher% = TRUE IF INSTR(CMD$,"-DEBUG") > 0 Afficher% = TRUE ELSE Afficher% = FALSE ENDIF lireINI OPENW #1,0,0,scrx%,scry%,0 DIM M%(100,4) DIM m$(100) DIM CS%(7) ' coups sélectionnés pour @coup() DIM jx%(42) DIM T%(7,6),TS%(7,6) DIM Cj$(42) ' états + Coups joués DIM PR%(42) ' Pseudos aléatoire coups FOR i% = 0 TO 42 ' PR%(i%) = RAND(6) NEXT i% DIM C%(95,6) DIM NumComb%(2,2,2,2,2,2) RESTORE CombCol ARRAYFILL NumComb%(),-1 FOR i% = 0 TO 94 READ a$ c1% = VAL(MID$(a$,1,1)) c2% = VAL(MID$(a$,2,1)) c3% = VAL(MID$(a$,3,1)) c4% = VAL(MID$(a$,4,1)) c5% = VAL(MID$(a$,5,1)) c6% = VAL(MID$(a$,6,1)) NumComb%(c6%,c5%,c4%,c3%,c2%,c1%) = i% FOR y% = 6 DOWNTO 1 C%(i%,7 - y%) = VAL(MID$(a$,y%,1)) NEXT y% NEXT i% CombCol: 'TOTO: DATA 000000 DATA 000001,000011,002111,012111,112111,212111,022111,122111,222111,000211,001211,011211 DATA 111211,211211,021211,121211,221211,002211,012211,112211,212211,122211,000021,000121 DATA 001121,211121,021121,121121,221121,002121,012121,112121,212121,022121,122121,222121 DATA 000221,001221,011221,111221,211221,021221,121221,221221,012221,112221,212221,000002 DATA 000012,000112,021112,121112,221112,002112,012112,112112,212112,022112,122112,222112 DATA 000212,001212,011212,111212,211212,021212,121212,221212,002212,012212,112212,212212 DATA 122212,000022,000122,001122,211122,021122,121122,221122,002122,012122,112122,212122 DATA 022122,122122,222122,001222,011222,111222,211222,021222,121222,221222 'PUT afx%,afy%,GH%(0,1),SRCPAINT 'PUT afx%,afy%,GH%(0,0),SRCAND creationgraphiques 'Test 'Testaftab main 'DO 'CLS 0 'JouerPartie 'INC nparties% 'LOOP UNTIL MENU(1) = 4 bmpfree sauverINI CLOSEW #1 'RUN PROCEDURE JouerPartie idebug% = 0 TT 1 Partie$ = "" player% = 1 StartPlayer% = player% jx% = 0 posjx% = CPX1% + TC% * jx% newposjx%=posjx% ncj% = 0 ' nombre de coups joué ARRAYFILL T%(),0 etat$ = @EtatActuel$ SETDC LogicalDC% AFTAB ~BitBlt(_DC(1),0,0,scrx%,scry%,LogicalDC%,0,0,SRCCOPY) DO TT 2 VSYNC PEEKEVENT IF _Mess = WM_PAINT SETDC LogicalDC% TT 20 AFTAB TT 201 ~BitBlt(_DC(1),0,0,scrx%,scry%,LogicalDC%,0,0,SRCCOPY) TT 21 ' SETDC _DC(1) 'AFTAB ENDIF TT 3 IF (player%=1 AND Player1%=Humain%) OR (player%=2 AND Player2%=Humain%) TT 34 mx1% = mx%,my1% = my% ' IF MENU(1) = 30 IF MENU(7) = 1 MOUSE mx%,my%,mk% ' mx% = MENU(2) ' my% = MENU(3) ENDIF 'ENDIF jx1% = jx% jx% = MAX(0,MIN(6,DIV(MAX(CPX1%,MIN(CPX1% + 7 * TC%,mx%)) - CPX1%,TC%))) ' testhumain TT 4 ELSE ' INC toto% ' SETDC _DC(1) TT 45 ' TEXT 0,20,toto% IF ncj% < 2 jx% = MAX(0,MIN(6,RAND(7))) mk% = 1 ELSE ' IF ncj% = 2 OR ncj% = 4 AND player% = 1 ' jx% = 0 ' mk% = 1 ' ELSE Ordi ENDIF 'ENDIF ' TEXT 100,20,"mk%=" + STR$(mk%) IF Player1% = Humain% OR Player2% = Humain% PAUSE 2 ENDIF TT 5 ENDIF IF jx% <> jx1% THEN newposjx% = CPX1% + TC% * jx% IF mk%=1 DO MOUSE mx%,my%,mk% LOOP UNTIL mk% = 0 ' SETDC _DC(1) ' TEXT 0,30,"Mk%=1" IF npoo% > 1 posjx% = newposjx% ENDIF TT 6 WHILE posjx% <> newposjx% p% = MAX(-20,MIN(20,( newposjx% - posjx%) / 3)) IF p% = 0 IF posjx% < newposjx% INC posjx% ELSE DEC posjx% ENDIF ELSE posjx% = posjx% + p% ENDIF TT 65 SETDC LogicalDC% DEFFILL 0 RGBCOLOR 0 PBOX CPX1%,30,CPX1% + 7 * TC%,PRED(CPY1%) PUT posjx%,CPY1% - TC%,JM%,SRCPAINT IF player%=1 PUT posjx%,CPY1% - TC%,JBMP1%,SRCAND ELSE PUT posjx%,CPY1% - TC%,JBMP2%,SRCAND ENDIF ~BitBlt(_DC(1),CPX1%,0,CPX1% + 7 * TC%,CPY1%,LogicalDC%,CPX1%,0,SRCCOPY) WEND ' ALERT 1,"Debut " + STR$(jx%),1,"ok",rien% v% = @Descente_jeton(jx%) ' ALERT 1,"Fin",1,"ok",rien% TT 7 IF v% = TRUE ' si il y a eu une descente de jeton ! SETDC LogicalDC% AFTAB ~BitBlt(_DC(1),0,0,scrx%,scry%,LogicalDC%,0,0,SRCCOPY) TT 70 ' Affstat ' SETDC _DC(1) ' FOR x% = 0 TO 6 ' RGBCOLOR 1200 ' GRAPHMODE ,OPAQUE ' TEXT x% * 35,0, STR$(@NumComb(x% + 1)) ' NEXT x% ' AFTAB player%=3-player% INC ncj% jx%(ncj%) = jx% Cj$(ncj%) = etat$ + STR$(jx%) etat$ = @EtatActuel$ Partie$ = Partie$ + CHR$(65 + jx%) 'ALERT 1,Partie$,1,"ok",rien% IF @Verif4(1) = TRUE SETDC _DC(1) AFTAB gagnant% = 1 messagegagnant 1 TT 71 INC NG1% IF Ecriture% = TRUE ' OPEN "a",#1,"parties.dat" ' ? #1,Partie$ + " " + STR$(gagnant%) ' CLOSE #1 MAJstat gagnant% ENDIF EXIT IF TRUE ELSE IF @Verif4(2) = TRUE SETDC _DC(1) AFTAB TT 72 gagnant% = 2 messagegagnant 2 INC NG2% IF Ecriture% = TRUE ' OPEN "a",#1,"parties.dat" ' ? #1,Partie$ + " " + STR$(gagnant%) ' CLOSE #1 MAJstat gagnant% ENDIF EXIT IF TRUE ELSE IF @MatchNul = TRUE INC NG0% messagegagnant 0 EXIT IF TRUE ENDIF ENDIF ENDIF TT 9 IF posjx% <> newposjx% p% = MAX(-10,MIN(10,( newposjx% - posjx%) / 5)) IF p% = 0 IF posjx% < newposjx% INC posjx% ELSE DEC posjx% ENDIF ELSE posjx% = posjx% + p% ENDIF ENDIF TT 10 SETDC LogicalDC% DEFFILL 0 RGBCOLOR 0 PBOX CPX1%,30,CPX1% + 7 * TC%,PRED(CPY1%) PUT posjx%,CPY1% - TC%,JM%,SRCPAINT IF player%=1 PUT posjx%,CPY1% - TC%,JBMP1%,SRCAND ELSE PUT posjx%,CPY1% - TC%,JBMP2%,SRCAND ENDIF ~BitBlt(_DC(1),CPX1%,0,CPX1% + 7 * TC%,CPY1%,LogicalDC%,CPX1%,0,SRCCOPY) ' IF TIMER - t1 > 500 ' t1 = TIMER 'ENDIF TT 11 IF MENU(1) = 1 R% = GetAsyncKeyState(27) IF BTST(R%,15) = TRUE Xalert Version$,"Quitter la partie ?","Oui|Non",R% IF R% = 1 npoo% = 1 EXIT IF TRUE ENDIF ELSE R% = 0 ENDIF ENDIF IF MENU(7) = 1 IF MENU(4) = 2 Xalert Version$,"Quitter la partie ?","Oui|Non",R% IF R% = 1 npoo% = 1 EXIT IF TRUE ENDIF ENDIF ENDIF LOOP 'UNTIL MENU(1) = 4 'ALERT 1,Partie$,1,"ok",rien% PAUSE 1 SETDC _DC(1) CLOSE #2 RETURN FUNCTION MatchNul LOCAL j%,R% R% = TRUE FOR j% = 1 TO 7 IF T%(j%,6) = 0 R% = FALSE j% = 7 ENDIF NEXT j% RETURN R% ENDFUNC PROCEDURE messagegagnant(p%) LOCAL c$ IF p% = 1 c$ = "rouges" ELSE c$ = "jaunes" ENDIF IF MFP% = TRUE IF p% = 0 Xalert "Fin de partie","Match nul !","ok",rien% ELSE IF Player1% = Ordi% AND Player2% = Ordi% Xalert "Fin de partie","Les " + c$ + " gagnent !|J'ai gagné contre moi même!" ,"ok",rien% ELSE IF Player1% = Player2% Xalert "Fin de partie","Bravo au joueur " + STR$(p%) + " (" + c$ + ")!|Et désolé pour l'autre...","ok",rien% ELSE IF (p% = 1 AND Player1% = Ordi%) OR (p% = 2 AND Player2% = Ordi%) Xalert "Fin de partie","J'ai gagné la partie! Désolé.","ok",rien% ELSE Xalert "Fin de partie","Bravo ! Vous avez gagné !|Toutes mes félicitations !","ok",rien% ENDIF ENDIF ENDIF RETURN PROCEDURE bmpfree FREEBMP CBMP% FREEBMP JBMP1% FREEBMP JBMP2% FREEBMP J4BMP1% FREEBMP J4BMP2% FREEBMP JM% FREEBMP CM% FREEBMP CBMPM% FREEBMP ScrBmp% FREEBMP BufBmp% FREEDC LogicalDC% FREEDC BufDC% RETURN PROCEDURE testhumain mk% = 1 jx% = 3 DO IF T%(SUCC(jx%),6) = 0 EXIT IF TRUE ELSE jx% = MOD(SUCC(jx%),7) ENDIF LOOP RETURN PROCEDURE Ordi LOCAL x%,i%,maxv% jx% = -1 ' GOTO suitetest TT 410 IF jx% = -1 ' vérifier qu'il peut gagner ici FOR x% = 1 TO 7 IF T%(x%,6) = 0 HDescente PRED(x%),player% IF @Verif4(player%) = TRUE jx% = PRED(x%) ENDIF Hsuppr PRED(x%) ENDIF NEXT x% ENDIF TT 420 IF jx% = -1 ' si peut pas gagner vérifie si l'autre va gagner et essayer de l'empecher FOR x% = 1 TO 7 IF T%(x%,6) = 0 HDescente PRED(x%), 3 - player% IF @Verif4(3 - player%) = TRUE jx% = PRED(x%) ENDIF Hsuppr PRED(x%) ENDIF NEXT x% ENDIF ' suitetest: TT 430 IF jx% = -1 jx% = @Coup(player%) IF jx% = -1 'afficher "coup pas en mémoire" ENDIF CLR OrdiNoStat% ELSE OrdiNoStat% = TRUE ENDIF TT 440 IF jx% = -1 ' Xalert "jx%=-1","tests dans4poss","ok",rien% maxv% = 0 FOR i% = 1 TO 7 TT 4000 + i% v% = @Dans4poss(i%,player%) TT 5000 ' Xalert "a","dans4poss" + STR$(i%) + " v%=" + STR$(v%),"ok",rien% IF v% > maxv% TT 5001 HDescente PRED(i%),player% IF @TestSiGagnera(3 - player%) = TRUE TT 5002 Hsuppr PRED(i%) ELSE TT 5003 Hsuppr PRED(i%) maxv% = v% jx% = PRED(i%) ENDIF ' Xalert "test 4 poss","Sera reteenu posistion" + STR$(i%) + " maxv%=" + STR$(maxv%),"ok",rien% ENDIF NEXT i% ENDIF TT 450 IF jx% = -1 jx% = PR%(ncj%) 'RAND(7) PR%(ncj%) = MOD(SUCC(PR%(ncj%)),7) FOR i% = 1 TO 7 IF T%(SUCC(jx%),6) <> 0 jx% = MOD(SUCC(jx%),7) ELSE HDescente jx%,player% IF @TestSiGagnera(3 - player%) = TRUE Hsuppr jx% jx% = MOD(SUCC(jx%),7) ELSE Hsuppr jx% ENDIF ENDIF NEXT i% ENDIF TT 460 WHILE T%(SUCC(jx%),6) <> 0 jx% = MOD(SUCC(jx%),7) WEND mk% = 1 RETURN FUNCTION Dans4poss(Col%,player%) LOCAL y%,R%=FALSE IF T%(Col%,6) = 0 FOR y% = 1 TO 6 TT 5000 + y% IF T%(Col%,y%) = 0 T%(Col%,y%) = player% ' SETDC _DC(1) ' AFTAB TT 5500 R% = @estpar4poss(Col%,y%) TT 5501 ' Xalert "dans4poss","estpar4poss=r%=" + STR$(R%),"ok",rien% T%(Col%,y%) = 0 y% = 6 ENDIF NEXT y% ENDIF RETURN R% ENDFUNC PROCEDURE Hsuppr(jx%) LOCAL y% INC jx% FOR y% = 6 DOWNTO 1 IF T%(jx%,y%) <> 0 T%(jx%,y%) = 0 y% = 1 ENDIF NEXT y% RETURN PROCEDURE HDescente(jx%,player%) LOCAL y% INC jx% FOR y% = 1 TO 6 IF T%(jx%,y%) = 0 T%(jx%,y%) = player% y% = 6 ENDIF NEXT y% RETURN FUNCTION TestSiGagnera(player%) LOCAL j%,y%,R%=FALSE FOR j% = 1 TO 7 FOR y% = 1 TO 6 IF T%(j%,y%) = 0 T%(j%,y%) = player% IF @Verif4(player%) = TRUE R% = TRUE T%(j%,y%) = 0 j% = 7 ELSE T%(j%,y%) = 0 ENDIF y% = 6 ENDIF NEXT y% NEXT j% RETURN R% ENDFUNC PROCEDURE TestRecursif(n%,player%) LOCAL j%,y% IF n% <= Nrec% FOR j% = 1 TO 7 FOR y% = 1 TO 6 IF T%(j%,y%) = 0 T%(j%,y%) = player% IF @Verif4(player%) = TRUE IF player% = 1 Bestplayer1% = MIN(Bestplayer1%,n%) ELSE IF player% = 2 Bestplayer2% = MIN(Bestplayer2%,n%) ENDIF ' SETDC _DC(1) 'LogicalDC% ' AFTAB ' ~BitBlt(_DC(1),CPX1%,0,CPX1% + 7 * TC%,CPY1%,LogicalDC%,CPX1%,0,SRCCOPY) ' PAUSE 10 ELSE IF n% < Nrec% THEN TestRecursif(SUCC(n%),3 - player%) ENDIF T%(j%,y%) = 0 y% = 6 ENDIF NEXT y% NEXT j% ENDIF RETURN PROCEDURE TSAVE LOCAL x%,y% FOR y%=1 TO 6 FOR x%=1 TO 7 TS%(x%,y%)=T%(x%,y%) NEXT x% NEXT y% RETURN PROCEDURE TLOAD LOCAL x%,y% FOR y%=1 TO 6 FOR x%=1 TO 7 T%(x%,y%)=TS%(x%,y%) NEXT x% NEXT y% RETURN FUNCTION Verif4(player%) LOCAL x%,y%,j%,k%,R%,xx%,yy% R%=FALSE FOR y%=1 TO 6 FOR x%=1 TO 7 j%=T%(x%,y%) IF j%=player% ' Horizontal IF x%<=4 k%=TRUE FOR xx%=x% TO ADD(x%,3) IF T%(xx%,y%)<>j% CLR k% xx%=ADD(x%,3) ENDIF NEXT xx% ENDIF ' Vertical IF y%<=3 AND k%=FALSE k%=TRUE FOR yy%=y% TO ADD(y%,3) IF T%(x%,yy%)<>j% CLR k% yy%=ADD(y%,3) ENDIF NEXT yy% ENDIF ' Diagonale montant IF y%<=3 AND x%<=4 AND k%=FALSE k%=TRUE xx%=x% FOR yy%=y% TO ADD(y%,3) IF T%(xx%,yy%)<>j% CLR k% yy%=ADD(y%,3) ENDIF INC xx% NEXT yy% ENDIF ' Diagonale descendant IF y%>=4 AND x%<=4 AND k%=FALSE k%=TRUE xx%=x% FOR yy%=y% DOWNTO SUB(y%,3) IF T%(xx%,yy%)<>j% CLR k% yy%=SUB(y%,3) ENDIF INC xx% NEXT yy% ENDIF IF k%=TRUE THEN R%=TRUE,x%=7,y%=6 ENDIF NEXT x% NEXT y% RETURN R% ENDFUNC FUNCTION Descente_jeton(jx%) LOCAL R%,afy%,afx%,cy%,i%,cy1%,cy2%,L%,bmp%,NX%,NY% SETDC LogicalDC% AFTAB NX%=0,NY%=0 IF player%=1 bmp%=JBMP1% ELSE bmp%=JBMP2% ENDIF afy%=CPY1%-TC% afx%=CPX1%+jx%*TC% L%=6 IF Player1% = Humain% OR Player2% = Humain% V_insert% = 2 '10 V_descente% = 5 ' ELSE IF npoo% > 1 V_insert% = 1 V_descente% = 0 ELSE V_insert% = 2 V_descente% = 4 ENDIF ENDIF IF T%(SUCC(jx%),L%)=0 NX%=SUCC(jx%),NY%=L% cy%=CPY1% y%=afy% FOR i% = 1 TO V_insert% VSYNC afy% = y% + i% * TC% / V_insert% DEFFILL 0 RGBCOLOR RGB(0,0,0) PBOX afx%,MAX(0,CPY1% - TC%),afx% + PRED(TC%),cy% + PRED(TC%) PUT afx%,afy%,JM%,SRCPAINT PUT afx%,afy%,bmp%,SRCAND PUT afx%,cy%,CM%,SRCPAINT PUT afx%,cy%,CBMPM%,SRCAND ~BitBlt(_DC(1),afx%,0,TC%,CPY1%+TC%,LogicalDC%,afx%,0,SRCCOPY) NEXT i% ENDIF IF V_descente% = 0 DO DEC L% IF T%(SUCC(jx%),L%) = 0 NX% = SUCC(jx%),NY% = L% cy1% = CPY1% + (5 - L%) * TC% cy2% = cy1% + TC% y% = cy1% afy% = cy1% + TC% DEFFILL 0 RGBCOLOR 0 PBOX afx%,cy1% ,afx% + PRED(TC%),cy2% + PRED(TC%) PUT afx%,afy%,JM%,SRCPAINT PUT afx%,afy%,bmp%,SRCAND PUT afx%,cy1%,CM%,SRCPAINT PUT afx%,cy1%,CBMPM%,SRCAND PUT afx%,cy2%,CM%,SRCPAINT PUT afx%,cy2%,CBMPM%,SRCAND ~BitBlt(_DC(1),afx%,cy1%,TC%,TC% * 2,LogicalDC%,afx%,cy1%,SRCCOPY) EXIT IF L% = 1 ELSE EXIT IF TRUE ENDIF LOOP ELSE DO DEC L% IF T%(SUCC(jx%),L%)=0 NX%=SUCC(jx%),NY%=L% cy1%=CPY1%+(5-L%)*TC% cy2%=cy1%+TC% y%=cy1% FOR i% = 1 TO V_descente% VSYNC afy% = y% + i% * TC% / V_descente% DEFFILL 0 RGBCOLOR 0 PBOX afx%,cy1%,afx%+PRED(TC%),cy2%+PRED(TC%) PUT afx%,afy%,JM%,SRCPAINT PUT afx%,afy%,bmp%,SRCAND PUT afx%,cy1%,CM%,SRCPAINT PUT afx%,cy1%,CBMPM%,SRCAND PUT afx%,cy2%,CM%,SRCPAINT PUT afx%,cy2%,CBMPM%,SRCAND ~BitBlt(_DC(1),afx%,cy1%,TC%,TC%*2,LogicalDC%,afx%,cy1%,SRCCOPY) NEXT i% EXIT IF L%=1 ELSE EXIT IF TRUE ENDIF LOOP ENDIF IF NX%<>0 OR NY%<>0 T%(NX%,NY%)=player% R%=TRUE ELSE R%=FALSE ENDIF RETURN R% ' TROFF ENDFUNC PROCEDURE Marquer(x%,y%) LOCAL afx%,afy% RGBCOLOR RGB(100,150,200) afx% = CPX1% + PRED(x%) * TC% afy% = CPY1% + (5 - PRED(y%)) * TC% LINE afx%,afy%,afx% + TC%,afy% + TC% LINE afx%,afy% + TC%,afx% + TC%,afy% RETURN FUNCTION estpar4poss(x%,y%) LOCAL xo%,yo%,n%,C%,R%=FALSE xo% = x%,yo% = y% C% = T%(x%,y%) ' Horizontal ' AFTAB TT 6000 n% = 1 IF x% > 1 DEC x% DO WHILE T%(x%,y%) = C% OR T%(x%,y%) = 0 ' Marquer x%,y% n% = SUCC(n%),x% = PRED(x%) LOOP UNTIL x% < 1 ENDIF ' Xalert "M 1",".","ok",rien% x% = xo% TT 6010 IF x% < 7 INC x% DO WHILE T%(x%,y%) = C% OR T%(x%,y%) = 0 ' Marquer x%,y% n% = SUCC(n%),x% = SUCC(x%) LOOP UNTIL x% > 7 ENDIF ' Xalert "M 2",".","ok",rien% IF n% >= 4 THEN R% = n% x% = xo% TT 6020 ' IF R% = FALSE ' Vertical n% = 1 IF y% > 1 DEC y% 'DO WHILE T%(x%,y%) = C% OR T%(x%,y%) = 0 DO IF T%(x%,y%) = C% OR T%(x%,y%) = 0 ' Marquer x%,y% n% = SUCC(n%),y% = PRED(y%) ELSE EXIT IF TRUE ENDIF EXIT IF y% < 1 LOOP 'LOOP UNTIL y% < 1 ENDIF ' Xalert "M 3",".","ok",rien% y% = yo% TT 6030 IF y% < 6 INC y% DO WHILE T%(x%,y%) = C% OR T%(x%,y%) = 0 ' Marquer x%,y% n% = SUCC(n%),y% = SUCC(y%) LOOP UNTIL y% > 6 ENDIF ' Xalert "M 4",".","ok",rien% IF n% >= 4 THEN R% = R% + n% 'TRUE y% = yo% TT 6040 'ENDIF ' IF R% = FALSE ' diag1 n% = 1 x% = xo%,y% = yo% WHILE x% > 1 AND y% > 1 DEC x% DEC y% IF T%(x%,y%) = C% OR T%(x%,y%) = 0 ' Marquer x%,y% INC n% ELSE EXIT IF TRUE ENDIF WEND ' Xalert "M 5",".","ok",rien% TT 6050 x% = xo%,y% = yo% WHILE x% < 7 AND y% < 6 INC x% INC y% IF T%(x%,y%) = C% OR T%(x%,y%) = 0 ' Marquer x%,y% INC n% ELSE EXIT IF TRUE ENDIF WEND ' Xalert "M 6",".","ok",rien% IF n% >= 4 THEN R% = R% + n% 'ENDIF 'IF R% = FALSE ' diag2 TT 6060 n% = 1 x% = xo%,y% = yo% WHILE x% > 1 AND y% < 6 DEC x% INC y% IF T%(x%,y%) = C% OR T%(x%,y%) = 0 ' Marquer x%,y% INC n% ELSE EXIT IF TRUE ENDIF WEND ' Xalert "M 7",".","ok",rien% TT 6070 x% = xo%,y% = yo% WHILE x% < 7 AND y% > 1 INC x% DEC y% IF T%(x%,y%) = C% OR T%(x%,y%) = 0 ' Marquer x%,y% INC n% ELSE EXIT IF TRUE ENDIF WEND ' Xalert "M 8",".","ok",rien% IF n% >= 4 THEN R% = R% + n% 'TRUE 'ENDIF TT 6080 RETURN R% ENDFUNC FUNCTION estpar4(x%,y%) LOCAL xo%,yo%,n%,C%,R%=FALSE xo% = x%,yo% = y% C% = T%(x%,y%) ' Horizontal n% = 1 IF x% > 1 DEC x% DO WHILE T%(x%,y%) = C% n% = SUCC(n%),x% = PRED(x%) LOOP UNTIL x% < 1 ENDIF x% = xo% IF x% < 7 INC x% DO WHILE T%(x%,y%) = C% n% = SUCC(n%),x% = SUCC(x%) LOOP UNTIL x% > 7 ENDIF IF n% >= 4 THEN R% = TRUE x% = xo% IF R% = FALSE ' Vertical n% = 1 IF y% > 1 DEC y% DO WHILE T%(x%,y%) = C% n% = SUCC(n%),y% = PRED(y%) LOOP UNTIL y% < 1 ENDIF y% = yo% IF y% < 6 INC y% DO WHILE T%(x%,y%) = C% n% = SUCC(n%),y% = SUCC(y%) LOOP UNTIL y% > 6 ENDIF IF n% >= 4 THEN R% = TRUE y% = yo% ENDIF IF R% = FALSE ' diag1 n% = 1 x% = xo%,y% = yo% WHILE x% > 1 AND y% > 1 DEC x% DEC y% IF T%(x%,y%) = C% INC n% ELSE EXIT IF TRUE ENDIF WEND x% = xo%,y% = yo% WHILE x% < 7 AND y% < 6 INC x% INC y% IF T%(x%,y%) = C% INC n% ELSE EXIT IF TRUE ENDIF WEND IF n% >= 4 THEN R% = TRUE ENDIF IF R% = FALSE ' diag2 n% = 1 x% = xo%,y% = yo% WHILE x% > 1 AND y% < 6 DEC x% INC y% IF T%(x%,y%) = C% INC n% ELSE EXIT IF TRUE ENDIF WEND x% = xo%,y% = yo% WHILE x% < 7 AND y% > 1 INC x% DEC y% IF T%(x%,y%) = C% INC n% ELSE EXIT IF TRUE ENDIF WEND IF n% >= 4 THEN R% = TRUE ENDIF RETURN R% ENDFUNC PROCEDURE AFTAB LOCAL x%,y%,afx%,afy%,M% DEFFILL 0 RGBCOLOR 0 PBOX 0,0,scrx%,scry% RGBCOLOR 16777215 IF Player1% = Ordi% THEN af$ = "Ordinateur contre " IF Player1% = Humain% THEN af$ = "Humain contre " IF Player2% = Ordi% THEN af$ = af$ + "Ordinateur" IF Player2% = Humain% THEN af$ = af$ + "Humain" IF npoo% > 1 af$ = af$ + " " + STR$(poo%) + "/" + STR$(npoo%) + " " af$ = af$ + "Rouges : " + STR$(NG1%) + " Jaunes : " + STR$(NG2%) + " Match"+@S$(NG0%)+" nul"+@S$(NG0%)+" : " + STR$(NG0%) ENDIF 'text 0,0, M% = SRCCOPY FOR y% = 0 TO 5 FOR x% = 0 TO 6 afx% = CPX1% + x% * TC% afy% = CPY1% + SUB(5,y%) * TC% PUT afx%,afy%,CBMP% IF T%(x% + 1,y% + 1) = 1 PUT afx%,afy%,JM%,SRCPAINT IF @estpar4(x% + 1,y% + 1) PUT afx%,afy%,J4BMP1%,SRCAND ELSE PUT afx%,afy%,JBMP1%,SRCAND ENDIF ELSE IF T%(x% + 1,y% + 1) = 2 PUT afx%,afy%,JM%,SRCPAINT IF @estpar4(x% + 1,y% + 1) PUT afx%,afy%,J4BMP2%,SRCAND ELSE PUT afx%,afy%,JBMP2%,SRCAND ENDIF ENDIF NEXT x% NEXT y% RGBCOLOR RGB(255,255,255) GRAPHMODE ,TRANSPARENT TEXT 0,0,af$ ' PAUSE 20 IF AFFSTAT% = TRUE THEN Affstat RETURN PROCEDURE VSYNC ' WHILE TIMER-vsync_timer<25 'WEND ' vsync_timer=TIMER REPEAT UNTIL AND(INP(PORT 986),8) = FALSE REPEAT UNTIL AND(INP(PORT 986),8) = 8 RETURN FUNCTION situation$ LOCAL x%,y% FOR y% = 1 TO 6 FOR x% = 1 TO 7 NEXT x% NEXT y% ENDFUNC PROCEDURE EnrgPartie(gagnant%) ' en cours.... IF Ecriture% = TRUE OPEN "a",#1,"Parties.dat" FOR i% = 1 TO ncj% IF MOD(i%,2) = 1 ? #1,Cj$(i%) ENDIF NEXT i% CLOSE #1 ENDIF RETURN FUNCTION EtatInverse$(c$) ' en cours... FOR y% = 0 TO 5 o% = VAL("&H" + MID$(c$,1 + MUL(y%,3),3)) FOR x% = 0 TO 6 o1% = o% DIV o%,3 NEXT x% NEXT y% RETURN r$ ENDFUNC FUNCTION EtatActuel$ LOCAL x%,y%,o%,r$ r$ = "" FOR y% = 0 TO 5 CLR o% FOR x% = 0 TO 6 o% = o% + T%(x% + 1,y% + 1) * (3 ^ x%) NEXT x% r$ = r$ + HEX$(o%,3) NEXT y% RETURN r$ ENDFUNC PROCEDURE creationgraphiques LogicalDC% = CreateCompatibleDC(_DC(1)) ScrBmp% = CreateCompatibleBitmap(_DC(1),scrx%,scry%) ' en fait non ...BufBmp%=CreateCompatibleBitmap(_DC(1),1024,768) ~SelectObject(LogicalDC%,ScrBmp%) BufDC% = CreateCompatibleDC(_DC(1)) BufBmp% = CreateCompatibleBitmap(_DC(1),scrx%,scry%) ' en fait non ...BufBmp%=CreateCompatibleBitmap(_DC(1),1024,768) ~SelectObject(BufDC%,BufBmp%) 'SETDC BufDC% SETDC LogicalDC% 'Avant_Aff IF scrx% >= 1024 TC% = 70'90 TJ% = 60'75 ELSE IF scrx% >= 800 TC% = 50 '70 TJ% = 35 '60 ENDIF ' TC% = TC% / 2 ' TJ% = TJ% / 2 CPX1% = (scrx% - (TC% * 7)) / 2 CPY1% = (scry% - (TC% * 6)) / 2 DEFFILL 0 RGBCOLOR RGB(0,0,255) PBOX 0,0,PRED(TC%),PRED(TC%) RGBCOLOR RGB(255,255,255) DEFFILL 0 PCIRCLE TC% / 2,TC% / 2,TJ% / 2 GET 0,0,PRED(TC%),PRED(TC%),CBMPM% RGBCOLOR RGB(0,0,0) DEFFILL 0 PCIRCLE TC% / 2,TC% / 2,TJ% / 2 RGBCOLOR RGB(255,255,255) CIRCLE TC% / 2,TC% / 2,TJ% / 2 GET 0,0,PRED(TC%),PRED(TC%),CBMP% CLS RGBCOLOR RGB(255,0,0) DEFFILL 0 PCIRCLE TC% / 2,TC% / 2,TJ% / 2 RGBCOLOR RGB(255,255,255) CIRCLE TC% / 2,TC% / 2,TJ% / 2 GET 0,0,PRED(TC%),PRED(TC%),JBMP1% CLS RGBCOLOR RGB(255,127,127) DEFFILL 0 PCIRCLE TC% / 2,TC% / 2,TJ% / 2 RGBCOLOR RGB(255,0,0) DEFFILL 0 PCIRCLE TC% / 2,TC% / 2,TJ% / 4 RGBCOLOR RGB(255,255,255) CIRCLE TC% / 2,TC% / 2,TJ% / 2 GET 0,0,PRED(TC%),PRED(TC%),J4BMP1% CLS RGBCOLOR RGB(255,255,0) DEFFILL 0 PCIRCLE TC% / 2,TC% / 2,TJ% / 2 RGBCOLOR RGB(255,255,255) CIRCLE TC% / 2,TC% / 2,TJ% / 2 GET 0,0,PRED(TC%),PRED(TC%),JBMP2% CLS RGBCOLOR RGB(255,255,200) DEFFILL 0 PCIRCLE TC% / 2,TC% / 2,TJ% / 2 RGBCOLOR RGB(245,245,0) DEFFILL 0 PCIRCLE TC% / 2,TC% / 2,TJ% / 4 RGBCOLOR RGB(255,255,255) CIRCLE TC% / 2,TC% / 2,TJ% / 2 GET 0,0,PRED(TC%),PRED(TC%),J4BMP2% CLS 0 RGBCOLOR RGB(255,255,255) PCIRCLE TC% / 2,TC% / 2,TJ% / 2 GET 0,0,PRED(TC%),PRED(TC%),JM% CLS 0 RGBCOLOR RGB(255,255,255) DEFFILL 0 PBOX 0,0,PRED(TC%),PRED(TC%) RGBCOLOR RGB(0,0,0) PCIRCLE TC% / 2,TC% / 2,TJ% / 2 RGBCOLOR RGB(255,255,255) CIRCLE TC% / 2,TC% / 2,TJ% / 2 GET 0,0,PRED(TC%),PRED(TC%),CM% FOR i% = 1 TO 15 ' T%(1 + RAND(7),1 + RAND(6)) = RAND(3) NEXT i% CLS AFTAB SETDC _DC(1) RETURN PROCEDURE testall(player%) LOCAL T%,fin% ' Verif si gagnant FOR T% = 1 TO 7 IF T%(T%,6) = 0 HDescente PRED(T%),player% IF @Verif4(player%) = TRUE fin% = TRUE ENDIF Hsuppr PRED(T%) IF fin% = TRUE THEN T% = 7 ENDIF NEXT T% 'Verif si complet IF fin% = FALSE IF T%(1,6) <> 0 IF T%(2,6) <> 0 IF T%(3,6) <> 0 IF T%(4,6) <> 0 IF T%(5,6) <> 0 IF T%(6,6) <> 0 IF T%(7,6) <> 0 fin% = TRUE ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF fin% = FALSE FOR T% = 1 TO 3 IF T%(T%,6) = 0 INC NCP% HDescente PRED(T%),player% IF NCP% MOD 500 = 0 SETDC _DC(1) AFTAB RGBCOLOR 16777215 GRAPHMODE ,TRANSPARENT TEXT 30,30,"NCP%=" + STR$(NCP%) + " " ELSE IF NCP% MOD 250 = 0 RGBCOLOR 16777215 GRAPHMODE ,OPAQUE TEXT 30,30,"NCP%=" + STR$(NCP%) + " " ENDIF testall SUB(3,player%) Hsuppr PRED(T%) ENDIF NEXT T% ENDIF RETURN PROCEDURE Test testall 1 bmpfree CLOSEW #1 EDIT SYSTEM RETURN FUNCTION Arbre(player%) LOCAL x%,v%,R% DIM Eval%(7) FOR x% = 1 TO 7 IF T%(x%,6) = 0 HDescente PRED(x%),player% IF @Verif4(player%) = TRUE Eval%(x%) = Eval%(x%) + 10000 ELSE v% = @ya4p IF (v% AND (3 - player%)) <> 0 Eval%(x%) = Eval%(x%) - 10000 ELSE IF (v% AND player%) <> 0 Eval%(x%) = Eval%(x%) + 1000 ENDIF ENDIF Hsuppr PRED(x%) IF R% = 0 OR (Eval%(x%) > evalmax%) R% = x% evalmax% = Eval%(x%) ENDIF ENDIF NEXT x% ERASE Eval%() RETURN R% ENDFUNC FUNCTION ya4p LOCAL x%,y%,n%,x1%,y1%,R%=FALSE FOR x% = 1 TO 7 FOR y% = 1 TO 6 IF T%(x%,y%) = 0 FOR TestPLayer% = 1 TO 2 IF (R% AND TestPLayer%) = 0 T%(x%,y%) = TestPLayer% ' horizontal n% = 1 x1% = x% WHILE x1% > 1 DEC x1% IF T%(x1%,y%) = TestPLayer% INC n% ELSE EXIT IF TRUE ENDIF WEND x1% = x% WHILE x1% < 7 INC x1% IF T%(x1%,y%) = TestPLayer% INC n% ELSE EXIT IF TRUE ENDIF WEND IF n% >= 4 R% = R% OR TestPLayer% ENDIF IF (R% AND TestPLayer%) = 0 ' Diagonale 1 n% = 1 x1% = x% y1% = y% WHILE x1% > 1 AND y1% > 1 DEC x1% DEC y1% IF T%(x1%,y1%) = TestPLayer% INC n% ELSE EXIT IF TRUE ENDIF WEND x1% = x% y1% = y% WHILE x1% < 7 AND y1% < 6 INC x1% INC y1% IF T%(x1%,y1%) = TestPLayer% INC n% ELSE EXIT IF TRUE ENDIF WEND IF n% >= 4 R% = R% OR TestPLayer% ENDIF IF (R% AND TestPLayer%) = 0 ' Diagonale 2 n% = 1 x1% = x% y1% = y% WHILE x1% > 1 AND y1% < 6 DEC x1% INC y1% IF T%(x1%,y1%) = TestPLayer% INC n% ELSE EXIT IF TRUE ENDIF WEND x1% = x% y1% = y% WHILE x1% < 7 AND y1% > 1 INC x1% DEC y1% IF T%(x1%,y1%) = TestPLayer% INC n% ELSE EXIT IF TRUE ENDIF WEND IF n% >= 4 R% = R% OR TestPLayer% ENDIF ENDIF ENDIF ENDIF ' if r% and testplayer% = 0 NEXT TestPLayer% ' remettre à 0 T%(x%,y%) = 0 IF R% = 3 x% = 7 ENDIF y% = 6 ENDIF NEXT y% NEXT x% RETURN R% ENDFUNC FUNCTION NumComb(Col%) RETURN NumComb%(T%(Col%,1),T%(Col%,2),T%(Col%,3),T%(Col%,4),T%(Col%,5),T%(Col%,6)) ENDFUNC FUNCTION NcolVides LOCAL R%=0,x% FOR x% = 1 TO 7 IF T%(x%,6) = 0 INC R% ENDIF NEXT x% RETURN R% ENDFUNC PROCEDURE afficher(a$) IF Afficher% = TRUE Xalert "Debug " + Version$,a$,"ok|annuler affichage",rien% ' ALERT 1,a$,1,"ok|annuler affichage",rien% IF rien% = 2 Afficher% = FALSE ENDIF ENDIF RETURN PROCEDURE t DIM t$(95) RESTORE CombCol CLR n%,n2% DO READ a$ INC n% IF MID$(a$,1,1) <> "0" INC n2% ENDIF ? n%;" ";a$;" ";n2% t$(PRED(n%)) = a$ EXIT IF n% = 95 LOOP ERASE t$() RETURN FUNCTION chainemenu$ LOCAL M$ M$ = "Jouer" IF Player1% = Humain% M$ = M$ + "|Joueur 1 (les rouges) est Humain" ELSE M$ = M$ + "|Joueur 1 (les rouges) est Ordinateur" ENDIF IF Player2% = Humain% M$ = M$ + "|Joueur 2 est Humain" ELSE M$ = M$ + "|Joueur 2 est Ordinateur" ENDIF IF AFFSTAT% = TRUE M$ = M$ + "|Affichage des statistiques : Oui" ELSE M$ = M$ + "|Affichage des statistiques : Non" ENDIF M$ = M$ + "|Quitter" RETURN M$ ENDFUNC PROCEDURE main LOCAL i%,R% CLS 0 ' afficher "1" PAUSE 2 M$ = @chainemenu$ IniMenu M$ ' afficher "2" ' PAUSE 2 affmain ' afficher "3" ' PAUSE 2 DO mx1% = mx%,my1% = my% MOUSE mx%,my%,mk% PEEKEVENT IF _Mess = WM_PAINT affmain ENDIF IF mx% <> mx1% OR my% <> my1% ii1% = ii% CLR ii% FOR i% = 1 TO nmenu% IF mx% > M%(i%,1) AND mx% < M%(i%,3) AND my% > M%(i%,2) AND my% < M%(i%,4) ii% = i% i% = nmenu% ENDIF NEXT i% IF ii% <> ii1% Affmenu ENDIF ENDIF IF mk% = 1 IF ii% = 1 DO MOUSE mx%,my%,mk% LOOP UNTIL mk% = 0 CLS 0 npoo% = 1 IF Player1% = Ordi% AND Player2% = Ordi% Xalert Version$,"Combien de parties contre moi-même ?","1|10|100|1000|10000",R% IF R% = 1 npoo% = 1 ELSE IF R% = 2 npoo% = 10 ELSE IF R% = 3 npoo% = 100 ELSE IF R% = 4 npoo% = 1000 ELSE IF R% = 5 npoo% = 10000 ENDIF ENDIF i% = 1 CLR NG0%,NG1%,NG2% oldaffstat% = AFFSTAT% IF npoo% > 1 CLR AFFSTAT% ENDIF DO ' FOR i% = 1 TO npoo% CLS 0 poo% = i% IF npoo% > 1 THEN MFP% = FALSE JouerPartie INC i% EXIT IF i% > npoo% LOOP IF npoo% > 1 SETDC _DC(1) AFTAB Xalert Version$+" - Match Ordi contre Ordi.","Les rouges ont gagné "+STR$(NG1%)+" fois.|Les jaunes "+STR$(NG2%)+" fois.|Il y a eu "+STR$(NG0%)+" match"+@S$(NG0%)+" nul"+@S$(NG0%),"Ok",rien% ENDIF AFFSTAT% = oldaffstat% MFP% = TRUE CLS 0 affmain DO MOUSE mx%,my%,mk% LOOP UNTIL mk% = 0 ENDIF IF ii% = 2 IF Player1% = Ordi% Player1% = Humain% ELSE Player1% = Ordi% ENDIF M$ = @chainemenu$ IniMenu M$ affmain DO MOUSE mx%,my%,mk% LOOP UNTIL mk% = 0 ENDIF IF ii% = 3 IF Player2% = Ordi% Player2% = Humain% ELSE Player2% = Ordi% ENDIF M$ = @chainemenu$ IniMenu M$ affmain DO MOUSE mx%,my%,mk% LOOP UNTIL mk% = 0 ENDIF IF ii% = 4 IF AFFSTAT% = TRUE AFFSTAT% = FALSE ELSE AFFSTAT% = TRUE ENDIF M$ = @chainemenu$ IniMenu M$ affmain DO MOUSE mx%,my%,mk% LOOP UNTIL mk% = 0 ENDIF IF ii% = 5 Xalert Version$,"Souhaitez-vous quitter le programme ?","Oui|Non",rien% IF rien% = 1 EXIT IF TRUE ENDIF ENDIF ENDIF LOOP UNTIL MENU(1) = 4 RETURN PROCEDURE affmain WINDGET 14,H% SETDC LogicalDC% GRAPHMODE ,TRANSPARENT RGBCOLOR RGB(255,255,255) DEFFILL 0 RGBCOLOR 0 PBOX 1,41,_X - 2,_Y - 2 RGBCOLOR RGB(0,32,64) PBOX 0,0,_X - 1,40 af$ = Version$ + " programmé par Nicolas Rey en GFA-Basic" RGBCOLOR RGB(255,255,200) TEXT _X / 2 - TXTLEN(af$) / 2,40 / 2 - H% / 2,af$ RGBCOLOR RGB(255,255,255) BOX 0,0,_X - 1,_Y - 1 Affmenu ~BitBlt(_DC(1),0,0,scrx%,scry%,LogicalDC%,0,0,SRCCOPY) SETDC _DC(1) RETURN PROCEDURE Affbouton(y%,t$) LOCAL H%,L% WINDGET 14,H% L% = TXTLEN(t$) x1% = _X / 2 - L% / 2 x2% = _X / 2 + L% / 2 BOX x1% - 2,y% - 2,x2% + 2,y% + H% + 2 TEXT x1%,y%,t$ RETURN PROCEDURE IniMenu(M$) LOCAL v%,B$,H%,i%,afy% nmenu% = 0 WINDGET 14,H% DO v% = INSTR(M$,"|") IF v% > 0 B$ = MID$(M$,1,PRED(v%)) M$ = MID$(M$,SUCC(v%)) ELSE B$ = M$ M$ = "" ENDIF INC nmenu% m$(nmenu%) = B$ M%(nmenu%,1) = _X / 2 - TXTLEN(B$) / 2 - 2 M%(nmenu%,3) = _X / 2 + TXTLEN(B$) / 2 + 2 EXIT IF M$ = "" LOOP afy% = _Y / 2 - (nmenu% * (H% + 4 + 20)) / 2 FOR i% = 1 TO nmenu% M%(i%,2) = afy% M%(i%,4) = afy% + H% + 2 ADD afy%,H% + 4 + 20 NEXT i% RETURN PROCEDURE Affmenu LOCAL i% DEFFILL 0 GRAPHMODE ,TRANSPARENT FOR i% = 1 TO nmenu% IF i% = ii% RGBCOLOR RGB(255,255,255) PBOX M%(i%,1),M%(i%,2),M%(i%,3),M%(i%,4) RGBCOLOR RGB(255,255,0) BOX M%(i%,1),M%(i%,2),M%(i%,3),M%(i%,4) RGBCOLOR 0 TEXT M%(i%,1) + 2,M%(i%,2) + 2,m$(i%) ELSE RGBCOLOR RGB(0,32,64) PBOX M%(i%,1),M%(i%,2),M%(i%,3),M%(i%,4) ' RGBCOLOR 0 ' PBOX M%(i%,1),M%(i%,2),M%(i%,3),M%(i%,4) RGBCOLOR RGB(205,222,255) BOX M%(i%,1),M%(i%,2),M%(i%,3),M%(i%,4) TEXT M%(i%,1) + 2,M%(i%,2) + 2,m$(i%) ENDIF NEXT i% RETURN PROCEDURE illumineBouton(i%) RGBCOLOR RGB(255,255,255) PBOX M%(i%,1),M%(i%,2),M%(i%,3),M%(i%,4) ' RGBCOLOR RGB(255,255,255) RGBCOLOR 0 TEXT M%(i%,1) + 2,M%(i%,2) + 2,m$(i%) RETURN FUNCTION Coup(player%) LOCAL R%=-1,i%,c1%,c2%,c3%,c4%,c5%,c6% ,v%,maxv%,ncs%=0,C%,inversion%=FALSE IF EXIST(ficstat$) c1% = @NumComb(1) c2% = @NumComb(2) c3% = @NumComb(3) c4% = @NumComb(4) c5% = @NumComb(5) c6% = @NumComb(6) c7% = @NumComb(7) OPEN "i",#1,ficstat$ i% = @StatPos(c1%,c2%,c3%,c4%,c5%,c6%,c7%) IF i% = 0 i% = @StatPos(c7%,c6%,c5%,c4%,c3%,c2%,c1%) inversion% = TRUE afficher "coup :|Inversion (pos=" + STR$(i%) + ")" ENDIF IF i% > 0 SEEK #1,i% + PRED(player%) * 7 * 4 CLR ncs% FOR C% = 0 TO 6 v% = INP%(#1) IF C% = 0 OR v% >= maxv% IF v% > maxv% THEN CLR ncs% INC ncs% IF inversion% = FALSE CS%(ncs%) = C% ELSE CS%(ncs%) = 6 - C% ENDIF maxv% = v% ENDIF NEXT C% ENDIF ' if i%>0 CLOSE #1 IF ncs% = 1 R% = CS%(1) ELSE i% = 1 DO IF T%(SUCC(CS%(i%)),6) = 0 HDescente CS%(i%),player% IF @TestSiGagnera(3 - player%) = TRUE Hsuppr CS%(i%) CS%(i%) = CS%(ncs%) DEC ncs% ELSE Hsuppr CS%(i%) ENDIF ENDIF INC i% EXIT IF i% > ncs% LOOP IF ncs% > 0 ' FOR i% = 1 TO ncs% ' IF T%(SUCC(CS%(i%)),6) = 0 ' IF @CoupDonneCG(player%,Col%) = TRUE ' R% = CS%(i%) ' ALERT 1,"Le coup suivant sera cdg",1,"ok",rien% ' ENDIF ' ENDIF ' NEXT i% IF R% = -1 R% = CS%(1) ENDIF ENDIF ' if ncs%>0 ENDIF ELSE ' else de IF EXIST(ficstat$) OPEN "o",#1,ficstat$ FOR i% = 0 TO 94 OUT% #1,0 NEXT i% CLOSE #1 ENDIF ' Fin de IF EXIST(ficstat$) RETURN R% ENDFUNC PROCEDURE MAJstat(gagnant%) LOCAL x%,i% ,c1%,c2%,c3%,c4%,c5%,c6%,c7%,v%,p%,vi%,inversion%=FALSE ARRAYFILL T%(),0 player% = 1 OPEN "u",#1,ficstat$ FOR C% = 1 TO PRED(ncj%) ' Retracage de la partie (sans le dernier coup evidemment) IF Afficher%=TRUE SETDC _DC(1) Afficher%=FALSE oldafstat%=AFFSTAT% CLR AFFSTAT% AFTAB AFFSTAT%=oldafstat% Afficher%=TRUE ENDIF IF @NcolVides > 1 IF @TestSiGagnera(1)=FALSE IF @TestSiGagnera(2)=FALSE ' afficher "ncolvide > 1" c1% = @NumComb(1) c2% = @NumComb(2) c3% = @NumComb(3) c4% = @NumComb(4) c5% = @NumComb(5) c6% = @NumComb(6) c7% = @NumComb(7) ' La vaaache ! c6% au lieu de c7% ! IF c1% <> -1 AND c2% <> -1 AND c3% <> -1 AND c4% <> -1 AND c5% <> -1 AND c6% <> -1 AND c7% <> -1 ' afficher "c1 à c3 <> -1" 'encours.... inversion% = FALSE vi% = @StatPos(c1%,c2%,c3%,c4%,c5%,c6%,c7%) IF vi% = 0 vi% = @StatPos(c7%,c6%,c5%,c4%,c3%,c2%,c1%) IF vi% > 0 inversion% = TRUE SWAP c1%,c7% SWAP c2%,c6% SWAP c3%,c5% ENDIF ENDIF SEEK #1,c1% * 4 i% = INP%(#1) ' ou se trouve c2 ? IF Afficher% = TRUE THEN af$ = "inp(c1%*4)=" + STR$(i%) + " c1%*4=" + STR$(c1% * 4) IF i% = 0 SEEK #1,c1% * 4 i% = LOF( #1) OUT% #1,i% SEEK #1,i% FOR x% = 0 TO 94 OUT% #1,0 NEXT x% ENDIF p% = i% + c2% * 4 SEEK #1,p% i% = INP%(#1) ' ou se trouve c3 ? IF Afficher% = TRUE THEN af$ = af$ + "|inp%(p%+c2%*4)=" + STR$(i%) + " c2%*4=" + STR$(c2% * 4) + " p%=" + STR$(p%) IF i% = 0 SEEK #1,p% i% = LOF( #1) OUT% #1,i% SEEK #1,i% FOR x% = 0 TO 94 OUT% #1,0 NEXT x% ENDIF p% = i% + c3% * 4 SEEK #1,p% i% = INP%(#1) ' ou se trouve c4 ? IF Afficher% = TRUE THEN af$ = af$ + "|inp(p%+c3%*4)=" + STR$(i%) + " c3%*4=" + STR$(c3% * 4) + " p%=" + STR$(p%) IF i% = 0 SEEK #1,p% i% = LOF( #1) OUT% #1,i% SEEK #1,i% FOR x% = 0 TO 94 OUT% #1,0 NEXT x% ENDIF p% = i% + c4% * 4 SEEK #1,p% i% = INP%(#1) ' ou se trouve c5 ? IF Afficher% = TRUE THEN af$ = af$ + "|inp(p%+c4%*4)=" + STR$(i%) + " c4%*4=" + STR$(c4% * 4) + " p%=" + STR$(p%) IF i% = 0 SEEK #1,p% i% = LOF( #1) OUT% #1,i% SEEK #1,i% FOR x% = 0 TO 94 OUT% #1,0 NEXT x% ENDIF p% = i% + c5% * 4 SEEK #1,p% i% = INP%(#1) ' ou se trouve c6 ? IF Afficher% = TRUE THEN af$ = af$ + "|inp(p%+c5%*4)=" + STR$(i%) + " c5%*4=" + STR$(c5% * 4) + " p%=" + STR$(p%) IF i% = 0 SEEK #1,p% i% = LOF( #1) OUT% #1,i% SEEK #1,i% FOR x% = 0 TO 94 OUT% #1,0 NEXT x% ENDIF p% = i% + c6% * 4 SEEK #1,p% i% = INP%(#1) ' ou se trouve c7 ? IF Afficher% = TRUE THEN af$ = af$ + "|inp(p%+c6%*4)=" + STR$(i%) + " c6%*4=" + STR$(c6%) + "*4 ("+STR$(c6%*4)+") p%=" + STR$(p%) IF i% = 0 SEEK #1,p% i% = LOF( #1) OUT% #1,i% SEEK #1,i% FOR x% = 0 TO 94 OUT% #1,0 NEXT x% ENDIF p% = i% + c7% * 4 SEEK #1,p% i% = INP%(#1) ' ou se trouve les 14 stats ? IF Afficher% = TRUE THEN af$ = af$ + "|inp(p%+c7%*4)=" + STR$(i%) + " c7%*4=" + STR$(c7% * 4) + " p%=" + STR$(p%) IF i% = 0 SEEK #1,p% i% = LOF( #1) OUT% #1,i% SEEK #1,i% FOR x% = 0 TO 13 OUT% #1,0 NEXT x% ENDIF IF inversion% = FALSE p% = i% + PRED(player%) * 7 * 4 + jx%(C%) * 4 af$ = af$ + "| p%=" + STR$(p%) + " soit i%=" + STR$(i%) + " + (player%-1)=" + STR$(player% - 1) + " * 7 * 4 ("+STR$(PRED(player%) * 7 * 4)+") + "+STR$(jx%(C%)*4) ELSE p% = i% + PRED(player%) * 7 * 4 + (6 - jx%(C%)) * 4 af$ = af$ + "| p%=" + STR$(p%) + " soit i%=" + STR$(i%) + " + (player%-1)=" + STR$(player% - 1) + " * 7 * 4 ("+STR$(PRED(player%) * 7 * 4)+") + "+STR$((6 - jx%(C%)) * 4) ENDIF SEEK #1,p% v% = INP%(#1) IF player% = gagnant% v% = MIN(2147483645,v% + 2 ^ MAX(0, DIV(C% + (42 - ncj%),2) - 12)) ELSE v% = MAX(-2147483645,v% - 2 ^ MAX(0, DIV(C% + (42 - ncj%),2) - 12)) ENDIF afficher "majstat :|i%=" + STR$(i%) + "|v%=" + STR$(v%) + " jx%(" + STR$(C%) + ")=" + STR$(jx%(C%)) + "|" + af$ SEEK #1,p% OUT% #1,v% ENDIF ' comb <> -1 ENDIF ' if testsigagnera(2) ENDIF ' if testsigagnera(1) HDescente jx%(C%),player% player% = 3 - player% ELSE ' si moins de 2 colonnes vides on arrête C% = PRED(ncj%) ENDIF NEXT C% CLOSE #1 RETURN PROCEDURE Affstat LOCAL af$,c1%,c2%,c3%,c4%,c5%,c6%,i%,R%,inversion%=FALSE DEFFILL 0 RGBCOLOR 0 PBOX CPX1%,_Y - 40,CPX1% + 7 * TC%,_Y IF EXIST(ficstat$) OPEN "i",#1,ficstat$ c1% = @NumComb(1) c2% = @NumComb(2) c3% = @NumComb(3) c4% = @NumComb(4) c5% = @NumComb(5) c6% = @NumComb(6) c7% = @NumComb(7) IF c1% <> -1 AND c2% <> -1 AND c3% <> -1 AND c4% <> -1 AND c5% <> -1 AND c6% <> -1 AND c7% <> -1 i% = @StatPos(c1%,c2%,c3%,c4%,c5%,c6%,c7%) IF i% = 0 i% = @StatPos(c7%,c6%,c5%,c4%,c3%,c2%,c1%) inversion% = TRUE ENDIF IF i% > 0 SEEK #1,i% RGBCOLOR RGB(255,0,0) FOR C% = 0 TO 6 v% = INP%(#1) af$ = STR$(v%) IF inversion% = FALSE TEXT CPX1% + C% * TC% + TC% / 2 - TXTLEN(af$) / 2,_Y - 40,af$ ELSE TEXT CPX1% + (6 - C%) * TC% + TC% / 2 - TXTLEN(af$) / 2,_Y - 40,af$ ENDIF IF C% = 0 OR v% > maxv% maxv% = v% maxvc% = C% ENDIF NEXT C% IF inversion% = FALSE BOX CPX1% + maxvc% * TC% - 1,_Y - 41,CPX1% + maxvc% * TC% + TC% - 1,_Y - 21 ELSE BOX CPX1% + (6 - maxvc%) * TC% - 1,_Y - 41,CPX1% + (6 - maxvc%) * TC% + TC% - 1,_Y - 21 ENDIF RGBCOLOR RGB(255,255,0) FOR C% = 0 TO 6 v% = INP%(#1) af$ = STR$(v%) IF inversion% = FALSE TEXT CPX1% + C% * TC% + TC% / 2 - TXTLEN(af$) / 2,_Y - 20,af$ ELSE TEXT CPX1% + (6 - C%) * TC% + TC% / 2 - TXTLEN(af$) / 2,_Y - 20,af$ ENDIF IF C% = 0 OR v% > maxv% maxv% = v% maxvc% = C% ENDIF NEXT C% IF inversion% = FALSE BOX CPX1% + maxvc% * TC% - 1,_Y - 20,CPX1% + maxvc% * TC% + TC% - 1,_Y - 1 ELSE BOX CPX1% + (6 - maxvc%) * TC% - 1,_Y - 20,CPX1% + (6 - maxvc%) * TC% + TC% - 1,_Y - 1 ENDIF ELSE afficher "affstat:|i%=" + STR$(i%) ENDIF ' if i%>0 ELSE afficher "affStat:|"+STR$(c1%) + " " + STR$(c2%) + " " + STR$(c3%) + " " + STR$(c4%) + " " + STR$(c5%) + " " + STR$(c6%) + " " + STR$(c7%) ENDIF ' si comb -1 CLOSE #1 ENDIF ' if exist ficstat$ RETURN FUNCTION StatPos(c1%,c2%,c3%,c4%,c5%,c6%,c7%) LOCAL i%,R%=0 SEEK #1,c1% * 4 i% = INP%(#1) IF Afficher% = TRUE THEN af$ = "StatPos :|i%=" + STR$(i%) IF i% > 0 SEEK #1,i% + c2% * 4 IF Afficher%=TRUE THEN af$=af$+"|seek #1,i%+c2%*4="+STR$(i%)+"+"+STR$(c2%)+"*4="+STR$(i% + c2% * 4) i% = INP%(#1) IF Afficher% = TRUE THEN af$ = af$ + " - i%=inp%(#1)=" + STR$(i%) IF i% > 0 SEEK #1,i% + c3% * 4 IF Afficher%=TRUE THEN af$=af$+"|seek #1,i%+c3%*4="+STR$(i%)+"+"+STR$(c3%)+"*4="+STR$(i% + c3% * 4) i% = INP%(#1) IF Afficher% = TRUE THEN af$ = af$ + " - i%=" + STR$(i%) IF i% > 0 SEEK #1,i% + c4% * 4 IF Afficher%=TRUE THEN af$=af$+"|seek #1,i%+c4%*4="+STR$(i%)+"+"+STR$(c4%)+"*4="+STR$(i% + c4% * 4) i% = INP%(#1) IF Afficher% = TRUE THEN af$ = af$ + " - i%=" + STR$(i%) IF i% > 0 SEEK #1,i% + c5% * 4 IF Afficher%=TRUE THEN af$=af$+"|seek #1,i%+c5%*4="+STR$(i%)+"+"+STR$(c5%)+"*4="+STR$(i% + c5% * 4) i% = INP%(#1) IF Afficher% = TRUE THEN af$ = af$ + " - i%=" + STR$(i%) IF i% > 0 SEEK #1,i% + c6% * 4 IF Afficher%=TRUE THEN af$=af$+"|seek #1,i%+c6%*4="+STR$(i%)+"+"+STR$(c6%)+"*4="+STR$(i% + c6% * 4) i% = INP%(#1) IF Afficher% = TRUE THEN af$ = af$ + " - i%=" + STR$(i%) IF i% > 0 SEEK #1,i% + c7% * 4 IF Afficher%=TRUE THEN af$=af$+"|seek #1,i%+c7%*4="+STR$(i%)+"+"+STR$(c7%)+"*4="+STR$(i% + c7% * 4) i% = INP%(#1) IF Afficher% = TRUE THEN af$ = af$ + " - i%=" + STR$(i%) IF i% > 0 R% = i% ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF afficher af$ RETURN R% ENDFUNC PROCEDURE XalertAff(Xa%,Ya%,Wa%,Ha%,NLM%,Nb%,Titre$,BS%,TH%,BD%) LOCAL i%,x% RGBCOLOR RGB(255,255,255) BOX Xa%,Ya%,Xa% + PRED(Wa%),Ya% + PRED(Ha%) RGBCOLOR RGB(0,0,0) PBOX Xa% + 1,Ya% + 1,Xa% + PRED(Wa%) - 1,Ya% + PRED(Ha%) - 1 RGBCOLOR RGB(0,0,127) PBOX Xa% + 1,Ya% + 1,Xa% + PRED(Wa%) - 1,Ya% + TH% GRAPHMODE ,TRANSPARENT RGBCOLOR RGB(200,200,200) TEXT Xa% + Wa% / 2 - TXTLEN(Titre$) / 2,Ya% + 1,Titre$ RGBCOLOR RGB(255,255,255) LINE Xa%,Ya% + TH%,Xa% + Wa%,Ya% + TH% RGBCOLOR RGB(255,255,255) FOR i% = 1 TO NLM% x% = Xa% + Wa% / 2 x% = x% - TXTLEN(ba_l$(i%)) / 2 TEXT x%,Ya% + TH% / 2 + i% * TH%,ba_l$(i%) NEXT i% FOR i% = 1 TO Nb% IF i% = BS% RGBCOLOR RGB(255,255,255) PBOX Xa% + ba_x1%(i%),Ya% + ba_y1%(i%),Xa% + ba_x2%(i%),Ya% + ba_y2%(i%) RGBCOLOR RGB(100,100,255) BOX Xa% + ba_x1%(i%),Ya% + ba_y1%(i%),Xa% + ba_x2%(i%),Ya% + ba_y2%(i%) RGBCOLOR RGB(100,100,0) TEXT Xa% + (ba_x1%(i%) + ba_x2%(i%)) / 2 - TXTLEN(ba_t$(i%)) / 2,Ya% + ba_y1%(i%) + 2,ba_t$(i%) ELSE IF i% = BD% RGBCOLOR RGB(75,80,100) ELSE RGBCOLOR RGB(0,20,55) ENDIF PBOX Xa% + ba_x1%(i%) + 1,Ya% + ba_y1%(i%) + 1,Xa% + ba_x2%(i%) - 1,Ya% + ba_y2%(i%) - 1 RGBCOLOR RGB(255,255,255) BOX Xa% + ba_x1%(i%),Ya% + ba_y1%(i%),Xa% + ba_x2%(i%),Ya% + ba_y2%(i%) TEXT Xa% + (ba_x1%(i%) + ba_x2%(i%)) / 2 - TXTLEN(ba_t$(i%)) / 2,Ya% + ba_y1%(i%) + 2,ba_t$(i%) ENDIF IF i% = BD% RGBCOLOR RGB(200,255,200) BOX Xa% + ba_x1%(i%) - 1,Ya% + ba_y1%(i%) - 1,Xa% + ba_x2%(i%) + 1,Ya% + ba_y2%(i%) + 1 ENDIF NEXT i% RETURN PROCEDURE Xalert(Titre$,Message$,Bouton$,VAR R%) LOCAL i%,TH%,a$,v%,l$,lmax%,NLM%=0,Wa%,Ha%,XBouton%,YBouton%,Nb%=0,Xa%,Ya%,BD%=1 DIM ba_l$(20),ba_x1%(20),ba_y1%(20),ba_x2%(20),ba_y2%(20),ba_t$(20) SETDC _DC(1) PAUSE 1 WINDGET 14,TH% lmax% = TXTLEN(Titre$) + 2 a$ = Message$ DO v% = INSTR(a$,"|") IF v% > 0 l$ = MID$(a$,1,PRED(v%)) a$ = MID$(a$,SUCC(v%)) ELSE l$ = a$ a$ = "" ENDIF INC NLM% ba_l$(NLM%) = l$ lmax% = MAX(lmax%,TXTLEN(l$)) EXIT IF LEN(a$) = 0 LOOP PAUSE 1 a$ = Bouton$ DO v% = INSTR(a$,"|") IF v% > 0 l$ = MID$(a$,1,PRED(v%)) a$ = MID$(a$,SUCC(v%)) ELSE l$ = a$ a$ = "" ENDIF lmax% = MAX(lmax%,TXTLEN(l$) + 6) EXIT IF LEN(a$) = 0 LOOP Wa% = lmax% + 40 YBouton% = (NLM% + 3) * TH% XBouton% = 5 a$ = Bouton$ DO v% = INSTR(a$,"|") IF v% > 0 l$ = MID$(a$,1,PRED(v%)) a$ = MID$(a$,SUCC(v%)) ELSE l$ = a$ a$ = "" ENDIF INC Nb% ba_x1%(Nb%) = XBouton% ba_y1%(Nb%) = YBouton% ba_x2%(Nb%) = XBouton% + TXTLEN(l$) + 4 ba_y2%(Nb%) = YBouton% + TH% + 4 ba_t$(Nb%) = l$ ADD XBouton%,TXTLEN(l$) + 8 IF XBouton% > Wa% - 5 ' Tl% = ((Wa% - 5) - ba_x2%(Nb%)) / 2 IF Tl% > 0 FOR i% = 1 TO Nb% IF ba_y1%(i%) = ba_y1%(Nb%) ADD ba_x1%(i%),Tl% ADD ba_x2%(i%),Tl% ENDIF NEXT i% ENDIF ' XBouton% = 5 ADD YBouton%,TH% + 6 ELSE IF LEN(a$) = 0 Tl% = ((Wa% - 5) - ba_x2%(Nb%)) / 2 IF Tl% > 0 FOR i% = 1 TO Nb% IF ba_y1%(i%) = ba_y1%(Nb%) ADD ba_x1%(i%),Tl% ADD ba_x2%(i%),Tl% ENDIF NEXT i% ENDIF ENDIF EXIT IF LEN(a$) = 0 LOOP IF Nb% = 1 ba_x1%(1) = 5 ba_x2%(1) = Wa% - 5 ENDIF Ha% = ba_y2%(Nb%) + 10 Xa% = _X / 2 - Wa% / 2 Ya% = _Y / 2 - Ha% / 2 XalertAff(Xa%,Ya%,Wa%,Ha%,NLM%,Nb%,Titre$,BS%,TH%,BD%) DO mx1% = mx%,my1% = my% F$ = INKEY$ MOUSE mx%,my%,mk% ' EXIT IF mk% = 2 ' IF mx% <> mx1% AND my% <> my1% AND mk% = 0 ' IF mx% > Xa% AND mx% < Xa% + Wa% AND my% > Ya% AND my% < Ya% + Ha% bs1% = BS% BS% = 0 FOR i% = 1 TO Nb% IF mx% > Xa% + ba_x1%(i%) AND mx% < Xa% + ba_x2%(i%) AND my% > Ya% + ba_y1%(i%) AND my% < Ya% + ba_y2%(i%) BS% = i% i% = Nb% ENDIF NEXT i% IF bs1% <> BS% XalertAff(Xa%,Ya%,Wa%,Ha%,NLM%,Nb%,Titre$,BS%,TH%,BD%) ENDIF IF mk% = 1 AND mx% > Xa% AND mx% < Xa% + Wa% AND my% > Ya% AND my% < Ya% + Ha% IF my% < Ya% + TH% '(titre) pmx% = mx% - Xa%,pmy% = my% - Ya% DO MOUSE mx%,my%,mk% xa1% = Xa%,ya1% = Ya% Xa% = MAX(0,MIN(_X - Wa%,mx% - pmx%)),Ya% = MAX(0,MIN(_Y - Ha%,my% - pmy%)) IF Xa% <> xa1% OR Ya% <> ya1% VSYNC IF Xa% > xa1% AND Ya% > ya1% ' haut gauche ~BitBlt(_DC(1),xa1%,ya1%,Xa% - xa1%,Ya% - ya1%,LogicalDC%,xa1%,ya1%,SRCCOPY) ENDIF IF Xa% < xa1% AND Ya% > ya1% ' haut droit ~BitBlt(_DC(1),Xa% + Wa%,ya1%,xa1% - Xa%,Ya% - ya1%,LogicalDC%,Xa% + Wa%,ya1%,SRCCOPY) ENDIF IF Xa% > xa1% AND Ya% < ya1% ' bas gauche ~BitBlt(_DC(1),xa1%,Ya% + Ha%,Xa% - xa1%,ya1% - Ya%,LogicalDC%,xa1% ,Ya% + Ha%,SRCCOPY) ENDIF IF Xa% < xa1% AND Ya% < ya1% ' bas droite ~BitBlt(_DC(1),Xa% + Wa%,Ya% + Ha%,xa1% - Xa%,ya1% - Ya%,LogicalDC%,Xa% + Wa% ,Ya% + Ha%,SRCCOPY) ENDIF IF Xa% > xa1% ' gauche ~BitBlt(_DC(1),xa1%,Ya%,Xa% - xa1%,Ha%,LogicalDC%,xa1%,Ya%,SRCCOPY) ENDIF IF Ya% > ya1% ' haut ~BitBlt(_DC(1),Xa%,ya1%,Wa%,Ya% - ya1%,LogicalDC%,Xa%,ya1%,SRCCOPY) ENDIF IF Xa% < xa1% ' droite ~BitBlt(_DC(1),Xa% + Wa%,Ya%,xa1% - Xa%,Ha%,LogicalDC%,Xa% + Wa%,Ya%,SRCCOPY) ENDIF IF Ya% < ya1% ' bas ~BitBlt(_DC(1),Xa% ,Ya% + Ha%,Wa%,ya1% - Ya%,LogicalDC%,Xa%, Ya% + Ha%,SRCCOPY) ENDIF ' AA% = 1 ' GOTO AffichageAlert ' AA1: XalertAff(Xa%,Ya%,Wa%,Ha%,NLM%,Nb%,Titre$,BS%,TH%,BD%) ENDIF EXIT IF mk% = 0 LOOP ELSE ' if my% Xa% + ba_x1%(i%) AND mx% < Xa% + ba_x2%(i%) AND my% > Ya% + ba_y1%(i%) AND my% < Ya% + ba_y2%(i%) R% = i% i% = Nb% ENDIF NEXT i% IF LEN(F$) > 0 IF ASC(F$) = 13 OR ASC(F$) = 10 R% = 1 ENDIF ENDIF IF R% > 0 DO MOUSE mx%,my%,mk% EXIT IF mk% = 0 LOOP ~BitBlt(_DC(1),Xa% ,Ya%, Wa%,Ha%,LogicalDC%,Xa%, Ya%, SRCCOPY) EXIT IF TRUE ENDIF ENDIF ENDIF ' is mk = 1 dans alerte IF LEN(F$) > 0 IF ASC(F$) = 13 OR ASC(F$) = 10 R% = BD% IF R% > 0 DO MOUSE mx%,my%,mk% EXIT IF mk% = 0 LOOP ~BitBlt(_DC(1),Xa% ,Ya%, Wa%,Ha%,LogicalDC%,Xa%, Ya%, SRCCOPY) EXIT IF TRUE ENDIF ELSE IF ASC(RIGHT$(F$)) = 77 BD% = SUCC(MOD(BD%,Nb%)) XalertAff(Xa%,Ya%,Wa%,Ha%,NLM%,Nb%,Titre$,BS%,TH%,BD%) ELSE IF ASC(RIGHT$(F$)) = 75 DEC BD% IF BD% = 0 THEN BD% = Nb% XalertAff(Xa%,Ya%,Wa%,Ha%,NLM%,Nb%,Titre$,BS%,TH%,BD%) ENDIF ENDIF LOOP ERASE ba_x1%(),ba_y1%(),ba_x2%(),ba_y2%(),ba_t$(),ba_l$() RETURN PROCEDURE TT(n%) ' SETDC _DC(1) ' DEFFILL 0 ' RGBCOLOR 0 ' PBOX 0,0,80,20 ' RGBCOLOR RGB(255,0,255) ' TEXT 0,0,n% RETURN PROCEDURE Testaftab CLS 0 AFTAB ARRAYFILL T%(),0 DO MOUSE mx%,my%,mk% EXIT IF mk% = 2 IF mk% = 1 IF mx% > CPX1% AND mx% < CPX1% + TC% * 7 AND my% > CPY1% + TC% AND my% < CPY1% + TC% * 6 cx% = SUCC((mx% - CPX1%) / TC%) cy% = SUCC(5 - (my% - TC% - CPY1%) / TC%) T%(cx%,cy%) = MOD(T%(cx%,cy%) + 1,3) PAUSE 1 AFTAB DO MOUSE mx%,my%,mk% EXIT IF mk% = 0 LOOP ENDIF ENDIF LOOP RETURN FUNCTION CoupDonneCG(player%,Col%) LOCAL x%,R%=FALSE IF T%(Col%,6) = 0 DIM CDCG%(7) FOR x% = 1 TO 7 CDCG%(x%) = @ColonneGagnante(player%,x%) NEXT x% HDescente PRED(Col%),player% FOR x% = 1 TO 7 IF @ColonneGagnante(player%,x%) > CDCG%(x%) R% = TRUE x% = 7 ENDIF NEXT x% Hsuppr PRED(Col%) ERASE CDCG%() ENDIF RETURN R% ENDFUNC FUNCTION ColonneGagnante(player%,Col%) ' Si 2 emplacements consécutifs gagnent LOCAL y%,R%=0,NGC%=0 FOR y% = 6 DOWNTO 1 IF T%(Col%,y%) = 0 T%(Col%,y%) = player% IF @Verif4(player%) = TRUE INC NGC% ELSE CLR NGC% ENDIF T%(Col%,y%) = 0 IF NGC% >= 2 R% = MAX(R%,NGC%) y% = 1 ENDIF ELSE y% = 1 ENDIF NEXT y% RETURN R% ENDFUNC PROCEDURE TTt FULLW #1 DO F$ = INKEY$ IF LEN(F$) > 0 ? ASC(RIGHT$(F$)) EXIT IF F$ = " " ENDIF LOOP CLOSEW #1 RETURN FUNCTION S$(n%) LOCAL r$ IF n% > 1 r$ = "s" ELSE r$ = "" ENDIF RETURN r$ ENDFUNC FUNCTION xlineinput$(canal%) LOCAL L%,l$,o% l$ = "" L% = LOC(#canal%) DO IF NOT EOF( #1) o% = INP|(#1) IF o% > 31 l$ = l$ + CHR$(o%) ELSE EXIT IF TRUE ENDIF ELSE EXIT IF TRUE ENDIF LOOP RETURN l$ ENDFUNC PROCEDURE a CLOSEW #1 FILESELECT "*.txt","",fic$ FULLW #1 PEEKEVENT PEEKEVENT PEEKEVENT PEEKEVENT PEEKEVENT PEEKEVENT ? AT(1,1) PEEKEVENT PEEKEVENT PEEKEVENT PEEKEVENT PEEKEVENT OPEN "i",#1,fic$ WHILE NOT EOF( #1) PEEKEVENT o% = INP|(#1) IF o% < 32 RGBCOLOR RGB(0,50,200) af$ = "[" + STR$(o%) + "]" ELSE RGBCOLOR RGB(0,0,0) af$ = CHR$(o%) ENDIF ? af$; L% = L% + TXTLEN(af$) IF L% > _X - 50 CLR L% ? KEYGET rien% ENDIF WEND CLOSE #1 RETURN PROCEDURE sauverINI OPEN "o",#1,ficini$ IF AFFSTAT% = TRUE ? #1,"AFFSTAT = OUI" ELSE ? #1,"AFFSTAT = NON" ENDIF IF Player1% = Humain% ? #1,"ROUGES = HUMAIN" ELSE ? #1,"ROUGES = ORDI" ENDIF IF Player2% = Humain% ? #1,"JAUNES = HUMAIN" ELSE ? #1,"JAUNES = ORDI" ENDIF CLOSE #1 RETURN PROCEDURE lireINI LOCAL l$,v1%,v2% IF EXIST(ficini$) OPEN "i",#1,ficini$ DO l$ = @xlineinput$(1) PAUSE 1 l$ = UCASE$(l$) PAUSE 1 l$ = TRIM$(l$) IF MID$(l$,1,7) = "AFFSTAT" v1% = INSTR(l$,"OUI") v2% = INSTR(l$,"NON") IF v1% > 0 AND v2% = 0 AFFSTAT% = TRUE ELSE IF v1% = 0 AND v2% > 0 AFFSTAT% = FALSE ELSE IF v1% > v2% AFFSTAT% = FALSE ELSE AFFSTAT% = TRUE ENDIF ENDIF IF MID$(l$,1,5) = "ROUGE" v1% = INSTR(l$,"HUMAIN") v2% = INSTR(l$,"ORDI") IF v1% > 0 AND v2% = 0 Player1% = Humain% ELSE IF v1% = 0 AND v2% > 0 Player1% = Ordi% ELSE IF v1% > v2% Player1% = Ordi% ELSE Player1% = Humain% ENDIF ENDIF IF MID$(l$,1,5) = "JAUNE" v1% = INSTR(l$,"HUMAIN") v2% = INSTR(l$,"ORDI") IF v1% > 0 AND v2% = 0 Player2% = Humain% ELSE IF v1% = 0 AND v2% > 0 Player2% = Ordi% ELSE IF v1% > v2% Player2% = Ordi% ELSE Player2% = Humain% ENDIF ENDIF EXIT IF EOF( #1) LOOP CLOSE #1 ENDIF RETURN PROCEDURE b CLOSEW #1 FULLW #1 DO r1% = R% R% = GetAsyncKeyState(27) IF r1% <> R% ? BIN$(R%,16) ENDIF LOOP CLOSEW #1 RETURN FUNCTION MinMax(player%,Nrec%) LOCAL i%,R% FOR i% = 1 TO 7 IF T%(i%,6) = 0 HDescente i% - 1,player% IF @Verif4(player%) = TRUE IF player% = 1 R% = 1000 ELSE R% = -1000 ENDIF ELSE IF @TestSiGagnera(player%) = TRUE IF player% = 1 R% = 800 ELSE R% = -800 ENDIF ELSE IF Nrec% > 0 R% = @MinMax(3 - player%,Nrec%) ELSE IF @TestSiGagnera(3 - player%) = TRUE IF player% = 1 R% = -800 ELSE R% = 800 ENDIF ENDIF Hsuppr i% - 1 ENDIF NEXT i% RETURN R% ENDFUNC