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