Informations sur: TESTBOUM.BAS

Publié par SFLPMEA le 13/01/2007

Description

Source Qbasic Version 4.5 (ou 1.1). Déplacement aléatoire de plusieurs balles avec tests de collision. Par SFLPMEA

Code source (langage qbasic)

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 plusieurs balles *
 ' *    avec tests de collision      *
 ' ***********************************
 ' TESTBOUM.BAS
    SCREEN 12: WINDOW SCREEN (1, 1)-(640, 480)
    OPTION BASE 1
' ***** TEST DE RAPIDITE
    Debut! = TIMER
    DO
    Tempo& = Tempo& + 1
    LOOP UNTIL TIMER > Debut! + .5
   
    Nb% = (10)              ' ***** Nombre de balles (MODIFICATION POSSIBLE)
   
    DIM R(Nb%) AS INTEGER   ' ***** Rayon
    DIM X(Nb%) AS INTEGER   ' ***** Abscisse du centre (C'est un ENTIER)
    DIM Y(Nb%) AS INTEGER   ' ***** Ordonnée du centre      Idem
    DIM CX(Nb%) AS INTEGER  ' ***** Pas des abscisses
    DIM CY(Nb%) AS INTEGER  ' ***** Pas des ordonnées
 
' ***** Formule donnée par Billy pour déterminer une valeur aléatoire
' ***** entre deux limites INCLUSES
' INT ((limite supérieure - limite inférieure + 1) * RND + limite inférieure
' SOIT en utilisant des noms de zones plus courts
' Pour les ENTIERS
' INT (Ls - Li + 1) * RND + Li
' Et pour des SINGLES (Billy ne le dit pas .....)
' A! = (Ls! - Li! + 1) * RND + Li!
' OU PEUT-ETRE A! = (Ls! - Li! + .1) * RND + Li!
 
' ***** Indication des minis et maxis
    Rs% = 40: Ri% = 20           ' ** Rayon (s pour supérieur et i pour inférieur)
    Xs% = 640 - Rs%: Xi% = Rs%   ' ** Abscisse du centre
    Ys% = 480 - Rs%: Yi% = Rs%   ' ** Ordonnée du Centre
    Cxs% = 2: Cxi% = 1           ' ** Pas des Abscisses
    Cys% = 2: Cyi% = 1           ' ** Pas des ordonnées
    X.Mini% = Rs%: X.Maxi% = 640 - Rs%  ' ***** Pour ne pas sortir de l'écran
    Y.Mini% = Rs%: Y.Maxi% = 480 - Rs%
    Couleur% = 8
    
' ***** Initialisation des tables (Données de départ)
    RANDOMIZE TIMER
    FOR T% = 1 TO Nb%
        R(T%) = INT(Rs% - Ri% + 1) * RND + Ri%
        X(T%) = INT(Xs% - Xi% + 1) * RND + Xi%
        Y(T%) = INT(Ys% - Yi% + 1) * RND + Yi%
        CX(T%) = (Cxs% - Cxi% + 1) * RND + Cxi%
        CY(T%) = (Cys% - Cyi% + 1) * RND + Cyi%
    NEXT T%
   
    DO
        FOR B% = 1 TO Nb%
            ' ** Zones auxilliaires pour faciliter l'écriture
            SX% = X(B%): SY% = Y(B%)
            ' ***** TESTS de COLLISION avec les AUTRES BALLES
            FOR C% = 1 TO Nb%
                IF SX% <> X(C%) AND SY% <> Y(C%) THEN
                     ' ***** Ce doit être une balle différente
                     C1.2 = (SX% - X(C%)) ^ 2 ' *** Pitre à Gore décomposé
                     C2.2 = (SY% - Y(C%)) ^ 2
                     Hypo! = SQR(C1.2 + C2.2)
                     IF Hypo! <= R(B%) + R(C%) + 2 THEN
                         CX(B%) = -CX(B%) ' ***** Je ne sais pas quelle solution est la meilleure
                         'CY(B%) = -CY(B%)
                         CX(C%) = -CX(C%)
                         'CY(C%) = -CY(C%)
                     END IF
                END IF
            NEXT C%
           
            ' ***** TESTS de Tentative de sortie
            SX% = X(B%): SY% = Y(B%)
            IF SX% + CX(B%) < X.Mini% OR SX% + CX(B%) > X.Maxi% THEN
                CX(B%) = -CX(B%)
            END IF
            IF SY% + CY(B%) < Y.Mini% OR SY% + CY(B%) > Y.Maxi% THEN
                CY(B%) = -CY(B%)
            END IF
           
            ' ***** Effacer le cercle existant
            CIRCLE (X(B%), Y(B%)), R(B%), 0
            CIRCLE (X(B%), Y(B%)), R(B%) - 1, 0
           
            ' ***** Calcul des nouvelles coordonnées du centre
            X(B%) = X(B%) + CX(B%): Y(B%) = Y(B%) + CY(B%)
           
            ' ***** Dessiner le  nouveau cercle
            Couleur% = Couleur% + 1
            IF Couleur% > 15 THEN Couleur% = 9
            CIRCLE (X(B%), Y(B%)), R(B%), Couleur%
            CIRCLE (X(B%), Y(B%)), R(B%) - 1, Couleur%
            'SLEEP
        NEXT B%
      
       FOR Z& = 1 TO Tempo&: NEXT  ' ***** Ralentisseur
   
    LOOP UNTIL INKEY$ = CHR$(27)
    
   
 
v6 © Computaid SPRL 2005-2008 - Tous droits réservés - Hébergé par eTigris - Page générée en 0,031 s - Crédits - Stats
1 connecté