Forum Liberty Basic France

Général » Labyrinthe40 Version 3D
Le 25/03/2014 à 16h19

Libertynaute Débutant

Groupe: Membre

Inscrit le: 03/08/2013
Messages: 16
Version 3D ou presque , quoi qu'il en soit je suis bloqué de puis de 3 semaines .
Donc au démarrage tout est parfait suivant ce que j'avais prévue
je m'oriente vers la droite ou la gauche mais pas trop OK
si j'insiste c'est la cata idem si j'avance au départ
Je sais qu'il sortir du cadre du moins c'est ce que je croit et j'ai beau
le limiter avec dx , x , dy ,y mais rien n'y fait ,alors si quelqu'un peu m'aider ?
je pourrai continuer avec le premier programme de labyrinthe aléatoire
et voila le sort de ce pauvre est entre vos mains : Bon courage !

Code VB :
 
 
'programmé en Just Basic par Roger2givry
[init]
taille=40
DIM k(taille,taille)
ox =200 : oy=150
dx=36 : dy=36
ray=1
pi= 3.141592654
a1=4*pi/3
dim color$(6)
    color$(1) = "red"
    color$(2) = "green"
    color$(3) = "darkred"
    color$(4) = "blue"
    color$(5) = "brown"
    color$(6) = "darkblue"
[début]
for y=0 to taille
    for x=0 to taille
     read n :k(x,y)=n
    next
next
WindowWidth =380
WindowHeight =300
UpperLeftX = 500
UpperLeftY = 200
nomainwin
open "Lab41" for graphics_nsb as #g
#g "setfocus; when characterInput [fetch]"
    #g, "trapclose [q]"
    #g, "down"
[fetch]  ' character tapé
 key$ = Inkey$
  if (key$) = "8" then dy=dy+int(sin(a)*10)':dx=dx+cos(a)    'à revoir
  if (key$) = "2" then dy=dy-sin(a)':dx=dx-cos(a)
  if (key$) = "6" then a1=a1+pi/18
  if (key$) = "4" then a1=a1-pi/18
  if (key$) = "q" then   [q]
'==================================================
gosub [Ray]
wait
[q]
close #g
end
'----------------------------------------
[Ray]
#g "color cyan "
#g , "cls ; fill black ; down " ;
#g, "backcolor cyan  "
#g, "set 0 0 "
    #g, "boxfilled    365 150"
   #g, "flush"
[tourne]
a2=a1+pi/3
#g,"size 6 "
bande=3                      'bande verticale début bord gauche de l'écran

 '--------------------ZONE EN TRAVAUX --------------------------
'Avance et Recul Plantage...?

 for a=a1 to a2 step pi/180
    [mesure]
    y=dy+ int(sin  (a) * ray)
    x=dx+ int(cos (a) * ray)
    if k(x,y)< 1 then ray=ray+.1:goto  [mesure]
 
                 hauteur=620/ray
                #g,"color "; color$(k(x,y))
                h1=oy-hauteur
                h2=oy+hauteur
                #g," line "; bande;" ";h1;" ";bande;" ";h2
                 #g, "color darkgreen  "
                  #g," line "; bande;" ";h2;" ";bande;" ";300
 [suite]
  ray=1:bande=bande+6
 next
 #g, "flush"
 WAIT
return
 
 
'-------------------------------DATA-------------
data 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1
data 1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1
data 1,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,2,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1
 
 
 
____________________
Les programmes les plus court sont les meilleurs

Web    
Le 25/03/2014 à 17h45

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
J'avais un exemple de raycasting (labyrinthe 3D) sous la main, si ça peut t'aider ... ;)
Code VB :
'JB Raytracer
'------------
'Erland Rovik ported of Peter Cooper's QB Raytracer to RapidQ.
'I ported Erland's port to JustBASIC, with a few minor changes.
'If anyone makes any improvements to this code, I'd love to hear
'about it! -- Kevin Crisp (kevin_michael_crisp@yahoo.com)

DIM sintable(360)
DIM costable(360)
DIM map$(10)
DIM color$(10)
 
'color table
color$(1)="yellow"
color$(2)="brown"
color$(3)="red"
color$(4)="darkred"
color$(5)="pink"
color$(6)="darkpink"
color$(7)="blue"
color$(8)="darkblue"
color$(9)="cyan"
color$(10)="white"
 
'map definitions
map$(1) = "1919191919"
map$(2) = "9000000001"
map$(3) = "1000000409"
map$(4) = "9010005001"
map$(5) = "1020040009"
map$(6) = "9030000001"
map$(7) = "1000078009"
map$(8) = "9050087001"
map$(9) = "1060000009"
map$(10)= "9191919191"
 
'trigonometric tables
FOR i = 0 TO 360
    sintable(i) = (sin(i * 0.0174)) * 100
    NEXT i
FOR i = 0 TO 360
    costable(i) = (cos(i * 0.0174)) * 100
    NEXT i
 
'create window
NOMAINWIN
WindowHeight=260
WindowWidth=320
msg$="Press 'z' to turn left, 'x' to turn right and SPACE to move forward."
STATICTEXT #win, msg$,5,210,300,105
GRAPHICBOX #win.g 5, 5, 300, 205
OPEN "JB Raytaster" FOR window_nf AS #win
PRINT #win, "trapclose [quit]"
PRINT #win.g, "setfocus"
PRINT #win.g, "when characterInput [keypressed]"
posx=22 'px
posy=22 'py
angle=0 'sa

wait
 
[raycast]
FOR t = angle TO (angle + 59) step 1
    xb = sintable(t mod 360) / 100
    yb = costable(t mod 360) / 100
    bx = posx
    by = posy
    l = 0
    do
        bx = bx + xb
        by = by + yb
        l = l + 1
        k = ASC(MID$(map$(int(by/10)),int(bx/10),1))-48
    LOOP UNTIL (k > 0)
    x = (t - angle) * 5
    dd = (1000 / l)
    PRINT #win.g, "down"
    PRINT #win.g, "place ";x;" ";(100-dd)
    PRINT #win.g, "color ";color$(k);"; backcolor ";color$(k)
    PRINT #win.g, "boxfilled ";(x+5);" ";(100+dd)
    PRINT #win.g, "color ";color$(10);"; backcolor ";color$(10)
    PRINT #win.g, "boxfilled ";(x+5);" 0"
    PRINT #win.g, "place ";x;" ";(100+dd)
    PRINT #win.g, "boxfilled ";(x+5);" 205"
    PRINT #win.g, "place ";x;" ";(100-dd)
    PRINT #win.g, "color black"
    PRINT #win.g, "goto ";(x+5);" ";(100-dd)
    PRINT #win.g, "place ";x;" ";(100+dd)
    PRINT #win.g, "goto ";(x+5);" ";(100+dd)
    PRINT #win.g, "up"
NEXT t
WAIT
 
[keypressed]
key$ = RIGHT$(UPPER$(Inkey$), 1)
SELECT CASE key$
    CASE CHR$(_VK_RIGHT)
        angle = angle + 3
    CASE CHR$(_VK_LEFT)
        angle = (angle + 357) mod 360
    CASE CHR$(_VK_UP)
        if (t-30)>0 then
        bx = posx + (sintable(((t-30) mod 360)) / 50)
        by = posy + (costable(((t-30) mod 360)) / 50)
        k = ASC(MID$(map$(int(by/10)),int(bx/10),1))-48
        IF k = 0 THEN
            posx = posx + (sintable(((t-30) mod 360)) / 50)
            posy = posy + (costable(((t-30) mod 360)) / 50)
        END IF
        end if
    CASE CHR$(_VK_DOWN)
        if (t-30)>0 then
        bx = posx - (sintable(((t-30) mod 360)) / 50)
        by = posy - (costable(((t-30) mod 360)) / 50)
        k = ASC(MID$(map$(int(by/10)),int(bx/10),1))-48
        IF k = 0 THEN
            posx = posx - (sintable(((t-30) mod 360)) / 50)
            posy = posy - (costable(((t-30) mod 360)) / 50)
        END IF
        end if
END SELECT
GOTO [raycast]
 
[quit]
CONFIRM "Do you really want to quit?"; answer$
IF answer$="no" THEN GOTO [raycast]
CLOSE #win
END
 


et aussi un générateur de labyrinthe 2D avec une recherche du "chemin le plus court"...

PathFinder_AStar.bas

Gilles.
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 25/03/2014 à 18h52

Libertynaute Débutant

Groupe: Membre

Inscrit le: 03/08/2013
Messages: 16
Salut casiope ,ferais tu de l'astronomie par hasard ?
Mais d'abord merci pour ta réponse , je voie que tu est pragmatique
la semaine dernière j'ai eu la visite de mon petit fils qui m'a fait la mème
proposition ,donc nous avons voulu voir ça de plus près mais en juste basic
il bloque avec la FONCTION mod () idem avec modulo puis avec modu () OK
mon petit Louis est un surdoué il fait des cites web avec une tel facilité
que je me remet souvent en question .
Quoi qu'il en soit je n'ai pu résoudre mon problème ; pour ce qui est de la recherche
du chemin le + court je connais la méthode de la maint gauche ou la droite kif kif
il suffit de longer toujours le mème mur , ce n'ai peut etre pas le plus court mais
il mène quand mème a la sortie sauf quand il y a des ilots .
Mais mon but est de faire tourner mon programme , ensuite de l' amélioerer
donc si tu peut le tester et voir ce qui ne va pas je t'en serais reconnaissant


Les programmes les plus court sont les meilleurs

____________________
Les programmes les plus court sont les meilleurs

Web    
Le 26/03/2014 à 11h25

Libertynaute Débutant

Groupe: Membre

Inscrit le: 03/08/2013
Messages: 16
Cher casiope je te demande pardon , je n'avais pas lu entierement le programme
que tu me proposai ;En effet la fonction mod() n'existe plus et les déplacements
ce font avec les flèches et non plus avec "z" et "x"
Si c'est toi qui l'a modifié je te dit bravo 8-) .
Je devais dormir un peu quand j'ai lu ta réponse donc j'y retourne immédiatement
bien amicalement Roger
____________________
Les programmes les plus court sont les meilleurs

Web    
Général » Labyrinthe40 Version 3D  

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie