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