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
» Bataille terrestre
un end_if en trop ? Emptypar Marc Aujourd'hui à 16:20

» item_index
un end_if en trop ? Emptypar Marc Aujourd'hui à 16:13

» SineCube
un end_if en trop ? Emptypar Marc Hier à 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
un end_if en trop ? Emptypar Marc Hier à 12:22

» Philharmusique
un end_if en trop ? Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
un end_if en trop ? Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
un end_if en trop ? Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
un end_if en trop ? Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
un end_if en trop ? Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
un end_if en trop ? Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
un end_if en trop ? Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0
un end_if en trop ? Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
un end_if en trop ? Emptypar Klaus Lun 6 Mai 2024 - 11:41

» Gestion d'un système client-serveur.
un end_if en trop ? Emptypar Klaus Lun 6 Mai 2024 - 10:23

» @Jack
un end_if en trop ? Emptypar Jack Mar 30 Avr 2024 - 20:40

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 : -39%
Pack Home Cinéma Magnat Monitor : Ampli DENON ...
Voir le deal
1190 €

 

 un end_if en trop ?

Aller en bas 
3 participants
AuteurMessage
dragonno




Nombre de messages : 341
Localisation : Près de Toulouse
Date d'inscription : 22/01/2009

un end_if en trop ? Empty
MessageSujet: un end_if en trop ?   un end_if en trop ? EmptyVen 10 Déc 2010 - 1:33

Au lancement d'un programme, j'ai le message end_if en trop.
Je ne vois pas d'où cela peut provenir.
Voici les exttraits du programme qui peuvent être concernés par le message :

Code:
timer 2
timer_interval 2,1
on_timer 2, tests

gosub petit
dim tableau(taille,taille)

for i=1 to nombre
  sprite i
  sprite_file_load i,"submarine.bmp"
  gosub hasard
  if(tableau(caseY,caseX)=1)
    gosub hasard
  else
    y=32+(32*caseY)
    x=32+(32*caseX)
    sprite_position i,y,x
    tableau(caseY,caseX)=1
  end_if
next i

Et les routines :

Code:

petit:
taille=5
map=192
left 1,200
top 1,200
width 1,map
height 1,map
file_load 1,"grille05.bmp"
nombre=3
return

hasard:
caseY=int(rnd(taille))
caseX=int(rnd(taille))
return

tests:
if scancode=27 then terminate
return


Revenir en haut Aller en bas
659_minifly




Nombre de messages : 590
Age : 75
Localisation : Valenciennes Nord
Date d'inscription : 29/04/2010

un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptyVen 10 Déc 2010 - 6:20

Ton dernier end_if est en trop
il y a aussi

dim tableau(taille,taille)

on ne peut pas mettre des variables pour dimensionner un tableau

A+
Revenir en haut Aller en bas
dragonno




Nombre de messages : 341
Localisation : Près de Toulouse
Date d'inscription : 22/01/2009

un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptyVen 10 Déc 2010 - 13:13

Merci MiniFly Wink

Ah dommage ça pour les tableaux :/

Pour le dernier "End_if" je comprend pas parce qu'il n'y a qu'un seul "end_if" dans mon programme, c'est celui-là, et pourtant quand on utilise la condition "if" en association avec "else" il le faut le "end_if" d'après la doc, sinon panoramic ne peut pas savoir quand se termine les instructions qui suivent le "else".
Citation :

if condition

instructions

else

instructions

end_if
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12295
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptyVen 10 Déc 2010 - 13:34

Eb fait, le problème vient de la façon dont tu as rédigé la commande IF. Il faut un espace entre le IF et ce qui suit, sinon, Panoramic pense avoir trouvé une variable de type DIM if(3), par exemple. Et comme le test sur la correspondances entre IF et END_IF est fait AVANT la détection des variables non définiées (c'est fait seulement pendant l'exécution, au fur et à mesure), Panoramic détecte fatalement un end_if en trop.

Donc, il faut convertir
Code:
  if(tableau(caseY,caseX)=1)
en
Code:
  if (tableau(caseY,caseX)=1)
et il y a des parenthèses en trop:
Code:
  if tableau(caseY,caseX)=1

Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptyVen 10 Déc 2010 - 13:37

Le problème vient de ceci:
Code:
if(tableau(caseY,caseX)=1)
Panoramic recherche si il y a correspondance entre if et end_if et idem pour les autres boucles, avant de se lancer.
Il ne regarde pas les variables, cela vient après lorsque le programme démarrera. Alors là il aurait vu que ta ligne n'est pas bonne, parce que c'est pas une condition que tu as fait, mais une variable tableau! Il n'y a pas d'espace entre IF et le restant de la ligne, donc effectivement il ne trouve pas de IF qui corresponde à END_IF

Mince croisement avec toi Klaus
Revenir en haut Aller en bas
dragonno




Nombre de messages : 341
Localisation : Près de Toulouse
Date d'inscription : 22/01/2009

un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptyVen 10 Déc 2010 - 13:38

Merci Klaus Wink

Justement je venais de m'appercevoir après plusieurs tests qu'il fallait un espace juste entre le if et la parenthese qui suit, du coup mon programme fonctionne.

EDIT :
ON s'est croisé Cosmos Wink
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12295
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptyVen 10 Déc 2010 - 13:39

Eh oui, on tire aussi vite l'un que l'autre. Lucky Luke n'a qu'à bien se tenir !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
dragonno




Nombre de messages : 341
Localisation : Près de Toulouse
Date d'inscription : 22/01/2009

un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptyVen 10 Déc 2010 - 13:39

Ah bha on est trois à s'etre croisé alors Wink

Manque plus qu'un quatrieme pour faire les daltons Wink
Revenir en haut Aller en bas
dragonno




Nombre de messages : 341
Localisation : Près de Toulouse
Date d'inscription : 22/01/2009

un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptyVen 10 Déc 2010 - 13:56

Bizarre, dans mon code affiché précédement et mis à jour ci-dessous :

Code:
for i=1 to nombre
  sprite i
  sprite_file_load i,"submarine.bmp"
  gosub hasard
  if (tableau(caseY,caseX)=1)
    gosub hasard
  else
    y=32+(32*caseY)
    x=32+(32*caseX)
    sprite_position i,y,x
    tableau(caseY,caseX)=1
  end_if
next i

Et les routines :
Code:
petit:
taille=5
dim tableau(5,5)
map=192
left 1,200
top 1,200
width 1,map
height 1,map
file_load 1,"grille05.bmp"
nombre=3
return

tests:
if scancode=27 then terminate
return

hasard:
caseY=int(rnd(taille))
caseX=int(rnd(taille))
return

Le sprite qui s'affiche en y,x est sensé au minimum s'afficher en 32,32 hors il se trouve qu'il y en a un qui s'affiche en 0,0 et ça je vois pas d'où ça peut venir vu que j'ai mis y=32+.... et x=32+....

La position en 0,0 du sprite n'est pas automatique, ça dépend du hasard, mais ça ne devrait jamais etre en dessous de 32,32 en tous cas.

Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12295
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptyVen 10 Déc 2010 - 14:34

Est-ce que tu as testé la position réelle du sprite, avec les fonctions qui retournent son adresse ?
Code:
for i=1 to nombre
  sprite i
  sprite_file_load i,"submarine.bmp"
  gosub hasard
  if (tableau(caseY,caseX)=1)
    gosub hasard
  else
    y=32+(32*caseY)
    x=32+(32*caseX)
    sprite_position i,y,x
message "Position: ("+str$(sprite_x_position(i))+","+str$(sprite_y_position(i))+")"
    tableau(caseY,caseX)=1
  end_if
next i
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
dragonno




Nombre de messages : 341
Localisation : Près de Toulouse
Date d'inscription : 22/01/2009

un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptyVen 10 Déc 2010 - 20:32

En fait j'ai choisi dorénavant de mettre la valeur 1 trois fois de suite à des positions aléatoires dans un tableau à deux dimensions de 5x5 cases, ce sera la position des sprites sur la map de 5x5 cases, puis de lire le tableau afin d'afficher réellement les sprites sur la map :
A savoir : je réserve la premiere ligne et colonne pour l'affichage des lettres et chiffres qui indiquent les cases de la map, car c'est un jeu de bataille navale donc par exemple la case A4.
c'est pour ça que je fais afficher le sprite en position 32x32 et non pas en 0x0 car chaque case de la map fait 32 pixel de coté.

C'est une façon plus propre de programmer et qui m'arrange bien mais maintenant je me retrouve avec parfois un seul sprite affiché et parfois deux, jamais trois.
J'aimerais bien savoir pourquoi, et là j'affiche leur positions avec le str$().

Code:
i=0
while i<=nombre
  gosub hasard
  if (tableau(caseY,caseX)=1)
    gosub hasard
  else
    tableau(caseY,caseX)=1
    i=i+1
  end_if
end_while


i=1
for lig=0 to taille-1
  for col=0 to taille-1
    if (tableau(lig,col)=1)
      sprite i
      sprite_file_load i,"submarine.bmp"
      y=32+(32*lig)
      x=32+(32*col)
      sprite_position i,y,x
      print "position tableau : "+str$(lig)+" "+str$(col)
      print
      print "position map : "+str$(y)+" "+str$(x)
      print
      i=i+1
    end_if
  next col
next lig

En attendant je regarde ton code.

EDIT :
J'ai inséré la ligne : message "Position: ("+str$(sprite_x_position(i))+","+str$(sprite_y_position(i))+")"

après le dernier print et panoramic ne me l'affiche pas, d'ailleurs il ne m'affiche meme pas mon print position map pour le deuxieme sprite, quand au troisieme sprite il n'est jamais affiché ni meme sa position.
Revenir en haut Aller en bas
dragonno




Nombre de messages : 341
Localisation : Près de Toulouse
Date d'inscription : 22/01/2009

un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptyVen 10 Déc 2010 - 20:48

Rectification, cette fois, sans rien changer ça a bien affiché la ligne message() mais bon le contenu est le meme que ma ligne print position map.
EDIT :Heu on dirait que c'est aléatoire :/

Et le probleme en tous cas est que le troisieme sprite n'est jamais affiché ni meme sa position.
Ni meme la position map du deuxieme sprite.

Voici l'image quand ça n'affiche qu'un seul sprite :

un end_if en trop ? Submar10

Voici l'image quand il affiche deux sprites :
un end_if en trop ? Submar11

En fait j'ai l'impression que dés que le dernier sprite est affiché, il n'affiche pas sa position map, seulement sa position tableau, et pour lui le dernier sprite ça peut etre un seul sprite comme deux, mais jamais trois.

A savoir que pour moi la case A1 signifie la position 0,0 dans la tableau de sprites.

EDIT :
Le code complet actuel pour mieux comprendre le truc :

Code:
label attaque
label repos
label bonus
label petit
label moyen
label grand
label tests
label hasard

dim energie,tours
dim sonar,canon,mouvement
dim nombre,i,y,x,map
dim caseY,caseX,lig,col
dim taille

scene2d 1

' Pour tester les touches clavier
timer 2
timer_interval 2,1
on_timer 2, tests

' pour définir la dimension de la map
gosub petit

' place 1 aléatoirement (trois fois) dans le tableau virtuel de 5x5 cases
' nombre=3 donc : trois fois.
i=0
while i<nombre
  gosub hasard
  if (tableau(caseY,caseX)=1)
    gosub hasard
  else
    tableau(caseY,caseX)=1
    i=i+1
  end_if
end_while

' lit le tableau pour afficher sur la map un sprite à la place de 1 lu dans le tableau.
i=1
for lig=0 to taille-1
  for col=0 to taille-1
    ' if (tableau(lig,col)=1)
      sprite i
      sprite_file_load i,"submarine.bmp"
      y=32+(32*lig)
      x=32+(32*col)
      sprite_position i,y,x
      print "position tableau : "+str$(lig)+" "+str$(col)
      print
      ' message "Position: ("+str$(sprite_x_position(i))+","+str$(sprite_y_position(i))+")"
      i=i+1
    ' end_if
  next col
next lig

end

attaque:
return

repos:
return

bonus:
return

' fixe la taille de la map à 5x5
petit:
taille=5
dim tableau(5,5)
map=192
left 1,200
top 1,200
width 1,map
height 1,map
file_load 1,"grille05.bmp"
nombre=3
return

moyen:
taille=10
dim tableau(10,10)
map=352
left 1,100
top 1,100
width 1,map
height 1,map
file_load 1,"grille10.bmp"
nombre=5
return

grand:
taille=20
dim tableau(20,20)
map=672
left 1,0
top 1,0
width 1,map
height 1,map
file_load 1,"grille20.bmp"
nombre=8
return

tests:
if scancode=27 then terminate
return

' détermine la position aléatoire dans le tableau virtuel.
hasard:
caseY=int(rnd(taille-1))
caseX=int(rnd(taille-1))
return

Dans ce code actuel j'ai mis la condition "if" en REM pour afficher tout le contenu du tableau virtuel afin de tester ce que contient réellement le tableau (juste un test).
EDIT : heu non je lis même pas le tableau, lol
bon je vais voir tout ça...
EDIT: bizarre car avec le "if" en REM ça devrait m'afficher 25 sprites (toute la map), hors cela m'affiche aléatoirement 1 à 3 sprites et tous positionnés dans la même premiere colonne :
0,0 le premier
0,1 le deuxieme quand il est affiché.
0,2 le troisieme quand il est affiché.

EDIT :
Je crois avoir cerné le problème, on dirait que panoramic se fiche pas mal que les deux boucles for next soient imbriquées, il n'exécute que la boucle intérieure.


EDIT :
Bizarre, pour m'en assurer j'ai simplement remplacé la premiere boucle for par une boucle while et le résultat est le même, pas de changement, ça n'affiche que 1 à 3 sprites selon le cas, et pas 25 sprites (toute la map) :

Code:
' lit le tableau pour afficher sur la map un sprite à la place de 1 lu dans le tableau.
i=1
lig=0
while lig<taille-1
  for col=0 to taille-1
    ' if (tableau(lig,col)=1)
      sprite i
      sprite_file_load i,"submarine.bmp"
      y=32+(32*lig)
      x=32+(32*col)
      sprite_position i,y,x
      print "position tableau : "+str$(lig)+" "+str$(col)
      print
      i=i+1
    ' end_if
  next col
  lig=lig+1
end_while

j'essaie de m'assurer en afficher les 25 sprites que le systeme de mes deux boucles fonctionne ensuite je reviendrais à mon principal probleme qui est que je veux afficher mes trois sprites alors que ça n'en affiche qu'entre 1 et 3 aléatoirement.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12295
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptyVen 10 Déc 2010 - 23:08

Tu ne donnes que des codes partiels, ce qui rend les tests difficiles. J'ai essayé de composer un programme complet afin de pouvoir tester.

Déjà une première remarque: à quelle place tu mets la scene2d ? Si tu la mets en haut à gauche de la form, tu ne verras jamais l'affichage de tes print, puisqu'ils vont dans le canvas de la form qui se trouve SOUS tous les autres objets. J'ai donc décalé la scene2d, et comme par magie, les print apparaissent. Et ils sont tous là - j'ai fait l'essai pour nombre=1,2 3 et 4. Essaie chez toi avec ton image sprite.

Ah oui, j'oubliais: j'ai ajouté un DISPLAY afin de donner le temps à Panoramic de finir son affichage avant de passer à la suite - c'est important.

Voici mon code:
Code:
label hasard
dim i,nombre,tableau(5,5),taille,lig,col,x,y,caseX,caseY

taille = 5
nombre = 3
scene2d 10 : top 10,10 : left 10,300

i=0
while i<=nombre
  gosub hasard
  if (tableau(caseY,caseX)=1)
    gosub hasard
  else
    tableau(caseY,caseX)=1
    i=i+1
  end_if
end_while


i=1
for lig=0 to taille-1
  for col=0 to taille-1
    if (tableau(lig,col)=1)
      sprite i
      sprite_file_load i,"submarine.bmp"
      y=32+(32*lig)
      x=32+(32*col)
      sprite_position i,y,x
      display
      print "position tableau : "+str$(lig)+" "+str$(col)
      print "position tableau : ("+str$(sprite_x_position(i))+","+str$(sprite_y_position(i))+")"
      print "position map : "+str$(y)+" "+str$(x)
      print
      i=i+1
    end_if
  next col
next lig

end

hasard:
caseY=int(rnd(taille))
caseX=int(rnd(taille))
return
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
dragonno




Nombre de messages : 341
Localisation : Près de Toulouse
Date d'inscription : 22/01/2009

un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptyVen 10 Déc 2010 - 23:19

Je t'ai mis le code complet regarde bien Wink

Je vais voir ton code.

Merci Maitre klaus Wink

EDIT :
J'ai essayé ton code en supprimant la condition if afin d'afficher 5 x 5 sprites et en effet ça fonctionne bien, donc il faut que je vois quelle est la différence avec mon code.

PS: en gardant la condition "if", il affiche 4 sprites alors qu'il en faut 3, cette quantité est décidée par la variable "nombre=3"
J'ai essayé avec et sans display, display n'a pas d'effet dans ce cas présent.

Dans la partie bug du forum j'expose le probleme, j'ai une partie du code qui fonctionne bien quand il est seul c'est la partie boucle for mais ça ne marche pas quand cette partie est dans mon programme.

Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12295
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptySam 11 Déc 2010 - 0:25

Bizarre. Avec le code suivant, j'ai bien 3 sprite, pas 4 (j'ai changé le nom du fichier parce que je n'avais pas le tien):
Code:
' pour définir la dimension de la map
 gosub petit

' place 1 aléatoirement (trois fois) dans le tableau virtuel de 5x5 cases
 nombre=3 : ' donc : trois fois.
i=0
 while i<nombre
  gosub hasard
  if (tableau(caseY,caseX)=1)
    gosub hasard
  else
    tableau(caseY,caseX)=1
    i=i+1
  end_if
 end_while

' lit le tableau pour afficher sur la map un sprite à la place de 1 lu dans le tableau.
i=1
lig=0
taille=5
for lig=0 to taille-1
  for col=0 to taille-1
    if tableau(lig,col)=1
      sprite i
      sprite_file_load i,"test_x.bmp"
      y=32+(32*lig)
      x=32+(32*col)
      sprite_position i,y,x
      print "position tableau : "+str$(lig)+" "+str$(col)
      print
      i=i+1
    end_if
  next col
next lig

end
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
dragonno




Nombre de messages : 341
Localisation : Près de Toulouse
Date d'inscription : 22/01/2009

un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptySam 11 Déc 2010 - 0:37

Effectivement cela fonctionne tel que je le souhaite Wink
Mais je vois pas la différence avec mon programme, je parle là seulement de la partie while, car les boucles for je les ai modifiées pour test, il faut que je remette la condition if à l'intérieur.


Code:
label attaque
label repos
label bonus
label petit
label moyen
label grand
label tests
label hasard
label debut

dim energie,tours
dim sonar,canon,mouvement
dim nombre,i,y,x,map
dim caseY,caseX,lig,col
dim taille

scene2d 1

' Pour tester les touches clavier
timer 2
timer_interval 2,1
on_timer 2, tests
goto debut

end

debut:
' pour définir la dimension de la map
gosub petit

' place 1 aléatoirement (trois fois) dans le tableau virtuel de 5x5 cases
nombre=3
i=0
while i<nombre
  gosub hasard
  if (tableau(caseY,caseX)=1)
    gosub hasard
  else
    tableau(caseY,caseX)=1
    i=i+1
  end_if
end_while

' lit le tableau pour afficher sur la map un sprite à la place de 1 lu dans le tableau.
i=1
for lig=0 to taille-1
  for col=0 to taille-1
      sprite i
      sprite_file_load i,"submarine.bmp"
      y=32+(32*lig)
      x=32+(32*col)
      sprite_position i,y,x
      print "position tableau : "+str$(lig)+" "+str$(col)
      print
      i=i+1
  next col
next lig

return

attaque:
return

repos:
return

bonus:
return

' fixe la taille de la map à 5x5
petit:
taille=5
dim tableau(5,5)
map=192
left 1,200
top 1,200
width 1,map
height 1,map
file_load 1,"grille05.bmp"
nombre=3
return

moyen:
taille=10
dim tableau(10,10)
map=352
left 1,100
top 1,100
width 1,map
height 1,map
file_load 1,"grille10.bmp"
nombre=5
return

grand:
taille=20
dim tableau(20,20)
map=672
left 1,0
top 1,0
width 1,map
height 1,map
file_load 1,"grille20.bmp"
nombre=8
return

tests:
if scancode=27 then terminate
return

' détermine la position aléatoire dans le tableau virtuel.
hasard:
caseY=int(rnd(taille-1))
caseX=int(rnd(taille-1))
return
Ce programme ne fonctionne pas, il affiche une premiere colonne de 3 sprites et c'est tout.
Je suis sûr que le probleme réside dans les boucles mais je vois pas pourquoi car les boucles prises seules fonctionnent très bien comme je l'ai indiqué dans le topic "bug" du forum.

Bon je vais tout remettre en ordre d'aprés tes dernieres indications sur le topic bug et voir ce que ça donne je te tiens au courant Wink

Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12295
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptySam 11 Déc 2010 - 0:50

C'est toujours pareil: tu n'est pas en mode évènementiel, et le timer perturbe le fonctionnement. La preuve: le code suivant marche bien:
Code:
                                          label attaque
label repos
label bonus
label petit
label moyen
label grand
label tests
label hasard
label debut

dim energie,tours
dim sonar,canon,mouvement
dim nombre,i,y,x,map
dim caseY,caseX,lig,col
dim taille

scene2d 1

' Pour tester les touches clavier
' timer 2
' timer_interval 2,1
' on_timer 2, tests
goto debut

end

debut:
' pour définir la dimension de la map
gosub petit

' place 1 aléatoirement (trois fois) dans le tableau virtuel de 5x5 cases
nombre=3
i=0
while i<nombre
  gosub hasard
  if (tableau(caseY,caseX)=1)
    gosub hasard
  else
    tableau(caseY,caseX)=1
    i=i+1
  end_if
end_while

' lit le tableau pour afficher sur la map un sprite à la place de 1 lu dans le tableau.
i=1
for lig=0 to taille-1
  for col=0 to taille-1
      sprite i
      sprite_file_load i,"test_x.bmp"
      y=32+(32*lig)
      x=32+(32*col)
      sprite_position i,y,x
      print "position tableau : "+str$(lig)+" "+str$(col)
      print
      i=i+1
  next col
next lig

end
return

attaque:
return

repos:
return

bonus:
return

' fixe la taille de la map à 5x5
petit:
taille=5
dim tableau(5,5)
map=192
left 1,200
top 1,200
width 1,map
height 1,map
' file_load 1,"grille05.bmp"
nombre=3
return

moyen:
taille=10
dim tableau(10,10)
map=352
left 1,100
top 1,100
width 1,map
height 1,map
' file_load 1,"grille10.bmp"
nombre=5
return

grand:
taille=20
dim tableau(20,20)
map=672
left 1,0
top 1,0
width 1,map
height 1,map
' file_load 1,"grille20.bmp"
nombre=8
return

tests:
if scancode=27 then terminate
return

' détermine la position aléatoire dans le tableau virtuel.
hasard:
caseY=int(rnd(taille-1))
caseX=int(rnd(taille-1))
return
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
dragonno




Nombre de messages : 341
Localisation : Près de Toulouse
Date d'inscription : 22/01/2009

un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptySam 11 Déc 2010 - 0:58

C'est bizarre qu'il marche bien puisque il y a le goto début qui empeche de lire le end oO

Sinon c'est bon Maitre klaus, grace à ton aide j'ai enfin mon programme qui fonctionne, le principal problème était justement que je ne fonctionnais pas en mode évènementiel comme tu me l'a dit dans le topic "bug".
Donc je te remercie, je vais pouvoir continuer plus loin ce programme sympa Wink
Heureusement que tu est là Wink
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12295
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptySam 11 Déc 2010 - 1:21

Prends garde quand-même ! La modif que j'ai faite, c'est la suppression du timer. Donc, plus d'interruption, plus de problème. Mais le programme reste en mode linéaire, pas en mode évènementiel. Et c'est bien le problème: si plus tard, dans l'écriture de ton jeu, tu as besoin d'interaction avec l'utilisateur, ou d'un timer pour gérer un déplacement, par exemple: tu auras exactement le même problème ! Regarde bien mon (très long) exposé sur l'autre fil de discussion: dès que tu veux gérer une interface visuelle autre que simplement print/input comme sur un ruban papier, tu DOIS passer en mode évènementiel ! Sinon, ça coincera toujours à un endroit ou un autre, et ce sera très difficile à débugger - le comportement sera certainement aléatoire du fait de la gestion des files d'attente des messages que l'on ne maîtrise absolument pas.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
dragonno




Nombre de messages : 341
Localisation : Près de Toulouse
Date d'inscription : 22/01/2009

un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptySam 11 Déc 2010 - 1:35

OUi je comprend, de toutes façons je vais rester tout le temps en mode evennementiel sous panoramic, c'est son mode de fonctionnement le mieux adapté à ce que je fais (gestion d'évennements dans les jeux).

Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12295
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptySam 11 Déc 2010 - 1:35

D'ailleurs, si tu ne veux pas de mon idée du bouton pour passer en mode évènementiel, voici une astuce de passage automatique via un timer qui ne servira qu'une seule fois:
Code:
label debut, fermer

button 1 : top 1,100 : left 1,10 : caption 1,"Fermer"
on_click 1,fermer

print "ici, mode linéaire"

timer 10 : timer_interval 10,100
on_timer 10,debut
timer_on 10

end

debut:
timer_off 10
print "ici, on est en mode évènementiel"

' placer ici le code du jeu


' passer ici si 'on veut terminer
return

fermer:
terminate
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
dragonno




Nombre de messages : 341
Localisation : Près de Toulouse
Date d'inscription : 22/01/2009

un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptySam 11 Déc 2010 - 1:42

C'est vrai que l'idée du bouton déroute un peu mais je pense qu'il y a toujours moyen de cliquer quelque part pour aller en mode evennementiel, pas necessairement sur un bouton, donc on est sauvé, le bouton peut être remplacé par une image, un menu, etc...
Dans mon cas par exemple le jeu débute en proposant à l'utilisateur le choix entre 3 tailles de map pour jouer à la bataille navale (version perso), donc l'utilisateur n'a plus qu'à cliquer sur l'un des trois choix proposés pour lancer le jeu et donc passer en mode évennementiel.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12295
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? EmptySam 11 Déc 2010 - 1:45

Eh bien, tu as ton point d'entrée tout trouvé...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





un end_if en trop ? Empty
MessageSujet: Re: un end_if en trop ?   un end_if en trop ? Empty

Revenir en haut Aller en bas
 
un end_if en trop ?
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Aide (imprimable) sur PANORAMIC avec exemples
» Trop de gosub...
» trop de fichiers en cours
» PANORAMIC et informatique de gestion (les tableaux)
» Compilateur FBPano

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: