Informations sur: pingpong qui fonctionne pas

Publié par sasuke83 le 26/12/2006

Description

pp

Code source (langage non précisé)

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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
DECLARE SUB graph ()
DECLARE SUB terrain ()

TYPE TBALLE
 rayon as integer
 X as SINGLE
 Y as SINGLE
 CX as SINGLE
 CY as SINGLE
END TYPE

DIM BALLE(3) as TBALLE




                            
largeurecran = 640          '   D‚fini la Largeur de l'‚cran
hauteurecran = 460          '   D‚fini la Hauteur de l'‚cran

pasX = 3                    ''
pasX2 = 2                   ''' D‚fini la valeur des pas des cercles
pasY = 3                    '''
pasY2 = 2                   ''

Ycercle = Ydepart           ''
Xcercle = Xdepart           '''
Ycercle2 = Ydepart2         '''' D‚fini les coordonn‚es des cercles. (auxquelles s'ajouteront les pas)
Xcercle2 = Xdepart2         ''''
rayon = 12                  '''  D‚fini la taille du Rayon des cercles
rayon2 = 12                 ''
                            
compteur1 = 0               '    Initialise les compteurs
compteur2 = 0               '





DIM touche AS STRING        '''' D‚clarer la chaine 'touche'

'---------------------
DIM X1 AS INTEGER    '''''
DIM X2 AS INTEGER    '''''' d‚claration des variables palier 1
DIM Y1 AS INTEGER    '''''
DIM Y2 AS INTEGER    '''
'---------------------
X1 = 20              ''''
X2 = 30              '''''
Y1 = 50              '''''' coordonn‚es palier 1
Y2 = 250             '''''
pas = 20             ''''   d‚fini le pas pour le palier (r‚utilis‚ pour le palier 2)
'---------------------


'---------------------

DIM PX1 AS INTEGER    '''''
DIM PX2 AS INTEGER    '''''' d‚claration des variables palier 2
DIM PY1 AS INTEGER    '''''
DIM PY2 AS INTEGER    '''
'---------------------
PX1 = 610             ''''
PX2 = 620             '''''
PY1 = 50              '''''' coordonn‚es palier 2
PY2 = 250             ''''
'---------------------

'xxxxxxxxxxxxxxxxxxxxxx TABLEAU DEBUT xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'                                                                                                   x
'                                                                                                   x
 CALL graph         ' affiche la SUB 'graph', ici le tableau                                        x
   SLEEP            ' attende d'une touche                                                        x
  CLS               ' tout effacer, pour laisser place au jeu                                      x
'                                                                                                   x
SCREEN 12          ' On se met en screnn 12 pour le jeu                                             x
'                  ' La SUB est dans un screen 9, pour pouvoir                                      x
'                  ' mettre le fond de texte en couleur.                                            x
'                                                                                                   x
'                                                                                                   x
    LINE (0, 0)-(largeurecran, hauteurecran), 15, BF             ' Le fond du terrain (tout blanc)  x
    LINE (10, 10)-(largeurecran - 10, hauteurecran - 10), 6, BF  ' + le stabil‚ (marron)            x
'                                                                                                   x
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Xold = Xcercle: Yold = Ycerlce + 30: Xold2 = Xcercle2: Yold2 = Ycercle2 '******* Sinon Les premiers OLD sont en (0,0) et ‡a me fais un rond marron dans ma barre blanche ( a enlever pour tester ;) )



'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'                                                                    x
'-------------******** BOUCLE GENERALE ********--------------------- x
'                                                                    x
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                                                                     

DO

 CALL terrain '*****  SUB pour la mise en place du terrain de jeu


'---------------Creation des paliers ---------------

       LINE (X1, Y1)-(X2, Y2), 12, BF      '''''' palier 1   ' Cr‚er la raquette 1
       LINE (PX1, PY1)-(PX2, PY2), 9, BF   '''''' palier 2   ' Cr‚er la raquette 2


'----------------CERCLES--------------------------
FOR i = LBOUND(BALLE) TO UBOUND(BALLE)
   BALLE(i).rayon = RND * 10
   BALLE(i).X = RND * 640
   BALLE(i).Y = RND * 320
   BALLE(i).CX = RND
   BALLE(i).CY = RND
NEXT i


DO

  FOR i = LBOUND(BALLE) TO UBOUND(BALLE)

   CIRCLE (BALLE(i).X, BALLE(i).Y), BALLE(i).rayon, 6
   BALLE(i).X = BALLE(i).X + BALLE(i).CX
   BALLE(i).Y = BALLE(i).Y + BALLE(i).CY

   IF BALLE(i).X - BALLE(i).rayon < 0 OR BALLE(i).X + BALLE(i).rayon > 640 THEN
 BALLE(i).CX = -BALLE(i).CX
   END IF

   IF BALLE(i).Y - BALLE(i).rayon < 0 OR BALLE(i).Y + BALLE(i).rayon > 480 THEN
 BALLE(i).CY = -BALLE(i).CY
   END IF

   CIRCLE (BALLE(i).X, BALLE(i).Y), BALLE(i).rayon, 14

   NEXT i

LOOP


'----------------REBOND CERCLE-----------------------------

     IF ((rayon + rayon2) ^ 2) >= ((Ycercle2 - Ycercle) ^ 2) + ((Xcercle2 - Xcercle) ^ 2) THEN      ''
         pasY2 = -pasY2                                                                                '''
         pasX2 = -pasX2                                                                                ''''
         pasY = -pasY                                                                                  '''''  Th‚oreme de pythagore, pour la colision entre les 2 boules
         pasX = -pasX                                                                                  ''''    (Beaucoup plus facile a comprendre sur un schema)
     END IF                                                                                         '''
                                                                                                 ''


   FOR tempo = 1 TO 30000             '*** pour ralentir les boules
   NEXT

'--------------------TOUCHES Paliers --------------------------------------------------

  touche = INKEY$                                          'commande pour les touche

  SELECT CASE touche

  '*** Touches Joueur 1

    CASE "A", "a"                                      'valeur touches A et a (Bug avec code ascii)
     IF (Y1 > 15) THEN                                 'Si Y1 est sup‚rieur … 15 alors, ( pour ‚viter que le palier sorte)
       LINE (X1, Y1)-(X2, Y2), 6, BF                   'dessine un Palier noir (En position initiale)
         Y1 = Y1 - pas                                 'faire le pas (Y1)
         Y2 = Y2 - pas                                 'faire le pas (Y2)
       LINE (X1, Y1)-(X2, Y2), 12, BF                  'faire le nouveau Palier
     END IF                                            'Fin Si ( le palier ne pourra bouger que s'il est dans mon cadre)


    CASE "Q", "q"                                      ' valeur touches Q et q
     IF (Y2 <= hauteurecran - 20) THEN
       LINE (X1, Y1)-(X2, Y2), 6, BF                   '''
         Y1 = Y1 + pas                                 '''' Mˆme principe
         Y2 = Y2 + pas                                 '''
       LINE (X1, Y1)-(X2, Y2), 12, BF                  ''
     END IF



  ' *** Touches Joueur 2

    CASE CHR$(0) + "H", "8"                               ' valeur touches "Fleche BAS" et "8" (8 pour les claviers numeriques)
     IF (PY1 > 15) THEN
       LINE (PX1, PY1)-(PX2, PY2), 6, BF                  ''
         PY1 = PY1 - pas                                  '''
         PY2 = PY2 - pas                                  '''' Mˆme principe (Avec la 2Šme ligne (palier), et ses points respectifs
       LINE (PX1, PY1)-(PX2, PY2), 9, BF                  '''
     END IF                                               ''


    CASE CHR$(0) + "P", "2"                               ' valeur touche "Fleche HAUT" et "2" (Pr clavier num)
     IF (PY2 <= hauteurecran - 20) THEN
       LINE (PX1, PY1)-(PX2, PY2), 6, BF                  ''
         PY1 = PY1 + pas                                  '''
         PY2 = PY2 + pas                                  '''' Meme principe
       LINE (PX1, PY1)-(PX2, PY2), 9, BF                  '''
     END IF                                               '
     
   END SELECT




'--------------REBOND PALIER----------------------------------------

     IF ((BALLE(i).X - X2) <= rayon) AND (BALLE(i).Y > Y1) AND (BALLE(i).Y < Y2) THEN            ' Si la distance entre le centre du cercle (Xcercle) et la barre (X1) est <= au rayon
                                '********* SUR LA BARRE *************'                  '

         BALLE(i).CX = -BALLE(i).CX                                                                   ' Rebondir (-pas), sur la barre donc.
     END IF                                                                             ' Fin Si
                                                                                        '
                                                                                        
                                                                        ''''
                                                                                      
                                                                                        ' Pour palier 2
     IF ((PX1 - BALLE(i).X) <= rayon) AND (BALLE(i).Y > PY1) AND (BALLE(i).Y < PY2) THEN         ' Si Px1 - Xcercle <= rayon alors, (si < ‡a traverserait la barre)
         BALLE(i).CX = -BALLE(i).CX                                                                   ' Faire un rebond (-pas)
     END IF                                                                             ' Fin Si
                                                                                        
                                                                                '''
'--------------------------- Compteur ------------------------

     IF ((Xcercle - X2) <= rayon) AND (Ycercle > Y1) AND (Ycercle < Y2) THEN            ' Quand le cerlce 1 touchera le palier, (voir code au dessus)
                                '********* SUR LA BARRE *************'
         compteur1 = compteur1 + 1                                                      ' Le compteur ajoute + 1
     END IF                                                                             ' Fin si


     IF ((Xcercle2 - X2) <= rayon) AND (Ycercle2 > Y1) AND (Ycercle2 < Y2) THEN         ''
         compteur1 = compteur1 + 1                                                      '''
   END IF                                                                               ''''
                                                                                        '''''
                                                                                        ''''''
     IF ((PX1 - Xcercle) <= rayon) AND (Ycercle > PY1) AND (Ycercle < PY2) THEN         '''''''
         compteur2 = compteur2 + 1                                                      '''''''
     END IF                                                                             ' IDEM, pour l'autre cercle et l'autre barre.
                                                                                        '
                                                                                        '''''''
     IF ((PX1 - Xcercle2) <= rayon) AND (Ycercle2 > PY1) AND (Ycercle2 < PY2) THEN      ''''''
         compteur2 = compteur2 + 1                                                      ''''''
     END IF                                                                             '''''
                                                                                        ''''
                                                                                        '''
                                                                                        ''
'--------------FIN BOUCLE------------------------------------------------             

LOOP UNTIL (Xcercle <= 20) OR (Xcercle2 <= 20) OR (Xcercle >= largeurecran - 20) OR (Xcercle2 >= largeurecran - 20)   ' La boucle stopera si un des 2 cercles sort … gauche ou … droite.
SLEEP                                                                                                                 ' Attente d'une touche pour continuer
'-------------PERDU------------------------------------------------------

   CLS                                                                 ''
                                                                       '''
                                                                       ''''
       LINE (0, 0)-(largeurecran, hauteurecran), 15, BF                ''''' Efface tout, et redessine le terrain
       LINE (10, 10)-(largeurecran - 10, hauteurecran - 10), 6, BF     ''''
                                                                       '''
  CALL terrain                                                         ''

  

     IF (Xcercle <= 0) OR (Xcercle2 <= 0) THEN         ' Si le cercle 1 ou 2 d‚passe … gauche

       COLOR 12
        LOCATE 5, 34                                   ' En position 12, 22
         PRINT "PLAYER 2 WIN !"                        ' Afficher "Le joueur 2 a gagne"
                                                       '
     ELSE
                                                       ' SINON
       COLOR 12
        LOCATE 5, 34
         PRINT "PLAYER 1 WIN !"                        ' En position 12, 22
                                                       ' Afficher "Le joueur 1 a gagne
     END IF
                                                       ' Fin Si
                                                    
       COLOR 5                                         ''
        LOCATE 18, 6                                   '''
         PRINT "Joueur1 score:"; compteur1             '''' Affiche les scores.
        LOCATE 18, 60                                  ''''
         PRINT "Joueur 2 score:"; compteur2            '''
                                                       ''


END

SUB graph


'-----------******** SUB du tableau d'intro ********---------------



SCREEN 9   'pour pouvoir changer la couleur de fond


'------------------Le cadre---------------------------------------

LINE (30, 30)-(600, 307), 15, BF    'grand cadre bleu fonce
LINE (37, 37)-(593, 300), 6, BF     'cadre bleu clair par dessus

LINE (30, 90)-(600, 93), 15, BF     'barre horizontale
LINE (308, 90)-(310, 307), 15, BF   'barre verticale


'-----------------Joueur 1--------------------------------------
COLOR 6, 6
LOCATE 5, 35
PRINT "PING-PONG"

LOCATE 8, 8
COLOR 6
PRINT "Joueur 1"

LOCATE 12, 7
COLOR 8
PRINT "Bouger le palier:"
PRINT ""
PRINT ""


COLOR 5
LOCATE 15, 7
PRINT "HAUT = A"
LOCATE 16, 7
PRINT "BAS  = Q"

'------------------------------------------------------------
'--------------JOUEUR 2--------------------------------------

LOCATE 8, 45
COLOR 6
PRINT "Joueur 2"

LOCATE 12, 42
COLOR 8
PRINT "Bouger le palier:"
PRINT ""
PRINT ""

COLOR 5
LOCATE 15, 42
PRINT "HAUT = Fleche HAUT"
LOCATE 16, 42
PRINT "BAS  = Fleche BAS"


END SUB

SUB terrain

 DO
   CIRCLE (320, 230), 100, 15
   LINE (320, 0)-(320, 460), 15
 LOOP UNTIL ((Xcercle > 0) OR (Xcercle2 > 0) OR (Xcercle < 640) OR (Xcercle2 < 640))


END SUB

v6 © Computaid SPRL 2005-2008 - Tous droits réservés - Hébergé par eTigris - Page générée en 0,059 s - Crédits - Stats
1 connecté