FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» PANORAMIC V 1
Trop de gosub... Emptypar papydall Aujourd'hui à 2:21

» Gestion d'un système client-serveur.
Trop de gosub... Emptypar Klaus Hier à 23:59

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Trop de gosub... Emptypar Marc Hier à 12:14

» @Jack
Trop de gosub... Emptypar Jack Mar 30 Avr 2024 - 20:40

» trop de fichiers en cours
Trop de gosub... Emptypar papydall Lun 29 Avr 2024 - 23:39

» Une calculatrice en une ligne de programme
Trop de gosub... Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Trop de gosub... Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Trop de gosub... Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Trop de gosub... Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Trop de gosub... Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Dessine-moi une galaxie
Trop de gosub... Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Trop de gosub... Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
Trop de gosub... Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
Trop de gosub... Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
Trop de gosub... Emptypar leclode Mer 17 Avr 2024 - 11:07

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment : -45%
WHIRLPOOL OWFC3C26X – Lave-vaisselle pose libre ...
Voir le deal
339 €

 

 Trop de gosub...

Aller en bas 
5 participants
Aller à la page : 1, 2, 3  Suivant
AuteurMessage
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Trop de gosub... Empty
MessageSujet: Trop de gosub...   Trop de gosub... EmptyMer 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... Wink
mais voilà que j'arrive à un problème de limitation :
Trop de gosub... Captur32

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é Laughing )

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
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Trop de gosub... Empty
MessageSujet: Re: Trop de gosub...   Trop de gosub... EmptyMer 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.
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Trop de gosub... Empty
MessageSujet: Re: Trop de gosub...   Trop de gosub... EmptyMer 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
Revenir en haut Aller en bas
Invité
Invité




Trop de gosub... Empty
MessageSujet: Re: Trop de gosub...   Trop de gosub... EmptyMer 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
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Trop de gosub... Empty
MessageSujet: re   Trop de gosub... EmptyMer 1 Aoû 2012 - 16:03

@ Jicehel

Je viens d'essayer ta méthode, ben... Panoramic ne repond plus....depuis 5 mn... Sad

@ 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.
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Trop de gosub... Empty
MessageSujet: Re: Trop de gosub...   Trop de gosub... EmptyMer 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.
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Trop de gosub... Empty
MessageSujet: re   Trop de gosub... EmptyMer 1 Aoû 2012 - 16:32

heu....je me suis un petit peu perdu dans ton texte mais je vais prendre le temps d'analyser pale .
Les listes, depuis "Le cri des animaux", je suis un peu perplexe Suspect ,
vu les problèmes que j'y rencontre scratch
et dont je n'ai toujours pas trouvé la solution Sad .
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Trop de gosub... Empty
MessageSujet: Re: Trop de gosub...   Trop de gosub... EmptyMer 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) Wink
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2386
Date d'inscription : 28/05/2007

Trop de gosub... Empty
MessageSujet: Re: Trop de gosub...   Trop de gosub... EmptyMer 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
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Trop de gosub... Empty
MessageSujet: re   Trop de gosub... EmptyMer 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... Laughing

A panoramicien rien d'impossible ....
lol! lol! lol!


Edit Heureusement que ce garde fou existe, sinon j'ai quelques boucles while qui tournerait encore... Laughing
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Trop de gosub... Empty
MessageSujet: Re: Trop de gosub...   Trop de gosub... EmptyMer 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
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Trop de gosub... Empty
MessageSujet: re   Trop de gosub... EmptyMer 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
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Trop de gosub... Empty
MessageSujet: Re: Trop de gosub...   Trop de gosub... EmptyMer 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 Wink (tu as le droit, c'est ton programme Wink )
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
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Trop de gosub... Empty
MessageSujet: Re: Trop de gosub...   Trop de gosub... EmptyMer 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
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Trop de gosub... Empty
MessageSujet: re   Trop de gosub... EmptyMer 1 Aoû 2012 - 17:38

@ Jicehel

Trop de gosub... Captur33
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Trop de gosub... Empty
MessageSujet: Re: Trop de gosub...   Trop de gosub... EmptyMer 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 ...)
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Trop de gosub... Empty
MessageSujet: re   Trop de gosub... EmptyMer 1 Aoû 2012 - 17:42

@ minibug

y'a un minibug Very Happy , il remplit pas toutes les cases à remplir
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Trop de gosub... Empty
MessageSujet: Re: Trop de gosub...   Trop de gosub... EmptyMer 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
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Trop de gosub... Empty
MessageSujet: re   Trop de gosub... EmptyMer 1 Aoû 2012 - 17:45

heu....et si Jack nous décuplait le nombre de boucles possibles....non? Wink

Laughing Laughing Laughing
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Trop de gosub... Empty
MessageSujet: re   Trop de gosub... EmptyMer 1 Aoû 2012 - 17:54

@ Jicehel,

J'attends patiemment que tu rentres
car je ne vois pas trop où tu veux en venir.
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Trop de gosub... Empty
MessageSujet: Re: Trop de gosub...   Trop de gosub... EmptyMer 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
' ------------------------------------------------------------------------------
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Trop de gosub... Empty
MessageSujet: re   Trop de gosub... EmptyMer 1 Aoû 2012 - 18:51

Embarassed seulement 16 cases sur 24 sont remplies, et quand j'essaie de d'arrêter
message d'erreur
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Trop de gosub... Empty
MessageSujet: Re: Trop de gosub...   Trop de gosub... EmptyMer 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
' ------------------------------------------------------------------------------

Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Trop de gosub... Empty
MessageSujet: Re: Trop de gosub...   Trop de gosub... EmptyMer 1 Aoû 2012 - 19:26

cheers cheers cheers BRAVO !!!!! cheers cheers cheers

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 Laughing
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Trop de gosub... Empty
MessageSujet: Re: Trop de gosub...   Trop de gosub... EmptyMer 1 Aoû 2012 - 19:27

Là Minibug, ton programme fonctionne et est très logique Wink
Ca marche très bien
Revenir en haut Aller en bas
Contenu sponsorisé





Trop de gosub... Empty
MessageSujet: Re: Trop de gosub...   Trop de gosub... Empty

Revenir en haut Aller en bas
 
Trop de gosub...
Revenir en haut 
Page 1 sur 3Aller à la page : 1, 2, 3  Suivant
 Sujets similaires
-
» Utilitaire Designer: générer une structure Panoramic valide
» Gosub with while[resolu] oubli du END
» problème avec les appels Gosub
» Correction du BUG si GOSUB dans traitement d'événement
» Aide (imprimable) sur PANORAMIC avec exemples

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: