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 |
|
|
| Trop de gosub... | |
| | |
Auteur | Message |
---|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Trop de gosub... Mer 1 Aoû 2012 - 4:20 | |
| Voilà, Je suis sur un "nouveau" jeu qui n'en est pas un puisqu'il a déjà été fait en divers langages. Je voulais le faire en Panoramic... mais voilà que j'arrive à un problème de limitation : Je dois placé 24 bout d'image de 100x100 sur une grille de 25 cases (5x5) j'ai donc eu l'idée de me servir d'un tableau 2d le bout d'image qui sera placé en Table%(0,0) aura top y,0 left x,0 et la variable % prend le numéro de l'objet comme valeur du coup la case est pleine et par simple comparaison je ne peut pas mettre un autre bout d'image tant que la variable est >0 sauf que pour mon jeu il me faut un tirage aléatoire , puisque le but est de reconstituer l'image de la case (0,0) à la case (4,3) ( je sais, il est pas original ce jeu...mais c'était un défi que je me suis lancé ) bon, je vous mets le code actuel. Ne criez pas !... il est pas fini... - Code:
-
' ****************************************************************************** dim Dossier$,Doss_Sprite$,Doss_Fond$,Doss_Langue$ dim Langue$,def$(100),jeu% dim M% dim N%,T%,L% dim x%,x$ dim img%,img$,Doss_img_select$ dim mess% dim Table%(4,4),R%,C% ' ------------------------------------------------------------------------------ label Init,Init_Dossier,Init_List,Init_Param,Init_Langue label Change_Langue,New_Langue label Menu,Jouer,Arreter,APp,Aide label Select_Img,Preview,Choix,Creation,Placement,Tirage,Verif,Selection label Action_G,Action_D,Action_H,Action_B label Attention
' ****************************************************************************** caption 0,"Mon Puzzle":width 0,516:height 0,558
main_menu 1 sub_menu 2:parent 2,1:on_click 2,Menu:caption 2,"Jouer" sub_menu 3:parent 3,1:on_click 3,Menu:caption 3,"Langue" sub_menu 4:parent 4,1:on_click 4,Menu:caption 4,"A Propos" sub_menu 5:parent 5,1:on_click 5,Menu:caption 5,"Aide"
dlist 6 :' Liste des peramètres dlist 7 :' Liste des langues dispo dlist 8 :' Contenu de la langue choisie dlist 9 :' Liste des Images
gosub Init end ' ****************************************************************************** Init: gosub Init_Dossier gosub Init_List gosub Init_Param return ' ------------------------------------------------------------------------------ Init_Dossier: Dossier$=Dir_Current$ Doss_Sprite$=Dossier$+"\Sprites" Doss_Fond$=Dossier$+"\Fonds" Doss_Langue$=Dossier$+"\Langue" return ' ------------------------------------------------------------------------------ Init_List: ' langues disponibles dir_change Doss_Langue$ x$=file_find_first$ if x$<>"_" then item_add 7,x$ x$=file_find_next$ while x$<>"_" if x$<>"_" then item_add 7,x$ x$=file_find_next$ end_while file_find_close ' liste des images dir_change Doss_Fond$ x$=file_find_first$ if x$<>"_" then item_add 9,x$ x$=file_find_next$ while x$<>"_" if x$<>"_" then item_add 9,x$ x$=file_find_next$ end_while file_find_close return ' ------------------------------------------------------------------------------ Init_Param: if file_exists(Dossier$+"\Param.inf")=1 file_load 6,Dossier$+"\Param.inf" gosub Init_Langue else gosub Change_Langue end_if return ' ------------------------------------------------------------------------------ Init_Langue: clear 8 if count(6)>0 Langue$=Doss_Langue$+"\"+item_read$(6,1)+".txt" file_load 8,Langue$ for x%=1 to count(8):def$(x%)=item_read$(8,x%):next x% for x%=2 to 5:caption x%,def$(x%-1):next x% end_if return ' ------------------------------------------------------------------------------ Change_Langue: if object_exists(100)=1 show 100 else form 100 width 100,200:height 100,130:top 100,(screen_y-130)/2:left 100,(screen_x-200)/2 caption 100,"Paramètres":font_name 100,"Times new roman":font_size 100,10 command_target_is 100 alpha 101:top 101,10:left 101,10:caption 101,"Langue :" combo 102:top 102,30:left 102,10 for x%=1 to count(7):item_add 102,left$(item_read$(7,x%),len(item_read$(7,x%))-4):next x% on_change 102,New_Langue end_if return '------------------------------------------------------------------------------- New_Langue: If count(6)>0 and Text$(102)<>"" item_delete 6,1 item_insert 6,1,Text$(102) else if Text$(102)<>"" then item_insert 6,1,Text$(102) end_if file_save 6,Dossier$+"\Param.inf" gosub Init_Langue hide 100 return '------------------------------------------------------------------------------- Menu: for x%=2 to 5 if clicked(x%)=1 then M%=x% next x% select M% case 2 jeu%=jeu%+1 if jeu%=1 caption 2,def$(5) gosub Jouer else jeu%=0 caption 2,def$(1) gosub Arreter end_if case 3 gosub Change_Langue case 4 gosub APp case 5 gosub Aide end_select return ' ------------------------------------------------------------------------------ Jouer: gosub Select_Img return ' ------------------------------------------------------------------------------ Select_img: if object_exists(200)=1 show 200 else form 200:width 200,500:height 200,350:top 200,(screen_y-350)/2:left 200,(screen_x-500)/2 caption 200,def$(6):font_name 200,"Times new roman":font_size 200,10 command_target_is 200 alpha 201:top 201,10:left 201,5:caption 201,def$(7) list 202 :top 202,30:left 202,5:width 202,170:height 202,230 for x%=1 to count(9):item_add 202,item_read$(9,x%):next x% on_double_click 202,Preview picture 203:top 203,5:left 203,180:width 203,290:height 203,290:stretch_on 203 button 204 :top 204,270:left 204,50:caption 204,def$(8):cursor_point 204 inactive 204:on_click 204,Choix end_if return ' ------------------------------------------------------------------------------ Preview: file_load 203,Doss_Fond$+"\"+item_index$(202) active 204 return ' ------------------------------------------------------------------------------ Choix: img$=item_index$(202) Doss_img_select$=Doss_Sprite$+"\"+left$(img$,len(img$)-4) command_target_is 0 gosub Creation hide 200 return ' ------------------------------------------------------------------------------ Creation: for x%=1 to 24 img%=10+x% picture img% :width img%,100 :height img%,100 :left img%,200:top img%,200 stretch_on img% :file_load img%,Doss_img_select$+"\"+str$(img%)+".bmp" on_click img%,Selection next x% gosub Placement return ' ------------------------------------------------------------------------------ Placement: Table%(4,4)=1 for img%=11 to 34 gosub Tirage next img% return ' ------------------------------------------------------------------------------ Tirage: R%=int(rnd(4)) C%=int(rnd(4)) gosub Verif return ' ------------------------------------------------------------------------------ Verif: if Table%(R%,C%)=0 Table%(R%,C%)=img% left img%,R%*100 top img%,C%*100 else gosub Tirage end_if return ' ------------------------------------------------------------------------------ Selection: N%=number_click T%=Top(N%) L%=Left(N%) return ' ------------------------------------------------------------------------------ Action_G: mess%=1 if L%>=100 for x%=L% to L%-100 step -1:top N%,T% :left N%,x% :wait 10 :next x% else gosub Attention end_if return ' ------------------------------------------------------------------------------ Action_D: mess%=2 if L%<400 for x%=L% to L%+100 step 1:top N%,T% :left N%,x% :wait 10 :next x% else gosub Attention end_if return ' ------------------------------------------------------------------------------ Action_H: mess%=3 if T%>=100 for x%=T% to T%-100 step -1:top N%,x% :left N%,L% :wait 10 :next x% else gosub Attention end_if return ' ------------------------------------------------------------------------------ Action_B: mess%=4 if T%<400 for x%=T% to T%+100 step 1:top N%,x% :left N%,L% :wait 10 :next x% else gosub Attention end_if return ' ------------------------------------------------------------------------------ ' n a pas vocation à rester, c'était des tests Attention: if mess%=1 then message "Vous avez atteint le bord gauche" if mess%=2 then message "Vous avez atteint le bord droit" if mess%=3 then message "Vous avez atteint le bord haut" if mess%=4 then message "Vous avez atteint le bord bas" return ' ------------------------------------------------------------------------------ Arreter: return ' ------------------------------------------------------------------------------ APp: return ' ------------------------------------------------------------------------------ Aide: return ' ------------------------------------------------------------------------------ Edit : Le Zip complet est dispo sur mon webdav dans "\Programmes en cours" http://www.mydrive.ch/ panoramicien@ygeronimi_panoramic panoramic123 | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Trop de gosub... Mer 1 Aoû 2012 - 8:05 | |
| bonjour ygeronimi
Je pense que ton probleme vient du fait qu'il y a des boucles imbriquées entre ta procedure TIRAGE et la procedure VERIF qui elle te renvoie a TIRAGE ! pourquoi ne pas inserer ta procedure VERIF dans TIRAGE directement ?
Je n'ai pas eu le temps d'essayer cela, désolé. j'espere te donner une piste...
A bientot et bon courage a toi pour ce nouveau jeu. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Trop de gosub... Mer 1 Aoû 2012 - 8:09 | |
| Exactement. Soit tu fais une liste avec les cases dispo et tu en retires une à chaque fois que tu la remplis ( ce sera plus rapide si ton tableau devient important en taille), soit tu vires la procédure vérif et tu remplaces Tirage par ce code: - Code:
-
' ------------------------------------------------------------------------------ Tirage: R%=int(rnd(4)) C%=int(rnd(4)) if Table%(R%,C%)>0 then goto Tirage if Table%(R%,C%)=0 Table%(R%,C%)=img% left img%,R%*100 top img%,C%*100 end_if return | |
| | | Invité Invité
| Sujet: Re: Trop de gosub... Mer 1 Aoû 2012 - 8:14 | |
| Bonjour, J'ai rien téléchargé, j'ai simplement regardé le code ici ici, sans le reprendre. J'ai pas le temps,je parts au bois pour bûcheronner. Je me demande si il n'y a pas des appels à répétition pour la langue.
Ce que je te conseil est de faire une form à côté, et de de le remplir: debog% étant un n0 d'objet que tu choisi:
form debog% ..... debog%=debog%+1 list debog%:parent debog%,debog%-1:full_space debog%
Dans tous les sous-programmes au départ, au retour des gosub, au retour des sous-programmes, tu mets ceci:
item_add debog%,str$(number_current_line)+" :ici le nom de la procédure" ou quelque chose qui te dise où tu es. Ainsi en regardant le list à côté, tu verras si il n'y a pas un problème. Je quitte Au moment de lancer il y ad'autre messsage,j'envoi quand même, au cas où. Salutation |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 1 Aoû 2012 - 16:03 | |
| @ Jicehel Je viens d'essayer ta méthode, ben... Panoramic ne repond plus....depuis 5 mn... @ cosmos, je suis persuadé que ca vient du nombre de boucle du tirage pour une simple raison. J'ai essayé de découper le tirage part tranche de 5 dans "Placement" 11>15, 16>20 etc... et le problème revient quand j'arrive à 31>34 qui, à mon avis, provoque un trop grand nombre de retour vers tirage du fait que 16/24 sont déjà occupés. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Trop de gosub... Mer 1 Aoû 2012 - 16:14 | |
| C'est exactement ça Cosmos, dans ta méthode (que j'ai repris dans mon code en l'écrivant autrement), tu as de moins en moins de chance de tomber sur une case vide... d'où de plus en plus de boucle. C'est ce que j'essayais de dire (sans doute de manière pas très clair) dans mon message Mieux vaut passer par une liste avec les cases dispos que tu retire quand tu les prends Tu charge la liste avec des coupes 01-01 par exemple et un compteur NB_cases_dispo Tu fait un tirage d'un entier de 1 à NB_case_dispo Tu mets ton resultat dans ton tableau en récuprant la valeur numérique dans R% et dans C% à partir de la valeur dans la liste et tu retire ensuite cette valeur de la liste des cases dispo => Là tu auras un traitement qui prendra toujours le même temps (et beaucoup plus rapide, même s'il est un peu moins simple) J'espère que mon explication est compréhensible. Au pire, je la coderais ce soir.
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 1 Aoû 2012 - 16:32 | |
| heu....je me suis un petit peu perdu dans ton texte mais je vais prendre le temps d'analyser . Les listes, depuis "Le cri des animaux", je suis un peu perplexe , vu les problèmes que j'y rencontre et dont je n'ai toujours pas trouvé la solution . | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Trop de gosub... Mer 1 Aoû 2012 - 16:38 | |
| T'inquiète, je ne peux pas là au boulot, mais je te fais un petit bout de code tout à l'heure (ce soir) pour illustrer de manière plus claire (saut si entre temps quelqu'un t'a donner une autre solution plus simple) | |
| | | Jack Admin
Nombre de messages : 2395 Date d'inscription : 28/05/2007
| Sujet: Re: Trop de gosub... Mer 1 Aoû 2012 - 16:46 | |
| L'erreur que tu as vient du fait qu'il y a plus de 1000 appels "imbriqués" (nested en anglais) de sous-programmes ou de traitement d'événements. J'ai mis ce garde-fou pour éviter de faire fonctionner des programmes qui auto-génèrent des appels de sous-programme et qui finissent par saturer la mémoire ...
Ce type d'erreur est forcément du à un problème de conception: il y a quelque part une boucle d'appels de sous-programmes ou d'événements.
Par exemple un sous programme SSP1 qui appelle un sous programme SSP2 qui appelle lui-même le sous-programme SSP1 ... Ou un événement ON_CHANGE N,SSP1, et dans le traitement SSP1, l'objet numéro N est modifié (affichage ou autre), ce qui entraine automatiquement un nouvel appel à SSP1, etc ... Ou on crée un TIMER et dans le traitement, on fait une pause (affichage d'un message qui demande que l'opérateur clique sur un bouton) et pendant ce temps, les déclenchements du TIMER s'empilent ...
Ton erreur n'est pas du à un trop grand nombre de GOSUB (il n'y a pas de limite au nombre de GOSUB dans un programme), mais à un trop grand nombre de GOSUB imbriqués. Tu arrive à un point où il y a plus de 1000 fois un GOSUB de GOSUB de GOSUB de GOSUB ...etc etc | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 1 Aoû 2012 - 16:56 | |
| Merci de ton intervention Jack, C'est en effet le problème que j'avais diagnostiqué sauf que dans ce cas l'imbrication est soumise à condition et a une fin, donc la limite est génante. mais on va bien finir par trouver une parade... A panoramicien rien d'impossible .... Edit Heureusement que ce garde fou existe, sinon j'ai quelques boucles while qui tournerait encore... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Trop de gosub... Mer 1 Aoû 2012 - 17:09 | |
| Salut ygeronimi
Comme je te disais ce matin, c'est la boucle ds la boucle qui pose probleme.
J'ai téléchargé ton zip mais ca plante des le depart sur le list de la langue.
je regarde ton programme et on en reparle.. essai ceci :
Tirage: R%=int(rnd(4)) C%=int(rnd(4)) if Table%(R%,C%)=0 Table%(R%,C%)=img% left img%,R%*100 top img%,C%*100 end_if if Table%(R%,C%)<>0 then goto Tirage return
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 1 Aoû 2012 - 17:24 | |
| Heu ...si y a bien un truc qui marche, c'est la langue mais as tu le zip complet, et as tu re enregistrer le *.bas après l'avoir ouvert dans l'éditeur ?
Edit : ton bout de code est quasi similaire et comme avec le précédent, panoramic ne répond plus
Dernière édition par ygeronimi le Mer 1 Aoû 2012 - 17:32, édité 1 fois | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Trop de gosub... Mer 1 Aoû 2012 - 17:29 | |
| Bon, je ne peux pas tester, mais j'ai fait un petit code (peut être à ajuster) qui devrait fonctionner, je pense, sans passer par une liste comme tu n'aime pas (tu as le droit, c'est ton programme ) - Code:
-
' Dans les declarations dim t1 : t1 = 4 dim t2 : t2 = t1*t1 dim case_libre(t2) dim i%, cpt%
' ------------------------------------------------------------------------------
Tirage:
for i%=1 to t2:case_libre(i%)=i%: next i% while i% > 0 cpt% = int(rnd(i%)+1 R%=int(case_libre(cpt%)/4) C%=mod(case_libre(cpt%),4) Table%(R%,C%)=img% left img%,R%*100 top img%,C%*100 if cpt%<i% then case_libre(cpt%)=case_libre(i%) i%=i%-1 end_while return
| |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Trop de gosub... Mer 1 Aoû 2012 - 17:35 | |
| celui ci fonctionne sans gros changement - Code:
-
Tirage: R%=int(rnd(4)) C%=int(rnd(4)) gosub Verif if Table%(R%,C%)=0 goto Tirage end_if return ' ------------------------------------- Verif: if Table%(R%,C%)=0 Table%(R%,C%)=img% left img%,R%*100 top img%,C%*100 end_if return | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 1 Aoû 2012 - 17:38 | |
| @ Jicehel | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Trop de gosub... Mer 1 Aoû 2012 - 17:42 | |
| Mini bug, je pense qu'il y a un problème de logique dans ce source: Tu vas dans le sous programme de test Si la case est vide, tu change la valeur et tu reviens Quand tu reviens, si la case est vide tu vas au goto
Problème: Si la case a du contenu, tu ne vas pas faire de nouveau tirage des valeurs (Table%(R%,C%) aura une valeur différente de 0, tu ne fera donc pas le goto)
Pour moi la logique serait plutot: Tester si la case est vide Si vide (elle vaut 0, tu affecte img%) Sinon tu fais un nouveau tirage (goto ...) | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 1 Aoû 2012 - 17:42 | |
| @ minibug y'a un minibug , il remplit pas toutes les cases à remplir | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Trop de gosub... Mer 1 Aoû 2012 - 17:44 | |
| Mince, c'est ça de faire de tête. Met: cpt% = int(rnd(i%)
et n'oubli pas de rajouter le i%=i%-1 à la fin que j'avais oublié dans mon premier coller dans le source
A+, je rentre, je pourrais tester à la maison | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 1 Aoû 2012 - 17:45 | |
| | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 1 Aoû 2012 - 17:54 | |
| @ Jicehel,
J'attends patiemment que tu rentres car je ne vois pas trop où tu veux en venir. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Trop de gosub... Mer 1 Aoû 2012 - 18:42 | |
| Ca y est ca fonctionne j'ai viré les sous programmes inutiles - Code:
-
' ****************************************************************************** dim Dossier$,Doss_Sprite$,Doss_Fond$,Doss_Langue$ dim Langue$,def$(100),jeu% dim M% dim N%,T%,L% dim x%,x$ dim img%,img$,Doss_img_select$ dim mess% dim Table%(4,4),R%,C% ' ------------------------------------------------------------------------------ label Init,Init_Dossier,Init_List,Init_Param,Init_Langue label Change_Langue,New_Langue label Menu,Jouer,Arreter,APp,Aide label Select_Img,Preview,Choix,Creation,Placement,Tirage,Verif,Selection label Action_G,Action_D,Action_H,Action_B label Attention
' ****************************************************************************** caption 0,"Mon Puzzle":width 0,516:height 0,558
main_menu 1 sub_menu 2:parent 2,1:on_click 2,Menu:caption 2,"Jouer" sub_menu 3:parent 3,1:on_click 3,Menu:caption 3,"Langue" sub_menu 4:parent 4,1:on_click 4,Menu:caption 4,"A Propos" sub_menu 5:parent 5,1:on_click 5,Menu:caption 5,"Aide"
dlist 6 :' Liste des peramètres dlist 7 :' Liste des langues dispo dlist 8 :' Contenu de la langue choisie dlist 9 :' Liste des Images
gosub Init end ' ****************************************************************************** Init: gosub Init_Dossier gosub Init_List gosub Init_Param return ' ------------------------------------------------------------------------------ Init_Dossier: Dossier$=Dir_Current$ Doss_Sprite$=Dossier$+"\Sprites" Doss_Fond$=Dossier$+"\Fonds" Doss_Langue$=Dossier$+"\Langue" return ' ------------------------------------------------------------------------------ Init_List: ' langues disponibles dir_change Doss_Langue$ x$=file_find_first$ if x$<>"_" then item_add 7,x$ x$=file_find_next$ while x$<>"_" if x$<>"_" then item_add 7,x$ x$=file_find_next$ end_while file_find_close ' liste des images dir_change Doss_Fond$ x$=file_find_first$ if x$<>"_" then item_add 9,x$ x$=file_find_next$ while x$<>"_" if x$<>"_" then item_add 9,x$ x$=file_find_next$ end_while file_find_close return ' ------------------------------------------------------------------------------ Init_Param: if file_exists(Dossier$+"\Param.inf")=1 file_load 6,Dossier$+"\Param.inf" gosub Init_Langue else gosub Change_Langue end_if return ' ------------------------------------------------------------------------------ Init_Langue: clear 8 if count(6)>0 Langue$=Doss_Langue$+"\"+item_read$(6,1)+".txt" file_load 8,Langue$ for x%=1 to count(8):def$(x%)=item_read$(8,x%):next x% for x%=2 to 5:caption x%,def$(x%-1):next x% end_if return ' ------------------------------------------------------------------------------ Change_Langue: if object_exists(100)=1 show 100 else form 100 width 100,200:height 100,130:top 100,(screen_y-130)/2:left 100,(screen_x-200)/2 caption 100,"Paramètres":font_name 100,"Times new roman":font_size 100,10 command_target_is 100 alpha 101:top 101,10:left 101,10:caption 101,"Langue :" combo 102:top 102,30:left 102,10 for x%=1 to count(7):item_add 102,left$(item_read$(7,x%),len(item_read$(7,x%))-4):next x% on_change 102,New_Langue end_if return '------------------------------------------------------------------------------- New_Langue: If count(6)>0 and Text$(102)<>"" item_delete 6,1 item_insert 6,1,Text$(102) else if Text$(102)<>"" then item_insert 6,1,Text$(102) end_if file_save 6,Dossier$+"\Param.inf" gosub Init_Langue hide 100 return '------------------------------------------------------------------------------- Menu: for x%=2 to 5 if clicked(x%)=1 then M%=x% next x% select M% case 2 jeu%=jeu%+1 if jeu%=1 caption 2,def$(5) gosub Jouer else jeu%=0 caption 2,def$(1) gosub Arreter end_if case 3 gosub Change_Langue case 4 gosub APp case 5 gosub Aide end_select return ' ------------------------------------------------------------------------------ Jouer: gosub Select_Img return ' ------------------------------------------------------------------------------ Select_img: if object_exists(200)=1 show 200 else form 200:width 200,500:height 200,350:top 200,(screen_y-350)/2:left 200,(screen_x-500)/2 caption 200,def$(6):font_name 200,"Times new roman":font_size 200,10 command_target_is 200 alpha 201:top 201,10:left 201,5:caption 201,def$(7) list 202 :top 202,30:left 202,5:width 202,170:height 202,230 for x%=1 to count(9):item_add 202,item_read$(9,x%):next x% on_double_click 202,Preview picture 203:top 203,5:left 203,180:width 203,290:height 203,290:stretch_on 203 button 204 :top 204,270:left 204,50:caption 204,def$(8):cursor_point 204 inactive 204:on_click 204,Choix end_if return ' ------------------------------------------------------------------------------ Preview: file_load 203,Doss_Fond$+"\"+item_index$(202) active 204 return ' ------------------------------------------------------------------------------ Choix: img$=item_index$(202) Doss_img_select$=Doss_Sprite$+"\"+left$(img$,len(img$)-4) hide 200 command_target_is 0 gosub Creation return ' ------------------------------------------------------------------------------ Creation: for x%=1 to 24 img%=10+x% picture img% :width img%,100 :height img%,100 :left img%,200:top img%,200 stretch_on img% :file_load img%,Doss_img_select$+"\"+str$(img%)+".bmp" on_click img%,Selection next x% gosub Placement return ' ------------------------------------------------------------------------------ Placement: Table%(4,4)=1 for img%=11 to 34 repeat R%=int(rnd(4)) C%=int(rnd(4)) until Table%(R%,C%)=0 Table%(R%,C%)=img% left img%,R%*100 top img%,C%*100 next img%
return ' ------------------------------------------------------------------------------ Tirage:
return ' ------------------------------------------------------------------------------ Verif:
return ' ------------------------------------------------------------------------------ Selection: N%=number_click T%=Top(N%) L%=Left(N%) return ' ------------------------------------------------------------------------------ Action_G: mess%=1 if L%>=100 for x%=L% to L%-100 step -1:top N%,T% :left N%,x% :wait 10 :next x% else gosub Attention end_if return ' ------------------------------------------------------------------------------ Action_D: mess%=2 if L%<400 for x%=L% to L%+100 step 1:top N%,T% :left N%,x% :wait 10 :next x% else gosub Attention end_if return ' ------------------------------------------------------------------------------ Action_H: mess%=3 if T%>=100 for x%=T% to T%-100 step -1:top N%,x% :left N%,L% :wait 10 :next x% else gosub Attention end_if return ' ------------------------------------------------------------------------------ Action_B: mess%=4 if T%<400 for x%=T% to T%+100 step 1:top N%,x% :left N%,L% :wait 10 :next x% else gosub Attention end_if return ' ------------------------------------------------------------------------------ Attention: if mess%=1 then message "Vous avez atteint le bord gauche" if mess%=2 then message "Vous avez atteint le bord droit" if mess%=3 then message "Vous avez atteint le bord haut" if mess%=4 then message "Vous avez atteint le bord bas" return ' ------------------------------------------------------------------------------ Arreter: return ' ------------------------------------------------------------------------------ APp: return ' ------------------------------------------------------------------------------ Aide: return ' ------------------------------------------------------------------------------
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 1 Aoû 2012 - 18:51 | |
| seulement 16 cases sur 24 sont remplies, et quand j'essaie de d'arrêter message d'erreur | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Trop de gosub... Mer 1 Aoû 2012 - 18:56 | |
| ok voici le nouveau code c'est les variables tableaux qui sont restées a 4 au lieu de 5 mais par contre j'ai assez souvent un message ligne 101 - Code:
-
' ****************************************************************************** dim Dossier$,Doss_Sprite$,Doss_Fond$,Doss_Langue$ dim Langue$,def$(100),jeu% dim M% dim N%,T%,L% dim x%,x$ dim img%,img$,Doss_img_select$ dim mess% dim Table%(4,4),R%,C% ' ------------------------------------------------------------------------------ label Init,Init_Dossier,Init_List,Init_Param,Init_Langue label Change_Langue,New_Langue label Menu,Jouer,Arreter,APp,Aide label Select_Img,Preview,Choix,Creation,Placement,Tirage,Verif,Selection label Action_G,Action_D,Action_H,Action_B label Attention
' ****************************************************************************** caption 0,"Mon Puzzle":width 0,516:height 0,558
main_menu 1 sub_menu 2:parent 2,1:on_click 2,Menu:caption 2,"Jouer" sub_menu 3:parent 3,1:on_click 3,Menu:caption 3,"Langue" sub_menu 4:parent 4,1:on_click 4,Menu:caption 4,"A Propos" sub_menu 5:parent 5,1:on_click 5,Menu:caption 5,"Aide"
dlist 6 :' Liste des peramètres dlist 7 :' Liste des langues dispo dlist 8 :' Contenu de la langue choisie dlist 9 :' Liste des Images
gosub Init end ' ****************************************************************************** Init: gosub Init_Dossier gosub Init_List gosub Init_Param return ' ------------------------------------------------------------------------------ Init_Dossier: Dossier$=Dir_Current$ Doss_Sprite$=Dossier$+"\Sprites" Doss_Fond$=Dossier$+"\Fonds" Doss_Langue$=Dossier$+"\Langue" return ' ------------------------------------------------------------------------------ Init_List: ' langues disponibles dir_change Doss_Langue$ x$=file_find_first$ if x$<>"_" then item_add 7,x$ x$=file_find_next$ while x$<>"_" if x$<>"_" then item_add 7,x$ x$=file_find_next$ end_while file_find_close ' liste des images dir_change Doss_Fond$ x$=file_find_first$ if x$<>"_" then item_add 9,x$ x$=file_find_next$ while x$<>"_" if x$<>"_" then item_add 9,x$ x$=file_find_next$ end_while file_find_close return ' ------------------------------------------------------------------------------ Init_Param: if file_exists(Dossier$+"\Param.inf")=1 file_load 6,Dossier$+"\Param.inf" gosub Init_Langue else gosub Change_Langue end_if return ' ------------------------------------------------------------------------------ Init_Langue: clear 8 if count(6)>0 Langue$=Doss_Langue$+"\"+item_read$(6,1)+".txt" file_load 8,Langue$ for x%=1 to count(8):def$(x%)=item_read$(8,x%):next x% for x%=2 to 5:caption x%,def$(x%-1):next x% end_if return ' ------------------------------------------------------------------------------ Change_Langue: if object_exists(100)=1 show 100 else form 100 width 100,200:height 100,130:top 100,(screen_y-130)/2:left 100,(screen_x-200)/2 caption 100,"Paramètres":font_name 100,"Times new roman":font_size 100,10 command_target_is 100 alpha 101:top 101,10:left 101,10:caption 101,"Langue :" combo 102:top 102,30:left 102,10 for x%=1 to count(7):item_add 102,left$(item_read$(7,x%),len(item_read$(7,x%))-4):next x% on_change 102,New_Langue end_if return '------------------------------------------------------------------------------- New_Langue: If count(6)>0 and Text$(102)<>"" item_delete 6,1 item_insert 6,1,Text$(102) else if Text$(102)<>"" then item_insert 6,1,Text$(102) end_if file_save 6,Dossier$+"\Param.inf" gosub Init_Langue hide 100 return '------------------------------------------------------------------------------- Menu: for x%=2 to 5 if clicked(x%)=1 then M%=x% next x% select M% case 2 jeu%=jeu%+1 if jeu%=1 caption 2,def$(5) gosub Jouer else jeu%=0 caption 2,def$(1) gosub Arreter end_if case 3 gosub Change_Langue case 4 gosub APp case 5 gosub Aide end_select return ' ------------------------------------------------------------------------------ Jouer: gosub Select_Img return ' ------------------------------------------------------------------------------ Select_img: if object_exists(200)=1 show 200 else form 200:width 200,500:height 200,350:top 200,(screen_y-350)/2:left 200,(screen_x-500)/2 caption 200,def$(6):font_name 200,"Times new roman":font_size 200,10 command_target_is 200 alpha 201:top 201,10:left 201,5:caption 201,def$(7) list 202 :top 202,30:left 202,5:width 202,170:height 202,230 for x%=1 to count(9):item_add 202,item_read$(9,x%):next x% on_double_click 202,Preview picture 203:top 203,5:left 203,180:width 203,290:height 203,290:stretch_on 203 button 204 :top 204,270:left 204,50:caption 204,def$(8):cursor_point 204 inactive 204:on_click 204,Choix end_if return ' ------------------------------------------------------------------------------ Preview: file_load 203,Doss_Fond$+"\"+item_index$(202) active 204 return ' ------------------------------------------------------------------------------ Choix: img$=item_index$(202) Doss_img_select$=Doss_Sprite$+"\"+left$(img$,len(img$)-4) hide 200 command_target_is 0 gosub Creation return ' ------------------------------------------------------------------------------ Creation: for x%=1 to 24 img%=10+x% picture img% :width img%,100 :height img%,100 :left img%,200:top img%,200 stretch_on img% :file_load img%,Doss_img_select$+"\"+str$(img%)+".bmp" on_click img%,Selection next x% gosub Placement return ' ------------------------------------------------------------------------------ Placement: Table%(4,4)=1 for img%=11 to 34 repeat R%=int(rnd(5)) C%=int(rnd(5)) until Table%(R%,C%)=0 Table%(R%,C%)=img% left img%,R%*100 top img%,C%*100 next img%
return ' ------------------------------------------------------------------------------ Tirage:
return ' ------------------------------------------------------------------------------ Verif:
return ' ------------------------------------------------------------------------------ Selection: N%=number_click T%=Top(N%) L%=Left(N%) return ' ------------------------------------------------------------------------------ Action_G: mess%=1 if L%>=100 for x%=L% to L%-100 step -1:top N%,T% :left N%,x% :wait 10 :next x% else gosub Attention end_if return ' ------------------------------------------------------------------------------ Action_D: mess%=2 if L%<400 for x%=L% to L%+100 step 1:top N%,T% :left N%,x% :wait 10 :next x% else gosub Attention end_if return ' ------------------------------------------------------------------------------ Action_H: mess%=3 if T%>=100 for x%=T% to T%-100 step -1:top N%,x% :left N%,L% :wait 10 :next x% else gosub Attention end_if return ' ------------------------------------------------------------------------------ Action_B: mess%=4 if T%<400 for x%=T% to T%+100 step 1:top N%,x% :left N%,L% :wait 10 :next x% else gosub Attention end_if return ' ------------------------------------------------------------------------------ Attention: if mess%=1 then message "Vous avez atteint le bord gauche" if mess%=2 then message "Vous avez atteint le bord droit" if mess%=3 then message "Vous avez atteint le bord haut" if mess%=4 then message "Vous avez atteint le bord bas" return ' ------------------------------------------------------------------------------ Arreter: return ' ------------------------------------------------------------------------------ APp: return ' ------------------------------------------------------------------------------ Aide: return ' ------------------------------------------------------------------------------
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re: Trop de gosub... Mer 1 Aoû 2012 - 19:26 | |
| BRAVO !!!!! Tu as trouvé la solution !!! Pour la ligne 101: - Code:
-
for x%=1 to count(7):item_add 102,left$(item_read$(7,x%),len(item_read$(7,x%))-4):next x% Cette ligne est en fait là pour ajouter des items au "combo" du "form 100" Il lit le "Dlist 7" et pour chaque ligne, ajoute un "item" à "combo 102" dont je soustrait l'extension pour faire plus joli. Pour qu'il y ait une erreur , vu que les fichiers sont dans le zip et on y a encore pas touché, il faut que tu n'es pas re enregistré après l'ouverture dans l'éditeur et que celui ci se mélange les pinceaux dans les dossier$ ( prend le dossier panoramic pour le fichier dir_current$ au lieu de puzzle) Chez moi je n'ai pas d'erreur à ce niveau là, si la procedure est si longue c'est pour que le programme soit portable d'où la liste de label Init | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Trop de gosub... Mer 1 Aoû 2012 - 19:27 | |
| Là Minibug, ton programme fonctionne et est très logique Ca marche très bien | |
| | | Contenu sponsorisé
| Sujet: Re: Trop de gosub... | |
| |
| | | | Trop de gosub... | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |