Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Panorabrique 3D Dim 26 Fév 2012 - 1:50 | |
| Bon, après la version ASCII, 2D, forcément, je fais une version 3D du pong ... Pour commencer voici le source dérivant de l'exemple présent sur la page des exemples de Panoramic. Le programme est restreint à son minimum pour le moment, score et une vie. Le score repart à 0 quand on perd la balle PS: Somme toute, c'est plus simple à faire en 3D. C'est plus fluide et sans clignotement ... - Code:
-
label Boucle_principale, Lance_balle, Fin, Init_niveau, Dessine_briques, Trace_brique
dim i,j, c, xpad, s, vies : s=0 : vies = 3 dim xball,zball : rem ball position dim dx,dz : ' direction de la balle dim vx,vz : ' vitesse de la balle
dim largeur_r : largeur_r = 3.6 : ' Largeur de la raquette
dim Nb_b_ligne : Nb_b_ligne = 7 dim Nb_lignes, Nb_briques_restantes dim hauteur_b, largeur_b : largeur_b=1.55 : hauteur_b=0.75
rem numbers of 3D objects: rem 1=ball; 2= back wall; 3= left wall; 4 = rigth wall; 5=pad; 6=score
' Paramètrage de la fenêtre principale du jeu left 0,0 : top 0,0 : width 0, 690 : height 0,450 : caption 0,"PANORABRIQUE 3D" scene3d 1 : full_space 1 : color 1,170, 170, 255 : ' cree le monde 3D avec un fond bleu clair cam_x_position 0 : cam_y_position 7 : cam_z_position 13 : ' positionne la camera point_x_position 0 : point_y_position 0 : point_z_position -0.5 : ' objectif dirigé vers le centre light_x_position -5 : light_y_position 15 : light_z_position -50 : ' positionne la lumiere
' Gère les couleurs par un tableau de couleurs dim Nb_couleur%: Nb_couleur% = 18 dim t_c(Nb_couleur%,3)
data 0, 0, 0, 255,255,255, 155,155, 55, 180,180,80, 80, 80, 80, 80, 80,215 data 215, 80, 80, 80,215, 80, 155,133,155, 100,215,100, 215, 80,215, 215,215, 80 data 80,215,215, 100,100,215, 55,215,133, 133, 55,215, 215,133, 55, 55, 55,133
for i = 1 to Nb_couleur%: for j = 1 to 3 : read c : t_c(i,j)=c : next j : next i
' Création des objets (balle, murs, raquette...) 3d_sphere 1, 0.3 : 3d_color 1,0,0,0 : 3d_collision_as_sphere 1 : ' balle created at the center 3d_box 2, 15.5, 0.4, 0.5 : 3d_color 2,155,155,55 : ' Mur du fond 3d_x_position 2, 0 : 3d_y_position 2, 0 : 3d_z_position 2, -7.75 3d_box 3, 0.5, 0.5, 15 : 3d_color 3,155,155,55 : ' Mur gauche 3d_x_position 3, -7.5 : 3d_y_position 3, 0 : 3d_z_position 3, 0.25 3d_box 4, 0.5, 0.5, 15 : 3d_color 4,155,155,55 : ' Mur droit 3d_x_position 4, 7.5 : 3d_y_position 4, 0 : 3d_z_position 4, 0.25
3d_box 5, largeur_r , 0.5, 0.5 : 3d_color 5,80,80,80: ' raquette 3d_x_position 5, 0 : 3d_y_position 5, 0 : 3d_z_position 5, 7.75
3D_text 6, "Score: 0" : 3d_color 6,250,250,0 : ' score 3d_x_position 6, -6 : 3d_y_position 6, 5.5 : 3d_z_position 6, 5 3d_x_scale 6, 1.2 : 3d_y_scale 6, 1.2 : 3d_z_scale 6, 1.2
gosub Init_niveau
' timer pour déplacements timer 20 : timer_interval 20,30 on_timer 20,boucle_principale end
Init_niveau: Nb_lignes = 6: gosub Dessine_briques gosub Lance_balle return
Dessine_briques: if variable("t_br")=1 then free t_br if variable("k")=1 then free k
dim t_br(Nb_lignes*Nb_b_ligne,5) dim k: k=0 : Nb_briques_restantes = 0
For i= 1 to Nb_lignes For j = 1 to Nb_b_ligne k=k+1 : t_br(k,1) = 1 : t_br(k,5) = 100 t_br(k,2) = t_c(5+i,1): t_br(k,3) = t_c(5+i,2): t_br(k,4) = t_c(5+i,3) Nb_briques_restantes = Nb_briques_restantes + 1 gosub Trace_brique Next j Next i free k return
Trace_brique: if O3D_OBJECT_EXISTS(50+k)=0 then 3d_box 50+k, largeur_b, hauteur_b, hauteur_b 3d_color 50+k,t_br(k,2),t_br(k,3),t_br(k,4) 3d_x_position 50+k, -7.43 + j*(largeur_b + 0.33) : 3d_y_position 50+k, 0 : 3d_z_position 50+k, i - 7 + (i-1)*0.33 3d_collision_as_cube 50+k return
Lance_balle: xball=0 : zball=6 :dx=1.5-rnd(1):dz=-1.5+rnd(1) : vx = 0.25 : vz = 0.25 return
Boucle_principale:
timer_off 20 ' lecture position souris en X et positionne la raquette xpad=(mouse_x_position(1)-340)/15 if xpad>8 then xpad=8 if xpad<-8 then xpad=-8 3d_x_position 5,xpad
' Test rebond sur les bords xball=xball+dx*vx if xball > 7 then xball=7 :dx=-1.5 + rnd (1): ' Rebond à droite if xball < -7 then xball=-7:dx=1.5 - rnd(1) : ' Rebond à gauche 3d_x_position 1,xball
zball=zball+dz*vz if zball < -7 then zball=-7:dz=1 : ' Rebond sur le fond
' Teste si la balle touche la raquette if (zball>=7)and((xpad-(largeur_r/2))<xball)and(xball<(xpad+(largeur_r/2))) zball=7:dz=-1.5+rnd(1):s=s+1:3D_text_change 6,"Score: " + str$(s) end_if
' Teste si la balle touche une brique c=1 For i= 1 to Nb_lignes For j = 1 to Nb_b_ligne If O3D_OBJECT_EXISTS(50+c) = 1 If O3D_collision (1,50+c) = 1 3D_Delete 50+c Nb_briques_restantes = Nb_briques_restantes - 1 s = s + t_br(c,5) If dz=1 dz=-1 Else dz=1 End_if End_if End_if c=c+1 Next j Next i
if vies > 1 3d_text_change 6,"Score: " +str$(s) + " Vies: "+str$(vies) else if vies <= 0 3d_text_change 6,"Score: " +str$(s) + " Vie: "+str$(vies) gosub fin else 3d_text_change 6,"Score: " +str$(s) + " Vie: "+str$(vies) end_if end_if
if zball>= 8 then vies=vies-1 : wait 200 : gosub Lance_balle
if Nb_briques_restantes = 0 ' Message "Bravo, niveau suivant ..." gosub init_niveau end_if
3d_z_position 1,zball
if scancode = 27 then gosub fin timer_on 20 return
Fin: c=0 if vies <= 0 if message_confirmation_yes_no ("Voulez-vous rejouer une partie ?") = 1 vies = 3 : s = 0 gosub init_niveau else c=1 end_if else if message_confirmation_yes_no ("Voulez-vous vraiment quitter ?") = 1 then c=1 end_if if c=0 then return terminate
Dernière édition par Jicehel le Ven 2 Mar 2012 - 0:54, édité 1 fois | |
|