Publié par SFLPMEA le 18/11/2006
CERCLES.BAS Source Qbasic Version 4.5 (ou 1.1). Programme de déplacement de cercles avec test de collision, changements de direction (toutes), modification de vitesse. Par SFLPMEa (sur une idée de sazuke83).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
' ***** Déplacement de 2 cercles SCREEN 12: WINDOW SCREEN (1, 1)-(640, 480) CLS : L.Ecr% = 640: H.Ecr% = 480 LINE (9, 9)-(631, 471), 11, B PAINT (5, 5), 10, 11 ' ***** Départ du cercle n° 1 R1% = 30: D.X1% = 1: D.Y1% = 1 X.C1% = 150: Y.C1% = 150 Xold1% = X.C1%: Yold1% = Y.C1% CIRCLE (X.C1%, Y.C1%), R1%, 14 CIRCLE (X.C1%, Y.C1%), R1% - 2, 14 K1% = 1 ' ***** Départ du cercle n° 2 R2% = 50: D.X2% = 1: D.Y2% = 1 X.C2% = 330: Y.C2% = 330 Xold2% = X.C2%: Yold2% = Y.C2% CIRCLE (X.C2%, Y.C2%), R2%, 12 CIRCLE (X.C2%, Y.C2%), R2% - 2, 12 K2% = 1 DO Debut! = TIMER ' ***** Cercle N° 1 X.C1% = X.C1% + D.X1% * K1%: Y.C1% = Y.C1% + D.Y1% * K1% CIRCLE (Xold1%, Yold1%), R1%, 0 CIRCLE (Xold1%, Yold1%), R1% - 1, 0 CIRCLE (Xold1%, Yold1%), R1% - 2, 0 IF (X.C1% >= L.Ecr% - R1% - 11) OR (X.C1% <= R1% + 11) THEN D.X1% = -D.X1% END IF IF (Y.C1% >= H.Ecr% - R1% - 11) OR (Y.C1% <= R1% + 11) THEN D.Y1% = -D.Y1% END IF CIRCLE (X.C1%, Y.C1%), R1%, 14 CIRCLE (X.C1%, Y.C1%), R1% - 1, 14 CIRCLE (X.C1%, Y.C1%), R1% - 2, 14 Xold1% = X.C1%: Yold1% = Y.C1% ' ***** Cercle N° 2 X.C2% = X.C2% + D.X2% * K2%: Y.C2% = Y.C2% + D.Y2% * K2% CIRCLE (Xold2%, Yold2%), R2%, 0 CIRCLE (Xold2%, Yold2%), R2% - 1, 0 CIRCLE (Xold2%, Yold2%), R2% - 2, 0 IF (X.C2% >= L.Ecr% - R2% - 11) OR (X.C2% <= R2% + 11) THEN D.X2% = -D.X2% END IF IF (Y.C2% >= H.Ecr% - R2% - 11) OR (Y.C2% <= R2% + 11) THEN D.Y2% = -D.Y2% END IF CIRCLE (X.C2%, Y.C2%), R2%, 12 CIRCLE (X.C2%, Y.C2%), R2% - 1, 12 CIRCLE (X.C2%, Y.C2%), R2% - 2, 12 Xold2% = X.C2%: Yold2% = Y.C2% ' ***** Test de rencontre IF (R1% + R2%) ^ 2 >= (Y.C1% - Y.C2%) ^ 2 + (X.C1% - X.C2%) ^ 2 THEN BEEP CEPABON: ' **** Changement des sens de déplacement RANDOMIZE TIMER * 100 Cas% = INT(RND * 19) + 1 SELECT CASE Cas% CASE 1: D.X1% = -D.X1%: D.Y1% = -D.Y1% ') D.X2% = -D.X2%: D.Y2% = -D.Y2% ') Inversions de toutes directions CASE 2: D.X1% = -D.X1%: D.X2% = -D.X2% ' Inversions de direction horizontale CASE 3: D.Y1% = -D.Y1%: D.Y2% = -D.Y2% ' Inversions de direction verticale CASE 4: D.X1% = -D.X1% ' Inversion de direction horizontale Cercle 1 CASE 5: D.Y1% = -D.Y1% ' etc CASE 6: D.X2% = -D.X2% CASE 7: D.Y2% = -D.Y2% CASE 8: D.X1% = 0: K1% = 1 CASE 9: D.Y1% = 0: K1% = 1 CASE 10: D.X2% = 0: K2% = 1 CASE 11: D.Y2% = 0: K2% = 1 CASE 12: D.X1% = 1 CASE 13: D.X1% = -1 CASE 14: D.Y1% = 1 CASE 15: D.Y1% = -1 CASE 16: D.X2% = 1 CASE 17: D.X2% = -1 CASE 18: D.Y2% = 1 CASE 19: D.Y2% = -1 CASE 20: K1% = RND(99) + 1 ' **** Modif de la vitesse de d‚placement CASE 21: K2% = RND(99) + 1 ' ***** D'autres possibilités pourraient être envisagées .... END SELECT Niou.C1% = X.C1% + D.X1% Niou.Y1% = Y.C1% + D.Y1% Niou.C2% = X.C2% + D.X2% Niou.Y2% = Y.C2% + D.Y2% IF (R1% + R2%) ^ 2 >= (Niou.Y1% - Niou.Y2%) ^ 2 + (Niou.C1% - Niou.C2%) ^ 2 THEN GOTO CEPABON END IF END IF 'DO 'LOOP UNTIL TIMER >= Debut! + .000001 'OR TIMER < Debut! ' !!!!! Ce temporisateur ne MARCHE PAS !!!!! POURQUOI ????? ' ***** Je le supprime car il ralentit trop ..... LOOP UNTIL INKEY$ = CHR$(27)