Forum Liberty Basic France

Jeux » Un Jeu Facile Prendre le dernier ( Page 2 )
Le 21/07/2012 à 18h07

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2457
J'ai réussi à forcer la sub à me rendre mes paramètres, ce qu'elle refusait au départ.
Maintenant, il s'agit de mettre de l'ordre et de la sub dans ce bazar.

Code JB :
 
 
 nomainwin
    NbXmax = 7  'nombre de case en X
    NbYmax = 7  'nombre de case en Y  (pas utile si la grille est carré ;) )
    dc = 53  'dimension d'une case en pixels
    MapHeight = 371
    MapWidth = 371
 
    WindowWidth = 800
    WindowHeight = 470
    UpperLeftX = (DisplayWidth-WindowWidth) / 3
    UpperLeftY = (DisplayHeight-WindowHeight) / 2
 
    ncx = 7  'nb of X cells
    ncy = 7 'nb of Y cells
 
    statictext #w.a "REPRODUIRE LE MODELE",210,17,180,20
    statictext #w.B "MODELE",570,17,150,20
    button #w.ni "Motif: 1", [moti], UL, 450, 5, 80, 25
    statictext #w.txt "",5,12,160,20
    graphicbox #w.map, 10, 40, 371, 371
    graphicbox #w.map2, 410, 40, 371, 371
    open "    Facile ?..." for window_nf as #w  'graphics_nf_nsb
    #w "trapclose quit"
                        '--------INI---------
    dim cell(ncx,ncy): dim cello(ncx,ncy): dim col$(4): dim celco(ncx,ncy)
    Global mX, mY, dc, y, r, col$, co, ncx, ncy, c, ca
    col$(1)= "red": col$(2)= "yellow": col$(3)= "blue": col$(4)= "white"
    niv=2: c=2: ca=2
                        '-------------------
    #w.map "down; fill black"
    #w.map "backcolor lightgray; color lightgray"
    #w.map2 "down; fill black"
    #w.map2 "backcolor lightgray; color lightgray"
    #w.map "when leftButtonDown [Mark]"
 
    [moti]
      niv=niv+1
      if niv=3 then niv=1
      #w.ni, "Motif: ";word$("1 2",niv)
 
  [new]
    gosub [map2]
    gosub [mapa]
  wait
        '-------------------------------------------------
  [Mark]                ' map
        mX = int(MouseX/dc)
        mY = int(MouseY/dc)
        #w.txt "pixels : ";MouseX;" / ";MouseY;_  ' infos
        "         Cell ( ";mX;" , ";mY;" )"       ' fin infos
        x=mX+1: y=mY+1
        if celco(x,y)=3 then celco(x,y)=4 else celco(x,y)=3  ' inversion
      call draw mX, mY          ' draw inversion case cliquée
      '++++++++++++++++++++++++++++++++++++++++++++++
      x=mX+1: y=mY+1
        if mX=0 and mY=0 then gosub [HG]  ' HG
        if mX=6 and mY=0 then gosub [HD]  ' HD
        if mX=0 and mY=6 then gosub [BG]  ' BG
        if mX=6 and mY=6 then gosub [BD]  ' BD
        if mX = 3 and mY = 3 then gosub [CTa]: gosub [CTb]: goto [trace]' CentreCentral
        if mX > 0 and mX < 6 and mY = 0 then gosub [MH] ' MH
        if mX = 6 and mY < 6 and mY > 0 then gosub [MD]  ' MD
        if mX > 0 and mX < 6 and mY = 6 then gosub [MB]  ' MB
        if mX = 0 and mY > 0 and mY < 6 then gosub [MG] ' MG
        if mX > 0 and mX < 6 and mY > 0 and mY < 6 then gosub [CTa]: gosub [CTb]: goto [trace]  ' Centr
      '++++++++++++++++++++++++++++++++++++++++++++++++
 
  [trace]
    for mY=0 to 6        ' retrace map
        for mX=0 to 6
        x=mX+1: y=mY+1
           #w.map "backcolor ";col$(celco(x,y));" ; color ";col$(celco(x,y))
           #w.map "place ";mX*dc+1;" ";mY*dc+1;"; boxfilled ";mX*dc+dc-1;" ";mY*dc+dc-1
        next mX
    next mY
  wait
 
    sub draw mX, mY    ' draw case cliquée inversée
    x=mX+1: t=mY+1
        #w.map "backcolor ";col$(celco(x,y));" ; color ";col$(celco(x,y))
        #w.map "place ";mX*dc+1;" ";mY*dc+1;"; boxfilled ";mX*dc+dc-1;" ";mY*dc+dc-1
    end sub
 
  [HG]
    c=celco(x+1,y)
    ca=celco(x,y+1)
    call inv c, ca, cb
    celco(x+1,y)=c
    celco(x,y+1)=ca
   return
  [HD]
    c=celco(x-1,y)
    ca=celco(x,y+1)
    call inv c, ca, cb
    celco(x-1,y)=c
    celco(x,y+1)=ca
  return
  [BG]
    c=celco(x+1,y)
    ca=celco(x,y-1)
    call inv c, ca, cb
    celco(x+1,y)=c
    celco(x,y-1)=ca
  return
  [BD]
    c=celco(x-1,y)
    ca=celco(x,y-1)
    call inv c, ca, cb
    celco(x-1,y)=c
    celco(x,y-1)=ca
  return
  [MH]
    c=celco(x-1,y)
    ca=celco(x+1,y)
    cb=celco(x,y+1)
    call inv c, ca, cb
    celco(x-1,y)=c
    celco(x+1,y)=ca
    celco(x,y+1)=cb
  return
  [MD]
    c=celco(x,y-1)
    ca=celco(x,y+1)
    cb=celco(x-1,y)
    call inv c, ca, cb
    celco(x,y-1)=c
    celco(x,y+1)=ca
    celco(x-1,y)=cb
  return
  [MB]
    c=celco(x-1,y)
    ca=celco(x+1,y)
    cb=celco(x,y-1)
    call inv c, ca, cb
    celco(x-1,y)=c
    celco(x+1,y)=ca
    celco(x,y-1)=cb
  return
  [MG]
    c=celco(x,y-1)
    ca=celco(x,y+1)
    cb=celco(x+1,y)
    call inv c, ca, cb
    celco(x,y-1)=c
    celco(x,y+1)=ca
    celco(x+1,y)=cb
  return
  [CE]
    c=celco(x-1,y-1)
    ca=celco(x+1,y+1)
  call inv c, ca, cb
    celco(x-1,y-1)=c
    celco(x+1,y+1)=ca
  return
  [CTa]
    c=celco(x-1,y-1)
    ca=celco(x+1,y+1)
    call inv c, ca, cb
    celco(x-1,y-1)=c
    celco(x+1,y+1)=ca
  return
  [CTb]
    c=celco(x+1,y-1)
    ca=celco(x-1,y+1)
    call inv c, ca, cb
    celco(x+1,y-1)=c
    celco(x-1,y+1)=ca
  return
 
  sub inv byref c, byref ca, byref cb
    c=c+1: ca=ca+1: cb=cb+1
    if c=5 then c=3
    if ca=5 then ca=3
    if cb=5 then cb=3
  end sub
      '-------------------------------------------------
    [mapa]
    RESTORE [datmapa]
    for y=1 to ncy                      ' charge cello()
        for x=1 to ncx
            read val   ' (read ne charge pas tableaux.)
            cello(x,y) = val
        next
    next
    for y=1 to ncy        ' trace map2
        for x=1 to ncx
            select case cello(x,y)
            case 0
            co=4
            #w.map "backcolor ";col$(co);" ; color ";col$(co)
            #w.map "place ";(x-1)*dc;" ";(y-1)*dc;"; boxfilled ";x*dc+dc-1;" ";y*dc+dc-1
            celco(x,y)=co ' stocke couleur case
            case 1
            co=3
            #w.map "backcolor ";col$(co);" ; color ";col$(co)
            #w.map "place ";(x-1)*dc;" ";(y-1)*dc;"; boxfilled ";x*dc+dc-1;" ";y*dc+dc-1
            celco(x,y)=co ' stocke couleur case
            end select
        next x
    next y
  return
 
    [map2]
    if niv=1 then RESTORE [niveau1]
    if niv=2 then RESTORE [niveau2]
    for y=1 to ncy                      ' charge cello()
        for x=1 to ncx
            read val   ' (read ne charge pas tableaux.)
            cello(x,y) = val
        next
    next
    for y=1 to ncy        ' trace map2
        for x=1 to ncx
            select case cello(x,y)
            case 0
            #w.map2 "backcolor ";col$(2);" ; color ";col$(2)
            #w.map2 "place ";(x-1)*dc;" ";(y-1)*dc;"; boxfilled ";x*dc+dc-1;" ";y*dc+dc-1
            case 1
            #w.map2 "backcolor ";col$(3);" ; color ";col$(3)
            #w.map2 "place ";(x-1)*dc;" ";(y-1)*dc;"; boxfilled ";x*dc+dc-1;" ";y*dc+dc-1
            end select
        next
    next
  return
 
wait
    [niveau1]
    data 1,0,0,0,0,0,1   ' 0 = yellow, 1 = blue
    data 0,1,0,0,0,1,0
    data 0,0,1,0,1,0,0
    data 0,0,0,1,0,0,0
    data 0,0,1,0,1,0,0
    data 0,1,0,0,0,1,0
    data 1,0,0,0,0,0,1
 
 
    [niveau2]
    data 0,0,1,1,1,0,0   '  0 = yellow, 1 = blue
    data 0,1,0,0,0,1,0
    data 1,0,0,0,0,0,1
    data 1,0,0,1,0,0,1
    data 1,0,0,0,0,0,1
    data 0,1,0,0,0,1,0
    data 0,0,1,1,1,0,0
 
    [datmapa]
    data 1,0,1,0,1,0,1   '  0 = yellow, 1 = blue
    data 0,1,0,1,0,1,0
    data 1,0,1,0,1,0,1
    data 0,1,0,1,0,1,0
    data 1,0,1,0,1,0,1
    data 0,1,0,1,0,1,0
    data 1,0,1,0,1,0,1
 
  wait
    sub quit handle$ 
        close #w
        end
    end sub
 
 




Edité par Roland Le 22/07/2012 à 23h08
____________________
Roro

   
Le 21/07/2012 à 23h16

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2457
Ah, y'a un détail...Je n'ai pas encore regardé si les motifs que je propose étaient possibles. :s



Edité par Roland Le 21/07/2012 à 23h17
____________________
Roro

   
Le 22/07/2012 à 02h05

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2457
Voila la version plus réaliste avec des modèles réalisables.
Mais alors...Impossible de mettre, ou remettre le grillage. Il y a là, une magouille d'extraterrestre.
Parce que en fait, y'avait un grillage... Mais pas de fil de fer. :heink
Il y a bien des +1 et des -1 qui ressenblent à du fil de fer virtuel :s
Sans vouloir me vanter... je peux dire que je n'y comprends rien. :(

Code JB :
 
 
 
 nomainwin
    NbXmax = 5  'nombre de case en X
    NbYmax = 5  'nombre de case en Y  (pas utile si la grille est carré ;) )
    dc = 53  'dimension d'une case en pixels
    MapHeight = NbYmax*dc
    MapWidth = NbXmax*dc
 
    WindowWidth = 2*MapWidth+50
    WindowHeight = MapHeight+80
    UpperLeftX = (DisplayWidth-WindowWidth) / 3
    UpperLeftY = (DisplayHeight-WindowHeight) / 2
 
    ncx = 5  'nb of X cells
    ncy = 5 'nb of Y cells
 
    statictext #w.a "REPRODUIRE LE MODELE",70,15,180,20
    statictext #w.B "MODELE",400,17,150,20
    button #w.ni "Motif: 1", [moti], UL, 250, 5, 80, 25
   ' statictext #w.txt "",5,12,160,20
    graphicbox #w.map, 10, 40, MapWidth, MapHeight
    graphicbox #w.map2, 300, 40, MapWidth, MapHeight
    open "    Facile ?..." for window_nf as #w  'graphics_nf_nsb
    #w "trapclose quit"
                        '--------INI---------
    dim cell(ncx,ncy): dim cello(ncx,ncy): dim col$(4): dim celco(ncx,ncy)
    Global mX, mY, dc, y, r, col$, co, ncx, ncy, c, ca
    col$(1)= "red": col$(2)= "yellow": col$(3)= "blue": col$(4)= "white"
    niv=3: c=1: ca=1
                        '-------------------
    #w.map "down"
    #w.map2 "down"
    '#w.map2 "fill black"
    '#w.map2 "backcolor black; color black"
    #w.map "when leftButtonDown [Mark]"
 
    [moti]
      niv=niv+1
      if niv=4 then niv=1
      #w.ni, "Motif: ";word$("1 2 3",niv)
 
  [new]
   ' gosub [grid]
    gosub [map2]
    gosub [mapa]
  wait
 
   ' [grid]
   '     grid = grid+1-2*(grid=1) '0 -> 1 -> 0 -> 1 -> 0 etc...
   '     gosub [DispMap]
   ' return
 
   ' [DispMap]
   '     if grid then
   '         #w.map "backcolor black; color black"
   '     else
   '         #w.map "backcolor red; color red"
   '     end if
   '     for y=1 to ncy
   '         #w.map "place 0 ";y*dc;"; goto ";MapWidth;" ";y*dc
   '     next
   '     for x=1 to ncx
   '         #w.map "place ";x*dc;" 0; goto ";x*dc;" ";MapHeight
   '     next
   '     #w.map "backcolor black; color black"
   '     #w.map "flush; discard"
   ' return
        '-------------------------------------------------
  [Mark]                ' map
        mX = int(MouseX/dc)
        mY = int(MouseY/dc)
       ' #w.txt "pixels : ";MouseX;" / ";MouseY;_  ' infos
       ' "         Cell ( ";mX;" , ";mY;" )"       ' fin infos
        x=mX+1: y=mY+1
        if celco(x,y)=2 then celco(x,y)=3 else celco(x,y)=2  ' inversion
      call draw mX, mY          ' draw inversion case cliquée
      '++++++++++++++++++++++++++++++++++++++++++++++
      x=mX+1: y=mY+1
        if mX=0 and mY=0 then gosub [HG]  ' HG
        if mX=4 and mY=0 then gosub [HD]  ' HD
        if mX=0 and mY=4 then gosub [BG]  ' BG
        if mX=4 and mY=4 then gosub [BD]  ' BD
        if mX = 2 and mY = 2 then gosub [CTa]: gosub [CTb]: goto [trace]' CentreCentral
        if mX > 0 and mX < 4 and mY = 0 then gosub [MH] ' MH
        if mX = 4 and mY < 4 and mY > 0 then gosub [MD]  ' MD
        if mX > 0 and mX < 4 and mY = 4 then gosub [MB]  ' MB
        if mX = 0 and mY > 0 and mY < 6 then gosub [MG] ' MG
        if mX > 0 and mX < 4 and mY > 0 and mY < 4 then gosub [CTa]: gosub [CTb]: goto [trace]  ' Centr
      '++++++++++++++++++++++++++++++++++++++++++++++++
 
  [trace]
    for mY=0 to 4        ' retrace map
        for mX=0 to 4
        x=mX+1: y=mY+1
           #w.map "backcolor ";col$(celco(x,y));" ; color ";col$(celco(x,y))
           #w.map "place ";mX*dc+1;" ";mY*dc+1;"; boxfilled ";mX*dc+dc-1;" ";mY*dc+dc-1
        next mX
    next mY
  wait
 
    sub draw mX, mY    ' draw case cliquée inversée
    x=mX+1: t=mY+1
        #w.map "backcolor ";col$(celco(x,y));" ; color ";col$(celco(x,y))
        #w.map "place ";mX*dc+1;" ";mY*dc+1;"; boxfilled ";mX*dc+dc-1;" ";mY*dc+dc-1
    end sub
 
  [HG]
    c=celco(x+1,y)
    ca=celco(x,y+1)
    call inv c, ca, cb
    celco(x+1,y)=c
    celco(x,y+1)=ca
   return
  [HD]
    c=celco(x-1,y)
    ca=celco(x,y+1)
    call inv c, ca, cb
    celco(x-1,y)=c
    celco(x,y+1)=ca
  return
  [BG]
    c=celco(x+1,y)
    ca=celco(x,y-1)
    call inv c, ca, cb
    celco(x+1,y)=c
    celco(x,y-1)=ca
  return
  [BD]
    c=celco(x-1,y)
    ca=celco(x,y-1)
    call inv c, ca, cb
    celco(x-1,y)=c
    celco(x,y-1)=ca
  return
  [MH]
    c=celco(x-1,y)
    ca=celco(x+1,y)
    cb=celco(x,y+1)
    call inv c, ca, cb
    celco(x-1,y)=c
    celco(x+1,y)=ca
    celco(x,y+1)=cb
  return
  [MD]
    c=celco(x,y-1)
    ca=celco(x,y+1)
    cb=celco(x-1,y)
    call inv c, ca, cb
    celco(x,y-1)=c
    celco(x,y+1)=ca
    celco(x-1,y)=cb
  return
  [MB]
    c=celco(x-1,y)
    ca=celco(x+1,y)
    cb=celco(x,y-1)
    call inv c, ca, cb
    celco(x-1,y)=c
    celco(x+1,y)=ca
    celco(x,y-1)=cb
  return
  [MG]
    c=celco(x,y-1)
    ca=celco(x,y+1)
    cb=celco(x+1,y)
    call inv c, ca, cb
    celco(x,y-1)=c
    celco(x,y+1)=ca
    celco(x+1,y)=cb
  return
  [CE]
    c=celco(x-1,y-1)
    ca=celco(x+1,y+1)
  call inv c, ca, cb
    celco(x-1,y-1)=c
    celco(x+1,y+1)=ca
  return
  [CTa]
    c=celco(x,y-1)
    ca=celco(x,y+1)
    call inv c, ca, cb
    celco(x,y-1)=c
    celco(x,y+1)=ca
  return
  [CTb]
    c=celco(x+1,y)
    ca=celco(x-1,y)
    call inv c, ca, cb
    celco(x+1,y)=c
    celco(x-1,y)=ca
  return
 
  sub inv byref c, byref ca, byref cb
    c=c+1: ca=ca+1: cb=cb+1
    if c=4 then c=2
    if ca=4 then ca=2
    if cb=4 then cb=2
  end sub
      '-------------------------------------------------
    [mapa]
    if niv=1 then RESTORE [data1]
    if niv=2 then RESTORE [data2]
    if niv=3 then RESTORE [data3]
    for y=1 to ncy                      ' charge cello()
        for x=1 to ncx
            read val   ' (read ne charge pas tableaux.)
            cello(x,y) = val
        next
    next
    for y=1 to ncy        ' trace map2
        for x=1 to ncx
            select case cello(x,y)
            case 0
            co=3
            #w.map "backcolor ";col$(co);" ; color ";col$(co)
            #w.map "place ";(x-1)*dc;" ";(y-1)*dc;"; boxfilled ";x*dc+dc-1;" ";y*dc+dc-1
            celco(x,y)=co ' stocke couleur case
            case 1
            co=2
            #w.map "backcolor ";col$(co);" ; color ";col$(co)
            #w.map "place ";(x-1)*dc;" ";(y-1)*dc;"; boxfilled ";x*dc+dc-1;" ";y*dc+dc-1
            celco(x,y)=co ' stocke couleur case
            end select
        next x
    next y
  return
 
    [map2]
    if niv=1 then RESTORE [motif1]
    if niv=2 then RESTORE [motif2]
    if niv=3 then RESTORE [motif3]
    for y=1 to ncy                      ' charge cello()
        for x=1 to ncx
            read val   ' (read ne charge pas tableaux.)
            cello(x,y) = val
        next
    next
    for y=1 to ncy        ' trace map2
        for x=1 to ncx
            select case cello(x,y)
            case 0
            #w.map2 "backcolor ";col$(2);" ; color ";col$(2)
            #w.map2 "place ";(x-1)*dc+1;" ";(y-1)*dc+1;"; boxfilled ";x*dc+dc-1;" ";y*dc+dc-1
            case 1
            #w.map2 "backcolor ";col$(3);" ; color ";col$(3)
            #w.map2 "place ";(x-1)*dc+1;" ";(y-1)*dc+1;"; boxfilled ";x*dc+dc-1;" ";y*dc+dc-1
            end select
        next
    next
  return
 
wait
  [motif1]
    data 0,0,0,0,0   ' 0 = yellow, 1 = blue
    data 0,0,0,0,0
    data 0,0,0,0,0
    data 0,0,0,0,0
    data 0,0,0,0,0
  [motif2]
    data 0,0,0,0,0   '  0 = yellow, 1 = blue
    data 0,1,1,1,0
    data 0,1,1,1,0
    data 0,1,1,1,0
    data 0,0,0,0,0
  [motif3]
    data 1,1,1,1,1   '  0 = yellow, 1 = blue
    data 1,0,0,0,1
    data 1,0,1,0,1
    data 1,0,0,0,1
    data 1,1,1,1,1
  [data1]
    data 1,0,1,0,1   '  0 = yellow, 1 = blue
    data 0,1,0,1,0
    data 1,0,1,0,1
    data 0,1,0,1,0
    data 1,0,1,0,1
  [data2]
    data 0,1,1,1,0   '  0 = yellow, 1 = blue
    data 1,0,1,0,1
    data 1,1,0,1,1
    data 1,0,1,0,1
    data 0,1,1,1,0
  [data3]
    data 1,1,0,1,1   '  0 = yellow, 1 = blue
    data 1,1,0,1,1
    data 0,0,0,0,0
    data 1,1,0,1,1
    data 1,1,0,1,1
  wait
 
    sub quit handle$ 
        close #w
        end
    end sub
 




Edité par Roland Le 22/07/2012 à 02h08
____________________
Roro

   
Le 22/07/2012 à 09h14

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Grrrrr!

Mais qu'est-ce que c'est que tout ces if et tout ces [label] ???? :@

Tu vas me faire le plaisir de ré-écrire tout ça en quelques lignes comme tu l'as vu dans tous les derniers code à base de grille que j'ai écrit pour toi !!!! à quoi ça sert que ducros y se décarcasse ? :@

indice :Code VB :
    dirX(1) = 0  : dirY(1) = -1  'up
    dirX(2) = 1  : dirY(2) = 0   'right
    dirX(3) = 0  : dirY(3) = 1   'down
    dirX(4) = -1 : dirY(4) = 0   'left

qui fera le tour d'une cellule x,y dans les 4 directions dans une petite boucle.
Bien sur il ne faut agir sur une case que si x+dirX(direction) , y+dirY(direction) est à l'intérieur de la grille...! : un simple "if" quoi !

Pour la grille visible :
1) soit tu réécrit par dessus au même endroit qu'une cellule un "box" au lieu du "boxfilled" mais avec une couleur foncée (darkgray par exemple) mais tu auras une grille avec de gros barreau !
2) soit tu dessines au départ une grille avec des box comme ci-dessus, puis tu t'appliques dans la SUB draw de faire un "boxfilled" de la couleur voulu mais en respectant les dimensions de l'intérieur de la cellule (donc 2 pixels en moins et +1 à l'adressage), pour ne pas recouvrir les bords et donc ne pas effacer la "box".

Essaye les 2.

@+



Edité par cassiope01 Le 22/07/2012 à 09h16
____________________
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 22/07/2012 à 10h18

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2457
NOTE:: ne te casse plus à chercher pour Atomose, je lui ai refilé ce qu'il faut.
J'avais prévenu, que je ferais fonctionner en gosub, et puis que j'essaierai de mettre en sub
Je vais tater du "Arround", et du "neighbor".
Je savais bien qu'il n'y avait pas de grillage. je vais tenter ta méthode. Si je n'y arrive pas, je ferai avec du fil de fer.( je vais faire les deux )
TU peux aller à la plage...veinard de Montpellierain....J'en ai pour un moment...



Edité par Roland Le 22/07/2012 à 10h19
____________________
Roro

   
Le 22/07/2012 à 10h39

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Ni "Arround" ni "neighbor".
C'est plus simple que ça. Tu verras.

En ce qui conserne Atomose, il ne s'est jamais servi des bouts de codes que moi ou quelqu'un d'autre lui on écrit.
C'est la première fois que je le vois reprendre mon code pour essayer de l'utiliser et de l'adapter à ses besoins ;)
En général il suit son idée et c'est tout.
Ce changement est plutôt positif. On verra bien.



Edité par cassiope01 Le 22/07/2012 à 10h39
____________________
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 22/07/2012 à 11h44

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2457
Je n'en suis pas encore là.
Je commence par essayer le fil de fer en sub, mais...Petit pb:
Je mets avant le return du traçage du modèle un call sub grid handle$
Plus bas je fait:
sub grid handle$
grill= val(mid$(handle$,7,1)) ' extrac N° map
grill$="#w.map"+str$(grill)
.....print #w.testa, grill$ ' textbox-espion

#w.map2 = #w.bt12 en nombre caractères
#w.b t1 2
et dans le textbox-espion
.....j'ai --> #w.map0
j'ai mis grill$ et handle$ en global en sachant que ça ne servait à rien
What's going on ?
____________________
Roro

   
Le 22/07/2012 à 11h55

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Roland:

#w.map2 = #w.bt12 en nombre caractères
#w.b t1 2

Qu'est-ce que c'est que ça ???

Je serais toi j'appellerai les graphicbox #w.map1 et #w.map2. Ainsi l'extraction du n° de la graphicbox grill= val(mid$(handle$,7)) renverra toujours un n° : 1 ou 2 et grill$="#w.map"+str$(grill) fonctionnera bien à tout les coups.

C'est beaucoup plus simple.

C'est une très bonne idée d'écrite une SUB générique pour les 2 graphicbox. C'est vraiment la bonne démarche.
Je suis sûr que tu peux faire pareil pour le chargement des niveaux...!

En tout cas tu maitrises word$() parfaitement ;)

De mon côté j'aimerai bien reproduire le fonctionnement du Trébuchet à bras flottant (que je trouve vraiment génial) pour faire un petit jeu de projectile en JB mais j'ai bien peur qu'il faille utiliser les sin() cos() en masse, et moi et la trigonométrie ça fait 2 ;) ;)

@+



Edité par cassiope01 Le 22/07/2012 à 12h15
____________________
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 22/07/2012 à 12h11

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2457
C'est bien ce que j'ai fait; graphicbox # w.map1 et: #w.map2
et j'ai controlé qu'il n'y avait pas de pétard



Edité par Roland Le 22/07/2012 à 12h12
____________________
Roro

   
Le 22/07/2012 à 12h19

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
montre le code en entier.



Edité par cassiope01 Le 22/07/2012 à 12h24
____________________
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 22/07/2012 à 12h30

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2457
Code JB :
 
 
  nomainwin
    NbXmax = 5  'nombre de case en X
    NbYmax = 5  'nombre de case en Y  (pas utile si la grille est carré ;) )
    dc = 53  'dimension d'une case en pixels
    MapHeight = NbYmax*dc
    MapWidth = NbXmax*dc
 
    WindowWidth = 2*MapWidth+50
    WindowHeight = MapHeight+80+40
    UpperLeftX = (DisplayWidth-WindowWidth) / 3
    UpperLeftY = (DisplayHeight-WindowHeight) / 2
 
    ncx = 5  'nb of X cells
    ncy = 5 'nb of Y cells
 
    textbox #w.testa, 10, WindowHeight-70, 150, 25
 
    statictext #w.a "REPRODUIRE LE MODELE",70,15,180,20
    statictext #w.B "MODELE",400,17,150,20
    button #w.ni "Motif: 1", [moti], UL, 250, 5, 80, 25
   ' statictext #w.txt "",5,12,160,20
    graphicbox #w.map1, 10, 40, MapWidth, MapHeight
    graphicbox #w.map2, 300, 40, MapWidth, MapHeight
    open "    Facile ?..." for window_nf as #w  'graphics_nf_nsb
    #w "trapclose quit"
                        '--------INI---------
    dim cell(ncx,ncy): dim cello(ncx,ncy): dim col$(4): dim celco(ncx,ncy)
    Global mX, mY, dc, y, r, col$, co, ncx, ncy, c, ca
    col$(1)= "red": col$(2)= "yellow": col$(3)= "blue": col$(4)= "white"
    niv=3: c=1: ca=1
 
    Global grill$, handle$
                        '-------------------
    #w.map1 "down"
    #w.map2 "down"
    '#w.map2 "fill black"
    '#w.map2 "backcolor black; color black"
    #w.map1 "when leftButtonDown [Mark]"
 
    [moti]
      niv=niv+1
      if niv=4 then niv=1
      #w.ni, "Motif: ";word$("1 2 3",niv)
 
  [new]
   ' gosub [grid]
    gosub [map2]
    gosub [mapa]
  wait
        '-------------------------------------------------
  [Mark]                ' map
        mX = int(MouseX/dc)
        mY = int(MouseY/dc)
       ' #w.txt "pixels : ";MouseX;" / ";MouseY;_  ' infos
       ' "         Cell ( ";mX;" , ";mY;" )"       ' fin infos
        x=mX+1: y=mY+1
        if celco(x,y)=2 then celco(x,y)=3 else celco(x,y)=2  ' inversion
      call draw mX, mY          ' draw inversion case cliquée
      '++++++++++++++++++++++++++++++++++++++++++++++
      x=mX+1: y=mY+1
        if mX=0 and mY=0 then gosub [HG]  ' HG
        if mX=4 and mY=0 then gosub [HD]  ' HD
        if mX=0 and mY=4 then gosub [BG]  ' BG
        if mX=4 and mY=4 then gosub [BD]  ' BD
        if mX = 2 and mY = 2 then gosub [CTa]: gosub [CTb]: goto [trace]' CentreCentral
        if mX > 0 and mX < 4 and mY = 0 then gosub [MH] ' MH
        if mX = 4 and mY < 4 and mY > 0 then gosub [MD]  ' MD
        if mX > 0 and mX < 4 and mY = 4 then gosub [MB]  ' MB
        if mX = 0 and mY > 0 and mY < 6 then gosub [MG] ' MG
        if mX > 0 and mX < 4 and mY > 0 and mY < 4 then gosub [CTa]: gosub [CTb]: goto [trace]  ' Centr
      '++++++++++++++++++++++++++++++++++++++++++++++++
 
  [trace]
    for mY=0 to 4        ' retrace map
        for mX=0 to 4
        x=mX+1: y=mY+1
           #w.map1 "backcolor ";col$(celco(x,y));" ; color ";col$(celco(x,y))
           #w.map1 "place ";mX*dc+1;" ";mY*dc+1;"; boxfilled ";mX*dc+dc-1;" ";mY*dc+dc-1
        next mX
    next mY
  wait
 
    sub draw mX, mY    ' draw case cliquée inversée
    x=mX+1: t=mY+1
        #w.map1 "backcolor ";col$(celco(x,y));" ; color ";col$(celco(x,y))
        #w.map1 "place ";mX*dc+1;" ";mY*dc+1;"; boxfilled ";mX*dc+dc-1;" ";mY*dc+dc-1
    end sub
 
  [HG]
    c=celco(x+1,y)
    ca=celco(x,y+1)
    call inv c, ca, cb
    celco(x+1,y)=c
    celco(x,y+1)=ca
   return
  [HD]
    c=celco(x-1,y)
    ca=celco(x,y+1)
    call inv c, ca, cb
    celco(x-1,y)=c
    celco(x,y+1)=ca
  return
  [BG]
    c=celco(x+1,y)
    ca=celco(x,y-1)
    call inv c, ca, cb
    celco(x+1,y)=c
    celco(x,y-1)=ca
  return
  [BD]
    c=celco(x-1,y)
    ca=celco(x,y-1)
    call inv c, ca, cb
    celco(x-1,y)=c
    celco(x,y-1)=ca
  return
  [MH]
    c=celco(x-1,y)
    ca=celco(x+1,y)
    cb=celco(x,y+1)
    call inv c, ca, cb
    celco(x-1,y)=c
    celco(x+1,y)=ca
    celco(x,y+1)=cb
  return
  [MD]
    c=celco(x,y-1)
    ca=celco(x,y+1)
    cb=celco(x-1,y)
    call inv c, ca, cb
    celco(x,y-1)=c
    celco(x,y+1)=ca
    celco(x-1,y)=cb
  return
  [MB]
    c=celco(x-1,y)
    ca=celco(x+1,y)
    cb=celco(x,y-1)
    call inv c, ca, cb
    celco(x-1,y)=c
    celco(x+1,y)=ca
    celco(x,y-1)=cb
  return
  [MG]
    c=celco(x,y-1)
    ca=celco(x,y+1)
    cb=celco(x+1,y)
    call inv c, ca, cb
    celco(x,y-1)=c
    celco(x,y+1)=ca
    celco(x+1,y)=cb
  return
  [CE]
    c=celco(x-1,y-1)
    ca=celco(x+1,y+1)
  call inv c, ca, cb
    celco(x-1,y-1)=c
    celco(x+1,y+1)=ca
  return
  [CTa]
    c=celco(x,y-1)
    ca=celco(x,y+1)
    call inv c, ca, cb
    celco(x,y-1)=c
    celco(x,y+1)=ca
  return
  [CTb]
    c=celco(x+1,y)
    ca=celco(x-1,y)
    call inv c, ca, cb
    celco(x+1,y)=c
    celco(x-1,y)=ca
  return
 
  sub inv byref c, byref ca, byref cb
    c=c+1: ca=ca+1: cb=cb+1
    if c=4 then c=2
    if ca=4 then ca=2
    if cb=4 then cb=2
  end sub
 
 
      '-------------------------------------------------
    [mapa]
    if niv=1 then RESTORE [data1]
    if niv=2 then RESTORE [data2]
    if niv=3 then RESTORE [data3]
    for y=1 to ncy                      ' charge cello()
        for x=1 to ncx
            read val   ' (read ne charge pas tableaux.)
            cello(x,y) = val
        next
    next
    for y=1 to ncy        ' trace map2
        for x=1 to ncx
            select case cello(x,y)
            case 0
            co=3
            #w.map1 "backcolor ";col$(co);" ; color ";col$(co)
            #w.map1 "place ";(x-1)*dc;" ";(y-1)*dc;"; boxfilled ";x*dc+dc-1;" ";y*dc+dc-1
            celco(x,y)=co ' stocke couleur case
            case 1
            co=2
            #w.map1 "backcolor ";col$(co);" ; color ";col$(co)
            #w.map1 "place ";(x-1)*dc;" ";(y-1)*dc;"; boxfilled ";x*dc+dc-1;" ";y*dc+dc-1
            celco(x,y)=co ' stocke couleur case
            end select
        next x
    next y
  return
 
    [map2]
    if niv=1 then RESTORE [motif1]
    if niv=2 then RESTORE [motif2]
    if niv=3 then RESTORE [motif3]
    for y=1 to ncy                      ' charge cello()
        for x=1 to ncx
            read val   ' (read ne charge pas tableaux.)
            cello(x,y) = val
        next
    next
    for y=1 to ncy        ' trace map2
        for x=1 to ncx
            select case cello(x,y)
            case 0
            #w.map2 "backcolor ";col$(2);" ; color ";col$(2)
            #w.map2 "place ";(x-1)*dc+1;" ";(y-1)*dc+1;"; boxfilled ";x*dc+dc-1;" ";y*dc+dc-1
            case 1
            #w.map2 "backcolor ";col$(3);" ; color ";col$(3)
            #w.map2 "place ";(x-1)*dc+1;" ";(y-1)*dc+1;"; boxfilled ";x*dc+dc-1;" ";y*dc+dc-1
            end select
        next
    next
    call grid handle$
  return
 
  sub grid handle$
     grill= val(mid$(handle$,9,1)) ' extrac N° map ' facultatif
     grill$="#w.map"+str$(grill)
     print grill$, "backcolor black"
     print grill$, "color black"
     print grill$, "size 3"
     print grill$, "up"
     print grill$, "goto 53 0"
     print grill$, "down"
     print grill$, "goto "; dc;" ";dc*7
        print #w.testa, grill$ 
  end sub
 
wait
  [motif1]
    data 0,0,0,0,0   ' 0 = yellow, 1 = blue
    data 0,0,0,0,0
    data 0,0,0,0,0
    data 0,0,0,0,0
    data 0,0,0,0,0
  [motif2]
    data 0,0,0,0,0   '  0 = yellow, 1 = blue
    data 0,1,1,1,0
    data 0,1,1,1,0
    data 0,1,1,1,0
    data 0,0,0,0,0
  [motif3]
    data 1,1,1,1,1   '  0 = yellow, 1 = blue
    data 1,0,0,0,1
    data 1,0,1,0,1
    data 1,0,0,0,1
    data 1,1,1,1,1
  [data1]
    data 1,0,1,0,1   '  0 = yellow, 1 = blue
    data 0,1,0,1,0
    data 1,0,1,0,1
    data 0,1,0,1,0
    data 1,0,1,0,1
  [data2]
    data 0,1,1,1,0   '  0 = yellow, 1 = blue
    data 1,0,1,0,1
    data 1,1,0,1,1
    data 1,0,1,0,1
    data 0,1,1,1,0
  [data3]
    data 1,1,0,1,1   '  0 = yellow, 1 = blue
    data 1,1,0,1,1
    data 0,0,0,0,0
    data 1,1,0,1,1
    data 1,1,0,1,1
 
  wait
    sub quit handle$ 
        close #w
        end
    end sub
 
 



On en découvre tous les jours sur ce forum..je suis en train de charger comme un porc tout ce que tu a mis chez Atomose...y'a de l'or la dedans !
____________________
Roro

   
Le 22/07/2012 à 12h41

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2457
Le: "Path Finding"== GENIAL de chez GENIAL. Il mériterait un fichier d'aide parce que le code, c'est du "extraterrestre" pur jus.
____________________
Roro

   
Le 22/07/2012 à 12h44

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Oui, je m'étais bien investi (amusé) à l'époque ;) j'avais même écrit une version avec recherche automatique du chemin le plus court entre le personnage et les coordonnées du clic de souris du joueur, et le personnage y allait et évitait les obstacles tout seul.

Bon je regarde ton code.

@+
____________________
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 22/07/2012 à 13h01

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Alors il faut que tu affectes toi même le contenu de handle$ puisque la SUB grid n'est pas appelée par un bouton qui lui, donne tout seul son nom dans handle$ de la SUB qui lui est affectée.
Donc c'est call grid "#w.map2" dans [map2].

Ensuite si je compte bien les caractères c'est grill= val(mid$(handle$,7)) et pas 9.
Puis je ne comprend pas bien ce que tu voudrais faire avec les lignes de code dans cette sub grid ?
Tu devrais plutôt écrire la même chose que dans [trace] mais en utilisant tout simplement la commande "box" à la place de "boxfilled".

@+
____________________
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 22/07/2012 à 13h22

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Pour le PathFinder c'était ici l'an dernier.
____________________
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 22/07/2012 à 13h29

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2457
Pour le 9..c'est le dernier geste du desespéré :berk ;)
Dans la sub je compte faire un grillage avec une double boucle de: up, goto, down, goto
je fais avec une sub, pour manipuler de la sub, et ne pas faire 2 fois (map1 map2) le meme tracé
ça fait déjà un moment que je me dispute avec les boxfilled dans ta grille où on clique sur une case et les coord s'affichent en haut..
Notamment avec les changements de couleurs quand le curseur bouge sur la grille...c'est un miracle que je sois arrivé à faire ce que je voulais, en batissant tout, autour de ta ligne du boxfilled.
Pour l'histoire de l'affectation, ça vaut le coup que je mette une note dans l'aide. C'était pas évident.
____________________
Roro

   
Le 22/07/2012 à 14h11

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2457
Citation:
c'est call grid "#w.map2" dans [map2].

Hey ! "#w.map2" is not a variable ! I may do: grill$="#w.map2" and call grid grill$
farces et attrapes no passaran !
____________________
Roro

   
Le 22/07/2012 à 14h18

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
your english is very good ;)
____________________
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 22/07/2012 à 14h39

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2457
Deux soucis( 2)
Soucis 1: pourquoi ça:
sub grid grill$
print grill$, "down"
print grill$, "size 3"
print grill$, "color black"
print grill$, "place 53 300"
' print grill$, "goto "; dc;" ";dc*7
print grill$, "goto 100"
print grill$, "flush"
print grill$, "refresh"
end sub
ne me mets pas un bout de ligne noire dans map2 (qui n'est pas repeinte aprés, ce qui effacerait la ligne)
Soucis 2:
Sachant que je mets un: #w.map2, "fill black" en entrée de jeu, comment se fait-il que:
#w.map2 "place ";(x-1)*dc+1;" ";(y-1)*dc+1;"; boxfilled ";x*dc+dc-1;" ";y*dc+dc-1
ne me laisse pas un espace noir entre les boxfilled
si je mets box, au lieu de boxfilled, les box sont bien sepacées ( mais elles ne sont pas remplies, et donc noires à bords jaunes)
____________________
Roro

   
Le 22/07/2012 à 15h12

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
1) Tu dois mettre un # devant la variable grill$ quand tu l'utilises.
Je résume ta SUB:
dans la fenêtre #grill$
tu pose le crayon avec "down"
tu fixe l'épaisseur du crayon à 3 pixels
tu lui donnes la couleur noir
tu le positionne à 53 300 ( c'est à dire en dehors de la fenêtre puisqu'elle mesure 5*dc X 5*dc)
tu déplaces le crayon à 100 (et le y ?) : un trait sera dessiné puisque "down"
tu flush le tout pour "fixer" l'encre en quelque sorte ;)
...
tout ça fonctionne parfaitement mais j'ai comme dans l'idée que c'est pas tout à fait ce que tu voulais faire... :siffle ;)

2) sûrement un pb d'adressage et de couleur utilisée... il faut être précis et bien calculer ce que les formules donnent exactement comme coordonnées : c'est fastidieux mais une fois que c'est fait ça marche bien.

@+



Edité par cassiope01 Le 22/07/2012 à 15h22
____________________
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    
Jeux » Un Jeu Facile Prendre le dernier ( Page 2 )  

 |  |

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