Forum Liberty Basic France

Jeux » Chutes Ancien jeu Remanié 2012
Le 11/07/2012 à 20h50

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2484
Un ancien jeu,..remanié entre la poire et le fromage.susceptible de modifications ou "updates" LoL

Chutes.zip

Cassiope, il faudra que tu dise si tu veux que ton nom figure dans le code...Pour si Bill Gates veux acheter les droits ;)
____________________
Roro

   
Le 12/07/2012 à 10h26

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Tant que tu mets le lien vers ton post d'origine.

Deux trois trucs qui ne vont pas dans ton prog si tu permets :

1) Ne jamais recharger le fichier BMP du disque à chaque fois que tu veux l'utiliser.
LOADBMP "name", "filename.bmp" charge une copie locale du fichier filename.bmp dans un espace mémoire que JB se réserve, et lui affecte "name".
Tu dois le faire une seule fois, en général en début de code.
Ensuite, dans le code, c'est "name" que tu dois utiliser, et autant de fois que tu veux, tu peux même en remplir l'écran si tu veux, ça ne charge pas plus la mémoire.
D'ailleurs, dans [quit], ne pas oublier de vider cette mémoire avec tous les unloadbmp "name" qui vont bien...!

2) A chaque fois que tu changes les murs ou les billes, tu relances [new] : c'est pourtant pas le but de ces boutons : il y en a déjà un qui fait ça !
Pourquoi ne pas simplement reparcourir la grille et réafficher la bonne image au bon endroit, sans toucher au jeu en cours ?
La sub drawRow r dessine une ligne entière avec les images correspondantes aux contenus de cell(x,y).
Il te suffit de l'utiliser dans une petite boucle de 8 lignes, et ça redessinera tout en fonction des images courantes sélectionnées avec les boutons.

3) si je puis me permettre, les traits blancs aux bords droit et bas de certaines billes ne font pas très joli ;)

4) pour la version rnd tu n'as pas pris la bonne version...

voilà m'sieur.

@+



Edité par cassiope01 Le 12/07/2012 à 14h16
____________________
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 12/07/2012 à 13h00

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Ton code multi murs & billes :

Code VB :
   'http://libertybasic.fr/forum/topic-162-1+code-en-cours-de-defrichage.php
   'http://libertybasic.fr/forum/topic-163+chutes.php

    nomainwin
 
    GLOBAL ncx, ncy, dc, mm, bb
    global ro, di, oldro, oldi, coup
 
    ncx = 16   ' nbr of cells X
    ncy = 9    ' nbr of cells Y
    dc = 42    ' size of a cell in pixels
    MapWidth = (ncx+2)*dc+int(dc/ncx)
    MapHeight = 378  ' (ncy)*dc+int(dc/ncy)  '378

    WindowWidth  = MapWidth + 65
    WindowHeight = MapHeight + 75  ' 498  ' 75
    UpperLeftX = (DisplayWidth-WindowWidth) / 3
    UpperLeftY = (DisplayHeight-WindowHeight) / 2
 
   ' mois$ = "January February March April May June July August September October November December"
    mois$ = "Janvier Février Mars Avril Mai Juin Juillet Août Septembre Octobre Novembre Décembre"   ' french
    today$ = date$("mm/dd/yyyy")
    j = date$(today$)
   ' jsem$ = word$("Tuesday Wednesday Thursday x Friday Saturday x Sunday Monday",int((j/7-int(j/7))*10)+1)
    jsem$ = word$("Mardi Mercredi Jeudi x Vendredi Samedi x Dimanche Lundi",int((j/7-int(j/7))*10)+1)   ' french
    date$ = jsem$+" "+mid$(today$,4,2)+" "+word$(mois$, val(today$))+" "+right$(today$,4)+"  "+left$(time$(),5)
 
    DIM cell(ncx,ncy)
 
    button #w.bi "Bille", [bi], UL, 40, 5, 60, 25
    button #w.mu "Mur", [mu], UL, 120, 5, 60, 25
    statictext #w.txt "Jeu",230,10,60,30
    button #w.ni "Niveau: 1", [niv], UL, 330, 5, 60, 25
    statictext #w.tt "Triche", 40+17*dc, 40+(8*dc)+7,50,20
    graphicbox #w.map, 5+dc, 40, MapWidth-2*dc, MapHeight
    button #w.bt11 "", boutons, UL, 775, 44+(1*dc), dc, dc-10  '  à droite
    button #w.bt21 "", boutons, UL, 775, 44+(2*dc)+1, dc, dc-10
    button #w.bt31 "", boutons, UL, 775, 44+(3*dc)+2, dc, dc-10
    button #w.bt41 "", boutons, UL, 775, 44+(4*dc)+3, dc, dc-10
    button #w.bt51 "", boutons, UL, 775, 43+(5*dc)+4, dc, dc-10
    button #w.bt61 "", boutons, UL, 775, 43+(6*dc)+5, dc, dc-10
    button #w.bt71 "", boutons, UL, 775, 41+(7*dc)+6, dc, dc-10
    button #w.bt81 "", boutons, UL, 775, 54+(8*dc)+7, dc, 20 ' 775, 46+(8*dc)+7, dc, dc-10

    button #w.bt12 "", boutons, UL, 9+17*dc, 44+(1*dc), dc, dc-10  '  à gauche
    button #w.bt22 "", boutons, UL, 9+17*dc, 44+(2*dc)+1, dc, dc-10
    button #w.bt32 "", boutons, UL, 9+17*dc, 44+(3*dc)+2, dc, dc-10
    button #w.bt42 "", boutons, UL, 9+17*dc, 44+(4*dc)+3, dc, dc-10
    button #w.bt52 "", boutons, UL, 9+17*dc, 43+(5*dc)+4, dc, dc-10
    button #w.bt62 "", boutons, UL, 9+17*dc, 43+(6*dc)+5, dc, dc-10
    button #w.bt72 "", boutons, UL, 9+17*dc, 41+(7*dc)+6, dc, dc-10
    button #w.bt82 "", boutons, UL, 9+17*dc, 54+(8*dc)+7, dc, 20 ' 9+17*dc, 46+(8*dc)+7, dc, dc-10
    button #w.new "New",[new],UL,MapWidth-20,6,60,27
    OPEN "    TEST Chute(s)... "+space$(15)+date$ for window_nf as #w  'graphics_nf_nsb
    #w.map "trapclose [quit]"
    #w.map, "setfocus"
    #w.map "down; backcolor black; fill black"
    #w.map "getbmp p0 0 0 ";dc;" ";dc  ' empty cell for deleting
    #w.new "!font Arial 12 bold"
 
    for bt = 1 to 16
        btn$ = "#w.bt"+word$("11 21 31 41 51 61 71 81 12 22 32 42 52 62 72 82",bt)
        #btn$ "!font Arial 16 bold"
        if bt<9 then #btn$ ">" else #btn$ "<"
    next
 
    for im = 1 to 6         '  chargement en mémoire des fichiers BMP qui pourront ensuite être utilisés.
        loadbmp "mur";im, "Mur";im;".bmp"
        loadbmp "bille";im, "Bille";im;".bmp"
    next
 
    bb=4: mm=5: niv=1
 
    [niv]
      niv=niv+1
      if niv=3 then niv=1
      #w.ni, "Niveau: ";niv
    goto [new]
 
 
    [new]
    print #w.txt, "Jeu N°:0": coup=0
    print #w.bi, "Bille: ";bb
    print #w.mu, "Mur: ";mm
 
    if niv=1 then RESTORE [niveau1]
    if niv=2 then RESTORE [niveau2]
 
    for y=1 to ncy
        for x=1 to ncx
            read val  ' read ne peut pas affecter directement une var. tableau.
            cell(x,y) = val
        next
        call drawRow y
    next
 
    call fall  ' première chute dès la mise en place

 
    WAIT
 
    sub fall   ' gère toutes les chutes potentielles dans toute la grille
        for cy = ncy-1 to 1 step -1 ' en partant du bas bien sûr !
            for cx = 1 to ncx
                by = cy
                while by+1 <= ncy
                    if cell(cx,by) = 2 and cell(cx,by+1) = 0 then
                        cell(cx,by) = 0
                        #w.map "drawbmp p0 ";(cx-1)*dc;" ";(by-1)*dc
                        cell(cx,by+1) = 2
                        #w.map "drawbmp bille";bb;" ";(cx-1)*dc;" ";by*dc
                    end if
                    by = by + 1
                wend
            next
        next
        #w.map "flush; discard"
    end sub
 
    [bi]                   ' change bille
      bb=bb+1
      if bb =6 then bb=1
      #w.bi, "Bille: ";bb
      for y = 1 to ncy :call drawRow y :next
    wait
 
    [mu]                   ' change mur
      mm=mm+1
      if mm =6 then mm=1
      #w.mu, "Mur: ";mm
      for y = 1 to ncy :call drawRow y :next
    wait
 
    sub boutons handle$  ' décalage d'une ligne en fonction du bouton pressé
                         ' les extrémités reviennent de l'autre côté...

        row = val(mid$(handle$,6,1))+1 'extraction de la ligne grace aux noms des boutons (judicieusement nommés ;) )
        dir = val(mid$(handle$,7,1))   'et extraction du sens
        ro=row-1: di=dir
        if olro<>0 or oldi<>0 then    ' secur premier coup
            han$ = "#w.bt" + STR$(oldro)+STR$(oldi)
            #han$, "!enable"             'réactive bouton
        end if
 
        if dir = 1 then             ' vers la droite
            temp = cell(ncx,row)
            for x=ncx to 2 step -1
                cell(x,row) = cell(x-1,row)
            next
            cell(1,row) = temp
        else                        ' vers la gauche
            temp = cell(1,row)
            for x=1 to ncx-1
                cell(x,row) = cell(x+1,row)
            next
            cell(ncx,row) = temp
        end if
        call drawRow row
        call fall
 
        hand$ = "#w.bt" + STR$(ro)+STR$(di)
        print #hand$, "!disable"         ' désactive bouton
        oldro=ro: oldi=di                'memorise ligne direction
        coup=coup+1
        print #w.txt, "Jeu N°:";coup
 
    end sub                 ' c'est ici que le prog attend le coup suivant

    sub drawRow r    ' dessine le contenu d'une ligne
        for x=1 to ncx
            select case cell(x,r)
            case 0 :#w.map "drawbmp p0 ";(x-1)*dc;" ";(r-1)*dc
            case 1 :#w.map "drawbmp mur";mm;" ";(x-1)*dc;" ";(r-1)*dc
            case 2 :#w.map "drawbmp bille";bb;" ";(x-1)*dc;" ";(r-1)*dc
            end select
        next
    end sub
 
    [niveau1]
    data 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ' 2 = boule, 1 = mur, 0 = trou
    data 0,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1
    data 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1
    data 0,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1
    data 1,1,0,1,1,1,1,0,1,0,1,1,1,0,1,1
    data 0,1,1,1,1,0,1,1,0,1,0,1,1,1,1,1
    data 1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1
    data 0,1,1,0,1,1,0,1,1,1,0,1,1,1,0,1
    data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 
    [niveau2]
    data 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ' 2 = boule, 1 = mur, 0 = trou
    data 1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1
    data 1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1
    data 1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1
    data 1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1
    data 1,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1
    data 1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1
    data 1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1
    data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 
    [quit]
        for im = 1 to 6
            unloadbmp "mur";im
            unloadbmp "bille";im
        next
        close #w
        end
    wait
 




Edité par cassiope01 Le 12/07/2012 à 13h03
____________________
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 12/07/2012 à 13h26

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2484
Moi qui était si content d'avoir fait ça en trois lignes, aprés avoir taté du flag et du select.
J'étudie tes remarques et je corrige. La sub drawrow faisant partie des entrailles de la machine, il va falloir y aller mollo, jusqu'a présent je me casse les dents sur tes sub's, avec un bel entrain....Mais crogneugneu, il n'en sera pas toujours ainsi. :miam
Pour la version rnd, je n'en ai vu qu'une, la première que tu a posté, je n'y ai pas touché car il y avait beaucoup de trous.
Je ne sais pas mettre le liens vers le post antérieur.
Pour les traits blancs, je n'ai pas la moindre idée de comment les éliminer.
Serais-ce la dimension de la case ?...Non, puisque le fond est noir...D'où peut venir ce blanc ?
Mystère et boule de gomme... :heink
Tu me mets mon code ? ? ?...Mais je l'ai pardine !..Tu aurais du mettre la bonne version rnd, si tu ne l'a pas jetée. :p
____________________
Roro

   
Le 12/07/2012 à 13h37

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Roland:
Pour les traits blancs, je n'ai pas la moindre idée de comment les éliminer.


Ben avec Paint tout simplement !!! Oouuh ça va pu bien toi en ce moment !!! :heink

Pour le rnd y a qu'à faire un niv 3 qui tire les trous au hasard...

@+



Edité par cassiope01 Le 12/07/2012 à 13h39
____________________
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 12/07/2012 à 14h32

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2484
Tu veux dire que le blanc viens des bmp ?!?
J'ai voulu faire:
for bi=1 to 5
loadbmp "boule"; bi;" "," "Bille";bi;".bmp"
next
Je n'ai pas trouvé la bonne syntaxe..Et je me suis dégonflé, à la perspective d'aller trifouiller dans la sub, avec 10 names en bandoulière.
C'est pas trés courageux..je sais....Mais je souffre déjà pas mal avec la cafetière. qui est sur le feu depuis un bon moment, et qui n'y est pas seule.. (qui trop embrasse, mal étreint...)
Je propose ça:
[bi] ' change bille
unloadbmp "boule"
loadbmp "boule", "Bille";bb;".bmp"
bb=bb+1
if bb =6 then bb=1
goto [new]
Qui ne coute que deux balles, et devrait satisfaire la RAM.
Je changerai le zip cette nuit, avec la bonne version "rnd" si je la trouve, ou avec ta dernière propo'.(dans la journée la connexion 3G est une vraie misère...devine le nom de l'opérateur :( )
____________________
Roro

   
Le 12/07/2012 à 15h41

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Roland:
Tu veux dire que le blanc viens des bmp ?!?

Ben tu n'as qu'à regarder !

Tu peux parfaitement trifouiller le contenu de la SUB, elle va pas te manger :lol :lol
C'est du code comme le reste !!!

Dommage tu y étais presque ;)
La bonne synthaxe et même tout ton code entièrement corrigé se trouve dans mon dernier code posté plus haut. Je n'ai pas eu à modifier grand chose...

Pour le rnd tu n'as qu'à simplement modifier dans [new] :

Code VB :
...
    for y=1 to ncy
        for x=1 to ncx
            read val  ' read ne peut pas affecter directement une var. tableau.
            if niv = 3 then
                 if y=1 then val = 2 else if y=ncy then val = 0 else val = int(rnd(0)*2)  ' tirage au hasard
            end if
            cell(x,y) = val
        next
        call drawRow y
    next
...
 


et dans [niv] :

Code VB :
    [niv]
      niv=niv+1
      if niv=4 then niv=1
      #w.ni, "Niveau: ";niv
    goto [new]
 




Edité par cassiope01 Le 12/07/2012 à 15h57
____________________
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 12/07/2012 à 16h43

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2484
Dans la sub, je finirai bien par y aller, mais tranquillement..pas dans l'urgence..
Parce que là...ça urge...t'imagine...si j'engorge toutes les RAM's de la planete avec mes bmp. :s
____________________
Roro

   
Le 12/07/2012 à 20h32

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2484
Il y a un os dans le paté ...
J'ai fait un copié/collé des deux bouts (for y...for x....et [niv]
Bille et Mur vont bien...Mais
Au lancement, Niveau est sur 2, quand je clique ça provoque une error:" Read past end of data"
je creuse le sujet..mais au cure dent, c'est pas gagné...
J'ai changé le zip aprés avoir corrigé une coquille: à load et unload, c'est: for=1 to 5, pas 6. ;)
J'ai enlevé la version rnd. Noirçi les lignes blanches. . Je remets le lien du zip: ...........à+

Chutes.zip



Edité par Roland Le 12/07/2012 à 20h46
____________________
Roro

   
Le 12/07/2012 à 21h36

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2484
J'ai résolu le pb en ajoutant:
if niv=1 or niv=2 then avant "read val" et "end if" aprés. ça marche
Mais c'est pas terrible beaucoup trop de trous.
____________________
Roro

   
Le 13/07/2012 à 13h06

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2484
Comme je voudrais que lorsque toutes billes sont en bas, il se passe quelque chose, j'ai fait ça:
DIM score(ncx+1)
sub boutons handle$
...... .....
..... .....
for xx=1 to ncx
if cell(xx,8)=2 then score(xx)=1
next xx
tscore=0
for xx=1 to ncx
tscore=tscore+score(xx)
next xx
if tscore=16 then exit sub
end sub
goto [new] ' provisoire pour test

Quelle erreur je commets pour pour que ça ne veuille pas marcher ?
____________________
Roro

   
Le 13/07/2012 à 14h01

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Ooof, peut-être simplement que comme d'habitude, tu imagines les choses toujours beaucoup plus compliquées qu'elles ne le méritent ;) ;) ;) ;)

for xx=1 to ncx
if cell(xx,ncy)=2 then tscore=tscore+1
next xx
if tscore=16 then FIN = 1 ' FIN étant la variable GLOBALE qui pourra être lue n'importe où pour faire autre chose...

de plus c'est pas dans la sub boutons handle$ qu'il faut mettre ça : celle-ci est appelée à chaque fois que tu appuis sur un bouton... peut-être plutôt dans la SUB fall qui s'occupe exclusivement de gérer toutes les chutes des billes, et donc fait potentiellement arriver des billes dans la dernière ligne en bas !!!

@+



Edité par cassiope01 Le 13/07/2012 à 14h08
____________________
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 13/07/2012 à 14h14

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Roland:
J'ai résolu le pb en ajoutant:
if niv=1 or niv=2 then avant "read val" et "end if" aprés. ça marche
Mais c'est pas terrible beaucoup trop de trous.


if niv<3 then ... marche très bien aussi ;)
A toi d'imaginer une formule rnd qui donne moins de trous ;)

@+



Edité par cassiope01 Le 13/07/2012 à 14h14
____________________
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 13/07/2012 à 16h39

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2484
Si je fait:
for xx=1 to ncx
if cell(xx,ncy)=2 then tscore=tscore+1
next xx
Ce que j'ai fait, bien naivement,pour commencer. :p
Que ce soit dans "bouton" ou dans "fall", chaque fois que le prog passe par là il va incrémenter tscore.
Le nombre de chute étant forcement au moins égal au nombre de coup, et supérieur à 16
C'est pourquoi je me suis essoré les méninges à pondre cet emberlificotage..qui devrait fonctionner ! :(
Tu me dis que la variable fin pourra etre lue n'importe où, d'accord. Mais le prog , il n'y va pas à ce n'importe où, puisqu'il tourne d'une sub à l'autre.



Edité par Roland Le 13/07/2012 à 17h00
____________________
Roro

   
Le 13/07/2012 à 16h54

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2484
Il y a bien un soucis:
dans sub bouton, avant le end sub, j'ai mis:
fin=1
if fin=1 then exit sub
end sub
wait
Et au débuggeur le prog s'arrete sur:" if fin=1 then exit sub ", et ne sort pas de la sub ! :heink
Et si je mets ça dans fall, il ne le voit meme pas :heink :heink



Edité par Roland Le 13/07/2012 à 17h06
____________________
Roro

   
Le 13/07/2012 à 17h10

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2484
WHAOUH ! le piège ! exit sub n'est pas dans l'aide de JB ! ! !
Et pourtant, il y en a un dans "wykersham", je regarde si il fonctionne......
........Dans Wykersham, il y a une magouille frauduleuse !!!!
Je supprime la ligne du exit sub, et ça marche comme si elle y était encore...faut pas déconner !!!



Edité par Roland Le 13/07/2012 à 18h55
____________________
Roro

   
Le 13/07/2012 à 22h38

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2484
Coucou!
Nouveau zip avec surprise au final.

Chutes.zip



Edité par Roland Le 13/07/2012 à 23h51
____________________
Roro

   
Le 14/07/2012 à 07h53

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Je comprends ton soucis.

Ce n'est pas un pb de SUB.
Tu vois bien avec la sub fall ou drawRow en sort très bien dès qu'il a fini de l'exécuter.

C'est un pb d'affectation d'une SUB à un bouton...!
En fait, quand la SUB boutons est terminée après avoir été appelée par un bouton donc, le contrôle du programme est donné uniquement à l'attente qu'un bouton quelconque soit pressé...!? (en fait à n'importe quel contrôle (qui attend une action de l'utilisateur) déclaré pour #w)

Si Carl avait eu la bonne idée de permettre que tous les [labels] soient vus depuis une SUB, il n'y aurait pas de pb !!!

S'il y avait une autre solution que la SUB boutons handle$ pour lire facilement le n° du bouton qui vient d'être pressé, je ne la connais pas.
Ou bien il faudrait écrire autant de [label] différents qu'il y a de boutons pour en tirer les variables row et dir, et encore, toute la structure du programme serait à revoir...!

Encore une fois, si Carl avait pensé à créer une variable d'environnement dédiée qui contiendrait en permanence le nom du dernier contrôle utilisé, HANDLE$ par exemple, cela aurait aussi solutionné le pb...!

Dans ta sub frac, tu avais oublié de déclarer col$(12) car tu lui affectes plus de 10 éléments...
Je ne vois absolument pas pourquoi tu penses avoir besoin de créer une autre fenêtre ???

Ceci dit j'ai une petite surprise pour toi : je pense avoir contourné tous les obstacles ;) :top

Code VB :
  'http://libertybasic.fr/forum/topic-162-1+code-en-cours-de-defrichage.php
   'http://libertybasic.fr/forum/topic-163+chutes.php

    nomainwin
 
    GLOBAL ncx, ncy, dc, mm, bb, midx, midy, FIN
    global ro, di, oldro, oldi, coup, coup, tscore, midx, midy
 
    ncx = 16   ' nbr of cells X
    ncy = 9    ' nbr of cells Y
    dc = 42    ' size of a cell in pixels
    MapWidth = (ncx+2)*dc+int(dc/ncx)
    MapHeight = 378  ' (ncy)*dc+int(dc/ncy)  '378

    midx=int(MapWidth/2)-80
    midy=int(MapHeight/2)
 
    WindowWidth  = MapWidth + 65
    WindowHeight = MapHeight + 75  ' 498  ' 75
    UpperLeftX = (DisplayWidth-WindowWidth) / 3
    UpperLeftY = (DisplayHeight-WindowHeight) / 2
 
   ' mois$ = "January February March April May June July August September October November December"
    mois$ = "Janvier Février Mars Avril Mai Juin Juillet Août Septembre Octobre Novembre Décembre"   ' french
    today$ = date$("mm/dd/yyyy")
    j = date$(today$)
   ' jsem$ = word$("Tuesday Wednesday Thursday x Friday Saturday x Sunday Monday",int((j/7-int(j/7))*10)+1)
    jsem$ = word$("Mardi Mercredi Jeudi x Vendredi Samedi x Dimanche Lundi",int((j/7-int(j/7))*10)+1)   ' french
    date$ = jsem$+" "+mid$(today$,4,2)+" "+word$(mois$, val(today$))+" "+right$(today$,4)+"  "+left$(time$(),5)
 
    DIM cell(ncx,ncy)
 
    button #w.bi "Bille", [bi], UL, 40, 5, 60, 25
    button #w.mu "Mur", [mu], UL, 120, 5, 60, 25
    statictext #w.txt "Jeu",460,10,160,30
    button #w.ni "Niveau: 1", [niv], UL, 310, 5, 80, 25
    statictext #w.tt "Triche", 40+17*dc, 40+(8*dc)+7,50,20
    graphicbox #w.map, 5+dc, 40, MapWidth-2*dc, MapHeight
    button #w.bt11 "", boutons, UL, 775, 44+(1*dc), dc, dc-10  '  à droite
    button #w.bt21 "", boutons, UL, 775, 44+(2*dc)+1, dc, dc-10
    button #w.bt31 "", boutons, UL, 775, 44+(3*dc)+2, dc, dc-10
    button #w.bt41 "", boutons, UL, 775, 44+(4*dc)+3, dc, dc-10
    button #w.bt51 "", boutons, UL, 775, 43+(5*dc)+4, dc, dc-10
    button #w.bt61 "", boutons, UL, 775, 43+(6*dc)+5, dc, dc-10
    button #w.bt71 "", boutons, UL, 775, 41+(7*dc)+6, dc, dc-10
    button #w.bt81 "", boutons, UL, 775, 54+(8*dc)+7, dc, 20 ' 775, 46+(8*dc)+7, dc, dc-10

    button #w.bt12 "", boutons, UL, 9+17*dc, 44+(1*dc), dc, dc-10  '  à gauche
    button #w.bt22 "", boutons, UL, 9+17*dc, 44+(2*dc)+1, dc, dc-10
    button #w.bt32 "", boutons, UL, 9+17*dc, 44+(3*dc)+2, dc, dc-10
    button #w.bt42 "", boutons, UL, 9+17*dc, 44+(4*dc)+3, dc, dc-10
    button #w.bt52 "", boutons, UL, 9+17*dc, 43+(5*dc)+4, dc, dc-10
    button #w.bt62 "", boutons, UL, 9+17*dc, 43+(6*dc)+5, dc, dc-10
    button #w.bt72 "", boutons, UL, 9+17*dc, 41+(7*dc)+6, dc, dc-10
    button #w.bt82 "", boutons, UL, 9+17*dc, 54+(8*dc)+7, dc, 20 ' 9+17*dc, 46+(8*dc)+7, dc, dc-10
    button #w.new "New",[new],UL,MapWidth-20,6,60,27
    OPEN "    TEST Chute(s)... "+space$(15)+date$ for window_nf as #w  'graphics_nf_nsb
    #w.map "trapclose [quit]"
    #w.map, "setfocus"
    #w.map "down; backcolor black; fill black"
    #w.map "getbmp p0 0 0 ";dc;" ";dc  ' empty cell for deleting
    #w.new "!font Arial 12 bold"
    #w.txt "!font Arial 11 bold"
    for bt = 1 to 16
        btn$ = "#w.bt"+word$("11 21 31 41 51 61 71 81 12 22 32 42 52 62 72 82",bt)
        #btn$ "!font Arial 16 bold"
        if bt<9 then #btn$ ">" else #btn$ "<"
    next
 
    for im = 1 to 5         '  chargement en mémoire des fichiers BMP qui pourront ensuite être utilisés.
        loadbmp "mur";im, "Mur";im;".bmp"
        loadbmp "bille";im, "Bille";im;".bmp"
    next
 
    bb=4: mm=5: niv=1
 
    [niv]
      niv=niv+1
      if niv=4 then niv=1
      #w.ni, "Niveau: ";word$("1 2 RND",niv)
    'goto [new]

    [new]
    FIN = 0
    coup=0
    print #w.txt, "Jeu N° ";coup
    print #w.bi, "Bille: ";bb
    print #w.mu, "Mur: ";mm
 
    if niv=1 then RESTORE [niveau1]
    if niv=2 then RESTORE [niveau2]
 
    for y=1 to ncy
        for x=1 to ncx
          if niv<3 then
            read val  ' read ne peut pas affecter directement une var. tableau.
          else
            if y=1 then val = 2 else if y=ncy then val = 0 else val = int(rnd(0)*2)  ' tirage au hasard
          end if
          cell(x,y) = val
        next
        call drawRow y
    next
 
    call fall  ' première chute dès la mise en place

    WAIT
 
    sub fall   ' gère toutes les chutes potentielles dans toute la grille
        for cy = ncy-1 to 1 step -1 ' en partant du bas bien sûr !
            for cx = 1 to ncx
                by = cy
                while by+1 <= ncy
                    if cell(cx,by) = 2 and cell(cx,by+1) = 0 then
                        cell(cx,by) = 0
                        #w.map "drawbmp p0 ";(cx-1)*dc;" ";(by-1)*dc
                        cell(cx,by+1) = 2
                        #w.map "drawbmp bille";bb;" ";(cx-1)*dc;" ";by*dc
                    end if
                    by = by + 1
                wend
            next
        next
        #w.map "flush; discard"
    end sub
 
    [bi]                   ' change bille
      bb=bb+1
      if bb =6 then bb=1
      #w.bi, "Bille: ";bb
      for y = 1 to ncy :call drawRow y :next
    wait
 
    [mu]                   ' change mur
      mm=mm+1
      if mm =6 then mm=1
      #w.mu, "Mur: ";mm
      for y = 1 to ncy :call drawRow y :next
    wait
 
    sub boutons handle$  ' décalage d'une ligne en fonction du bouton pressé
                         ' les extrémités reviennent de l'autre côté...

        row = val(mid$(handle$,6,1))+1 'extraction de la ligne grace aux noms des boutons (judicieusement nommés ;) )
        dir = val(mid$(handle$,7,1))   'et extraction du sens
        ro=row-1: di=dir
        if olro<>0 or oldi<>0 then    ' secur premier coup
            han$ = "#w.bt" + STR$(oldro)+STR$(oldi)
            #han$, "!enable"             'réactive bouton
        end if
 
        if dir = 1 then             ' vers la droite
            temp = cell(ncx,row)
            for x=ncx to 2 step -1
                cell(x,row) = cell(x-1,row)
            next
            cell(1,row) = temp
        else                        ' vers la gauche
            temp = cell(1,row)
            for x=1 to ncx-1
                cell(x,row) = cell(x+1,row)
            next
            cell(ncx,row) = temp
        end if
        call drawRow row
        call fall
 
        hand$ = "#w.bt" + STR$(ro)+STR$(di)
        #hand$, "!disable"         ' désactive bouton
        oldro=ro: oldi=di                'memorise ligne direction
        coup=coup+1
        print #w.txt, "Jeu N° ";coup
        tscore=0
        for xx=1 to ncx
          if cell(xx,ncy)=2 then tscore=tscore+1
        next xx
        if tscore=16 then FIN = 1 :call frac
    end sub                 ' c'est ici que le prog attend le coup suivant

    sub frac
    #w.new "!disable"  ' désactiver TOUS les boutons pour éviter une erreur...
    #w.ni "!disable"
    #w.mu "!disable"
    #w.bi "!disable"
    for bt = 1 to 16
        btn$ = "#w.bt"+word$("11 21 31 41 51 61 71 81 12 22 32 42 52 62 72 82",bt)
        #btn$ "!disable"
    next
    #w.map, "down ; fill black"
    #w.txt "Cliquer sur la fractale"
    #w.map "when leftButtonDown [out]"   ' pour sortir de la SUB frac quand clic dans #w.map
    [draw]
    'set up some random colors
    redim col$(12)
    for c=0 to 12
        col$(c)=str$(int(rnd(0)*256))+" "+str$(int(rnd(0)*256))+" "+str$(int(rnd(0)*256))
    next c
 
    'set up some random starting positions
    a=rnd(0)
    b=0.9998
    c=2-2*a
    dots=12000
    x=j=0
    y=rnd(0)*12+0.1
    'calculate and draw the points
    for i=0 to dots
        scan
        z=x
        x=b*y+j
        j=a*x+c*(x^2)/(1+x^2)
        y=j-z
        xp=(x*20)+midx
        yp=(y*20)+midy
        #w.map, "color ";col$(i/1000)
        #w.map, "set ";xp;" ";yp
    next i
    goto [draw]
    [out]
    #w.new "!enable" ' réactiver TOUS les boutons avant de sortir...
    #w.ni "!enable"
    #w.mu "!enable"
    #w.bi "!enable"
    for bt = 1 to 16
        btn$ = "#w.bt"+word$("11 21 31 41 51 61 71 81 12 22 32 42 52 62 72 82",bt)
        #btn$ "!enable"
    next
 end sub
 
    sub drawRow r    ' dessine le contenu d'une ligne
        for x=1 to ncx
            select case cell(x,r)
            case 0 :#w.map "drawbmp p0 ";(x-1)*dc;" ";(r-1)*dc
            case 1 :#w.map "drawbmp mur";mm;" ";(x-1)*dc;" ";(r-1)*dc
            case 2 :#w.map "drawbmp bille";bb;" ";(x-1)*dc;" ";(r-1)*dc
            end select
        next
    end sub
 
    [niveau1]
    data 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ' 2 = boule, 1 = mur, 0 = trou
    data 0,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1
    data 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1
    data 0,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1
    data 1,1,0,1,1,1,1,0,1,0,1,1,1,0,1,1
    data 0,1,1,1,1,0,1,1,0,1,0,1,1,1,1,1
    data 1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1
    data 0,1,1,0,1,1,0,1,1,1,0,1,1,1,0,1
    data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 
    [niveau2]
    data 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ' 2 = boule, 1 = mur, 0 = trou
    data 1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1
    data 1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1
    data 1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1
    data 1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1
    data 1,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1
    data 1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1
    data 1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1
    data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 
    [quit]
        for im = 1 to 5
            unloadbmp "mur";im
            unloadbmp "bille";im
        next
        close #w
        end
    wait
 


Sympa ta fractale :top

@+



Edité par cassiope01 Le 14/07/2012 à 08h01
____________________
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 14/07/2012 à 09h01

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2484
Je n'ai pas encore regardé ta dernière sorcellerie, que je brule de voir.
Mais tout d'abord, rendons à César, et à Rod ce qui leur appartient j'ai mis dans l'entete du code les référence de la fractale, car j'ai constaté que les anglophones étaient particulièrement soucieux que leur soi
" givé crédits ".
Ceci dit, je suis bien d'accord avec toit pour appeller ce léger défaut que présente les sub's :
une CarlGundelerie...... Je lui descerne donc un navet d'or....
Celui-là, quand il répondra aux mails, les poules auront des mamelles....
Et maintenant..voyons voir. :miam :miam :miam
____________________
Roro

   
Le 14/07/2012 à 09h33

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Roland:
Ceci dit, je suis bien d'accord avec toit pour appeller ce léger défaut que présente les sub's :
une CarlGundelerie...... Je lui descerne donc un navet d'or....


Ce défaut n'a absolument rien à voir avec les SUB.

C'est un pb de contrôle des évènements par JB et je ne sais pas si c'est mieux fait ou différent avec LB ?

@+
____________________
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 » Chutes Ancien jeu Remanié 2012  

 |  |

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