Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 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 | | Calendrier |
|
|
| Labyrinth | |
|
+4bignono jpcr Jicehel Nardo26 8 participants | |
Auteur | Message |
---|
jpcr
Nombre de messages : 276 Age : 57 Localisation : Val de Marne (94) Date d'inscription : 06/05/2011
| Sujet: Re: Labyrinth Lun 21 Nov 2011 - 17:01 | |
| c clair que je ne sais toujours pas ou est la sortie... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Labyrinth Lun 21 Nov 2011 - 17:22 | |
| on va peut-être se rencontrer en train d'errer dans les couloirs... | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Labyrinth Lun 21 Nov 2011 - 17:25 | |
| Oui ça serait sympa un jeu en ligne... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Labyrinth Lun 21 Nov 2011 - 22:41 | |
| Bon bignono ne nous a pas fait de nouvelle version géniale depuis plusieurs heures, du coup, je mets une petite version modifiée pour éviter les problème d'approximation suite à la suite de déplacement avec des pas qui ne sont pas des multiples exacts (on finissait dans les murs ...) et test les dépassement dans les mouvements pour éviter que le joueur ne fasse demi tour à l'entrée pour faire le tour du labyrinthe et n'arrive à la sortie ... ou qu'il parte en sens inverse et plante le programme avec un dépassement de tableau puisque l'on irait à moins de 0 ... et quelques autres petites modifs mineures - Code:
-
' ****************************************************************************** ' ****************************************************************************** ' ************************* LABYRINTHE 3D version 08 *************************** ' ********************** CRÉÉ PAR bignono le 21/11/2011 ************************ ' **************************** EN BASIC PANORAMIC ****************************** ' ****************************************************************************** ' ******************************************************************************
dim ang,d,dtn,espace,gd,h,i,j,k,n,pas,pasv,r,s,v,pt,rot,w, c(4) label affiche,attend,droite,entr,gauche,lab,moteur,pan1,pan2,pan4,pan8,pivot label r1,r2,r3,r4,r5,r6,r7,termine,trace scene3d 1:full_space 0:full_space 1:light_position 0,100,0 3d_skybox 1:' ---> Si vous voulez définir un "SKYBOX 1" ici sur cette ligne ' N'oubliez pas d'habiller votre skybox avec les commandes 3d_load_texture_back, bottom, front, left, right et top 3d_plane 2:3d_scale 2,500,500,1:3d_x_rotate 2,90:3d_y_position 2,0:3d_color 2,0,0,32: ' ---> CHANGEZ LE 3D_COLOR 2 PAR 3D_LOAD_TEXTURE 2,"FICHIER BMP OU JPG" ET N'OUBLIEZ PAS LES COMMANDES 3D_U_TILES & 3D_v_TILES 3d_cube 3,1:3d_mesh 4:3d_hide 3: ' CRÉATION DES VÉHICULES MOTEUR ET CAMÉRA
' ****************************************************************************** ' ************************ INITIALISATION DES VARIABLES ************************ ' ****************************************************************************** ' ** h et v représentent les dimensions du labyrinthe (vous pouvez les modifier, ' mais plus le labyrinthe est grand, plus le programme ralentit!) ************** ' ****** pas : sert à règler la vitesse de déplacement dans le labyrinthe ****** ' ****** pasv: sert à règler la vitesse du zoom vertical *********************** h=20:v=15:n=h*v-1: h=h+1: v=v+1: d=1:w=4:espace=0:pas=0.75:pasv=1.5 dim a(h+1,v+1),mur(h+1,v+1),trc(h+1,v+1) gosub lab
' ****************************************************************************** ' ******************************************************************************
' ****************************************************************************** ' **************** CONSTRUCTION DU LABYRINTHE ************************ ' ****************************************************************************** 3d_text 5,"ENTRÉE":3d_color 5,0,0,255:3d_y_rotate 5,180 3d_position 5,((h/2)*8)-(2*odd(h)-2*even(h)),4,12 3d_text 6,"SORTIE":3d_color 6,0,0,255:3d_y_rotate 6,180 3d_position 6,((h/2)*8)-(2*odd(h)-2*even(h)),4,(v*8)+4
' CAS 1 = MUR GAUCHE, CAS 2 = MUR ARRIÈRE, CAS 4 = MUR DROIT, CAS 8 = MUR FACE ' LES AUTRES CAS, C'EST UNE ADDITION; EX: CAS 3 = CAS 1 + CAS 2 for j=2 to v for i=2 to h if j=2 and i=int(h/2) or j=v and i=int(h/2) then goto entr select a(i,j) case 1: gosub pan1 : ' mur de gauche (G) case 2: gosub pan2 : ' mur du bas (B) case 3: gosub pan1:gosub pan2 : ' G+B case 4: gosub pan4 : ' mur de droite (D) case 5: gosub pan1:gosub pan4 : ' G+D case 6: gosub pan2:gosub pan4 : ' B+D case 7: gosub pan1:gosub pan2:gosub pan4: ' G+B+D (cul de sac en u) case 8: gosub pan8 : ' mur du haut (H) case 9: gosub pan1:gosub pan8 : ' G+H case 10: gosub pan2:gosub pan8 : ' B+H case 11: gosub pan1:gosub pan2:gosub pan8: ' G+B+H (cul de sac en [) case 12: gosub pan4:gosub pan8 : ' D+H case 13: gosub pan1:gosub pan4:gosub pan8: ' G+D+H (cul de sac en n) case 14: gosub pan2:gosub pan4:gosub pan8: ' B+D+H (cul de sac en ]) end_select entr: next i next j ' ****************************************************************************** ' ******************************************************************************
' ****************************************************************************** ' ** Initialisation position de départ et création d'un timer pour gérer les ** ' * déplacements. Si le programme plante augmentez la valeur du timer_interval * ' ****************************************************************************** i=int(h/2):j=1:dtn=1:a(i,j)=a(i,j)-2:a(i,v)=a(i,v)-2 3d_position 3,((h/2)*8)-(3*odd(h)),4,j*8:gosub affiche timer 2:timer_interval 2,100:on_timer 2,moteur end
' ****************************************************************************** ' ***************** LE PROGRAMME PRINCIPAL ****************************** ' ****************************************************************************** moteur:
if espace=1 then goto trace
select scancode
case 27:goto termine: ' SORTIE PROGRAMME
case 32:espace=1: ' AFFICHAGE DU PLAN DU LABYRINTHE
case 37:gosub gauche: ' FLECHE GAUCHE = ROTATION A GAUCHE
case 39:gosub droite: ' FLECHE DROITE = ROTATION A DROITE
case 38: ' FLECHE HAUT = DTN DEFINIT LA DIRECTION NORD, OUEST, SUD OU EST if dtn=1 and j < v+1 if a(i,j)=0 or a(i,j)=1 or a(i,j)=4 or a(i,j)=5 or a(i,j)=8 or a(i,j)=9 or a(i,j)=12 or a(i,j)=13 pt=j*8:j=j+1:gd=j*8 repeat pt=pt+pas:3d_move 3,pas:gosub affiche until pt>gd end_if end_if
if dtn=2 and i < h and j > 1 if a(i,j)<4 or a(i,j)>7 and a(i,j)<12 pt=i*8:i=i+1:gd=i*8 repeat pt=pt+pas:3d_move 3,pas:gosub affiche until pt>gd end_if end_if
if dtn=3 and j > 2 if a(i,j)<8 pt=j*8:j=j-1:gd=j*8 repeat gd=gd+pas:3d_move 3,pas:gosub affiche until gd>pt end_if end_if
if dtn=4 and i > 2 and j > 1 if odd(a(i,j))=0 pt=i*8:i=i-1:gd=i*8 repeat gd=gd+pas:3d_move 3,pas:gosub affiche until gd>pt end_if end_if 3d_position 3, i*8,4,j*8 end_select
' TEST DE SORTIE DU LABYRINTHE if j=v+1 beep_exclamation:message "BRAVO, VOUS ETES SORTI DU LABYRINTHE!":goto termine end_if
' MÉMORISATION DE SON PASSAGE PAR DES SPHÈRES ORANGES if trc(i,j)=0 3d_sphere number_3d_objects+1,0.25 3d_position number_3d_objects,i*8,1,j*8 3d_color number_3d_objects,224,128,32 trc(i,j)=1 end_if
return ' ****************************************************************************** ' ******************************************************************************
' ****************************************************************************** ' ********************* LES ROUTINES *********************************** ' ******************************************************************************
' CALCUL DES POSITIONS DES VÉHICULES MOTEUR ET CAMÉRA affiche: 3d_position 4,o3d_x_position(3),o3d_y_position(3),o3d_z_position(3):3d_rotate 4,o3d_x_rotate(3),o3d_y_rotate(3),o3d_z_rotate(3) 3d_move 4,1:cam_position o3d_x_position(3),w,o3d_z_position(3):point_position o3d_x_position(4),4,o3d_z_position(4) return
' CRÉATION DES MURS DU LABYRINTHE : Vous pouvez supprimer les 3d_color et mettre ' à la place un 3d_load_texture si vous voulez habillez les murs!!! pan1: 3d_box number_3d_objects+1,8.9,8.9,1:3d_position number_3d_objects,(i*8)-4,4,(j*8) 3d_y_rotate number_3d_objects,90:3d_color number_3d_objects,96,0,0 return pan2: 3d_box number_3d_objects+1,8.9,8.9,1:3d_position number_3d_objects,(i*8),4,(j*8)+4 return pan4: 3d_box number_3d_objects+1,8.9,8.9,1:3d_position number_3d_objects,(i*8)+4,4,(j*8) 3d_y_rotate number_3d_objects,90:3d_color number_3d_objects,96,0,0 return pan8: 3d_box number_3d_objects+1,8.9,8.9,1:3d_position number_3d_objects,(i*8),4,(j*8)-4 return
' VISION DE HAUT DU LABYRINTHE EN 3D trace: repeat w=w+pasv:cam_position o3d_x_position(3),w,o3d_z_position(3):display until w=70
attend: if scancode=27 then goto termine if scancode=32 repeat w=w-pasv:cam_position o3d_x_position(3),w,o3d_z_position(3):display until w=4 espace=0 goto moteur end_if if scancode=37 then gosub gauche if scancode=39 then gosub droite goto attend
' ROTATION A GAUCHE gauche: ang=rot+90:dtn=dtn+1:if dtn>4 then dtn=1 repeat rot=rot+6*pas:3d_y_rotate 3,rot:if w>4 then gosub pivot gosub affiche until rot>=ang return
' ROTATION A DROITE droite: ang=rot-90:dtn=dtn-1:if dtn<1 then dtn=4 repeat rot=rot-6*pas:3d_y_rotate 3,rot:if w>4 then gosub pivot gosub affiche until rot<=ang return
' ROTATION DE LA CAMÉRA LORS DE LA VISION DE HAUT pivot: cam_position o3d_x_position(3),o3d_y_position(3)+w,o3d_z_position(3) return
' GÉNÉRATION DU LABYRINTHE lab: for j=2 to v+1:a(1,j)=4:a(h+1,j)=1:next j for i=2 to h:a(i,v+1)=8:a(i,1)=2:for j=2 to v:a(i,j)=15:next j:next i r=int(h/2+1):s=int(v/2+1):a(r,s)=15 for k=1 to n r1: i=0 if a(r-1,s)=15 then i=i+1 :c(i)=1 if a(r,s-1)=15 then i=i+1 :c(i)=2 if a(r+1,s)=15 then i=i+1 :c(i)=3 if a(r,s+1)=15 then i=i+1 :c(i)=4 if i=0 then goto r2 if i<>1 then i=int(rnd(i)+1) select c(i) case 1 :a(r,s)=a(r,s)-(int(a(r,s))-int(int(a(r,s))/2)*2):r=r-1:a(r,s)=a(r,s)-(int(a(r,s)/4)-int(int(a(r,s)/4)/2)*2)*4 case 2 :a(r,s)=a(r,s)-(int(a(r,s)/8)-int(int(a(r,s)/8)/2)*2)*8:s=s-1:a(r,s)=a(r,s)-(int(a(r,s)/2)-int(int(a(r,s)/2)/2)*2)*2 case 3 :a(r,s)=a(r,s)-(int(a(r,s)/4)-int(int(a(r,s)/4)/2)*2)*4:r=r+1:a(r,s)=a(r,s)-(int(a(r,s))-int(int(a(r,s))/2)*2) case 4 :a(r,s)=a(r,s)-(int(a(r,s)/2)-int(int(a(r,s)/2)/2)*2)*2:s=s+1:a(r,s)=a(r,s)-(int(a(r,s)/8)-int(int(a(r,s)/8)/2)*2)*8 end_select goto r7 r2: if d=-1 then goto r3 if r<>h then goto r5 if s<>v then goto r4 r=2:s=2:goto r6 r3: if r<>2 then goto r5 if s<>v then goto r4 r=h:s=2: goto r6 r4: s=s+1:d=-1*d:goto r6 r5: r=r+d r6: if a(r,s)=15 then goto r2 goto r1 r7: mur(r,s)=int(rnd(6)+1) if mur(r,s)=mur(r-1,s) or mur(r,s)=mur(r+1,s) or mur(r,s)=mur(r,s-1) or mur(r,s)=mur(r,s+1) then goto r7 next k return
' SORTIE DU PROGRAMME termine: timer_off 2:terminate | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Labyrinth Lun 21 Nov 2011 - 23:40 | |
| Superbe labyrinthe ! On tourne un peu en rond parfois, heureusement qu'il y a la barre d'espace pour nous sauver ! Il faudrait peut être rajouter des repères visuels: comme les murs sont tous identiques, c'est hard de ne pas perdre son sens de l'orientation... | |
| | | wiwi60
Nombre de messages : 57 Date d'inscription : 21/11/2011
| Sujet: Re: Labyrinth Mar 22 Nov 2011 - 1:21 | |
| N'est ce pas le but du labirynthe!!! | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Labyrinth Mar 22 Nov 2011 - 7:29 | |
| BONJOUR AMIS PANORAMICIENS! Merci Jicehel pour les petites modifs. J'essaye de coder maintenant le déplacement du monstre, mais c'est plus difficile qu'il n'y parait. alors un peu de patience... dès que j'y serais arrivé, vous aurez la primeur du code. bonne journée à tous! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Labyrinth Mar 22 Nov 2011 - 7:49 | |
| Merci, tiens, je mets mon implémentation des texture pour que tout le monde puisse avoir facilement un exemple et aussi pour avoir une image de monstre pour ton code. Bon, la création du labyrinthe est plus longue, il va falloir rajouter une barre de progression à la Nardo pour ne pas avoir un écran blanc immobile ... Voir le Fichier : Labyrinthe.7zEt là, c'est le code, pour faire simple, à la place de faire le 3D_image_texture, pour faire plaisir à Nardo, il faudra appeler une routine qui fera un tirage aléatoire de la texture ou selon des critères particulier (par exemple de la mousse sur les murs au nord, ...) seule votre imagination compte ... Bon, le code dans le 7z fonctionne mais la dernière version est ci dessous: - Code:
-
' ****************************************************************************** ' ****************************************************************************** ' ************************* LABYRINTHE 3D version 08 *************************** ' ********************** CRÉÉ PAR bignono le 21/11/2011 ************************ ' **************************** EN BASIC PANORAMIC ****************************** ' ****************************************************************************** ' ******************************************************************************
dim ang,d,dtn,espace,gd,h,i,j,k,n,pas,pasv,r,s,v,pt,rot,w, c(4) dim texture_mur : texture_mur = 100 : image texture_mur: file_load texture_mur,"mur.bmp" label affiche,attend,droite,entr,gauche,lab,moteur,pan1,pan2,pan4,pan8,pivot label r1,r2,r3,r4,r5,r6,r7,termine,trace scene3d 1:full_space 0:full_space 1:light_position 0,100,0
3d_skybox 1 : 3d_load_texture_back 1,"noir.bmp" : 3d_load_texture_front 1,"noir.bmp" 3d_load_texture_left 1,"noir.bmp": 3d_load_texture_right 1,"noir.bmp": 3d_load_texture_top 1,"noir.bmp"
' ****************************************************************************** ' ************************ INITIALISATION DES VARIABLES ************************ ' ****************************************************************************** ' ** h et v représentent les dimensions du labyrinthe (vous pouvez les modifier, ' mais plus le labyrinthe est grand, plus le programme ralentit!) ************** ' ****** pas : sert à règler la vitesse de déplacement dans le labyrinthe ****** ' ****** pasv: sert à règler la vitesse du zoom vertical *********************** h=20:v=15:n=h*v-1: h=h+1: v=v+1: d=1:w=4:espace=0:pas=0.75:pasv=1.5
dim a(h+1,v+1),mur(h+1,v+1),trc(h+1,v+1) 3d_plane 2:3d_scale 2,500,500,1:3d_x_rotate 2,90:3d_y_position 2,0 3d_u_tile 2,500: 3d_v_tile 2,500 3d_load_texture 2,"sol.bmp"
3d_cube 3,1:3d_mesh 4:3d_hide 3: ' CRÉATION DES VÉHICULES MOTEUR ET CAMÉRA
gosub lab
' ****************************************************************************** ' ******************************************************************************
' ****************************************************************************** ' **************** CONSTRUCTION DU LABYRINTHE ************************ ' ****************************************************************************** 3d_text 5,"ENTRÉE":3d_color 5,0,0,255:3d_y_rotate 5,180 3d_position 5,((h/2)*8)-(2*odd(h)-2*even(h)),4,12 3d_text 6,"SORTIE":3d_color 6,0,0,255:3d_y_rotate 6,180 3d_position 6,((h/2)*8)-(2*odd(h)-2*even(h)),4,(v*8)+4
' CAS 1 = MUR GAUCHE, CAS 2 = MUR ARRIÈRE, CAS 4 = MUR DROIT, CAS 8 = MUR FACE ' LES AUTRES CAS, C'EST UNE ADDITION; EX: CAS 3 = CAS 1 + CAS 2 for j=2 to v for i=2 to h if j=2 and i=int(h/2) or j=v and i=int(h/2) then goto entr select a(i,j) case 1: gosub pan1 : ' mur de gauche (G) case 2: gosub pan2 : ' mur du bas (B) case 3: gosub pan1:gosub pan2 : ' G+B case 4: gosub pan4 : ' mur de droite (D) case 5: gosub pan1:gosub pan4 : ' G+D case 6: gosub pan2:gosub pan4 : ' B+D case 7: gosub pan1:gosub pan2:gosub pan4: ' G+B+D (cul de sac en u) case 8: gosub pan8 : ' mur du haut (H) case 9: gosub pan1:gosub pan8 : ' G+H case 10: gosub pan2:gosub pan8 : ' B+H case 11: gosub pan1:gosub pan2:gosub pan8: ' G+B+H (cul de sac en [) case 12: gosub pan4:gosub pan8 : ' D+H case 13: gosub pan1:gosub pan4:gosub pan8: ' G+D+H (cul de sac en n) case 14: gosub pan2:gosub pan4:gosub pan8: ' B+D+H (cul de sac en ]) end_select entr: next i next j ' ****************************************************************************** ' ******************************************************************************
' ****************************************************************************** ' ** Initialisation position de départ et création d'un timer pour gérer les ** ' * déplacements. Si le programme plante augmentez la valeur du timer_interval * ' ****************************************************************************** i=int(h/2):j=1:dtn=1:a(i,j)=a(i,j)-2:a(i,v)=a(i,v)-2 3d_position 3,((h/2)*8)-(3*odd(h)),4,j*8:gosub affiche timer 2:timer_interval 2,100:on_timer 2,moteur end
' ****************************************************************************** ' ***************** LE PROGRAMME PRINCIPAL ****************************** ' ****************************************************************************** moteur:
if espace=1 then goto trace
select scancode
case 27:goto termine: ' SORTIE PROGRAMME
case 32:espace=1: ' AFFICHAGE DU PLAN DU LABYRINTHE
case 37:gosub gauche: ' FLECHE GAUCHE = ROTATION A GAUCHE
case 39:gosub droite: ' FLECHE DROITE = ROTATION A DROITE
case 38: ' FLECHE HAUT = DTN DEFINIT LA DIRECTION NORD, OUEST, SUD OU EST if dtn=1 and j < v+1 if a(i,j)=0 or a(i,j)=1 or a(i,j)=4 or a(i,j)=5 or a(i,j)=8 or a(i,j)=9 or a(i,j)=12 or a(i,j)=13 pt=j*8:j=j+1:gd=j*8 repeat pt=pt+pas:3d_move 3,pas:gosub affiche until pt>gd end_if end_if
if dtn=2 and i < h and j > 1 if a(i,j)<4 or a(i,j)>7 and a(i,j)<12 pt=i*8:i=i+1:gd=i*8 repeat pt=pt+pas:3d_move 3,pas:gosub affiche until pt>gd end_if end_if
if dtn=3 and j > 2 if a(i,j)<8 pt=j*8:j=j-1:gd=j*8 repeat gd=gd+pas:3d_move 3,pas:gosub affiche until gd>pt end_if end_if
if dtn=4 and i > 2 and j > 1 if odd(a(i,j))=0 pt=i*8:i=i-1:gd=i*8 repeat gd=gd+pas:3d_move 3,pas:gosub affiche until gd>pt end_if end_if 3d_position 3, i*8,4,j*8 end_select
' TEST DE SORTIE DU LABYRINTHE if j=v+1 beep_exclamation:message "BRAVO, VOUS ETES SORTI DU LABYRINTHE!":goto termine end_if
' MÉMORISATION DE SON PASSAGE PAR DES SPHÈRES ORANGES if trc(i,j)=0 3d_sphere number_3d_objects+1,0.25 3d_position number_3d_objects,i*8,1,j*8 3d_color number_3d_objects,224,128,32 trc(i,j)=1 end_if
return ' ****************************************************************************** ' ******************************************************************************
' ****************************************************************************** ' ********************* LES ROUTINES *********************************** ' ******************************************************************************
' CALCUL DES POSITIONS DES VÉHICULES MOTEUR ET CAMÉRA affiche: 3d_position 4,o3d_x_position(3),o3d_y_position(3),o3d_z_position(3):3d_rotate 4,o3d_x_rotate(3),o3d_y_rotate(3),o3d_z_rotate(3) 3d_move 4,1:cam_position o3d_x_position(3),w,o3d_z_position(3):point_position o3d_x_position(4),4,o3d_z_position(4) return
' CRÉATION DES MURS DU LABYRINTHE : Vous pouvez supprimer les 3d_color et mettre ' à la place un 3d_load_texture si vous voulez habillez les murs!!! pan1: 3d_box number_3d_objects+1,8.9,8.9,1:3d_position number_3d_objects,(i*8)-4,4,(j*8) 3d_y_rotate number_3d_objects,90 : 3d_image_texture number_3d_objects, texture_mur return
pan2: 3d_box number_3d_objects+1,8.9,8.9,1:3d_position number_3d_objects,(i*8),4,(j*8)+4 3d_image_texture number_3d_objects, texture_mur return
pan4: 3d_box number_3d_objects+1,8.9,8.9,1:3d_position number_3d_objects,(i*8)+4,4,(j*8) 3d_y_rotate number_3d_objects,90: 3d_image_texture number_3d_objects, texture_mur return
pan8: 3d_box number_3d_objects+1,8.9,8.9,1:3d_position number_3d_objects,(i*8),4,(j*8)-4 3d_image_texture number_3d_objects, texture_mur return
' VISION DE HAUT DU LABYRINTHE EN 3D trace: repeat w=w+pasv:cam_position o3d_x_position(3),w,o3d_z_position(3):display until w=70
attend: if scancode=27 then goto termine if scancode=32 repeat w=w-pasv:cam_position o3d_x_position(3),w,o3d_z_position(3):display until w=4 espace=0 goto moteur end_if if scancode=37 then gosub gauche if scancode=39 then gosub droite goto attend
' ROTATION A GAUCHE gauche: ang=rot+90:dtn=dtn+1:if dtn>4 then dtn=1 repeat rot=rot+6*pas:3d_y_rotate 3,rot:if w>4 then gosub pivot gosub affiche until rot>=ang return
' ROTATION A DROITE droite: ang=rot-90:dtn=dtn-1:if dtn<1 then dtn=4 repeat rot=rot-6*pas:3d_y_rotate 3,rot:if w>4 then gosub pivot gosub affiche until rot<=ang return
' ROTATION DE LA CAMÉRA LORS DE LA VISION DE HAUT pivot: cam_position o3d_x_position(3),o3d_y_position(3)+w,o3d_z_position(3) return
' GÉNÉRATION DU LABYRINTHE lab: for j=2 to v+1:a(1,j)=4:a(h+1,j)=1:next j for i=2 to h:a(i,v+1)=8:a(i,1)=2:for j=2 to v:a(i,j)=15:next j:next i r=int(h/2+1):s=int(v/2+1):a(r,s)=15 for k=1 to n r1: i=0 if a(r-1,s)=15 then i=i+1 :c(i)=1 if a(r,s-1)=15 then i=i+1 :c(i)=2 if a(r+1,s)=15 then i=i+1 :c(i)=3 if a(r,s+1)=15 then i=i+1 :c(i)=4 if i=0 then goto r2 if i<>1 then i=int(rnd(i)+1) select c(i) case 1 :a(r,s)=a(r,s)-(int(a(r,s))-int(int(a(r,s))/2)*2):r=r-1:a(r,s)=a(r,s)-(int(a(r,s)/4)-int(int(a(r,s)/4)/2)*2)*4 case 2 :a(r,s)=a(r,s)-(int(a(r,s)/8)-int(int(a(r,s)/8)/2)*2)*8:s=s-1:a(r,s)=a(r,s)-(int(a(r,s)/2)-int(int(a(r,s)/2)/2)*2)*2 case 3 :a(r,s)=a(r,s)-(int(a(r,s)/4)-int(int(a(r,s)/4)/2)*2)*4:r=r+1:a(r,s)=a(r,s)-(int(a(r,s))-int(int(a(r,s))/2)*2) case 4 :a(r,s)=a(r,s)-(int(a(r,s)/2)-int(int(a(r,s)/2)/2)*2)*2:s=s+1:a(r,s)=a(r,s)-(int(a(r,s)/8)-int(int(a(r,s)/8)/2)*2)*8 end_select goto r7 r2: if d=-1 then goto r3 if r<>h then goto r5 if s<>v then goto r4 r=2:s=2:goto r6 r3: if r<>2 then goto r5 if s<>v then goto r4 r=h:s=2: goto r6 r4: s=s+1:d=-1*d:goto r6 r5: r=r+d r6: if a(r,s)=15 then goto r2 goto r1 r7: mur(r,s)=int(rnd(6)+1) if mur(r,s)=mur(r-1,s) or mur(r,s)=mur(r+1,s) or mur(r,s)=mur(r,s-1) or mur(r,s)=mur(r,s+1) then goto r7 next k return
' SORTIE DU PROGRAMME termine: timer_off 2:terminate | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Labyrinth Mar 22 Nov 2011 - 12:36 | |
| Fond noir (regarder bien, c'est un pixel juste en dessous ....): Mur 1 (pour la gauche (ouest)): Mur 2 (pour le haut (nord)): Mur 3 (pour la droite (est)): Mur 4 (pour le bas (sud)): Sol: Shot at 2011-11-22 Monstre: | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Labyrinth Mar 22 Nov 2011 - 12:58 | |
| Le lien pour le petit pixel noir ici !Le code au dessus n'est pas adapté pour tes images ?... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Labyrinth Mar 22 Nov 2011 - 13:28 | |
| Salut Nardo, non, le code est pour les images du fichier compressé, mais il faut juste charger les images au départ - Code:
-
dim ang,d,dtn,espace,gd,h,i,j,k,n,pas,pasv,r,s,v,pt,rot,w, c(4) ' remplacer la ligne dim texture_mur par les 4 lignes ci dessous: dim texture_mur1 : texture_mur1 = 101 : image texture_mur1: file_load texture_mur1,"mur1.bmp" dim texture_mur2 : texture_mur2 = 102 : image texture_mur2: file_load texture_mur2,"mur2.bmp" dim texture_mur3 : texture_mur3 = 103 : image texture_mur3: file_load texture_mur3,"mur3.bmp" dim texture_mur4 : texture_mur4 = 105 : image texture_mur4: file_load texture_mur4,"mur4.bmp"
label... puis les utiliser dans le source - Code:
-
' CRÉATION DES MURS DU LABYRINTHE : Vous pouvez supprimer les 3d_color et mettre ' à la place un 3d_load_texture si vous voulez habillez les murs!!! pan1: 3d_box number_3d_objects+1,8.9,8.9,1:3d_position number_3d_objects,(i*8)-4,4,(j*8) 3d_y_rotate number_3d_objects,90 : 3d_image_texture number_3d_objects, texture_mur1 return
pan2: 3d_box number_3d_objects+1,8.9,8.9,1:3d_position number_3d_objects,(i*8),4,(j*8)+4 3d_image_texture number_3d_objects, texture_mur4 return
pan4: 3d_box number_3d_objects+1,8.9,8.9,1:3d_position number_3d_objects,(i*8)+4,4,(j*8) 3d_y_rotate number_3d_objects,90: 3d_image_texture number_3d_objects, texture_mur2 return
pan8: 3d_box number_3d_objects+1,8.9,8.9,1:3d_position number_3d_objects,(i*8),4,(j*8)-4 3d_image_texture number_3d_objects, texture_mur3 return
Voilà, ça devrait suffire Bon, je ne peux pas tester ici au boulot, mais je pense que ça doit marcher... J'ai reduit la taille des texture, j'espère que ça permettra d'accélérer le processus. Nardo, si tu a 2 minutes, lors de la génération du labyrinthe, tu peux nous coder une belle bare de progression ? (Ce n'est pas un challenge, désolé, ça je sais que tu maitrises et que tu peux faire beaucoup mieux, mais bon, ça éviterait de rester sur la page blanche et de savoir que le programme n'est pas planté ...) | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Labyrinth Mar 22 Nov 2011 - 13:30 | |
| Je vais voir si j'ai le temps... bon, là il faut que je retourne bosser... | |
| | | jpcr
Nombre de messages : 276 Age : 57 Localisation : Val de Marne (94) Date d'inscription : 06/05/2011
| Sujet: Re: Labyrinth Mar 22 Nov 2011 - 14:18 | |
| faudrait une minimap qui montre ou on est... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Labyrinth Mar 22 Nov 2011 - 14:54 | |
| Ah bon, parce qu'il va y avoir un monstre en plus ? ça ne suffit pas d'errer pendant des heures le moral en berne sans avoir la moindre idée d'où on est, on risque de se faire dévorer au coin de la rue ??? c'est de la cruauté pure ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Labyrinth Mar 22 Nov 2011 - 16:22 | |
| Mais oui, mais oui, tu n'avais pas remarqué encore qu'on était cruel !! ^^ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Labyrinth Mar 22 Nov 2011 - 16:27 | |
| Tu connais au moins la différence entre un tigre et une pomme cuite ? eh bien, le tigre est cruel, tandis que la pomme elle n'est pas crue, elle, puisqu'elle est cuite. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Labyrinth Mar 22 Nov 2011 - 16:42 | |
| Oh purée, tu es en forme JL35 .... | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Labyrinth Mar 22 Nov 2011 - 20:36 | |
| Bonsoir tout le monde Bonsoir Jicehel. Bon, je n'arrive pas encore à faire ce que je veux avec ce prog! Ça me prend la tête . En guise de monstre, j'ai préféré un horrible glouton vert représenté sous une sphère, et mon but est qu'il dévore les oranges que vous semez sur votre passage! Mais rassurez-vous, il ne vous mangera pas, il n'aime que les oranges. C'est déjà assez hard de sortir du labyrinthe, alors si en plus on se fait bouffer, c'est une mission impossible! Dans le code ci après (je n'ai guère eu de temps aujourd'hui et demain ce sera pareil à cause des enfants) vous ne verrez que le déplacement du glouton, mais maintenant on a l'impression qu'on se déplace par acoup, alors que le déplacement du glouton est fluide si vous prenez de la hauteur. J'ai l'impression que sur certain labyrinthe il ne visite pas toutes les pièces. Je crois que mon algorythme est mauvais! Je crois que je vais laisser tomber, ça me prend trop la tête. - Code:
-
' ****************************************************************************** ' ****************************************************************************** ' ************************* LABYRINTHE 3D version 08 *************************** ' ********************** CRÉÉ PAR bignono le 21/11/2011 ************************ ' **************************** EN BASIC PANORAMIC ****************************** ' ****************************************************************************** ' ******************************************************************************
dim ang,d,dtn,espace,f,g,gd,h,i,j,k,n,pas,pasv,r,s,sd,v,pt,rot,w, c(4),mpt,mgd label affiche,attend,droite,entr,gauche,glouton,glouton2,lab,moteur,pan1,pan2,pan4,pan8,pivot label r1,r2,r3,r4,r5,r6,r7,termine,trace scene3d 1:full_space 0:full_space 1:light_position 0,1500,0 3d_skybox 1:' ---> Si vous voulez définir un "SKYBOX 1" ici sur cette ligne ' N'oubliez pas d'habiller votre skybox avec les commandes 3d_load_texture_back, bottom, front, left, right et top 3d_plane 2:3d_scale 2,500,500,1:3d_x_rotate 2,90:3d_y_position 2,0:3d_color 2,0,0,32: ' ---> CHANGEZ LE 3D_COLOR 2 PAR 3D_LOAD_TEXTURE 2,"FICHIER BMP OU JPG" ET N'OUBLIEZ PAS LES COMMANDES 3D_U_TILES & 3D_v_TILES 3d_cube 3,1:3d_mesh 4:3d_hide 3: ' CRÉATION DES VÉHICULES MOTEUR ET CAMÉRA 3d_sphere 5,1:3d_color 5,0,96,0:' CRÉATION DU GLOUTON VERT MANGEUR D'ORANGES
' ****************************************************************************** ' ************************ INITIALISATION DES VARIABLES ************************ ' ****************************************************************************** ' ** h et v représentent les dimensions du labyrinthe (vous pouvez les modifier, ' mais plus le labyrinthe est grand, plus le programme ralentit!) ************** ' ****** pas : sert à règler la vitesse de déplacement dans le labyrinthe ****** ' ****** pasv: sert à règler la vitesse du zoom vertical *********************** h=20:v=15:n=h*v-1:h=h+1:v=v+1:d=1:w=4:espace=0:pas=0.25:pasv=1 dim a(h+1,v+1),mur(h+1,v+1),trc(h+1,v+1),trn(h+1,v+1),gln(h,v) gosub lab
' ****************************************************************************** ' ******************************************************************************
' ****************************************************************************** ' **************** CONSTRUCTION DU LABYRINTHE ************************ ' ****************************************************************************** 3d_text 6,"ENTRÉE":3d_color 6,0,0,255:3d_y_rotate 6,180 3d_position 6,((h/2)*8)-(2*odd(h)-2*even(h)),4,12 3d_text 7,"SORTIE":3d_color 7,0,0,255:3d_y_rotate 7,180 3d_position 7,((h/2)*8)-(2*odd(h)-2*even(h)),4,(v*8)+4
' CAS 1 = MUR GAUCHE, CAS 2 = MUR ARRIÈRE, CAS 4 = MUR DROIT, CAS 8 = MUR FACE ' LES AUTRES CAS, C'EST UNE ADDITION; EX: CAS 3 = CAS 1 + CAS 2 for j=2 to v for i=2 to h gln(i,j)=a(i,j) if j=2 and i=int(h/2) or j=v and i=int(h/2) then goto entr select a(i,j) case 1: gosub pan1 : ' mur de gauche (G) case 2: gosub pan2 : ' mur du bas (B) case 3: gosub pan1:gosub pan2 : ' G+B case 4: gosub pan4 : ' mur de droite (D) case 5: gosub pan1:gosub pan4 : ' G+D case 6: gosub pan2:gosub pan4 : ' B+D case 7: gosub pan1:gosub pan2:gosub pan4: ' G+B+D (cul de sac en u) case 8: gosub pan8 : ' mur du haut (H) case 9: gosub pan1:gosub pan8 : ' G+H case 10: gosub pan2:gosub pan8 : ' B+H case 11: gosub pan1:gosub pan2:gosub pan8: ' G+B+H (cul de sac en [) case 12: gosub pan4:gosub pan8 : ' D+H case 13: gosub pan1:gosub pan4:gosub pan8: ' G+D+H (cul de sac en n) case 14: gosub pan2:gosub pan4:gosub pan8: ' B+D+H (cul de sac en ]) end_select entr: next i next j ' ****************************************************************************** ' ******************************************************************************
' ****************************************************************************** ' ** Initialisation position de départ et création d'un timer pour gérer les ** ' * déplacements. Si le programme plante augmentez la valeur du timer_interval * ' ****************************************************************************** i=int(h/2):j=1:dtn=1:a(i,j)=a(i,j)-2:a(i,v)=a(i,v)-2 f=i:g=j:sd=1:' f et g position départ du glouton vert, sd son sens de déplacement 3d_position 5,((h/2)*8)-(3*odd(h)),4,g*8 3d_position 3,((h/2)*8)-(3*odd(h)),4,j*8:gosub affiche timer 2:timer_interval 2,100:on_timer 2,moteur ' timer 3:timer_interval 3,100:on_timer 3,glouton end
' ****************************************************************************** ' ***************** LE PROGRAMME PRINCIPAL ****************************** ' ****************************************************************************** moteur:
if espace=1 then goto trace
select scancode
case 27:goto termine: ' SORTIE PROGRAMME
case 32:espace=1: ' AFFICHAGE DU PLAN DU LABYRINTHE
case 37:gosub gauche: ' FLECHE GAUCHE = ROTATION A GAUCHE
case 39:gosub droite: ' FLECHE DROITE = ROTATION A DROITE
case 38: ' FLECHE HAUT = DTN DEFINIT LA DIRECTION NORD, OUEST, SUD OU EST if dtn=1 and j < v+1 if a(i,j)=0 or a(i,j)=1 or a(i,j)=4 or a(i,j)=5 or a(i,j)=8 or a(i,j)=9 or a(i,j)=12 or a(i,j)=13 pt=j*8:j=j+1:gd=j*8 repeat pt=pt+pas:3d_move 3,pas:gosub affiche until pt>=gd end_if end_if
if dtn=2 and i < h and j > 1 if a(i,j)<4 or a(i,j)>7 and a(i,j)<12 pt=i*8:i=i+1:gd=i*8 repeat pt=pt+pas:3d_move 3,pas:gosub affiche until pt>=gd end_if end_if
if dtn=3 and j > 2 if a(i,j)<8 pt=j*8:j=j-1:gd=j*8 repeat gd=gd+pas:3d_move 3,pas:gosub affiche until gd>=pt end_if end_if
if dtn=4 and i > 2 and j > 1 if odd(a(i,j))=0 pt=i*8:i=i-1:gd=i*8 repeat gd=gd+pas:3d_move 3,pas:gosub affiche until gd>=pt end_if end_if end_select
gosub glouton
' TEST DE SORTIE DU LABYRINTHE if j=v+1 beep_exclamation:message "BRAVO, VOUS ETES SORTI DU LABYRINTHE!":goto termine end_if
' MÉMORISATION DE SON PASSAGE PAR DES SPHÈRES ORANGES if trc(i,j)=0 3d_sphere number_3d_objects+1,0.25 3d_position number_3d_objects,i*8,1,j*8 3d_color number_3d_objects,224,128,32 trc(i,j)=1:trn(i,j)=number_3d_objects end_if
return ' ****************************************************************************** ' ******************************************************************************
' Gestion déplacement du glouton vert (le monstre) qui mange vos oranges glouton: select sd
case 1 mpt=g*8:g=g+1:mgd=g*8:gosub glouton2 if gln(f,g)= 2 or gln(f,g)=4 or gln(f,g)=6 then sd=2 if gln(f,g)= 3 then sd=4 if gln(f,g)= 7 then sd=3
case 2 mgd=f*8:f=f-1:mpt=f*8:gosub glouton2 if gln(f,g)= 1 or gln(f,g)=2 or gln(f,g)=3 then sd=3 if gln(f,g)= 9 then sd=1 if gln(f,g)=11 then sd=4
case 3 mgd=g*8:g=g-1:mpt=g*8:gosub glouton2 if gln(f,g)= 1 or gln(f,g)=8 or gln(f,g)=9 then sd=4 if gln(f,g)=12 then sd=2 if gln(f,g)=13 then sd=1
case 4 mpt=f*8:f=f+1:mgd=f*8:gosub glouton2 if gln(f,g)= 4 or gln(f,g)=8 or gln(f,g)=12 then sd=1 if gln(f,g)= 6 then sd=3 if gln(f,g)=14 then sd=2
end_select
' 3d_position 5,f*8,4,g*8:' affiche le repère noir (le monstre) display ' if i=f and j=g then goto termine:' le monstre repère noir vous a eu -> fin programme return
glouton2: if sd=1 repeat mpt=mpt+pas:3d_position 5,f*8,4,mpt until mpt>=mgd end_if if sd=2 repeat mgd=mgd-pas:3d_position 5,mgd,4,g*8 until mgd<=mpt end_if if sd=3 repeat mgd=mgd-pas::3d_position 5,f*8,4,mgd until mgd<=mpt end_if if sd=4 repeat mpt=mpt+pas:3d_position 5,mpt,4,g*8 until mpt>=mgd end_if return
' ****************************************************************************** ' ********************* LES ROUTINES *********************************** ' ******************************************************************************
' CALCUL DES POSITIONS DES VÉHICULES MOTEUR ET CAMÉRA affiche: 3d_position 4,o3d_x_position(3),o3d_y_position(3),o3d_z_position(3):3d_rotate 4,o3d_x_rotate(3),o3d_y_rotate(3),o3d_z_rotate(3) 3d_move 4,1:cam_position o3d_x_position(3),w,o3d_z_position(3):point_position o3d_x_position(4),4,o3d_z_position(4) return
' CRÉATION DES MURS DU LABYRINTHE : Vous pouvez supprimer les 3d_color et mettre ' à la place un 3d_load_texture si vous voulez habillez les murs!!! pan1: 3d_box number_3d_objects+1,8.9,8.9,1:3d_position number_3d_objects,(i*8)-4,4,(j*8) 3d_y_rotate number_3d_objects,90:3d_color number_3d_objects,96,0,0 return pan2: 3d_box number_3d_objects+1,8.9,8.9,1:3d_position number_3d_objects,(i*8),4,(j*8)+4 return pan4: 3d_box number_3d_objects+1,8.9,8.9,1:3d_position number_3d_objects,(i*8)+4,4,(j*8) 3d_y_rotate number_3d_objects,90:3d_color number_3d_objects,96,0,0 return pan8: 3d_box number_3d_objects+1,8.9,8.9,1:3d_position number_3d_objects,(i*8),4,(j*8)-4 return
' VISION DE HAUT DU LABYRINTHE EN 3D trace: repeat w=w+pasv:cam_position o3d_x_position(3),w,o3d_z_position(3):display until w=70
attend: if scancode=27 then goto termine if scancode=32 repeat w=w-pasv:cam_position o3d_x_position(3),w,o3d_z_position(3):display until w=4 espace=0 goto moteur end_if
if scancode=37 then gosub gauche
if scancode=39 then gosub droite
gosub glouton
goto attend
' ROTATION A GAUCHE gauche: ang=rot+90:dtn=dtn+1:if dtn>4 then dtn=1 repeat rot=rot+6*pas:3d_y_rotate 3,rot:if w>4 then gosub pivot gosub affiche until rot>=ang return
' ROTATION A DROITE droite: ang=rot-90:dtn=dtn-1:if dtn<1 then dtn=4 repeat rot=rot-6*pas:3d_y_rotate 3,rot:if w>4 then gosub pivot gosub affiche until rot<=ang return
' ROTATION DE LA CAMÉRA LORS DE LA VISION DE HAUT pivot: cam_position o3d_x_position(3),o3d_y_position(3)+w,o3d_z_position(3) return
' GÉNÉRATION DU LABYRINTHE lab: for j=1 to v+1:a(1,j)=4:a(h+1,j)=1:next j for i=2 to h:a(i,v+1)=8:a(i,1)=2:for j=2 to v:a(i,j)=15:next j:next i r=int(h/2+1):s=int(v/2+1):a(r,s)=15 for k=1 to n r1: i=0 if a(r-1,s)=15 then i=i+1 :c(i)=1 if a(r,s-1)=15 then i=i+1 :c(i)=2 if a(r+1,s)=15 then i=i+1 :c(i)=3 if a(r,s+1)=15 then i=i+1 :c(i)=4 if i=0 then goto r2 if i<>1 then i=int(rnd(i)+1) select c(i) case 1 :a(r,s)=a(r,s)-(int(a(r,s))-int(int(a(r,s))/2)*2):r=r-1:a(r,s)=a(r,s)-(int(a(r,s)/4)-int(int(a(r,s)/4)/2)*2)*4 case 2 :a(r,s)=a(r,s)-(int(a(r,s)/8)-int(int(a(r,s)/8)/2)*2)*8:s=s-1:a(r,s)=a(r,s)-(int(a(r,s)/2)-int(int(a(r,s)/2)/2)*2)*2 case 3 :a(r,s)=a(r,s)-(int(a(r,s)/4)-int(int(a(r,s)/4)/2)*2)*4:r=r+1:a(r,s)=a(r,s)-(int(a(r,s))-int(int(a(r,s))/2)*2) case 4 :a(r,s)=a(r,s)-(int(a(r,s)/2)-int(int(a(r,s)/2)/2)*2)*2:s=s+1:a(r,s)=a(r,s)-(int(a(r,s)/8)-int(int(a(r,s)/8)/2)*2)*8 end_select goto r7 r2: if d=-1 then goto r3 if r<>h then goto r5 if s<>v then goto r4 r=2:s=2:goto r6 r3: if r<>2 then goto r5 if s<>v then goto r4 r=h:s=2: goto r6 r4: s=s+1:d=-1*d:goto r6 r5: r=r+d r6: if a(r,s)=15 then goto r2 goto r1 r7: mur(r,s)=int(rnd(6)+1) if mur(r,s)=mur(r-1,s) or mur(r,s)=mur(r+1,s) or mur(r,s)=mur(r,s-1) or mur(r,s)=mur(r,s+1) then goto r7 next k return
' SORTIE DU PROGRAMME termine: timer_off 2 ' timer_off 3 terminate | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Labyrinth Mar 22 Nov 2011 - 23:05 | |
| Bignono, je suis nul en 3D, mais bon, je te livre un source qui fonctionne "techniquement", après dans les rotation en 3D, je me perds, mais toi tu dois pouvoir arranger ça. Je mets le source pour les idées ou pour que tu corrige les rotations, comme tu veux. Actuellement, donc, le glouton se déplace, mais ça ne correspond pas aux murs... - Code:
-
' ****************************************************************************** ' ****************************************************************************** ' ************************* LABYRINTHE 3D version 08 *************************** ' ********************** CRÉÉ PAR bignono le 21/11/2011 ************************ ' **************************** EN BASIC PANORAMIC ****************************** ' ****************************************************************************** ' ******************************************************************************
dim ang,d,dtn,espace,f,g,gd,h,i,j,k,n,pas,pasv,r,s,sd,v,pt,rot,w, c(4),mpt,mgd, glouton label affiche,attend,droite,entr,gauche,glouton,lab,moteur,pan1,pan2,pan4,pan8,pivot label r1,r2,r3,r4,r5,r6,r7,termine,trace scene3d 1:full_space 0:full_space 1:light_position 0,1500,0 3d_skybox 1:' ---> Si vous voulez définir un "SKYBOX 1" ici sur cette ligne ' N'oubliez pas d'habiller votre skybox avec les commandes 3d_load_texture_back, bottom, front, left, right et top 3d_plane 2:3d_scale 2,500,500,1:3d_x_rotate 2,90:3d_y_position 2,0:3d_color 2,0,0,32: ' ---> CHANGEZ LE 3D_COLOR 2 PAR 3D_LOAD_TEXTURE 2,"FICHIER BMP OU JPG" ET N'OUBLIEZ PAS LES COMMANDES 3D_U_TILES & 3D_v_TILES 3d_cube 3,1:3d_mesh 4:3d_hide 3: ' CRÉATION DES VÉHICULES MOTEUR ET CAMÉRA 3d_sphere 5,1:3d_color 5,0,96,0:' CRÉATION DU GLOUTON VERT MANGEUR D'ORANGES
' ****************************************************************************** ' ************************ INITIALISATION DES VARIABLES ************************ ' ****************************************************************************** ' ** h et v représentent les dimensions du labyrinthe (vous pouvez les modifier, ' mais plus le labyrinthe est grand, plus le programme ralentit!) ************** ' ****** pas : sert à règler la vitesse de déplacement dans le labyrinthe ****** ' ****** pasv: sert à règler la vitesse du zoom vertical *********************** h=20:v=15:n=h*v-1:h=h+1:v=v+1:d=1:w=4:espace=0:pas=0.5:pasv=1.5 : glouton = 0 dim a(h+1,v+1),mur(h+1,v+1),trc(h+1,v+1) gosub lab
' ****************************************************************************** ' ******************************************************************************
' ****************************************************************************** ' **************** CONSTRUCTION DU LABYRINTHE ************************ ' ****************************************************************************** 3d_text 6,"ENTRÉE":3d_color 6,0,0,255:3d_y_rotate 6,180 3d_position 6,((h/2)*8)-(2*odd(h)-2*even(h)),4,12 3d_text 7,"SORTIE":3d_color 7,0,0,255:3d_y_rotate 7,180 3d_position 7,((h/2)*8)-(2*odd(h)-2*even(h)),4,(v*8)+4
' CAS 1 = MUR GAUCHE, CAS 2 = MUR ARRIÈRE, CAS 4 = MUR DROIT, CAS 8 = MUR FACE ' LES AUTRES CAS, C'EST UNE ADDITION; EX: CAS 3 = CAS 1 + CAS 2 for j=2 to v for i=2 to h if j=2 and i=int(h/2) or j=v and i=int(h/2) then goto entr select a(i,j) case 1: gosub pan1 : ' mur de gauche (G) case 2: gosub pan2 : ' mur du bas (B) case 3: gosub pan1:gosub pan2 : ' G+B case 4: gosub pan4 : ' mur de droite (D) case 5: gosub pan1:gosub pan4 : ' G+D case 6: gosub pan2:gosub pan4 : ' B+D case 7: gosub pan1:gosub pan2:gosub pan4: ' G+B+D (cul de sac en u) case 8: gosub pan8 : ' mur du haut (H) case 9: gosub pan1:gosub pan8 : ' G+H case 10: gosub pan2:gosub pan8 : ' B+H case 11: gosub pan1:gosub pan2:gosub pan8: ' G+B+H (cul de sac en [) case 12: gosub pan4:gosub pan8 : ' D+H case 13: gosub pan1:gosub pan4:gosub pan8: ' G+D+H (cul de sac en n) case 14: gosub pan2:gosub pan4:gosub pan8: ' B+D+H (cul de sac en ]) end_select entr: next i next j ' ****************************************************************************** ' ******************************************************************************
' ****************************************************************************** ' ** Initialisation position de départ et création d'un timer pour gérer les ** ' * déplacements. Si le programme plante augmentez la valeur du timer_interval * ' ****************************************************************************** i=int(h/2):j=1:dtn=1:a(i,j)=a(i,j)-2:a(i,v)=a(i,v)-2 f=i:g=j:sd=1:' f et g position départ du glouton vert, sd son sens de déplacement 3d_position 5, f*8,4,g*8 3d_position 3, i*8,4,j*8:gosub affiche timer 2:timer_interval 2,200:on_timer 2,moteur end
' ****************************************************************************** ' ***************** LE PROGRAMME PRINCIPAL ****************************** ' ****************************************************************************** moteur:
if espace=1 then goto trace
select scancode
case 27:goto termine: ' SORTIE PROGRAMME
case 32:espace=1: ' AFFICHAGE DU PLAN DU LABYRINTHE
case 37:gosub gauche: ' FLECHE GAUCHE = ROTATION A GAUCHE
case 39:gosub droite: ' FLECHE DROITE = ROTATION A DROITE
case 38: ' FLECHE HAUT = DTN DEFINIT LA DIRECTION NORD, OUEST, SUD OU EST if dtn=1 and j < v+1 if a(i,j)=0 or a(i,j)=1 or a(i,j)=4 or a(i,j)=5 or a(i,j)=8 or a(i,j)=9 or a(i,j)=12 or a(i,j)=13 pt=j*8:j=j+1:gd=j*8 repeat pt=pt+pas:3d_move 3,pas:gosub affiche until pt>=gd end_if end_if
if dtn=2 and i < h and j > 1 if a(i,j)<4 or a(i,j)>7 and a(i,j)<12 pt=i*8:i=i+1:gd=i*8 repeat pt=pt+pas:3d_move 3,pas:gosub affiche until pt>=gd end_if end_if
if dtn=3 and j > 2 if a(i,j)<8 pt=j*8:j=j-1:gd=j*8 repeat gd=gd+pas:3d_move 3,pas:gosub affiche until gd>=pt end_if end_if
if dtn=4 and i > 2 and j > 1 if odd(a(i,j))=0 pt=i*8:i=i-1:gd=i*8 repeat gd=gd+pas:3d_move 3,pas:gosub affiche until gd>=pt end_if end_if end_select
3d_position 3, i*8,4,j*8
' TEST DE SORTIE DU LABYRINTHE if j=v+1 beep_exclamation:message "BRAVO, VOUS ETES SORTI DU LABYRINTHE!":goto termine end_if
' MÉMORISATION DE SON PASSAGE PAR DES SPHÈRES ORANGES if trc(i,j)=0 3d_sphere number_3d_objects+1,0.25 3d_position number_3d_objects,i*8,1,j*8 3d_color number_3d_objects,224,128,32 trc(i,j)=1 end_if
glouton = glouton + 1 if glouton = 5 then gosub glouton
return ' ****************************************************************************** ' ******************************************************************************
' Gestion déplacement du glouton vert (le monstre) qui mange vos oranges glouton:
if sd = 1 mpt=g*8:g=g+1:mgd=g*8 repeat mpt=mpt+pas:3d_move 5, pas until mpt>=mgd if a(f,g)= 0 or a(f,g)= 2 or a(f,g)=4 or a(f,g)=6 then 3d_y_rotate 5,90:sd=2 if a(f,g)= 3 then 3d_y_rotate 5,270 : sd=4 if a(f,g)= 7 then 3d_y_rotate 5,180: sd=3 end_if
if sd=2 mpt=f*8:f=f+1:mgd=f*8 repeat mpt=mpt+pas:3d_move 5, pas until mpt>=mgd if a(f,g)= 1 or a(f,g)=2 or a(f,g)=3 then 3d_y_rotate 5,90:sd=3 if a(f,g)= 9 then 3d_y_rotate 5,270: sd=1 if a(f,g)=11 then 3d_y_rotate 5,180: sd=4 end_if
if sd=3 mpt=g*8:g=g-1:mgd=g*8 repeat mgd=mgd+pas::3d_move 5,pas until mgd>=mpt if a(f,g)= 1 or a(f,g)=8 or a(f,g)=9 then 3d_y_rotate 5,90:sd=4 if a(f,g)=12 then 3d_y_rotate 5,270: sd=2 if a(f,g)=13 then 3d_y_rotate 5,180: sd=1 end_if
if sd=4 mpt=f*8:f=f-1:mgd=f*8 repeat mgd=mgd+pas:3d_move 5, pas until mgd>=mpt if a(f,g)= 4 or a(f,g)=8 or a(f,g)=12 then 3d_y_rotate 5,90:sd=1 if a(f,g)= 6 then 3d_y_rotate 5,270: sd=3 if a(f,g)=14 then 3d_y_rotate 5,180: sd=2 end_if
' 3d_position 5,f*8,4,g*8
' if i=f and j=g then goto termine:' le monstre repère noir vous a eu -> fin programme
glouton = 0
return
' ****************************************************************************** ' ********************* LES ROUTINES *********************************** ' ******************************************************************************
' CALCUL DES POSITIONS DES VÉHICULES MOTEUR ET CAMÉRA
affiche: 3d_position 4,o3d_x_position(3),o3d_y_position(3),o3d_z_position(3):3d_rotate 4,o3d_x_rotate(3),o3d_y_rotate(3),o3d_z_rotate(3) 3d_move 4,1:cam_position o3d_x_position(3),w,o3d_z_position(3):point_position o3d_x_position(4),4,o3d_z_position(4) return
' CRÉATION DES MURS DU LABYRINTHE : Vous pouvez supprimer les 3d_color et mettre ' à la place un 3d_load_texture si vous voulez habillez les murs!!!
pan1: 3d_box number_3d_objects+1,8.9,8.9,1:3d_position number_3d_objects,(i*8)-4,4,(j*8) 3d_y_rotate number_3d_objects,90:3d_color number_3d_objects,96,0,0 return
pan2: 3d_box number_3d_objects+1,8.9,8.9,1:3d_position number_3d_objects,(i*8),4,(j*8)+4 return
pan4: 3d_box number_3d_objects+1,8.9,8.9,1:3d_position number_3d_objects,(i*8)+4,4,(j*8) 3d_y_rotate number_3d_objects,90:3d_color number_3d_objects,96,0,0 return
pan8: 3d_box number_3d_objects+1,8.9,8.9,1:3d_position number_3d_objects,(i*8),4,(j*8)-4 return
' VISION DE HAUT DU LABYRINTHE EN 3D trace: repeat w=w+pasv:cam_position o3d_x_position(3),w,o3d_z_position(3):display until w=70
attend: if scancode=27 then goto termine
if scancode=32 repeat w=w-pasv:cam_position o3d_x_position(3),w,o3d_z_position(3):display until w=4 espace=0 goto moteur end_if
if scancode=37 then gosub gauche
if scancode=39 then gosub droite
gosub glouton
wait 500
goto attend
' ROTATION A GAUCHE gauche: ang=rot+90:dtn=dtn+1:if dtn>4 then dtn=1 repeat rot=rot+6*pas:3d_y_rotate 3,rot:if w>4 then gosub pivot gosub affiche until rot>=ang return
' ROTATION A DROITE droite: ang=rot-90:dtn=dtn-1:if dtn<1 then dtn=4 repeat rot=rot-6*pas:3d_y_rotate 3,rot:if w>4 then gosub pivot gosub affiche until rot<=ang return
' ROTATION DE LA CAMÉRA LORS DE LA VISION DE HAUT pivot: cam_position o3d_x_position(3),o3d_y_position(3)+w,o3d_z_position(3) return
' GÉNÉRATION DU LABYRINTHE lab: for j=1 to v+1:a(1,j)=4:a(h+1,j)=1:next j for i=2 to h:a(i,v+1)=8:a(i,1)=2:for j=2 to v:a(i,j)=15:next j:next i r=int(h/2+1):s=int(v/2+1):a(r,s)=15 for k=1 to n r1: i=0 if a(r-1,s)=15 then i=i+1 :c(i)=1 if a(r,s-1)=15 then i=i+1 :c(i)=2 if a(r+1,s)=15 then i=i+1 :c(i)=3 if a(r,s+1)=15 then i=i+1 :c(i)=4 if i=0 then goto r2 if i<>1 then i=int(rnd(i)+1) select c(i) case 1 :a(r,s)=a(r,s)-(int(a(r,s))-int(int(a(r,s))/2)*2):r=r-1:a(r,s)=a(r,s)-(int(a(r,s)/4)-int(int(a(r,s)/4)/2)*2)*4 case 2 :a(r,s)=a(r,s)-(int(a(r,s)/8)-int(int(a(r,s)/8)/2)*2)*8:s=s-1:a(r,s)=a(r,s)-(int(a(r,s)/2)-int(int(a(r,s)/2)/2)*2)*2 case 3 :a(r,s)=a(r,s)-(int(a(r,s)/4)-int(int(a(r,s)/4)/2)*2)*4:r=r+1:a(r,s)=a(r,s)-(int(a(r,s))-int(int(a(r,s))/2)*2) case 4 :a(r,s)=a(r,s)-(int(a(r,s)/2)-int(int(a(r,s)/2)/2)*2)*2:s=s+1:a(r,s)=a(r,s)-(int(a(r,s)/8)-int(int(a(r,s)/8)/2)*2)*8 end_select goto r7 r2: if d=-1 then goto r3 if r<>h then goto r5 if s<>v then goto r4 r=2:s=2:goto r6 r3: if r<>2 then goto r5 if s<>v then goto r4 r=h:s=2: goto r6 r4: s=s+1:d=-1*d:goto r6 r5: r=r+d r6: if a(r,s)=15 then goto r2 goto r1 r7: mur(r,s)=int(rnd(6)+1) if mur(r,s)=mur(r-1,s) or mur(r,s)=mur(r+1,s) or mur(r,s)=mur(r,s-1) or mur(r,s)=mur(r,s+1) then goto r7 next k return
' SORTIE DU PROGRAMME termine: timer_off_all terminate | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Labyrinth Mer 23 Nov 2011 - 8:16 | |
| Au fait Nardo, je viens de comprendre ton commentaire d'hier en téléchargeant les images , le nom des images (et le type passe de bmp à png) est changé par le programme de partage d'images mur1f.png => mur1.png; noirlc.png => nor.png; solaf.png=> sol.png; monstrey.png => monstre.png Puis tout transformer en BMP... une galère alors je vous mets directement le zip: Fichier zip des texturesJ'en profite pour filer un lien sur un pdf sur la théorie des labyrinthe (récursif pour Nardo ...), mais je pense que je développerais plus tard avec d'autres mises en pratiques plus proche de notre modèle actuel. Lien: Téhorie des labyrinthes | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Labyrinth Mer 23 Nov 2011 - 16:50 | |
| Purée, c'est vraiment calme aujourd'hui sur le forum ... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Labyrinth Mer 23 Nov 2011 - 17:20 | |
| avant la tempête... on a du boulot, nous ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Labyrinth Mer 23 Nov 2011 - 17:30 | |
| Idem, mais je jette un oeil régullièrement entre 2 mails ou procédures ... | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Labyrinth Mer 23 Nov 2011 - 19:42 | |
| La barre de progression n'est pas vraiment nécessaire pour la construction du labyrinthe... Par contre là il faut peut être apporter quelque chose c'est sur la vitesse des déplacements: La dernière version a tendance à ramer et parfois bloquer... J'y jette un coups d'oeil... EDIT : J'ai un peu amélioré les choses mais c'est pas encore ça... j’attends d'avoir vraiment un résultat significatif avant de donner un bout de code... C'est normal que le glouton traverse les murs ? | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Labyrinth Mer 23 Nov 2011 - 21:15 | |
| Non, non, c'est ce que je disais, je pense que j'ai le principe, mais je m'y perds dans les rotation, c'est ça de travailler sur un programme que l'on n'a pas fait Si tu piges mon erreur, tu es le bienvenu, sinon, je regarde cette nuit | |
| | | Contenu sponsorisé
| Sujet: Re: Labyrinth | |
| |
| | | | Labyrinth | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |