Xdepart = 100 '' Ydepart = 50 ''' Defini les positions de depart des cercles Xdepart2 = 310 ''' Ydepart2 = 130 '' largeurecran = 640 ' Defini la Largeur de l'ecran hauteurecran = 450 ' Defini la Hauteur de l'ecran pasX = 2 '' pasX2 = 1 ''' Defini la valeur des pas des cercles pasY = 2 ''' pasY2 = 1 '' Ycercle = Ydepart '' Xcercle = Xdepart ''' Ycercle2 = Ydepart2 '''' Defini les coordon‚es des cercles. (auquel s'ajouterons les pas) Xcercle2 = Xdepart2 '''' rayon = 13 ''' Defini la taille du Rayon des cercles rayon2 = 13 '' compteur1 = 0 ' Initialise les compteurs compteur2 = 0 ' SCREEN 12 ' On va travailler dans un ecran de taille "12" DIM touche AS STRING '''' Declerer la chaine touche '--------------------- DIM X1 AS INTEGER ''''' DIM X2 AS INTEGER '''''' declaration des variables palier 1 DIM Y1 AS INTEGER ''''' DIM Y2 AS INTEGER ''' '--------------------- X1 = 20 '''' X2 = 30 ''''' Y1 = 20 '''''' coordon‚es palier 1 Y2 = 200 ''''' pas = 20 '''' defini le pas pour le palier (reutilise pour le palier 2) '--------------------- '--------------------- DIM PX1 AS INTEGER ''''' DIM PX2 AS INTEGER '''''' declaration des variables palier 2 DIM PY1 AS INTEGER ''''' DIM PY2 AS INTEGER ''' '--------------------- PX1 = 620 '''' PX2 = 630 ''''' PY1 = 20 '''''' coordon‚es palier 2 PY2 = 200 '''' '--------------------- LINE (X1, Y1)-(X2, Y2), 12, BF '''''' palier 1 LINE (PX1, PY1)-(PX2, PY2), 9, BF '''''' palier 2 '----------*** BOUCLE GENERALE ***--------------- DO '----------------CERCLES-------------------------- CIRCLE (Xold, Yold), rayon, 0 ' Faire un cercle noir en position initiale PAINT (Xold, Yold), 0 ' paindre l'interieur en noir CIRCLE (Xcercle, Ycercle), rayon, 3 ' Faire un cercle de couleur PAINT (Xcercle, Ycercle), 3 ' peindre l'interieur en bleue Xold = Xcercle ' le X du rond noir a la meme coordon‚e que celui de couleur (au prochain tour, le noir serra donc a la position initiale, celle avant le pas) Xcercle = Xcercle + pasX ' On fait faire un pas a celui de couleur ' Yold = Ycercle '''Pareil pour la coordonn‚e Y Ycercle = Ycercle + pasY '' IF (Ycercle >= hauteurecran) OR (Ycercle <= 0) THEN ' definir la limite Y * (si Ycercle touche le HAUT le BAS de l'ecran) pasY = -pasY ' faire un rebond * (Alors faire un -pas) END IF ' * (Fin Si) ' *** 2eme cercle CIRCLE (Xold2, Yold2), rayon2, 0 ' PAINT (Xold2, Yold2), 0 '' ''' CIRCLE (Xcercle2, Ycercle2), rayon2, 12 '''' PAINT (Xcercle2, Ycercle2), 12 ''''' '''''' Xold2 = Xcercle2 ''''''' Xcercle2 = Xcercle2 + pasX2 '''''''' ''''''''' ''''''''''' identique au Cercle 1, avec les coordon‚es pour cercle 2 Yold2 = Ycercle2 ''''''''' Ycercle2 = Ycercle2 + pasY2 '''''''' ''''''' '''''' IF (Ycercle2 >= hauteurecran) OR (Ycercle2 <= 0) THEN ''''' pasY2 = -pasY2 '''' END IF ''' '----------------REBOND CERCLE----------------------------- IF ((rayon + rayon2) ^ 2) >= ((Ycercle2 - Ycercle) ^ 2) + ((Xcercle2 - Xcercle) ^ 2) THEN '' pasY2 = -pasY2 ''' pasX2 = -pasX2 '''' pasY = -pasY ''''' Theoreme 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 80000 '*** pour ralentir les boules NEXT '--------------------TOUCHES Paliers -------------------------------------------------- touche = INKEY$ 'commande pour les touche SELECT CASE touche '*** Touches Joueur 1 CASE CHR$(65) 'valeur touche haut LINE (X1, Y1)-(X2, Y2), 0, 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 CASE CHR$(81) 'bas 'valeur touche bas LINE (X1, Y1)-(X2, Y2), 0, BF ''' Y1 = Y1 + pas '''' Meme principe Y2 = Y2 + pas ''' LINE (X1, Y1)-(X2, Y2), 12, BF '' ' *** Touches Joueur 2 CASE CHR$(0) + "H" 'gauche ' valeur touche gauche LINE (PX1, PY1)-(PX2, PY2), 0, BF '' PY1 = PY1 - pas ''' PY2 = PY2 - pas '''' Meme principe (Avec la 2eme line (palier), et ces points respectifs LINE (PX1, PY1)-(PX2, PY2), 9, BF ''' '' CASE CHR$(0) + "P" 'droite ' valeur touche droite LINE (PX1, PY1)-(PX2, PY2), 0, BF '' PY1 = PY1 + pas ''' PY2 = PY2 + pas '''' Meme principe LINE (PX1, PY1)-(PX2, PY2), 9, BF ''' END SELECT '--------------REBOND PALIER---------------------------------------- IF ((Xcercle - X2) <= rayon) AND (Ycercle > Y1) AND (Ycercle < Y2) THEN ' Si la distance entre le centre du cercle (Xcercle) et la barre (X1) est <= au rayon '********* SUR LA BARRE *************' ' SOUND 440, 1 ' Joue un son ' pasX = -pasX ' Rebondir (-pas), sur la barre donc. END IF ' Fin Si ' ' IF ((Xcercle2 - X2) <= rayon) AND (Ycercle2 > Y1) AND (Ycercle2 < Y2) THEN ' ''' SOUND 440, 1 pasX2 = -pasX2 ' '''' Meme principe pour le cercle 2 END IF ' ''' ' ' Pour palier 2 IF ((PX1 - Xcercle) <= rayon) AND (Ycercle > PY1) AND (Ycercle < PY2) THEN ' Si Px1 - Xcercle <= rayon alors, (si <, ca traverserais la barre SOUND 440, 1 pasX = -pasX ' Faire un rebond (-pas) END IF ' Fin Si ' IF ((PX1 - Xcercle2) <= rayon) AND (Ycercle2 > PY1) AND (Ycercle2 < PY2) THEN ''' SOUND 440, 1 pasX2 = -pasX2 '''' Meme principe pour le cercle 2 END IF ''' '--------------------------- Compteur ------------------------ IF ((Xcercle - X2) <= rayon) AND (Ycercle > Y1) AND (Ycercle < Y2) THEN ' Si la distance entre le centre du cercle (Xcercle) et la barre (X1) est <= au rayon '********* SUR LA BARRE *************' compteur1 = compteur1 + 1 END IF 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 IF ((PX1 - Xcercle2) <= rayon) AND (Ycercle2 > PY1) AND (Ycercle2 < PY2) THEN compteur2 = compteur2 + 1 END IF '--------------FIN BOUCLE------------------------------------------------ LOOP UNTIL (Xcercle <= 0) OR (Xcercle2 <= 0) OR (Xcercle >= largeurecran) OR (Xcercle2 >= largeurecran) 'La boucle stopera si un des 2 cercles sort a gauche ou a droite. '-------------PERDU------------------------------------------------------ CLS IF (Xcercle <= 0) OR (Xcercle2 <= 0) THEN ' Si le cercle 1 ou 2 depassent a gauche COLOR 12 ' LOCATE 8, 30 ' En position 12, 22 PRINT "PLAYER 2 WIN !" ' Afficher "Le joueur 2 a gagne" ' ELSE ' ' SINON COLOR 12 LOCATE 8, 30 ' PRINT "PLAYER 1 WIN !" ' En position 12, 22 ' Afficher "Le joueur 1 a gagne END IF ' ' Fin Si ' COLOR 5 LOCATE 18, 9 PRINT "Joueur1 score:"; compteur1 LOCATE 18, 50 PRINT "Joueur 2 score:"; compteur2 SUB graph LINE (30, 30)-(600, 407), 1, BF 'grand cadre bleu fonce LINE (37, 37)-(593, 400), 9, BF 'cadre bleu clair par dessus LINE (30, 90)-(600, 93), 1, BF 'barre horizontale LINE (308, 90)-(310, 407), 1, BF 'barre verticale '-----------------Joueur 1------------------ COLOR 12 LOCATE 5, 35 PRINT "PING-PONG" LOCATE 8, 16 COLOR 6 PRINT "Joueur 1" LOCATE 12, 7 COLOR 3 PRINT "Bouger le palier:" PRINT "" PRINT "" COLOR 5 LOCATE 15, 7 PRINT "HAUT = A" LOCATE 16, 7 PRINT "BAS = Q" '------------------------------------------------------------ '--------------JOUEUR 2-------------------------------------- LOCATE 8, 53 COLOR 6 PRINT "Joueur 2" LOCATE 12, 42 COLOR 3 PRINT "Bouger le palier:" PRINT "" PRINT "" COLOR 5 LOCATE 15, 42 PRINT "HAUT = Fleche HAUT" LOCATE 16, 42 PRINT "BAS = Fleche BAS" END SUB