Informations sur: CERCLES.BAS

Publié par SFLPMEA le 18/11/2006

Description

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).

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 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)
 
 
v6 © Computaid SPRL 2005-2008 - Tous droits réservés - Hébergé par eTigris - Page générée en 0,034 s - Crédits - Stats
1 connecté