FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Demande urgente en maths.
par JL35 Aujourd'hui à 21:21

» Compilateur FBPano
par jean_debord Aujourd'hui à 11:24

» Problème de math
par braveen Aujourd'hui à 10:53

» A propos des attributs de fichier
par papydall Hier à 14:33

» Problème de math
par Marc37 Sam 21 Oct 2017 - 23:04

» I Love You
par papydall Sam 21 Oct 2017 - 19:22

» Un petit "coucou" à tous les Panoramiciens !
par mindstorm Sam 21 Oct 2017 - 17:06

» MARK_ON déclenche un événement ON_CLICK à la place de ...
par Jean Claude Mer 18 Oct 2017 - 18:08

» mise a jour calculatrice
par joeeee2017 Mer 18 Oct 2017 - 15:57

» [solved] 3D_LINE How to ?
par Jicehel Mer 18 Oct 2017 - 11:01

» Convertisseur de base 10 de 2 à 36
par gigi75 Mar 17 Oct 2017 - 18:49

» calculatrice avec touches movibles
par joeeee2017 Dim 15 Oct 2017 - 1:11

» CORTANA
par gigi75 Sam 14 Oct 2017 - 16:32

» Calculatrice
par Jean Claude Sam 14 Oct 2017 - 12:30

» KGF_dll - nouvelles versions
par Klaus Mar 10 Oct 2017 - 18:49

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Octobre 2017
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 Un outil pour créer et maintenir des plateaux de jeux 2D

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Klaus

avatar

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

MessageSujet: Un outil pour créer et maintenir des plateaux de jeux 2D   Dim 12 Fév 2017 - 1:19

Suite à une discussion sur des jeux 2D et la conception de leur "monde", je vais essayer de contribuer avec un petit utilitaire.

Je pars des hypothèses suivantes:
- un jeu 2D peut avoir plusieurs "plans", qui sont interprétés, soit comme des étages superposés comme dans un château, soit les plans juxtaposés comme des grandes tuiles.
- chaque plan sera nommé par la suite "étage" pour éviter des confusions
- tous les étages ont les mêmes dimensions
- les dimensions d'un étage sont donnés horizontalement et verticalement en nombre de "cellules"
- toutes les cellules ont les mêmes dimensions horizontales et verticales, en pixels.
- le nombre d'étages, ainsi que les dimensions des étages et des cellules sont paramétrables
- chaque cellule correspond à une représentation graphique indépendante, sous une forme libre (caractère ASCII, rectangle de couleur, image bitmap, ...
- dans l'outil de configuration, chaque cellule est définie par un texte quelconque (une lettre, un chiffre, un caractère spécial, ou une chaîne de plusieurs caractères, ...)
- la signification de ces codification est entièrement laissée à l'appréciation du programme générant l'aspect graphique à partir de la définition
- un tel ensemble d'étages peut être sauvegardé dans un fichier texte très simple, d'où il peut être relu par l'outil pour modification ou lu par le programme de génération graphique.

Alors, voici un outil dans sa première version, actuellement configuré pour 3 étages de 50x50 cellules. Les fonctions de paramétrage de ces valeurs suivront très prochainement. Mais d'ores et déjà, on peut paramétrer 3 étages de 50x50 cellules et définir le contenu de chaque cellule. Le programme est piloté par des menus. Si un étage est sélectionné, un clic dans une cellule affiche une petite fenêtre donnant le numéro d'étage, la ligne et la colonne ainsi que le contenu actuel de la cellule. Ce contenu peut alors être modifié. En cas de validation, cette modification estréécrite dans l'étage. A partir de là, les 4 flèches permettent de dupliquer ce même codage dans la direction choisie (dessin simplifié de murs, par exemple). Essayez plutôt:
Code:
' demo_generer_monde_pour_jeu_de_plateau.bas

labels()
constantes()
variables()
GenererDefauts()
invisibles()
form0()
saisie1()    : ' saisie d'une cellule
saisie2()    : ' saisie du nombre d'étages
saisie3()    : ' saisie des dimensions des étages
saisie4()    : ' saisie des dimensions des cellules
menus()
MenuDesEtages()

end

sortir:
  sortir()
  return
 
NouveauJeu:
  NouveauJeu()
  return
 
FermerJeu:
  FermerJeu()
  return
 
EnregistrerJeu:
  EnregistrerJeu()
  return
 
EnregistrerJeuSous:
  EnregistrerJeuSous()
  return
 
OuvrirJeu:
  OuvrirJeu()
  return
 
SelectionnerEtage:
  SelectionnerEtage()
  return
 
ClicEtage:
  ClicEtage()
  return
 
Saisie1Abandonner:
  Saisie1Abandonner()
  return

Saisie1Valider:
  Saisie1Valider()
  return
 
KeyEtage:
  KeyEtage()
  return
 
NombreEtages:
  NombreEtages()
  return

Saisie2Abandonner:
  Saisie2Abandonner()
  return

Saisie2Valider:
  Saisie2Valider()
  return
 
DimensionsEtages:
  DimensionsEtages()
  return

Saisie3Abandonner:
  Saisie3Abandonner()
  return

Saisie3Valider:
  Saisie3Valider()
  return

DimensionsCellules:
  DimensionsCellules()
  return

Saisie4Abandonner:
  Saisie4Abandonner()
  return

Saisie4Valider:
  Saisie4Valider()
  return
 
Apropos:
  Apropos()
  return

sub labels()
  label sortir, NouveauJeu, FermerJeu, EnregistrerJeu, EnregistrerJeuSous, OuvrirJeu
  label SelectionnerEtage, ClicEtage, Saisie1Valider, Saisie1Abandonner, KeyEtage, Apropos
  label NombreEtages, Saisie2Valider, Saisie2Abandonner
  label DimensionsEtages, Saisie3Valider, Saisie3Abandonner
  label DimensionsCellules, Saisie4Valider, Saisie4Abandonner
end_sub

sub constantes()
  ' dimensions d'une unité graphique en pixels
  dim defaut_LargeurCellule% : defaut_LargeurCellule% =  20
    dim min_LargeurCellule% :    min_LargeurCellule% =  5
    dim max_LargeurCellule% :    max_LargeurCellule% = 100
  dim defaut_HauteurCellule% : defaut_HauteurCellule% =  20
    dim min_HauteurCellule% :    min_HauteurCellule% =  5
    dim max_HauteurCellule% :    max_HauteurCellule% = 100
  ' dimensions des étages (en nombre de cellules)
  dim defaut_LargeurEtage% : defaut_LargeurEtage% =  50
    dim min_LargeurEtage% :    min_LargeurEtage% =  10
    dim max_LargeurEtage% :    max_LargeurEtage% = 1000
  dim defaut_HauteurEtage% : defaut_HauteurEtage% =  50
    dim min_HauteurEtage% :    min_HauteurEtage% =  10
    dim max_HauteurEtage% :    max_HauteurEtage% = 1000
  ' nombe d'étages superposés
  dim defaut_NombreEtages% : defaut_NombreEtages% =  3
    dim min_NombreEtages% :    min_NombreEtages% =  1
    dim max_NombreEtages% :    max_NombreEtages% = 20
  ' numéro d'objet de base pour les menus des étages (+1, +2, ...)
  dim base_MenuEtage%      : base_MenuEtage% = 1000
  ' numéro d'objet de base pour les grids des étages (+1, +2, ...)
  dim base_GridEtage%      : base_GridEtage% = 2000
  ' numéro d'objet de la fenêtre de saisie d'une cellule
  dim no_SaisieCellule%    : no_SaisieCellule% = 3000
  ' numéro d'objet de la fenêtre de saisie du nombre d'étages
  dim no_SaisieNombreEtages%    : no_SaisieNombreEtages% = 3100
  ' numéro d'objet de la fenêtre de saisie des dimsions des étages
  dim no_SaisieDimensionsEtages% : no_SaisieDimensionsEtages% = 3200
  ' numéro d'objet de la fenêtre de saisie des dimsions des cellules
  dim no_SaisieDimensionsCellules% : no_SaisieDimensionsCellules% = 3300
end_sub

sub variables()
  ' variables techniques
  dim no%, no_OpenDialog%, no_SaveDialog%, no_parent_menu_etages%
 
  ' variables de gestion
  dim JeuEnCours%          : ' flag 1=la définition d'un jeu est en cours
  dim NomDuJeu$            : ' le nom du jeu
  dim DossierDuJeu$        : ' le dossier dans lequel je jeu réside
  dim EtageSelectionne%    : ' numéro de l'étage sélectionné
  dim CodeActif$          : ' dernier code saisie pour une cellule
  dim LigneActive%        : '  et son numéro de ligne
  dim ColonneActive%      : '  et son numéro de colonne

  ' variables à initialiser avec des valeurs par défaut
  dim LargeurCellule%      : ' dimensions actuelles des cellules graphiques en pixels
  dim HauteurCellule%
  dim LargeurEtage%        : ' dimensions actuelles des étages en nombre de cellules
  dim HauteurEtage%
  dim NombreEtages%        : ' nombre actuel des étages
end_sub

sub invisibles()
  no% = no% + 1 : open_dialog no% : no_OpenDialog% = no%
  no% = no% + 1 : save_dialog no% : no_SaveDialog% = no%
end_sub

sub form0()
  full_space 0
  AfficherCaption()
end_sub

sub menus()
  dim_local no1%, no2%
  no% = no% + 1 : main_menu no% : no1% = no%
  no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Jeux"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau"              : on_click no%,NouveauJeu
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..."            : on_click no%,OuvrirJeu
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer"          : on_click no%,EnregistrerJeu
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..."  : on_click no%,EnregistrerJeuSous
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer"                : on_click no%,FermerJeu
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir"                : on_click no%,sortir
  no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Edition" : no_parent_menu_etages% = no%
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Dimensions des cellules"  : on_click no%,DimensionsCellules
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Dimensions des étages" : on_click no%,DimensionsEtages
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nombre d'étages"      : on_click no%,NombreEtages
  no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Aide"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"A propos"              : on_click no%,Apropos
end_sub



sub NouveauJeu()
  if JeuEnCours%=1
    if message_confirmation_yes_no("Une définition d'un jeu est en cours. Ecarter ?")<>1 then exit_sub
  end_if
  JeuEnCours% = 1
  GenererDefauts()
  MenuDesEtages()
  NomDuJeu$ = ""
  AfficherCaption()
  DossierDuJeu$ = dir_current$
end_sub

sub FermerJeu()
  if JeuEnCours%=1
    if message_confirmation_yes_no("Une définition d'un jeu est en cours. Ecarter ?")<>1 then exit_sub
  end_if
  JeuEnCours% = 0
  NomDuJeu$ = ""
  DossierDuJeu$ = dir_current$
  AfficherCaption()
end_sub

sub Sortir()
  if JeuEnCours%=1
    if message_confirmation_yes_no("Une définition d'un jeu est en cours. Ecarter ?")<>1 then exit_sub
  end_if
  terminate
end_sub

sub GenererDefauts()
  LargeurCellule%  = defaut_LargeurCellule%
  HauteurCellule%  = defaut_HauteurCellule%
  LargeurEtage%    = defaut_LargeurEtage%
  HauteurEtage%    = defaut_HauteurEtage%
  NombreEtages%    = defaut_NombreEtages%
  EtageSelectionne% = 1
  CodeActif$ = ""
  GenererEtages()
end_sub

sub GenererEtages()
  dim_local i%, ne%
  for i%=1 to NombreEtages%
    ne% = base_GridEtage% + i%
    if object_exists(ne%)=1
      grid_row ne%,HauteurEtage%+1 : grid_column ne%,LargeurEtage%+1
      grid_column_width ne%,12 : grid_row_height ne%,12
      grid_clear ne%,HauteurEtage%+1,LargeurEtage%+1
    else
      grid ne% : '
      full_space ne% : '
      hide ne% : '
      on_click ne%,ClicEtage : '
      on_key_down ne%,KeyEtage
        grid_row ne%,HauteurEtage%+1 : grid_column ne%,LargeurEtage%+1
        grid_column_width ne%,12 : grid_row_height ne%,12
    end_if
  next i%
  ne% = base_GridEtage% + NombreEtages% + 1
  while object_exists(ne%)=1
    delete ne%
    ne% = ne% + 1
  end_while
  show base_GridEtage%+EtageSelectionne%
end_sub

sub EnregistrerJeu()
  if JeuEnCours%=0
    message "Il n'y a aucune définition en cours."
    exit_sub
  end_if
  if NomDuJeu$=""
    message "Utiliser <Enregistrer sous...>."
    exit_sub
  end_if
  EnregistrerInterne()
end_sub

sub EnregistrerJeuSous()
  dim_local f$, p$, n$, e$
  if JeuEnCours%=0
    message "Il n'y a aucune définition en cours."
    exit_sub
  end_if
  filter no_SaveDialog%,"Projet de jeu de plateau (*.pjp)|*.pjp"
  f$ = file_name$(no_SaveDialog%)
  if f$="_" then exit_sub
  p$ = file_extract_path$(f$)
  n$ = file_extract_name$(f$)
  e$ = file_extract_extension$(f$)
  n$ = left$(n$,len(n$)-len(e$))
  if lower$(e$)<>".pjp" then e$ = ".pjp"
  f$ = p$ + n$ + e$
  if file_exists(f$)=1
    if message_confirmation_yes_no("Ce fichier existe déjà. Remplacer ?")<>1 then exit_sub
  end_if
  NomDuJeu$ = n$
  DossierDuJeu$ = p$
  AfficherCaption()
  EnregistrerInterne()
  end_sub
 
sub EnregistrerInterne()
  dim_local i%, il%, ic%, f$
  ' enregister le jeu
  f$ = DossierDuJeu$ + NomDuJeu$ + ".pjp"
  if file_exists(f$)=1 then file_delete f$
  file_open_write 1,f$
  file_writeln 1,"Jeu Plateau"
  file_writeln 1,NomDuJeu$
  file_writeln 1,str$(LargeurCellule%)
  file_writeln 1,str$(HauteurCellule%)
  file_writeln 1,str$(LargeurEtage%)
  file_writeln 1,str$(HauteurEtage%)
  file_writeln 1,str$(NombreEtages%)
  for i%=1 to NombreEtages%
    ' pour l'étage i%
    file_writeln 1,"Etage "+str$(i%)
    for il%=1 to HauteurEtage%+1
      for ic%=1 to LargeurEtage%+1
        file_writeln 1,grid_read$(base_GridEtage%+i%,il%,ic%)
      next ic%
    next il%
  next i%
  file_writeln 1,"Fin"
  file_close 1
  message "Sauvegarde effectuée."
end_sub

sub OuvrirJeu()
  dim_local f$, p$, n$, e$, s$, v%, i%, il%, ic%
  if JeuEnCours%=1
    if message_confirmation_yes_no("Une définition d'un jeu est en cours. Ecarter ?")<>1 then exit_sub
  end_if
  filter no_OpenDialog%,"Projet de jeu de plateau (*.pjp)|*.pjp"
  f$ = file_name$(no_OpenDialog%)
  if f$="_" then exit_sub
  p$ = file_extract_path$(f$)
  n$ = file_extract_name$(f$)
  e$ = file_extract_extension$(f$)
  n$ = left$(n$,len(n$)-len(e$))
  if lower$(e$)<>".pjp" then e$ = ".pjp"
  f$ = p$ + n$ + e$
  if file_exists(f$)=0
    message "Ce fichier est introuvable."
    exit_sub
  end_if
  ' charger le jeu
  file_open_read 1,f$
  ' --- entête du fichier
  file_readln 1,s$
  if s$<>"Jeu Plateau"
    message "Ce n'est pas une sauvegarde d'un projet de jeu."
    file_close 1
    exit_sub
  end_if
  ' --- nom du jeu
  file_readln 1,s$
  if s$<>n$
    message "Le nom du jeu ne correspond pas au fichier."
    file_close 1
    exit_sub
  end_if
  JeuEnCours% = 0
  ' --- largeur des cellules
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_LargeurCellule%) or (v%>max_LargeurCellule%)
    JeuCorrompu()
    exit_sub
  end_if
  LargeurCellule% = v%
  ' --- hauteur des cellules
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_HauteurCellule%) or (v%>max_HauteurCellule%)
    JeuCorrompu()
    exit_sub
  end_if
  HauteurCellule% = v%
  ' --- largeur des étages
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_LargeurEtage%) or (v%>max_LargeurEtage%)
    JeuCorrompu()
    exit_sub
  end_if
  LargeurEtage% = v%
  ' --- hauteur des étages
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_HauteurEtage%) or (v%>max_HauteurEtage%)
    JeuCorrompu()
    exit_sub
  end_if
  HauteurEtage% = v%
  ' --- nombre d'étages
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_NombreEtages%) or (v%>max_NombreEtages%)
    JeuCorrompu()
    exit_sub
  end_if
  NombreEtages% = v%
  for i%=1 to NombreEtages%
    ' pour l'étage i%
    file_readln 1,s$
    if s$<>"Etage "+str$(i%)
      JeuCorrompu()
      exit_sub
    end_if
    for il%=1 to HauteurEtage%+1
      for ic%=1 to LargeurEtage%+1
        file_readln 1,s$
        grid_write base_GridEtage%+i%,il%,ic%,s$
      next ic%
    next il%
  next i%
  file_readln 1,s$
  if s$<>"Fin"
    JeuCorrompu()
    exit_sub
  end_if
  file_close 1
  NomDuJeu$ = n$
  DossierDuJeu$ = p$
  AfficherCaption()
  MenuDesEtages()
  JeuEnCours% = 1
end_sub

sub JeuCorrompu()
  message "Le projet de jeu est corrompu."
  file_close 1
  JeuEnCours% = 0
  NomDuJeu$ = ""
  DossierDuJeu$ = dir_current$
  GenererDefauts()
  AfficherCaption()
  MenuDesEtages()
end_sub

sub AfficherCaption()
  if NomDuJeu$=""
    caption 0,"Création de Jeu - <Nouveau>  Cellule="+str$(LargeurCellule%)+"x"+str$(HauteurCellule%)+"  Etage="+str$(LargeurEtage%)+"x"+str$(HauteurEtage%)+"  "+str$(EtageSelectionne%)+"/"+str$(NombreEtages%)+" étage(s)"
  else
    caption 0,"Création de Jeu - <"+NomDuJeu$+">  Cellule="+str$(LargeurCellule%)+"x"+str$(HauteurCellule%)+"  Etage="+str$(LargeurEtage%)+"x"+str$(HauteurEtage%)+"  "+str$(EtageSelectionne%)+"/"+str$(NombreEtages%)+" étage(s)"
  end_if
end_sub

sub MenuDesEtages()
  dim_local ne%, i%
  ne% = base_MenuEtage% + 1
  while object_exists(ne%)=1
    delete ne%
    ne% = ne% + 1
  end_while
  for i%=1 to NombreEtages%
    ne% = base_MenuEtage% + i%
    sub_menu ne% : parent ne%,no_parent_menu_etages% : caption ne%,"Etage "+str$(i%) : on_click ne%,SelectionnerEtage
  next i%
  mark_on base_MenuEtage%+EtageSelectionne%
end_sub

sub SelectionnerEtage()
  mark_off base_MenuEtage%+EtageSelectionne%
  hide base_GridEtage%+EtageSelectionne%
  EtageSelectionne% = number_click - base_MenuEtage%
  mark_on base_MenuEtage%+EtageSelectionne%
  show base_GridEtage%+EtageSelectionne%
  AfficherCaption()
end_sub

sub ClicEtage()
  dim_local ne%, x%, y%, l%, c%
  if JeuEnCours%=0 then exit_sub
  ne% = number_click
  x% = mouse_x_left_down(ne%)
  y% = mouse_y_left_down(ne%)
  c% = grid_x_to_column(ne%,x%)
  l% = grid_y_to_row(ne%,y%)
  position no_SaisieCellule%+21,ne%-base_GridEtage%
  position no_SaisieCellule%+22,l%
  position no_SaisieCellule%+23,c%
  text no_SaisieCellule%+24,grid_read$(ne%,l%,c%)
  inactive 0
  show no_SaisieCellule%
  set_focus no_SaisieCellule%+24
  LigneActive% = 0
  ColonneActive% = 0
end_sub

sub saisie1()
  dim_local no%
  no% = no_SaisieCellule%
  form no% : hide no% : height no%,180 : width no%,200 : caption no%,"Saisie"
    border_hide no% : color no%,255,200,200
    top no%,(screen_y-height(no%))/2 : left no%,(screen_x-width(no%))/2
  no% = no% + 1 : alpha no% : parent no%,no_SaisieCellule%
    top no%,20 : left no%,20 : caption no%,"Etage:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieCellule%
    top no%,50 : left no%,20 : caption no%,"Ligne:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieCellule%
    top no%,80 : left no%,20 : caption no%,"Colonne:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieCellule%
    top no%,110 : left no%,20 : caption no%,"Contenu:"
  no% = no% + 1 : button no% : parent no%,no_SaisieCellule%
    top no%,140 : left no%,20 : caption no%,"Valider" : on_click no%,Saisie1Valider
  no% = no% + 1 : button no% : parent no%,no_SaisieCellule%
    top no%,140 : left no%,120 : caption no%,"Abandonner" : on_click no%,Saisie1Abandonner
  no% = no_SaisieCellule% + 20
  no% = no% + 1 : spin no% : parent no%,no_SaisieCellule% : width no%,60 : inactive no% : ' no_SaisieCellule%+21
    top no%,20 : left no%,120 : max no%,20000
  no% = no% + 1 : spin no% : parent no%,no_SaisieCellule% : width no%,60 : inactive no% : ' no_SaisieCellule%+22
    top no%,50 : left no%,120 : max no%,20000
  no% = no% + 1 : spin no% : parent no%,no_SaisieCellule% : width no%,60 : inactive no% : ' no_SaisieCellule%+23
    top no%,80 : left no%,120 : max no%,20000
  no% = no% + 1 : edit no% : parent no%,no_SaisieCellule% : width no%,60                : ' no_SaisieCellule%+24
    top no%,110 : left no%,120
end_sub

sub Saisie1Valider()
  CodeActif$    = text$(no_SaisieCellule%+24)
  LigneActive%  = position(no_SaisieCellule%+22)
  ColonneActive% = position(no_SaisieCellule%+23)
  grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
  hide no_SaisieCellule%
  active 0
end_sub

sub Saisie1Abandonner()
  hide no_SaisieCellule%
  active 0
end_sub

sub saisie2()
  dim_local no%
  no% = no_SaisieNombreEtages%
  form no% : hide no% : height no%,180 : width no%,200 : caption no%,"Saisie"
    border_hide no% : color no%,255,200,200
    top no%,(screen_y-height(no%))/2 : left no%,(screen_x-width(no%))/2
  no% = no% + 1 : alpha no% : parent no%,no_SaisieNombreEtages%
    top no%,20 : left no%,20 : caption no%,"Nombre d'étages:"
  no% = no% + 1 : button no% : parent no%,no_SaisieNombreEtages%
    top no%,140 : left no%,20 : caption no%,"Valider" : on_click no%,Saisie2Valider
  no% = no% + 1 : button no% : parent no%,no_SaisieNombreEtages%
    top no%,140 : left no%,120 : caption no%,"Abandonner" : on_click no%,Saisie2Abandonner
  no% = no_SaisieNombreEtages% + 20
  no% = no% + 1 : spin no% : parent no%,no_SaisieNombreEtages% : width no%,60 : ' no_SaisieNombreEtages%+21
    top no%,20 : left no%,120 : min no%,1 : max no%,100
end_sub

sub KeyEtage()
  dim_local ne%, x%, y%, l%, c%
  if JeuEnCours%=0 then exit_sub
  if LigneActive%=0 then exit_sub
  select scancode
    case 37: ' flèche à gauche
      if ColonneActive%=2 then exit_sub
      ColonneActive% = ColonneActive% - 1
      grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
    case 38: ' flèche en haut
      if LigneActive%=2 then Exit_sub
      LigneActive% = LigneActive% - 1
      grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
    case 39: ' flèche à droite
      if ColonneActive%=LargeurEtage%+1 then exit_sub
      ColonneActive% = ColonneActive% + 1
      grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
    case 40: ' flèche en bas
      if LigneActive%=HauteurEtage%+1 then Exit_sub
      LigneActive% = LigneActive% + 1
      grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
  end_select
end_sub

sub NombreEtages()
'  if JeuEnCours%=0 then exit_sub
  inactive 0
  position no_SaisieNombreEtages%+21,NombreEtages%
  show no_SaisieNombreEtages%
  set_focus no_SaisieNombreEtages%+21
end_sub

sub Saisie2Valider()
  dim_local n%
  n% = position(no_SaisieNombreEtages%+21)
  if n%<NombreEtages%
    if message_confirmation_yes_no("Vous allez perdre des étages. Continuer ?")<>1 then exit_sub
  end_if
  NombreEtages% = n%
  GenererEtages()
  MenuDesEtages()
  hide no_SaisieNombreEtages%
  active 0
end_sub

sub Saisie2Abandonner()
  hide no_SaisieNombreEtages%
  active 0
end_sub

sub saisie3()
  dim_local no%
  no% = no_SaisieDimensionsEtages%
  form no% : hide no% : height no%,180 : width no%,200 : caption no%,"Saisie"
    border_hide no% : color no%,255,200,200
    top no%,(screen_y-height(no%))/2 : left no%,(screen_x-width(no%))/2
  no% = no% + 1 : alpha no% : parent no%,no_SaisieDimensionsEtages%
    top no%,20 : left no%,20 : caption no%,"Largeur des étages:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieDimensionsEtages%
    top no%,50 : left no%,20 : caption no%,"Hauteur des étages:"
  no% = no% + 1 : button no% : parent no%,no_SaisieDimensionsEtages%
    top no%,140 : left no%,20 : caption no%,"Valider" : on_click no%,Saisie3Valider
  no% = no% + 1 : button no% : parent no%,no_SaisieDimensionsEtages%
    top no%,140 : left no%,120 : caption no%,"Abandonner" : on_click no%,Saisie3Abandonner
  no% = no_SaisieDimensionsEtages% + 20
  no% = no% + 1 : spin no% : parent no%,no_SaisieDimensionsEtages% : width no%,60 : ' no_SaisieDimensionsEtages%+21
    top no%,20 : left no%,130 : min no%,min_LargeurEtage% : max no%,max_LargeurEtage%
  no% = no% + 1 : spin no% : parent no%,no_SaisieDimensionsEtages% : width no%,60 : ' no_SaisieDimensionsEtages%+22
    top no%,50 : left no%,130 : min no%,min_HauteurEtage% : max no%,max_HauteurEtage%
end_sub

sub DimensionsEtages()
'  if JeuEnCours%=0 then exit_sub
  inactive 0
  position no_SaisieDimensionsEtages%+21,LargeurEtage%
  position no_SaisieDimensionsEtages%+22,HauteurEtage%
  show no_SaisieDimensionsEtages%
  set_focus no_SaisieDimensionsEtages%+21
end_sub

sub Saisie3Valider()
  LargeurEtage% = position(no_SaisieDimensionsEtages%+21)
  HauteurEtage% = position(no_SaisieDimensionsEtages%+22)
  if JeuEnCours%=0
    defaut_LargeurEtage% = position(no_SaisieDimensionsEtages%+21)
    defaut_HauteurEtage% = position(no_SaisieDimensionsEtages%+22)
  end_if
  GenererEtages()
  hide no_SaisieDimensionsEtages%
  active 0
end_sub

sub Saisie3Abandonner()
  hide no_SaisieDimensionsEtages%
  active 0
end_sub

sub saisie4()
  dim_local no%
  no% = no_SaisieDimensionsCellules%
  form no% : hide no% : height no%,180 : width no%,200 : caption no%,"Saisie"
    border_hide no% : color no%,255,200,200
    top no%,(screen_y-height(no%))/2 : left no%,(screen_x-width(no%))/2
  no% = no% + 1 : alpha no% : parent no%,no_SaisieDimensionsCellules%
    top no%,20 : left no%,20 : caption no%,"Largeur des étages:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieDimensionsCellules%
    top no%,50 : left no%,20 : caption no%,"Hauteur des étages:"
  no% = no% + 1 : button no% : parent no%,no_SaisieDimensionsCellules%
    top no%,140 : left no%,20 : caption no%,"Valider" : on_click no%,Saisie4Valider
  no% = no% + 1 : button no% : parent no%,no_SaisieDimensionsCellules%
    top no%,140 : left no%,120 : caption no%,"Abandonner" : on_click no%,Saisie4Abandonner
  no% = no_SaisieDimensionsCellules% + 20
  no% = no% + 1 : spin no% : parent no%,no_SaisieDimensionsCellules% : width no%,60 : ' no_SaisieDimensionsCellules%+21
    top no%,20 : left no%,130 : min no%,min_LargeurCellule% : max no%,max_LargeurCellule%
  no% = no% + 1 : spin no% : parent no%,no_SaisieDimensionsCellules% : width no%,60 : ' no_SaisieDimensionsCellules%+22
    top no%,50 : left no%,130 : min no%,min_HauteurCellule% : max no%,max_HauteurCellule%
end_sub

sub DimensionsCellules()
'  if JeuEnCours%=0 then exit_sub
  inactive 0
  position no_SaisieDimensionsCellules%+21,LargeurCellule%
  position no_SaisieDimensionsCellules%+22,HauteurCellule%
  show no_SaisieDimensionsCellules%
  set_focus no_SaisieDimensionsCellules%+21
end_sub

sub Saisie4Valider()
  if JeuEnCours%=0
    defaut_LargeurCellule% = position(no_SaisieDimensionsCellules%+21)
    defaut_HauteurCellule% = position(no_SaisieDimensionsCellules%+22)
  end_if
  LargeurCellule% = position(no_SaisieDimensionsCellules%+21)
  HauteurCellule% = position(no_SaisieDimensionsCellules%+22)
  hide no_SaisieDimensionsCellules%
  active 0
end_sub

sub Saisie4Abandonner()
  hide no_SaisieDimensionsCellules%
  active 0
end_sub

sub Apropos()
  dim_local s$, crlf$
  crlf$ = chr$(13) + chr$(10)
  s$ = "Génération d'un monde 2D"+crlf$+crlf$
  s$ = s$ + "Version: 1.00"+crlf$+crlf$
  s$ = s$ + "Auteur: Klaus"+crlf$+crlf$
  s$ = s$ + "Créé le: 12/02/2017"
  message s$
end_sub

EDIT

La fenêtre de changement de nombre d'étages a été ajoutée.
La fenêtre de changement des dimensions des étages a été ajoutée.
La fenêtre de changement des dimensions des cellules a été ajoutée.
Une fenêtre Apropos a été ajoutée.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D   Dim 12 Fév 2017 - 4:46

L'outil est assez complet maintenant. Du fait de la possibilité de saisir des chaînes de caractères complètes dans chaque case, on peut même placer des indications comme "Porte", "Mur", "Bombe" etc.

Certes, du fait de la petite taille visuelle à l'écran de chaque cellule, le texte entier n'est pas visible, seul le premier caractère est lisible. Mais en cliquant sur une cellule, on a le texte complet, bien sûr.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Marc37



Nombre de messages : 457
Age : 56
Localisation : TOURS
Date d'inscription : 18/03/2014

MessageSujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D   Dim 12 Fév 2017 - 6:08

Merci Klaus !

J'ai fait différents essais. C'est super !
Par contre, je n'ai pas réussi à dupliquer une cellule avec les flèches de direction.
Je n'ai pas trouvé l'astuce. Embarassed
C'est vrai que ça n'a aucune importance, mais les coordonnées commencent par 2,2.
J'ai saisi plusieurs cellules sur les trois niveaux. La sauvegarde fonctionne parfaitement.
Voilà un superbe utilitaire !

C'est génial !cheers
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5858
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D   Dim 12 Fév 2017 - 10:17

Ca promet d'être un outil sympa mais j'ai eu des problèmes lors de mes premiers tests: la première fois il ma indiqué la colonne et la ligne 3 alors que j'étais sur la case 2 et je ne pouvais pas éditer la ligne 1 ou la colonne 1.
Quand j'ai enregistré et réouvert le plan de test, j'ai cliqué sur la ligne 2, colonne 2 (elle était sélectionnée) et quand je l'ai édité, il ma affiché la ligne 1 colonne 1.
Les flèches de direction ne me permettent pas de recopier le contenu de la cellule.

Voilà, c'est peut être lié à des erreurs de ma part, mais je préférais te remonter ces remarques tout de suite. J'ai hâte de découvrir la suite en tout cas car l'idée est des plus intéressante.

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5041
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D   Dim 12 Fév 2017 - 11:40

Cet utilitaire me parait très intéressant, je vais suivre.

Première constatation: comme Jicehel (les n° de ligne et de colonne ne corresponde pas).
C'est à cause des cellules fixes du grid, je suppose.

Deuxième constatation: je ne retrouve pas le texte saisi dans un cellule dans le fichier, ou je n'ai pas tout compris.

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D   Dim 12 Fév 2017 - 12:37

Merci de vos appréciations !

Pour les flèches, en fait, je me suis fait piéger par un problème de gestion des évènements inhérent à GRID. Il y a deux points à considérer:
- l'évènement ON_CLICK fonctionne bien, comme il se doit
- l'évènement ON_KEY_DOWN n'est pas mentionné dans l'aide sur les évènements, pour un GRID.

C'est bizarre, car il fonctionne... enfin, quand il n'y a pas de ON_CLICK ! Car dans ce cas, ON_KEY_DOWN fonctionne bien pour toutes les touches SAUF les flèches qui sont converties par Panoramic en ON_KEY_DOWN !

Ce n'est pas normal, et je vais signaler ce problème à Jack.

Solution: utiliser le clavier numérique en mode numérique. Et là, je peux intercepter les codes corresopndant aux touches 4, 8, 6 et 2 pour faire les flèches. Et tout rentre dans l'ordre.

J'ai également supprimé la ligne et la colonne fixe, et on n'a plus de décalage d'indices. Voici la nouvelle version:
Code:
' demo_generer_monde_pour_jeu_de_plateau.bas

labels()
constantes()
variables()
GenererDefauts()
invisibles()
form0()
saisie1()    : ' saisie d'une cellule
saisie2()    : ' saisie du nombre d'étages
saisie3()    : ' saisie des dimensions des étages
saisie4()    : ' saisie des dimensions des cellules
menus()
MenuDesEtages()

end

sortir:
  sortir()
  return
 
NouveauJeu:
  NouveauJeu()
  return
 
FermerJeu:
  FermerJeu()
  return
 
EnregistrerJeu:
  EnregistrerJeu()
  return
 
EnregistrerJeuSous:
  EnregistrerJeuSous()
  return
 
OuvrirJeu:
  OuvrirJeu()
  return
 
SelectionnerEtage:
  SelectionnerEtage()
  return
 
ClicEtage:
  ClicEtage()
  return
 
Saisie1Abandonner:
  Saisie1Abandonner()
  return

Saisie1Valider:
  Saisie1Valider()
  return
 
KeyEtage:
  KeyEtage()
  return
 
NombreEtages:
  NombreEtages()
  return

Saisie2Abandonner:
  Saisie2Abandonner()
  return

Saisie2Valider:
  Saisie2Valider()
  return
 
DimensionsEtages:
  DimensionsEtages()
  return

Saisie3Abandonner:
  Saisie3Abandonner()
  return

Saisie3Valider:
  Saisie3Valider()
  return

DimensionsCellules:
  DimensionsCellules()
  return

Saisie4Abandonner:
  Saisie4Abandonner()
  return

Saisie4Valider:
  Saisie4Valider()
  return
 
Apropos:
  Apropos()
  return

sub labels()
  label sortir, NouveauJeu, FermerJeu, EnregistrerJeu, EnregistrerJeuSous, OuvrirJeu
  label SelectionnerEtage, ClicEtage, Saisie1Valider, Saisie1Abandonner, KeyEtage, Apropos
  label NombreEtages, Saisie2Valider, Saisie2Abandonner
  label DimensionsEtages, Saisie3Valider, Saisie3Abandonner
  label DimensionsCellules, Saisie4Valider, Saisie4Abandonner
end_sub

sub constantes()
  ' dimensions d'une unité graphique en pixels
  dim defaut_LargeurCellule% : defaut_LargeurCellule% =  20
    dim min_LargeurCellule% :    min_LargeurCellule% =  5
    dim max_LargeurCellule% :    max_LargeurCellule% = 100
  dim defaut_HauteurCellule% : defaut_HauteurCellule% =  20
    dim min_HauteurCellule% :    min_HauteurCellule% =  5
    dim max_HauteurCellule% :    max_HauteurCellule% = 100
  ' dimensions des étages (en nombre de cellules)
  dim defaut_LargeurEtage% : defaut_LargeurEtage% =  50
    dim min_LargeurEtage% :    min_LargeurEtage% =  10
    dim max_LargeurEtage% :    max_LargeurEtage% = 1000
  dim defaut_HauteurEtage% : defaut_HauteurEtage% =  50
    dim min_HauteurEtage% :    min_HauteurEtage% =  10
    dim max_HauteurEtage% :    max_HauteurEtage% = 1000
  ' nombe d'étages superposés
  dim defaut_NombreEtages% : defaut_NombreEtages% =  3
    dim min_NombreEtages% :    min_NombreEtages% =  1
    dim max_NombreEtages% :    max_NombreEtages% = 20
  ' numéro d'objet de base pour les menus des étages (+1, +2, ...)
  dim base_MenuEtage%      : base_MenuEtage% = 1000
  ' numéro d'objet de base pour les grids des étages (+1, +2, ...)
  dim base_GridEtage%      : base_GridEtage% = 2000
  ' numéro d'objet de la fenêtre de saisie d'une cellule
  dim no_SaisieCellule%    : no_SaisieCellule% = 3000
  ' numéro d'objet de la fenêtre de saisie du nombre d'étages
  dim no_SaisieNombreEtages%    : no_SaisieNombreEtages% = 3100
  ' numéro d'objet de la fenêtre de saisie des dimsions des étages
  dim no_SaisieDimensionsEtages% : no_SaisieDimensionsEtages% = 3200
  ' numéro d'objet de la fenêtre de saisie des dimsions des cellules
  dim no_SaisieDimensionsCellules% : no_SaisieDimensionsCellules% = 3300
end_sub

sub variables()
  ' variables techniques
  dim no%, no_OpenDialog%, no_SaveDialog%, no_parent_menu_etages%
 
  ' variables de gestion
  dim JeuEnCours%          : ' flag 1=la définition d'un jeu est en cours
  dim NomDuJeu$            : ' le nom du jeu
  dim DossierDuJeu$        : ' le dossier dans lequel je jeu réside
  dim EtageSelectionne%    : ' numéro de l'étage sélectionné
  dim CodeActif$          : ' dernier code saisie pour une cellule
  dim LigneActive%        : '  et son numéro de ligne
  dim ColonneActive%      : '  et son numéro de colonne

  ' variables à initialiser avec des valeurs par défaut
  dim LargeurCellule%      : ' dimensions actuelles des cellules graphiques en pixels
  dim HauteurCellule%
  dim LargeurEtage%        : ' dimensions actuelles des étages en nombre de cellules
  dim HauteurEtage%
  dim NombreEtages%        : ' nombre actuel des étages
end_sub

sub invisibles()
  no% = no% + 1 : open_dialog no% : no_OpenDialog% = no%
  no% = no% + 1 : save_dialog no% : no_SaveDialog% = no%
end_sub

sub form0()
  full_space 0
  AfficherCaption()
end_sub

sub menus()
  dim_local no1%, no2%
  no% = no% + 1 : main_menu no% : no1% = no%
  no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Jeux"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau"              : on_click no%,NouveauJeu
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..."            : on_click no%,OuvrirJeu
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer"          : on_click no%,EnregistrerJeu
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..."  : on_click no%,EnregistrerJeuSous
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer"                : on_click no%,FermerJeu
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir"                : on_click no%,sortir
  no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Edition" : no_parent_menu_etages% = no%
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Dimensions des cellules"  : on_click no%,DimensionsCellules
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Dimensions des étages" : on_click no%,DimensionsEtages
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nombre d'étages"      : on_click no%,NombreEtages
  no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Aide"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"A propos"              : on_click no%,Apropos
end_sub



sub NouveauJeu()
  if JeuEnCours%=1
    if message_confirmation_yes_no("Une définition d'un jeu est en cours. Ecarter ?")<>1 then exit_sub
  end_if
  JeuEnCours% = 1
  GenererDefauts()
  MenuDesEtages()
  NomDuJeu$ = ""
  AfficherCaption()
  DossierDuJeu$ = dir_current$
end_sub

sub FermerJeu()
  if JeuEnCours%=1
    if message_confirmation_yes_no("Une définition d'un jeu est en cours. Ecarter ?")<>1 then exit_sub
  end_if
  JeuEnCours% = 0
  NomDuJeu$ = ""
  DossierDuJeu$ = dir_current$
  AfficherCaption()
end_sub

sub Sortir()
  if JeuEnCours%=1
    if message_confirmation_yes_no("Une définition d'un jeu est en cours. Ecarter ?")<>1 then exit_sub
  end_if
  terminate
end_sub

sub GenererDefauts()
  LargeurCellule%  = defaut_LargeurCellule%
  HauteurCellule%  = defaut_HauteurCellule%
  LargeurEtage%    = defaut_LargeurEtage%
  HauteurEtage%    = defaut_HauteurEtage%
  NombreEtages%    = defaut_NombreEtages%
  EtageSelectionne% = 1
  CodeActif$ = ""
  GenererEtages(1)
end_sub

sub GenererEtages(vider%)
  dim_local i%, ne%
  for i%=1 to NombreEtages%
    ne% = base_GridEtage% + i%
    if object_exists(ne%)=1
      grid_row ne%,HauteurEtage%+1 : grid_column ne%,LargeurEtage%
      grid_column_width ne%,12 : grid_row_height ne%,12
      if vider%=1 then grid_clear ne%,HauteurEtage%+1,LargeurEtage%
    else
      grid ne% : full_space ne% : hide ne%
        grid_row ne%,HauteurEtage% : grid_column ne%,LargeurEtage%
        grid_row_fixed ne%,0 : grid_column_fixed ne%,0
        grid_column_width ne%,12 : grid_row_height ne%,12
        on_click ne%,ClicEtage : on_key_down ne%,KeyEtage
    end_if
  next i%
  ne% = base_GridEtage% + NombreEtages% + 1
  while object_exists(ne%)=1
    delete ne%
    ne% = ne% + 1
  end_while
  show base_GridEtage%+EtageSelectionne%
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub EnregistrerJeu()
  if JeuEnCours%=0
    message "Il n'y a aucune définition en cours."
    exit_sub
  end_if
  if NomDuJeu$=""
    message "Utiliser <Enregistrer sous...>."
    exit_sub
  end_if
  EnregistrerInterne()
end_sub

sub EnregistrerJeuSous()
  dim_local f$, p$, n$, e$
  if JeuEnCours%=0
    message "Il n'y a aucune définition en cours."
    exit_sub
  end_if
  filter no_SaveDialog%,"Projet de jeu de plateau (*.pjp)|*.pjp"
  f$ = file_name$(no_SaveDialog%)
  if f$="_" then exit_sub
  p$ = file_extract_path$(f$)
  n$ = file_extract_name$(f$)
  e$ = file_extract_extension$(f$)
  n$ = left$(n$,len(n$)-len(e$))
  if lower$(e$)<>".pjp" then e$ = ".pjp"
  f$ = p$ + n$ + e$
  if file_exists(f$)=1
    if message_confirmation_yes_no("Ce fichier existe déjà. Remplacer ?")<>1 then exit_sub
  end_if
  NomDuJeu$ = n$
  DossierDuJeu$ = p$
  AfficherCaption()
  EnregistrerInterne()
  end_sub
 
sub EnregistrerInterne()
  dim_local i%, il%, ic%, f$
  ' enregister le jeu
  f$ = DossierDuJeu$ + NomDuJeu$ + ".pjp"
  if file_exists(f$)=1 then file_delete f$
  file_open_write 1,f$
  file_writeln 1,"Jeu Plateau"
  file_writeln 1,NomDuJeu$
  file_writeln 1,str$(LargeurCellule%)
  file_writeln 1,str$(HauteurCellule%)
  file_writeln 1,str$(LargeurEtage%)
  file_writeln 1,str$(HauteurEtage%)
  file_writeln 1,str$(NombreEtages%)
  for i%=1 to NombreEtages%
    ' pour l'étage i%
    file_writeln 1,"Etage "+str$(i%)
    for il%=1 to HauteurEtage%
      for ic%=1 to LargeurEtage%
        file_writeln 1,grid_read$(base_GridEtage%+i%,il%,ic%)
      next ic%
    next il%
  next i%
  file_writeln 1,"Fin"
  file_close 1
  message "Sauvegarde effectuée."
end_sub

sub OuvrirJeu()
  dim_local f$, p$, n$, e$, s$, v%, i%, il%, ic%
  if JeuEnCours%=1
    if message_confirmation_yes_no("Une définition d'un jeu est en cours. Ecarter ?")<>1 then exit_sub
  end_if
  filter no_OpenDialog%,"Projet de jeu de plateau (*.pjp)|*.pjp"
  f$ = file_name$(no_OpenDialog%)
  if f$="_" then exit_sub
  p$ = file_extract_path$(f$)
  n$ = file_extract_name$(f$)
  e$ = file_extract_extension$(f$)
  n$ = left$(n$,len(n$)-len(e$))
  if lower$(e$)<>".pjp" then e$ = ".pjp"
  f$ = p$ + n$ + e$
  if file_exists(f$)=0
    message "Ce fichier est introuvable."
    exit_sub
  end_if
  ' charger le jeu
  file_open_read 1,f$
  ' --- entête du fichier
  file_readln 1,s$
  if s$<>"Jeu Plateau"
    message "Ce n'est pas une sauvegarde d'un projet de jeu."
    file_close 1
    exit_sub
  end_if
  ' --- nom du jeu
  file_readln 1,s$
  if s$<>n$
    message "Le nom du jeu ne correspond pas au fichier."
    file_close 1
    exit_sub
  end_if
  JeuEnCours% = 0
  ' --- largeur des cellules
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_LargeurCellule%) or (v%>max_LargeurCellule%)
    JeuCorrompu()
    exit_sub
  end_if
  LargeurCellule% = v%
  ' --- hauteur des cellules
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_HauteurCellule%) or (v%>max_HauteurCellule%)
    JeuCorrompu()
    exit_sub
  end_if
  HauteurCellule% = v%
  ' --- largeur des étages
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_LargeurEtage%) or (v%>max_LargeurEtage%)
    JeuCorrompu()
    exit_sub
  end_if
  LargeurEtage% = v%
  ' --- hauteur des étages
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_HauteurEtage%) or (v%>max_HauteurEtage%)
    JeuCorrompu()
    exit_sub
  end_if
  HauteurEtage% = v%
  ' --- nombre d'étages
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_NombreEtages%) or (v%>max_NombreEtages%)
    JeuCorrompu()
    exit_sub
  end_if
  NombreEtages% = v%
  for i%=1 to NombreEtages%
    ' pour l'étage i%
    file_readln 1,s$
    if s$<>"Etage "+str$(i%)
      JeuCorrompu()
      exit_sub
    end_if
    for il%=1 to HauteurEtage%
      for ic%=1 to LargeurEtage%
        file_readln 1,s$
        grid_write base_GridEtage%+i%,il%,ic%,s$
      next ic%
    next il%
  next i%
  file_readln 1,s$
  if s$<>"Fin"
    JeuCorrompu()
    exit_sub
  end_if
  file_close 1
  NomDuJeu$ = n$
  DossierDuJeu$ = p$
  AfficherCaption()
  GenererEtages(0)
  MenuDesEtages()
  JeuEnCours% = 1
end_sub

sub JeuCorrompu()
  message "Le projet de jeu est corrompu."
  file_close 1
  JeuEnCours% = 0
  NomDuJeu$ = ""
  DossierDuJeu$ = dir_current$
  GenererDefauts()
  AfficherCaption()
  MenuDesEtages()
end_sub

sub AfficherCaption()
  if NomDuJeu$=""
    caption 0,"Création de Jeu - <Nouveau>  Cellule="+str$(LargeurCellule%)+"x"+str$(HauteurCellule%)+"  Etage="+str$(LargeurEtage%)+"x"+str$(HauteurEtage%)+"  "+str$(EtageSelectionne%)+"/"+str$(NombreEtages%)+" étage(s)"
  else
    caption 0,"Création de Jeu - <"+NomDuJeu$+">  Cellule="+str$(LargeurCellule%)+"x"+str$(HauteurCellule%)+"  Etage="+str$(LargeurEtage%)+"x"+str$(HauteurEtage%)+"  "+str$(EtageSelectionne%)+"/"+str$(NombreEtages%)+" étage(s)"
  end_if
end_sub

sub MenuDesEtages()
  dim_local ne%, i%
  ne% = base_MenuEtage% + 1
  while object_exists(ne%)=1
    delete ne%
    ne% = ne% + 1
  end_while
  for i%=1 to NombreEtages%
    ne% = base_MenuEtage% + i%
    sub_menu ne% : parent ne%,no_parent_menu_etages% : caption ne%,"Etage "+str$(i%) : on_click ne%,SelectionnerEtage
  next i%
  mark_on base_MenuEtage%+EtageSelectionne%
end_sub

sub SelectionnerEtage()
  mark_off base_MenuEtage%+EtageSelectionne%
  hide base_GridEtage%+EtageSelectionne%
  EtageSelectionne% = number_click - base_MenuEtage%
  mark_on base_MenuEtage%+EtageSelectionne%
  show base_GridEtage%+EtageSelectionne%
  set_focus base_GridEtage%+EtageSelectionne%
  AfficherCaption()
end_sub

sub saisie1()
  dim_local no%
  no% = no_SaisieCellule%
  form no% : hide no% : height no%,180 : width no%,200 : caption no%,"Saisie"
    border_hide no% : color no%,255,200,200
    top no%,(screen_y-height(no%))/2 : left no%,(screen_x-width(no%))/2
  no% = no% + 1 : alpha no% : parent no%,no_SaisieCellule%
    top no%,20 : left no%,20 : caption no%,"Etage:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieCellule%
    top no%,50 : left no%,20 : caption no%,"Ligne:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieCellule%
    top no%,80 : left no%,20 : caption no%,"Colonne:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieCellule%
    top no%,110 : left no%,20 : caption no%,"Contenu:"
  no% = no% + 1 : button no% : parent no%,no_SaisieCellule%
    top no%,140 : left no%,20 : caption no%,"Valider" : on_click no%,Saisie1Valider
  no% = no% + 1 : button no% : parent no%,no_SaisieCellule%
    top no%,140 : left no%,120 : caption no%,"Abandonner" : on_click no%,Saisie1Abandonner
  no% = no_SaisieCellule% + 20
  no% = no% + 1 : spin no% : parent no%,no_SaisieCellule% : width no%,60 : inactive no% : ' no_SaisieCellule%+21
    top no%,20 : left no%,120 : max no%,20000
  no% = no% + 1 : spin no% : parent no%,no_SaisieCellule% : width no%,60 : inactive no% : ' no_SaisieCellule%+22
    top no%,50 : left no%,120 : max no%,20000
  no% = no% + 1 : spin no% : parent no%,no_SaisieCellule% : width no%,60 : inactive no% : ' no_SaisieCellule%+23
    top no%,80 : left no%,120 : max no%,20000
  no% = no% + 1 : edit no% : parent no%,no_SaisieCellule% : width no%,60                : ' no_SaisieCellule%+24
    top no%,110 : left no%,120
end_sub

sub ClicEtage()
  dim_local ne%, x%, y%, l%, c%
  if JeuEnCours%=0 then exit_sub
  ne% = number_click
  x% = mouse_x_left_down(ne%)
  y% = mouse_y_left_down(ne%)
  c% = grid_x_to_column(ne%,x%)
  l% = grid_y_to_row(ne%,y%)
  position no_SaisieCellule%+21,ne%-base_GridEtage%
  position no_SaisieCellule%+22,l%
  position no_SaisieCellule%+23,c%
  text no_SaisieCellule%+24,grid_read$(ne%,l%,c%)
  inactive 0
  show no_SaisieCellule%
  set_focus no_SaisieCellule%+24
  LigneActive% = l%
  ColonneActive% = c%
end_sub

sub Saisie1Valider()
  CodeActif$    = text$(no_SaisieCellule%+24)
  LigneActive%  = position(no_SaisieCellule%+22)
  ColonneActive% = position(no_SaisieCellule%+23)
  grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
  hide no_SaisieCellule%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub Saisie1Abandonner()
  hide no_SaisieCellule%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub saisie2()
  dim_local no%
  no% = no_SaisieNombreEtages%
  form no% : hide no% : height no%,180 : width no%,200 : caption no%,"Saisie"
    border_hide no% : color no%,255,200,200
    top no%,(screen_y-height(no%))/2 : left no%,(screen_x-width(no%))/2
  no% = no% + 1 : alpha no% : parent no%,no_SaisieNombreEtages%
    top no%,20 : left no%,20 : caption no%,"Nombre d'étages:"
  no% = no% + 1 : button no% : parent no%,no_SaisieNombreEtages%
    top no%,140 : left no%,20 : caption no%,"Valider" : on_click no%,Saisie2Valider
  no% = no% + 1 : button no% : parent no%,no_SaisieNombreEtages%
    top no%,140 : left no%,120 : caption no%,"Abandonner" : on_click no%,Saisie2Abandonner
  no% = no_SaisieNombreEtages% + 20
  no% = no% + 1 : spin no% : parent no%,no_SaisieNombreEtages% : width no%,60 : ' no_SaisieNombreEtages%+21
    top no%,20 : left no%,120 : min no%,1 : max no%,100
end_sub

sub KeyEtage()
  dim_local ne%, x%, y%, l%, c%
  if JeuEnCours%=0 then exit_sub
  if LigneActive%=0 then exit_sub
  select scancode
    case 37: ' flèche à gauche
      if ColonneActive%=1 then exit_sub
      ColonneActive% = ColonneActive% - 1
      grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
    case 100: ' flèche à gauche
      if ColonneActive%=1 then exit_sub
      ColonneActive% = ColonneActive% - 1
      grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
    case 38: ' flèche en haut
      if LigneActive%=1 then Exit_sub
      LigneActive% = LigneActive% - 1
      grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
    case 104: ' flèche en haut
      if LigneActive%=1 then Exit_sub
      LigneActive% = LigneActive% - 1
      grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
    case 39: ' flèche à droite
      if ColonneActive%=LargeurEtage% then exit_sub
      ColonneActive% = ColonneActive% + 1
      grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
    case 102: ' flèche à droite
      if ColonneActive%=LargeurEtage% then exit_sub
      ColonneActive% = ColonneActive% + 1
      grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
    case 40: ' flèche en bas
      if LigneActive%=HauteurEtage% then Exit_sub
      LigneActive% = LigneActive% + 1
      grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
    case 98: ' flèche en bas
      if LigneActive%=HauteurEtage% then Exit_sub
      LigneActive% = LigneActive% + 1
      grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
  end_select
end_sub

sub NombreEtages()
'  if JeuEnCours%=0 then exit_sub
  inactive 0
  position no_SaisieNombreEtages%+21,NombreEtages%
  show no_SaisieNombreEtages%
  set_focus no_SaisieNombreEtages%+21
end_sub

sub Saisie2Valider()
  dim_local n%
  n% = position(no_SaisieNombreEtages%+21)
  if n%<NombreEtages%
    if message_confirmation_yes_no("Vous allez perdre des étages. Continuer ?")<>1 then exit_sub
  end_if
  NombreEtages% = n%
  GenererEtages(0)
  MenuDesEtages()
  hide no_SaisieNombreEtages%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub Saisie2Abandonner()
  hide no_SaisieNombreEtages%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub saisie3()
  dim_local no%
  no% = no_SaisieDimensionsEtages%
  form no% : hide no% : height no%,180 : width no%,200 : caption no%,"Saisie"
    border_hide no% : color no%,255,200,200
    top no%,(screen_y-height(no%))/2 : left no%,(screen_x-width(no%))/2
  no% = no% + 1 : alpha no% : parent no%,no_SaisieDimensionsEtages%
    top no%,20 : left no%,20 : caption no%,"Largeur des étages:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieDimensionsEtages%
    top no%,50 : left no%,20 : caption no%,"Hauteur des étages:"
  no% = no% + 1 : button no% : parent no%,no_SaisieDimensionsEtages%
    top no%,140 : left no%,20 : caption no%,"Valider" : on_click no%,Saisie3Valider
  no% = no% + 1 : button no% : parent no%,no_SaisieDimensionsEtages%
    top no%,140 : left no%,120 : caption no%,"Abandonner" : on_click no%,Saisie3Abandonner
  no% = no_SaisieDimensionsEtages% + 20
  no% = no% + 1 : spin no% : parent no%,no_SaisieDimensionsEtages% : width no%,60 : ' no_SaisieDimensionsEtages%+21
    top no%,20 : left no%,130 : min no%,min_LargeurEtage% : max no%,max_LargeurEtage%
  no% = no% + 1 : spin no% : parent no%,no_SaisieDimensionsEtages% : width no%,60 : ' no_SaisieDimensionsEtages%+22
    top no%,50 : left no%,130 : min no%,min_HauteurEtage% : max no%,max_HauteurEtage%
end_sub

sub DimensionsEtages()
'  if JeuEnCours%=0 then exit_sub
  inactive 0
  position no_SaisieDimensionsEtages%+21,LargeurEtage%
  position no_SaisieDimensionsEtages%+22,HauteurEtage%
  show no_SaisieDimensionsEtages%
  set_focus no_SaisieDimensionsEtages%+21
end_sub

sub Saisie3Valider()
  LargeurEtage% = position(no_SaisieDimensionsEtages%+21)
  HauteurEtage% = position(no_SaisieDimensionsEtages%+22)
  if JeuEnCours%=0
    defaut_LargeurEtage% = position(no_SaisieDimensionsEtages%+21)
    defaut_HauteurEtage% = position(no_SaisieDimensionsEtages%+22)
  end_if
  GenererEtages(0)
  hide no_SaisieDimensionsEtages%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub Saisie3Abandonner()
  hide no_SaisieDimensionsEtages%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub saisie4()
  dim_local no%
  no% = no_SaisieDimensionsCellules%
  form no% : hide no% : height no%,180 : width no%,200 : caption no%,"Saisie"
    border_hide no% : color no%,255,200,200
    top no%,(screen_y-height(no%))/2 : left no%,(screen_x-width(no%))/2
  no% = no% + 1 : alpha no% : parent no%,no_SaisieDimensionsCellules%
    top no%,20 : left no%,20 : caption no%,"Largeur des étages:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieDimensionsCellules%
    top no%,50 : left no%,20 : caption no%,"Hauteur des étages:"
  no% = no% + 1 : button no% : parent no%,no_SaisieDimensionsCellules%
    top no%,140 : left no%,20 : caption no%,"Valider" : on_click no%,Saisie4Valider
  no% = no% + 1 : button no% : parent no%,no_SaisieDimensionsCellules%
    top no%,140 : left no%,120 : caption no%,"Abandonner" : on_click no%,Saisie4Abandonner
  no% = no_SaisieDimensionsCellules% + 20
  no% = no% + 1 : spin no% : parent no%,no_SaisieDimensionsCellules% : width no%,60 : ' no_SaisieDimensionsCellules%+21
    top no%,20 : left no%,130 : min no%,min_LargeurCellule% : max no%,max_LargeurCellule%
  no% = no% + 1 : spin no% : parent no%,no_SaisieDimensionsCellules% : width no%,60 : ' no_SaisieDimensionsCellules%+22
    top no%,50 : left no%,130 : min no%,min_HauteurCellule% : max no%,max_HauteurCellule%
end_sub

sub DimensionsCellules()
'  if JeuEnCours%=0 then exit_sub
  inactive 0
  position no_SaisieDimensionsCellules%+21,LargeurCellule%
  position no_SaisieDimensionsCellules%+22,HauteurCellule%
  show no_SaisieDimensionsCellules%
  set_focus no_SaisieDimensionsCellules%+21
end_sub

sub Saisie4Valider()
  if JeuEnCours%=0
    defaut_LargeurCellule% = position(no_SaisieDimensionsCellules%+21)
    defaut_HauteurCellule% = position(no_SaisieDimensionsCellules%+22)
  end_if
  LargeurCellule% = position(no_SaisieDimensionsCellules%+21)
  HauteurCellule% = position(no_SaisieDimensionsCellules%+22)
  hide no_SaisieDimensionsCellules%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub Saisie4Abandonner()
  hide no_SaisieDimensionsCellules%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub Apropos()
  dim_local s$, crlf$
  crlf$ = chr$(13) + chr$(10)
  s$ = "Génération d'un monde 2D"+crlf$+crlf$
  s$ = s$ + "Version: 1.00"+crlf$+crlf$
  s$ = s$ + "Auteur: Klaus"+crlf$+crlf$
  s$ = s$ + "Créé le: 12/02/2017"
  message s$
end_sub

Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Oscaribout



Nombre de messages : 49
Date d'inscription : 29/12/2016

MessageSujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D   Dim 12 Fév 2017 - 14:29

J'interviens car dans les exemples sur "Mario" j'ai remarqué aussi que si on avait ON_KEY_DOWN sur un objet, dans mon programme SCANCODE ne fonctionnait pas. Tu as posté pour un bug, mais comme il faudrait que je retrouve comment j'ai procédé, et sans exemple, je m'abstiens.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 466
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D   Lun 13 Fév 2017 - 1:16

@Klaus
Parfaitement d'accord avec toi, il y bien un bug. Cependant, tu peux utiliser les touches flèches normalement en le contounant de cette manière:
Code:
label clic, key, ukey

full_space 0
grid 1 : full_space 1 : grid_row 1,30 : grid_column 1,50
grid_row_height 1,12 : grid_column_width 1,12
 on_click 1,clic
 on_key_down 1,key
 on_key_up 1,ukey
set_focus 1
end

clic:
  caption 0,"clic "+str$(mouse_x_left_down(1))+","+str$(mouse_y_left_down(1))
return

key:
  off_click 1
  caption 0,"key "+str$(scancode)
'  on_click 1,clic
return

ukey:
  on_click 1,clic
return
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D   Lun 13 Fév 2017 - 2:46

Merci, Silverman. Ton astuce est intéressante. Dans le code posté, ça marche bien. Cependant, dans mon programme, lorsque je fais le cycle normal:
- clic gauche dans une cellule ==> la fenêtre de saisie apparaît
- je saisis un caractère, disons "d"
- je clique sur le bouton "Valider" ==> la fenêtre de saisie est cachée, et le "d" est affiché dans la bonne cellule

MAIS:
si maintenant je frappe unt touche quelconque, en fait, pas seulement les flèches, alors, lors de la première frappe, le scancode est celui du caractère saisi dans la fenêtre de saisie, donc 68 dans l'exemple donné. Et c'est seulement lors de la deuxième frappe que le scancode est celui de la touche frappée. Il en est ainsi pour toutes les touches, pas seulement les flèches. Et, le comble, c'est que je n'arrive pas à reproduire cet effet dans ton code... mais je continue à chercher !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D   Lun 13 Fév 2017 - 3:12

Bon, j'ai trouvé. Au moment de valider la fenêtre de saisie qui apparaît lors d'un clic dans une cellule, je crée une variable locale de type chaîne et j'y charge une chaîne utilisant scancode, de la manière suivante:
Code:
sub Saisie1Valider()
  dim_local s$ : ' <========= variable bidon
  CodeActif$    = text$(no_SaisieCellule%+24)
  LigneActive%  = position(no_SaisieCellule%+22)
  ColonneActive% = position(no_SaisieCellule%+23)
  grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
  hide no_SaisieCellule%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
  s$ = "write scan="+str$(scancode) : ' <========= bidon, juste pour contourner le bug !
end_sub

Ainsi, en employant ta méthode et avec ce petit truc en plus, je n'ai plus de problème ! C'est tout de même fort de café, le comportement de scancode !

Enfin, quoi qu'il en soit, voici la version corrigée et opérationnelle:
Code:
' demo_generer_monde_pour_jeu_de_plateau.bas

labels()
constantes()
variables()
GenererDefauts()
invisibles()
form0()
saisie1()    : ' saisie d'une cellule
saisie2()    : ' saisie du nombre d'étages
saisie3()    : ' saisie des dimensions des étages
saisie4()    : ' saisie des dimensions des cellules
menus()
MenuDesEtages()

end

sortir:
  sortir()
  return
 
NouveauJeu:
  NouveauJeu()
  return
 
FermerJeu:
  FermerJeu()
  return
 
EnregistrerJeu:
  EnregistrerJeu()
  return
 
EnregistrerJeuSous:
  EnregistrerJeuSous()
  return
 
OuvrirJeu:
  OuvrirJeu()
  return
 
SelectionnerEtage:
  SelectionnerEtage()
  return
 
ClicEtage:
  ClicEtage()
  return
 
Saisie1Abandonner:
  Saisie1Abandonner()
  return

Saisie1Valider:
  Saisie1Valider()
  return
 
KeyEtage:
  KeyEtage()
  return

KeyUpEtage:
  KeyUpEtage()
  return
 
NombreEtages:
  NombreEtages()
  return

Saisie2Abandonner:
  Saisie2Abandonner()
  return

Saisie2Valider:
  Saisie2Valider()
  return
 
DimensionsEtages:
  DimensionsEtages()
  return

Saisie3Abandonner:
  Saisie3Abandonner()
  return

Saisie3Valider:
  Saisie3Valider()
  return

DimensionsCellules:
  DimensionsCellules()
  return

Saisie4Abandonner:
  Saisie4Abandonner()
  return

Saisie4Valider:
  Saisie4Valider()
  return
 
Apropos:
  Apropos()
  return

sub labels()
  label sortir, NouveauJeu, FermerJeu, EnregistrerJeu, EnregistrerJeuSous, OuvrirJeu
  label SelectionnerEtage, ClicEtage, Saisie1Valider, Saisie1Abandonner, KeyEtage, Apropos
  label KeyUpEtage
  label NombreEtages, Saisie2Valider, Saisie2Abandonner
  label DimensionsEtages, Saisie3Valider, Saisie3Abandonner
  label DimensionsCellules, Saisie4Valider, Saisie4Abandonner
end_sub

sub constantes()
  ' dimensions d'une unité graphique en pixels
  dim defaut_LargeurCellule% : defaut_LargeurCellule% =  20
    dim min_LargeurCellule% :    min_LargeurCellule% =  5
    dim max_LargeurCellule% :    max_LargeurCellule% = 100
  dim defaut_HauteurCellule% : defaut_HauteurCellule% =  20
    dim min_HauteurCellule% :    min_HauteurCellule% =  5
    dim max_HauteurCellule% :    max_HauteurCellule% = 100
  ' dimensions des étages (en nombre de cellules)
  dim defaut_LargeurEtage% : defaut_LargeurEtage% =  50
    dim min_LargeurEtage% :    min_LargeurEtage% =  10
    dim max_LargeurEtage% :    max_LargeurEtage% = 1000
  dim defaut_HauteurEtage% : defaut_HauteurEtage% =  50
    dim min_HauteurEtage% :    min_HauteurEtage% =  10
    dim max_HauteurEtage% :    max_HauteurEtage% = 1000
  ' nombe d'étages superposés
  dim defaut_NombreEtages% : defaut_NombreEtages% =  3
    dim min_NombreEtages% :    min_NombreEtages% =  1
    dim max_NombreEtages% :    max_NombreEtages% = 20
  ' numéro d'objet de base pour les menus des étages (+1, +2, ...)
  dim base_MenuEtage%      : base_MenuEtage% = 1000
  ' numéro d'objet de base pour les grids des étages (+1, +2, ...)
  dim base_GridEtage%      : base_GridEtage% = 2000
  ' numéro d'objet de la fenêtre de saisie d'une cellule
  dim no_SaisieCellule%    : no_SaisieCellule% = 3000
  ' numéro d'objet de la fenêtre de saisie du nombre d'étages
  dim no_SaisieNombreEtages%    : no_SaisieNombreEtages% = 3100
  ' numéro d'objet de la fenêtre de saisie des dimsions des étages
  dim no_SaisieDimensionsEtages% : no_SaisieDimensionsEtages% = 3200
  ' numéro d'objet de la fenêtre de saisie des dimsions des cellules
  dim no_SaisieDimensionsCellules% : no_SaisieDimensionsCellules% = 3300
end_sub

sub variables()
  ' variables techniques
  dim no%, no_OpenDialog%, no_SaveDialog%, no_parent_menu_etages%
 
  ' variables de gestion
  dim JeuEnCours%          : ' flag 1=la définition d'un jeu est en cours
  dim NomDuJeu$            : ' le nom du jeu
  dim DossierDuJeu$        : ' le dossier dans lequel je jeu réside
  dim EtageSelectionne%    : ' numéro de l'étage sélectionné
  dim CodeActif$          : ' dernier code saisie pour une cellule
  dim LigneActive%        : '  et son numéro de ligne
  dim ColonneActive%      : '  et son numéro de colonne

  ' variables à initialiser avec des valeurs par défaut
  dim LargeurCellule%      : ' dimensions actuelles des cellules graphiques en pixels
  dim HauteurCellule%
  dim LargeurEtage%        : ' dimensions actuelles des étages en nombre de cellules
  dim HauteurEtage%
  dim NombreEtages%        : ' nombre actuel des étages
end_sub

sub invisibles()
  no% = no% + 1 : open_dialog no% : no_OpenDialog% = no%
  no% = no% + 1 : save_dialog no% : no_SaveDialog% = no%
end_sub

sub form0()
  full_space 0
  AfficherCaption()
end_sub

sub menus()
  dim_local no1%, no2%
  no% = no% + 1 : main_menu no% : no1% = no%
  no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Jeux"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau"              : on_click no%,NouveauJeu
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..."            : on_click no%,OuvrirJeu
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer"          : on_click no%,EnregistrerJeu
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..."  : on_click no%,EnregistrerJeuSous
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer"                : on_click no%,FermerJeu
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir"                : on_click no%,sortir
  no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Edition" : no_parent_menu_etages% = no%
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Dimensions des cellules"  : on_click no%,DimensionsCellules
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Dimensions des étages" : on_click no%,DimensionsEtages
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nombre d'étages"      : on_click no%,NombreEtages
  no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Aide"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"A propos"              : on_click no%,Apropos
end_sub



sub NouveauJeu()
  if JeuEnCours%=1
    if message_confirmation_yes_no("Une définition d'un jeu est en cours. Ecarter ?")<>1 then exit_sub
  end_if
  JeuEnCours% = 1
  GenererDefauts()
  MenuDesEtages()
  NomDuJeu$ = ""
  AfficherCaption()
  DossierDuJeu$ = dir_current$
end_sub

sub FermerJeu()
  if JeuEnCours%=1
    if message_confirmation_yes_no("Une définition d'un jeu est en cours. Ecarter ?")<>1 then exit_sub
  end_if
  JeuEnCours% = 0
  NomDuJeu$ = ""
  DossierDuJeu$ = dir_current$
  AfficherCaption()
end_sub

sub Sortir()
  if JeuEnCours%=1
    if message_confirmation_yes_no("Une définition d'un jeu est en cours. Ecarter ?")<>1 then exit_sub
  end_if
  terminate
end_sub

sub GenererDefauts()
  LargeurCellule%  = defaut_LargeurCellule%
  HauteurCellule%  = defaut_HauteurCellule%
  LargeurEtage%    = defaut_LargeurEtage%
  HauteurEtage%    = defaut_HauteurEtage%
  NombreEtages%    = defaut_NombreEtages%
  EtageSelectionne% = 1
  CodeActif$ = ""
  GenererEtages(1)
end_sub

sub GenererEtages(vider%)
  dim_local i%, ne%
  for i%=1 to NombreEtages%
    ne% = base_GridEtage% + i%
    if object_exists(ne%)=1
      grid_row ne%,HauteurEtage%+1 : grid_column ne%,LargeurEtage%
      grid_column_width ne%,12 : grid_row_height ne%,12
      if vider%=1 then grid_clear ne%,HauteurEtage%+1,LargeurEtage%
    else
      grid ne% : full_space ne% : hide ne%
        grid_row ne%,HauteurEtage% : grid_column ne%,LargeurEtage%
        grid_row_fixed ne%,0 : grid_column_fixed ne%,0
        grid_column_width ne%,12 : grid_row_height ne%,12
        on_click ne%,ClicEtage : on_key_down ne%,KeyEtage : on_key_up ne%,KeyUpEtage
    end_if
  next i%
  ne% = base_GridEtage% + NombreEtages% + 1
  while object_exists(ne%)=1
    delete ne%
    ne% = ne% + 1
  end_while
  show base_GridEtage%+EtageSelectionne%
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub EnregistrerJeu()
  if JeuEnCours%=0
    message "Il n'y a aucune définition en cours."
    exit_sub
  end_if
  if NomDuJeu$=""
    message "Utiliser <Enregistrer sous...>."
    exit_sub
  end_if
  EnregistrerInterne()
end_sub

sub EnregistrerJeuSous()
  dim_local f$, p$, n$, e$
  if JeuEnCours%=0
    message "Il n'y a aucune définition en cours."
    exit_sub
  end_if
  filter no_SaveDialog%,"Projet de jeu de plateau (*.pjp)|*.pjp"
  f$ = file_name$(no_SaveDialog%)
  if f$="_" then exit_sub
  p$ = file_extract_path$(f$)
  n$ = file_extract_name$(f$)
  e$ = file_extract_extension$(f$)
  n$ = left$(n$,len(n$)-len(e$))
  if lower$(e$)<>".pjp" then e$ = ".pjp"
  f$ = p$ + n$ + e$
  if file_exists(f$)=1
    if message_confirmation_yes_no("Ce fichier existe déjà. Remplacer ?")<>1 then exit_sub
  end_if
  NomDuJeu$ = n$
  DossierDuJeu$ = p$
  AfficherCaption()
  EnregistrerInterne()
  end_sub
 
sub EnregistrerInterne()
  dim_local i%, il%, ic%, f$
  ' enregister le jeu
  f$ = DossierDuJeu$ + NomDuJeu$ + ".pjp"
  if file_exists(f$)=1 then file_delete f$
  file_open_write 1,f$
  file_writeln 1,"Jeu Plateau"
  file_writeln 1,NomDuJeu$
  file_writeln 1,str$(LargeurCellule%)
  file_writeln 1,str$(HauteurCellule%)
  file_writeln 1,str$(LargeurEtage%)
  file_writeln 1,str$(HauteurEtage%)
  file_writeln 1,str$(NombreEtages%)
  for i%=1 to NombreEtages%
    ' pour l'étage i%
    file_writeln 1,"Etage "+str$(i%)
    for il%=1 to HauteurEtage%
      for ic%=1 to LargeurEtage%
        file_writeln 1,grid_read$(base_GridEtage%+i%,il%,ic%)
      next ic%
    next il%
  next i%
  file_writeln 1,"Fin"
  file_close 1
  message "Sauvegarde effectuée."
end_sub

sub OuvrirJeu()
  dim_local f$, p$, n$, e$, s$, v%, i%, il%, ic%
  if JeuEnCours%=1
    if message_confirmation_yes_no("Une définition d'un jeu est en cours. Ecarter ?")<>1 then exit_sub
  end_if
  filter no_OpenDialog%,"Projet de jeu de plateau (*.pjp)|*.pjp"
  f$ = file_name$(no_OpenDialog%)
  if f$="_" then exit_sub
  p$ = file_extract_path$(f$)
  n$ = file_extract_name$(f$)
  e$ = file_extract_extension$(f$)
  n$ = left$(n$,len(n$)-len(e$))
  if lower$(e$)<>".pjp" then e$ = ".pjp"
  f$ = p$ + n$ + e$
  if file_exists(f$)=0
    message "Ce fichier est introuvable."
    exit_sub
  end_if
  ' charger le jeu
  file_open_read 1,f$
  ' --- entête du fichier
  file_readln 1,s$
  if s$<>"Jeu Plateau"
    message "Ce n'est pas une sauvegarde d'un projet de jeu."
    file_close 1
    exit_sub
  end_if
  ' --- nom du jeu
  file_readln 1,s$
  if s$<>n$
    message "Le nom du jeu ne correspond pas au fichier."
    file_close 1
    exit_sub
  end_if
  JeuEnCours% = 0
  ' --- largeur des cellules
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_LargeurCellule%) or (v%>max_LargeurCellule%)
    JeuCorrompu()
    exit_sub
  end_if
  LargeurCellule% = v%
  ' --- hauteur des cellules
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_HauteurCellule%) or (v%>max_HauteurCellule%)
    JeuCorrompu()
    exit_sub
  end_if
  HauteurCellule% = v%
  ' --- largeur des étages
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_LargeurEtage%) or (v%>max_LargeurEtage%)
    JeuCorrompu()
    exit_sub
  end_if
  LargeurEtage% = v%
  ' --- hauteur des étages
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_HauteurEtage%) or (v%>max_HauteurEtage%)
    JeuCorrompu()
    exit_sub
  end_if
  HauteurEtage% = v%
  ' --- nombre d'étages
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_NombreEtages%) or (v%>max_NombreEtages%)
    JeuCorrompu()
    exit_sub
  end_if
  NombreEtages% = v%
  for i%=1 to NombreEtages%
    ' pour l'étage i%
    file_readln 1,s$
    if s$<>"Etage "+str$(i%)
      JeuCorrompu()
      exit_sub
    end_if
    for il%=1 to HauteurEtage%
      for ic%=1 to LargeurEtage%
        file_readln 1,s$
        grid_write base_GridEtage%+i%,il%,ic%,s$
      next ic%
    next il%
  next i%
  file_readln 1,s$
  if s$<>"Fin"
    JeuCorrompu()
    exit_sub
  end_if
  file_close 1
  NomDuJeu$ = n$
  DossierDuJeu$ = p$
  AfficherCaption()
  GenererEtages(0)
  MenuDesEtages()
  JeuEnCours% = 1
end_sub

sub JeuCorrompu()
  message "Le projet de jeu est corrompu."
  file_close 1
  JeuEnCours% = 0
  NomDuJeu$ = ""
  DossierDuJeu$ = dir_current$
  GenererDefauts()
  AfficherCaption()
  MenuDesEtages()
end_sub

sub AfficherCaption()
  if NomDuJeu$=""
    caption 0,"Création de Jeu - <Nouveau>  Cellule="+str$(LargeurCellule%)+"x"+str$(HauteurCellule%)+"  Etage="+str$(LargeurEtage%)+"x"+str$(HauteurEtage%)+"  "+str$(EtageSelectionne%)+"/"+str$(NombreEtages%)+" étage(s)"
  else
    caption 0,"Création de Jeu - <"+NomDuJeu$+">  Cellule="+str$(LargeurCellule%)+"x"+str$(HauteurCellule%)+"  Etage="+str$(LargeurEtage%)+"x"+str$(HauteurEtage%)+"  "+str$(EtageSelectionne%)+"/"+str$(NombreEtages%)+" étage(s)"
  end_if
end_sub

sub MenuDesEtages()
  dim_local ne%, i%
  ne% = base_MenuEtage% + 1
  while object_exists(ne%)=1
    delete ne%
    ne% = ne% + 1
  end_while
  for i%=1 to NombreEtages%
    ne% = base_MenuEtage% + i%
    sub_menu ne% : parent ne%,no_parent_menu_etages% : caption ne%,"Etage "+str$(i%) : on_click ne%,SelectionnerEtage
  next i%
  mark_on base_MenuEtage%+EtageSelectionne%
end_sub

sub SelectionnerEtage()
  mark_off base_MenuEtage%+EtageSelectionne%
  hide base_GridEtage%+EtageSelectionne%
  EtageSelectionne% = number_click - base_MenuEtage%
  mark_on base_MenuEtage%+EtageSelectionne%
  show base_GridEtage%+EtageSelectionne%
  set_focus base_GridEtage%+EtageSelectionne%
  AfficherCaption()
end_sub

sub saisie1()
  dim_local no%
  no% = no_SaisieCellule%
  form no% : hide no% : height no%,180 : width no%,200 : caption no%,"Saisie"
    border_hide no% : color no%,255,200,200
    top no%,(screen_y-height(no%))/2 : left no%,(screen_x-width(no%))/2
  no% = no% + 1 : alpha no% : parent no%,no_SaisieCellule%
    top no%,20 : left no%,20 : caption no%,"Etage:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieCellule%
    top no%,50 : left no%,20 : caption no%,"Ligne:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieCellule%
    top no%,80 : left no%,20 : caption no%,"Colonne:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieCellule%
    top no%,110 : left no%,20 : caption no%,"Contenu:"
  no% = no% + 1 : button no% : parent no%,no_SaisieCellule%
    top no%,140 : left no%,20 : caption no%,"Valider" : on_click no%,Saisie1Valider
  no% = no% + 1 : button no% : parent no%,no_SaisieCellule%
    top no%,140 : left no%,120 : caption no%,"Abandonner" : on_click no%,Saisie1Abandonner
  no% = no_SaisieCellule% + 20
  no% = no% + 1 : spin no% : parent no%,no_SaisieCellule% : width no%,60 : inactive no% : ' no_SaisieCellule%+21
    top no%,20 : left no%,120 : max no%,20000
  no% = no% + 1 : spin no% : parent no%,no_SaisieCellule% : width no%,60 : inactive no% : ' no_SaisieCellule%+22
    top no%,50 : left no%,120 : max no%,20000
  no% = no% + 1 : spin no% : parent no%,no_SaisieCellule% : width no%,60 : inactive no% : ' no_SaisieCellule%+23
    top no%,80 : left no%,120 : max no%,20000
  no% = no% + 1 : edit no% : parent no%,no_SaisieCellule% : width no%,60                : ' no_SaisieCellule%+24
    top no%,110 : left no%,120
end_sub

sub ClicEtage()
  dim_local ne%, x%, y%, l%, c%
  if JeuEnCours%=0 then exit_sub
  ne% = number_click
  x% = mouse_x_left_down(ne%)
  y% = mouse_y_left_down(ne%)
  c% = grid_x_to_column(ne%,x%)
  l% = grid_y_to_row(ne%,y%)
  position no_SaisieCellule%+21,ne%-base_GridEtage%
  position no_SaisieCellule%+22,l%
  position no_SaisieCellule%+23,c%
  text no_SaisieCellule%+24,grid_read$(ne%,l%,c%)
  inactive 0
  show no_SaisieCellule%
  set_focus no_SaisieCellule%+24
  LigneActive% = l%
  ColonneActive% = c%
end_sub

sub Saisie1Valider()
  dim_local s$
  CodeActif$    = text$(no_SaisieCellule%+24)
  LigneActive%  = position(no_SaisieCellule%+22)
  ColonneActive% = position(no_SaisieCellule%+23)
  grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
  hide no_SaisieCellule%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
  s$ = "write scan="+str$(scancode)
end_sub

sub Saisie1Abandonner()
  hide no_SaisieCellule%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub saisie2()
  dim_local no%
  no% = no_SaisieNombreEtages%
  form no% : hide no% : height no%,180 : width no%,200 : caption no%,"Saisie"
    border_hide no% : color no%,255,200,200
    top no%,(screen_y-height(no%))/2 : left no%,(screen_x-width(no%))/2
  no% = no% + 1 : alpha no% : parent no%,no_SaisieNombreEtages%
    top no%,20 : left no%,20 : caption no%,"Nombre d'étages:"
  no% = no% + 1 : button no% : parent no%,no_SaisieNombreEtages%
    top no%,140 : left no%,20 : caption no%,"Valider" : on_click no%,Saisie2Valider
  no% = no% + 1 : button no% : parent no%,no_SaisieNombreEtages%
    top no%,140 : left no%,120 : caption no%,"Abandonner" : on_click no%,Saisie2Abandonner
  no% = no_SaisieNombreEtages% + 20
  no% = no% + 1 : spin no% : parent no%,no_SaisieNombreEtages% : width no%,60 : ' no_SaisieNombreEtages%+21
    top no%,20 : left no%,120 : min no%,1 : max no%,100
end_sub

sub KeyEtage()
  dim_local ne%, x%, y%, l%, c%, sc%
  if JeuEnCours%=0 then exit_sub
  if LigneActive%=0 then exit_sub
  off_click number_key_down
  sc% = scancode
caption 0,"scan "+str$(sc%)
  select sc%  : ' scancode
    case 37: ' flèche à gauche
      if ColonneActive%=1 then exit_sub
      ColonneActive% = ColonneActive% - 1
      grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
    case 100: ' flèche à gauche
      if ColonneActive%=1 then exit_sub
      ColonneActive% = ColonneActive% - 1
      grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
    case 38: ' flèche en haut
      if LigneActive%=1 then Exit_sub
      LigneActive% = LigneActive% - 1
      grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
    case 104: ' flèche en haut
      if LigneActive%=1 then Exit_sub
      LigneActive% = LigneActive% - 1
      grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
    case 39: ' flèche à droite
      if ColonneActive%=LargeurEtage% then exit_sub
      ColonneActive% = ColonneActive% + 1
      grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
    case 102: ' flèche à droite
      if ColonneActive%=LargeurEtage% then exit_sub
      ColonneActive% = ColonneActive% + 1
      grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
    case 40: ' flèche en bas
      if LigneActive%=HauteurEtage% then Exit_sub
      LigneActive% = LigneActive% + 1
      grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
    case 98: ' flèche en bas
      if LigneActive%=HauteurEtage% then Exit_sub
      LigneActive% = LigneActive% + 1
      grid_write base_GridEtage%+position(no_SaisieCellule%+21),LigneActive%,ColonneActive%,CodeActif$
  end_select
end_sub

sub KeyUpEtage()
  on_click number_key_up,ClicEtage
end_sub

sub NombreEtages()
'  if JeuEnCours%=0 then exit_sub
  inactive 0
  position no_SaisieNombreEtages%+21,NombreEtages%
  show no_SaisieNombreEtages%
  set_focus no_SaisieNombreEtages%+21
end_sub

sub Saisie2Valider()
  dim_local n%
  n% = position(no_SaisieNombreEtages%+21)
  if n%<NombreEtages%
    if message_confirmation_yes_no("Vous allez perdre des étages. Continuer ?")<>1 then exit_sub
  end_if
  NombreEtages% = n%
  GenererEtages(0)
  MenuDesEtages()
  hide no_SaisieNombreEtages%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub Saisie2Abandonner()
  hide no_SaisieNombreEtages%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub saisie3()
  dim_local no%
  no% = no_SaisieDimensionsEtages%
  form no% : hide no% : height no%,180 : width no%,200 : caption no%,"Saisie"
    border_hide no% : color no%,255,200,200
    top no%,(screen_y-height(no%))/2 : left no%,(screen_x-width(no%))/2
  no% = no% + 1 : alpha no% : parent no%,no_SaisieDimensionsEtages%
    top no%,20 : left no%,20 : caption no%,"Largeur des étages:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieDimensionsEtages%
    top no%,50 : left no%,20 : caption no%,"Hauteur des étages:"
  no% = no% + 1 : button no% : parent no%,no_SaisieDimensionsEtages%
    top no%,140 : left no%,20 : caption no%,"Valider" : on_click no%,Saisie3Valider
  no% = no% + 1 : button no% : parent no%,no_SaisieDimensionsEtages%
    top no%,140 : left no%,120 : caption no%,"Abandonner" : on_click no%,Saisie3Abandonner
  no% = no_SaisieDimensionsEtages% + 20
  no% = no% + 1 : spin no% : parent no%,no_SaisieDimensionsEtages% : width no%,60 : ' no_SaisieDimensionsEtages%+21
    top no%,20 : left no%,130 : min no%,min_LargeurEtage% : max no%,max_LargeurEtage%
  no% = no% + 1 : spin no% : parent no%,no_SaisieDimensionsEtages% : width no%,60 : ' no_SaisieDimensionsEtages%+22
    top no%,50 : left no%,130 : min no%,min_HauteurEtage% : max no%,max_HauteurEtage%
end_sub

sub DimensionsEtages()
'  if JeuEnCours%=0 then exit_sub
  inactive 0
  position no_SaisieDimensionsEtages%+21,LargeurEtage%
  position no_SaisieDimensionsEtages%+22,HauteurEtage%
  show no_SaisieDimensionsEtages%
  set_focus no_SaisieDimensionsEtages%+21
end_sub

sub Saisie3Valider()
  LargeurEtage% = position(no_SaisieDimensionsEtages%+21)
  HauteurEtage% = position(no_SaisieDimensionsEtages%+22)
  if JeuEnCours%=0
    defaut_LargeurEtage% = position(no_SaisieDimensionsEtages%+21)
    defaut_HauteurEtage% = position(no_SaisieDimensionsEtages%+22)
  end_if
  GenererEtages(0)
  hide no_SaisieDimensionsEtages%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub Saisie3Abandonner()
  hide no_SaisieDimensionsEtages%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub saisie4()
  dim_local no%
  no% = no_SaisieDimensionsCellules%
  form no% : hide no% : height no%,180 : width no%,200 : caption no%,"Saisie"
    border_hide no% : color no%,255,200,200
    top no%,(screen_y-height(no%))/2 : left no%,(screen_x-width(no%))/2
  no% = no% + 1 : alpha no% : parent no%,no_SaisieDimensionsCellules%
    top no%,20 : left no%,20 : caption no%,"Largeur des étages:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieDimensionsCellules%
    top no%,50 : left no%,20 : caption no%,"Hauteur des étages:"
  no% = no% + 1 : button no% : parent no%,no_SaisieDimensionsCellules%
    top no%,140 : left no%,20 : caption no%,"Valider" : on_click no%,Saisie4Valider
  no% = no% + 1 : button no% : parent no%,no_SaisieDimensionsCellules%
    top no%,140 : left no%,120 : caption no%,"Abandonner" : on_click no%,Saisie4Abandonner
  no% = no_SaisieDimensionsCellules% + 20
  no% = no% + 1 : spin no% : parent no%,no_SaisieDimensionsCellules% : width no%,60 : ' no_SaisieDimensionsCellules%+21
    top no%,20 : left no%,130 : min no%,min_LargeurCellule% : max no%,max_LargeurCellule%
  no% = no% + 1 : spin no% : parent no%,no_SaisieDimensionsCellules% : width no%,60 : ' no_SaisieDimensionsCellules%+22
    top no%,50 : left no%,130 : min no%,min_HauteurCellule% : max no%,max_HauteurCellule%
end_sub

sub DimensionsCellules()
'  if JeuEnCours%=0 then exit_sub
  inactive 0
  position no_SaisieDimensionsCellules%+21,LargeurCellule%
  position no_SaisieDimensionsCellules%+22,HauteurCellule%
  show no_SaisieDimensionsCellules%
  set_focus no_SaisieDimensionsCellules%+21
end_sub

sub Saisie4Valider()
  if JeuEnCours%=0
    defaut_LargeurCellule% = position(no_SaisieDimensionsCellules%+21)
    defaut_HauteurCellule% = position(no_SaisieDimensionsCellules%+22)
  end_if
  LargeurCellule% = position(no_SaisieDimensionsCellules%+21)
  HauteurCellule% = position(no_SaisieDimensionsCellules%+22)
  hide no_SaisieDimensionsCellules%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub Saisie4Abandonner()
  hide no_SaisieDimensionsCellules%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub Apropos()
  dim_local s$, crlf$
  crlf$ = chr$(13) + chr$(10)
  s$ = "Génération d'un monde 2D"+crlf$+crlf$
  s$ = s$ + "Version: 1.01"+crlf$+crlf$
  s$ = s$ + "Auteur: Klaus"+crlf$+crlf$
  s$ = s$ + "Créé le: 13/02/2017"
  message s$
end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D   Mar 14 Fév 2017 - 4:45

Nouvelle version:
- correction d'un bug en changeant le nombre d'étages
- ajout d'une ligne de menu Edition\Modif partout

Cette ligne est par défaut décochée. Un clic sur cette ligne la coche, un autre clic la décoche. Les menus Nouveau, Fermer et Ouvrir décochent cette ligne automatiquement.

Si cette ligne est cochée, une modification dans une cellule sera remportée automatiquement sur tous les étages, quelque soit l'étage actuel. Ceci permet de dessiner des murs identiques dans tous les étages, afin d'avoir un plan qui se superpose exactement. Cette ligne peut être cochée et décochée à tout moment.

Voici la nouvelle version:
Code:
' demo_generer_monde_pour_jeu_de_plateau.bas

labels()
constantes()
variables()
GenererDefauts()
invisibles()
form0()
saisie1()    : ' saisie d'une cellule
saisie2()    : ' saisie du nombre d'étages
saisie3()    : ' saisie des dimensions des étages
saisie4()    : ' saisie des dimensions des cellules
menus()
MenuDesEtages()

end

sortir:
  sortir()
  return
 
NouveauJeu:
  NouveauJeu()
  return
 
FermerJeu:
  FermerJeu()
  return
 
EnregistrerJeu:
  EnregistrerJeu()
  return
 
EnregistrerJeuSous:
  EnregistrerJeuSous()
  return
 
OuvrirJeu:
  OuvrirJeu()
  return
 
SelectionnerEtage:
  SelectionnerEtage()
  return
 
ClicEtage:
  ClicEtage()
  return
 
Saisie1Abandonner:
  Saisie1Abandonner()
  return

Saisie1Valider:
  Saisie1Valider()
  return
 
KeyEtage:
  KeyEtage()
  return

KeyUpEtage:
  KeyUpEtage()
  return
 
NombreEtages:
  NombreEtages()
  return

Saisie2Abandonner:
  Saisie2Abandonner()
  return

Saisie2Valider:
  Saisie2Valider()
  return
 
DimensionsEtages:
  DimensionsEtages()
  return

Saisie3Abandonner:
  Saisie3Abandonner()
  return

Saisie3Valider:
  Saisie3Valider()
  return

DimensionsCellules:
  DimensionsCellules()
  return

Saisie4Abandonner:
  Saisie4Abandonner()
  return

Saisie4Valider:
  Saisie4Valider()
  return
 
ModifPartout:
  ModifPartout()
  return
 
Apropos:
  Apropos()
  return

sub labels()
  label sortir, NouveauJeu, FermerJeu, EnregistrerJeu, EnregistrerJeuSous, OuvrirJeu
  label SelectionnerEtage, ClicEtage, Saisie1Valider, Saisie1Abandonner, KeyEtage, Apropos
  label KeyUpEtage, ModifPartout
  label NombreEtages, Saisie2Valider, Saisie2Abandonner
  label DimensionsEtages, Saisie3Valider, Saisie3Abandonner
  label DimensionsCellules, Saisie4Valider, Saisie4Abandonner
end_sub

sub constantes()
  ' dimensions d'une unité graphique en pixels
  dim defaut_LargeurCellule% : defaut_LargeurCellule% =  20
    dim min_LargeurCellule% :    min_LargeurCellule% =  5
    dim max_LargeurCellule% :    max_LargeurCellule% = 100
  dim defaut_HauteurCellule% : defaut_HauteurCellule% =  20
    dim min_HauteurCellule% :    min_HauteurCellule% =  5
    dim max_HauteurCellule% :    max_HauteurCellule% = 100
  ' dimensions des étages (en nombre de cellules)
  dim defaut_LargeurEtage% : defaut_LargeurEtage% =  50
    dim min_LargeurEtage% :    min_LargeurEtage% =  10
    dim max_LargeurEtage% :    max_LargeurEtage% = 1000
  dim defaut_HauteurEtage% : defaut_HauteurEtage% =  50
    dim min_HauteurEtage% :    min_HauteurEtage% =  10
    dim max_HauteurEtage% :    max_HauteurEtage% = 1000
  ' nombe d'étages superposés
  dim defaut_NombreEtages% : defaut_NombreEtages% =  3
    dim min_NombreEtages% :    min_NombreEtages% =  1
    dim max_NombreEtages% :    max_NombreEtages% = 20
  ' numéro d'objet de base pour les menus des étages (+1, +2, ...)
  dim base_MenuEtage%      : base_MenuEtage% = 1000
  ' numéro d'objet de base pour les grids des étages (+1, +2, ...)
  dim base_GridEtage%      : base_GridEtage% = 2000
  ' numéro d'objet de la fenêtre de saisie d'une cellule
  dim no_SaisieCellule%    : no_SaisieCellule% = 3000
  ' numéro d'objet de la fenêtre de saisie du nombre d'étages
  dim no_SaisieNombreEtages%    : no_SaisieNombreEtages% = 3100
  ' numéro d'objet de la fenêtre de saisie des dimsions des étages
  dim no_SaisieDimensionsEtages% : no_SaisieDimensionsEtages% = 3200
  ' numéro d'objet de la fenêtre de saisie des dimsions des cellules
  dim no_SaisieDimensionsCellules% : no_SaisieDimensionsCellules% = 3300
end_sub

sub variables()
  ' variables techniques
  dim no%, no_OpenDialog%, no_SaveDialog%, no_parent_menu_etages%
  dim no_ModifPartout%
 
  ' variables de gestion
  dim JeuEnCours%          : ' flag 1=la définition d'un jeu est en cours
  dim NomDuJeu$            : ' le nom du jeu
  dim DossierDuJeu$        : ' le dossier dans lequel je jeu réside
  dim EtageSelectionne%    : ' numéro de l'étage sélectionné
  dim CodeActif$          : ' dernier code saisie pour une cellule
  dim LigneActive%        : '  et son numéro de ligne
  dim ColonneActive%      : '  et son numéro de colonne
  dim ModifPartout%        : ' flag "modifications dans tous les étages"

  ' variables à initialiser avec des valeurs par défaut
  dim LargeurCellule%      : ' dimensions actuelles des cellules graphiques en pixels
  dim HauteurCellule%
  dim LargeurEtage%        : ' dimensions actuelles des étages en nombre de cellules
  dim HauteurEtage%
  dim NombreEtages%        : ' nombre actuel des étages
end_sub

sub invisibles()
  no% = no% + 1 : open_dialog no% : no_OpenDialog% = no%
  no% = no% + 1 : save_dialog no% : no_SaveDialog% = no%
end_sub

sub form0()
  full_space 0
  AfficherCaption()
end_sub

sub menus()
  dim_local no1%, no2%
  no% = no% + 1 : main_menu no% : no1% = no%
  no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Jeux"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau"              : on_click no%,NouveauJeu
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..."            : on_click no%,OuvrirJeu
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer"          : on_click no%,EnregistrerJeu
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..."  : on_click no%,EnregistrerJeuSous
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer"                : on_click no%,FermerJeu
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir"                : on_click no%,sortir
  no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Edition" : no_parent_menu_etages% = no%
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Dimensions des cellules"  : on_click no%,DimensionsCellules
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Dimensions des étages" : on_click no%,DimensionsEtages
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nombre d'étages"      : on_click no%,NombreEtages
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Modifs sur tous les étages" : on_click no%,ModifPartout
      no_ModifPartout% = no%
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
  no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Aide"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"A propos"              : on_click no%,Apropos
end_sub



sub NouveauJeu()
  if JeuEnCours%=1
    if message_confirmation_yes_no("Une définition d'un jeu est en cours. Ecarter ?")<>1 then exit_sub
  end_if
  JeuEnCours% = 1
  ModifPartout% = 0
  mark_off no_ModifPartout%
  GenererDefauts()
  MenuDesEtages()
  NomDuJeu$ = ""
  AfficherCaption()
  DossierDuJeu$ = dir_current$
end_sub

sub FermerJeu()
  if JeuEnCours%=1
    if message_confirmation_yes_no("Une définition d'un jeu est en cours. Ecarter ?")<>1 then exit_sub
  end_if
  JeuEnCours% = 0
  ModifPartout% = 0
  mark_off no_ModifPartout%
  NomDuJeu$ = ""
  DossierDuJeu$ = dir_current$
  AfficherCaption()
end_sub

sub Sortir()
  if JeuEnCours%=1
    if message_confirmation_yes_no("Une définition d'un jeu est en cours. Ecarter ?")<>1 then exit_sub
  end_if
  terminate
end_sub

sub GenererDefauts()
  LargeurCellule%  = defaut_LargeurCellule%
  HauteurCellule%  = defaut_HauteurCellule%
  LargeurEtage%    = defaut_LargeurEtage%
  HauteurEtage%    = defaut_HauteurEtage%
  NombreEtages%    = defaut_NombreEtages%
  EtageSelectionne% = 1
  CodeActif$ = ""
  GenererEtages(1)
end_sub

sub GenererEtages(vider%)
  dim_local i%, ne%
  for i%=1 to NombreEtages%
    ne% = base_GridEtage% + i%
    if object_exists(ne%)=1
      grid_row ne%,HauteurEtage%+1 : grid_column ne%,LargeurEtage% : ' hide ne%
      grid_column_width ne%,12 : grid_row_height ne%,12
      if vider%=1 then grid_clear ne%,HauteurEtage%+1,LargeurEtage%
    else
      grid ne% : full_space ne% : hide ne%
        grid_row ne%,HauteurEtage% : grid_column ne%,LargeurEtage%
        grid_row_fixed ne%,0 : grid_column_fixed ne%,0
        grid_column_width ne%,12 : grid_row_height ne%,12
        on_click ne%,ClicEtage : on_key_down ne%,KeyEtage : on_key_up ne%,KeyUpEtage
    end_if
  next i%
  ne% = base_GridEtage% + NombreEtages% + 1
  while object_exists(ne%)=1
    delete ne%
    ne% = ne% + 1
  end_while
  show base_GridEtage%+EtageSelectionne%
'  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub EnregistrerJeu()
  if JeuEnCours%=0
    message "Il n'y a aucune définition en cours."
    exit_sub
  end_if
  if NomDuJeu$=""
    message "Utiliser <Enregistrer sous...>."
    exit_sub
  end_if
  EnregistrerInterne()
end_sub

sub EnregistrerJeuSous()
  dim_local f$, p$, n$, e$
  if JeuEnCours%=0
    message "Il n'y a aucune définition en cours."
    exit_sub
  end_if
  filter no_SaveDialog%,"Projet de jeu de plateau (*.pjp)|*.pjp"
  f$ = file_name$(no_SaveDialog%)
  if f$="_" then exit_sub
  p$ = file_extract_path$(f$)
  n$ = file_extract_name$(f$)
  e$ = file_extract_extension$(f$)
  n$ = left$(n$,len(n$)-len(e$))
  if lower$(e$)<>".pjp" then e$ = ".pjp"
  f$ = p$ + n$ + e$
  if file_exists(f$)=1
    if message_confirmation_yes_no("Ce fichier existe déjà. Remplacer ?")<>1 then exit_sub
  end_if
  NomDuJeu$ = n$
  DossierDuJeu$ = p$
  AfficherCaption()
  EnregistrerInterne()
  end_sub
 
sub EnregistrerInterne()
  dim_local i%, il%, ic%, f$
  ' enregister le jeu
  f$ = DossierDuJeu$ + NomDuJeu$ + ".pjp"
  if file_exists(f$)=1 then file_delete f$
  file_open_write 1,f$
  file_writeln 1,"Jeu Plateau"
  file_writeln 1,NomDuJeu$
  file_writeln 1,str$(LargeurCellule%)
  file_writeln 1,str$(HauteurCellule%)
  file_writeln 1,str$(LargeurEtage%)
  file_writeln 1,str$(HauteurEtage%)
  file_writeln 1,str$(NombreEtages%)
  for i%=1 to NombreEtages%
    ' pour l'étage i%
    file_writeln 1,"Etage "+str$(i%)
    for il%=1 to HauteurEtage%
      for ic%=1 to LargeurEtage%
        file_writeln 1,grid_read$(base_GridEtage%+i%,il%,ic%)
      next ic%
    next il%
  next i%
  file_writeln 1,"Fin"
  file_close 1
  message "Sauvegarde effectuée."
end_sub

sub OuvrirJeu()
  dim_local f$, p$, n$, e$, s$, v%, i%, il%, ic%
  if JeuEnCours%=1
    if message_confirmation_yes_no("Une définition d'un jeu est en cours. Ecarter ?")<>1 then exit_sub
  end_if
  filter no_OpenDialog%,"Projet de jeu de plateau (*.pjp)|*.pjp"
  f$ = file_name$(no_OpenDialog%)
  if f$="_" then exit_sub
  p$ = file_extract_path$(f$)
  n$ = file_extract_name$(f$)
  e$ = file_extract_extension$(f$)
  n$ = left$(n$,len(n$)-len(e$))
  if lower$(e$)<>".pjp" then e$ = ".pjp"
  f$ = p$ + n$ + e$
  if file_exists(f$)=0
    message "Ce fichier est introuvable."
    exit_sub
  end_if
  ' charger le jeu
  file_open_read 1,f$
  ' --- entête du fichier
  file_readln 1,s$
  if s$<>"Jeu Plateau"
    message "Ce n'est pas une sauvegarde d'un projet de jeu."
    file_close 1
    exit_sub
  end_if
  ' --- nom du jeu
  file_readln 1,s$
  if s$<>n$
    message "Le nom du jeu ne correspond pas au fichier."
    file_close 1
    exit_sub
  end_if
  JeuEnCours% = 0
  ' --- largeur des cellules
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_LargeurCellule%) or (v%>max_LargeurCellule%)
    JeuCorrompu()
    exit_sub
  end_if
  LargeurCellule% = v%
  ' --- hauteur des cellules
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_HauteurCellule%) or (v%>max_HauteurCellule%)
    JeuCorrompu()
    exit_sub
  end_if
  HauteurCellule% = v%
  ' --- largeur des étages
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_LargeurEtage%) or (v%>max_LargeurEtage%)
    JeuCorrompu()
    exit_sub
  end_if
  LargeurEtage% = v%
  ' --- hauteur des étages
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_HauteurEtage%) or (v%>max_HauteurEtage%)
    JeuCorrompu()
    exit_sub
  end_if
  HauteurEtage% = v%
  ' --- nombre d'étages
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_NombreEtages%) or (v%>max_NombreEtages%)
    JeuCorrompu()
    exit_sub
  end_if
  NombreEtages% = v%
  for i%=1 to NombreEtages%
    ' pour l'étage i%
    file_readln 1,s$
    if s$<>"Etage "+str$(i%)
      JeuCorrompu()
      exit_sub
    end_if
    for il%=1 to HauteurEtage%
      for ic%=1 to LargeurEtage%
        file_readln 1,s$
        grid_write base_GridEtage%+i%,il%,ic%,s$
      next ic%
    next il%
  next i%
  file_readln 1,s$
  if s$<>"Fin"
    JeuCorrompu()
    exit_sub
  end_if
  file_close 1
  NomDuJeu$ = n$
  DossierDuJeu$ = p$
  AfficherCaption()
  GenererEtages(0)
  MenuDesEtages()
  JeuEnCours% = 1
  ModifPartout% = 0
  mark_off no_ModifPartout%
end_sub

sub JeuCorrompu()
  message "Le projet de jeu est corrompu."
  file_close 1
  JeuEnCours% = 0
  NomDuJeu$ = ""
  DossierDuJeu$ = dir_current$
  GenererDefauts()
  AfficherCaption()
  MenuDesEtages()
end_sub

sub AfficherCaption()
  if NomDuJeu$=""
    caption 0,"Création de Jeu - <Nouveau>  Cellule="+str$(LargeurCellule%)+"x"+str$(HauteurCellule%)+"  Etage="+str$(LargeurEtage%)+"x"+str$(HauteurEtage%)+"  "+str$(EtageSelectionne%)+"/"+str$(NombreEtages%)+" étage(s)"
  else
    caption 0,"Création de Jeu - <"+NomDuJeu$+">  Cellule="+str$(LargeurCellule%)+"x"+str$(HauteurCellule%)+"  Etage="+str$(LargeurEtage%)+"x"+str$(HauteurEtage%)+"  "+str$(EtageSelectionne%)+"/"+str$(NombreEtages%)+" étage(s)"
  end_if
end_sub

sub MenuDesEtages()
  dim_local ne%, i%
  ne% = base_MenuEtage% + 1
  while object_exists(ne%)=1
    delete ne%
    ne% = ne% + 1
  end_while
  for i%=1 to NombreEtages%
    ne% = base_MenuEtage% + i%
    sub_menu ne% : parent ne%,no_parent_menu_etages% : caption ne%,"Etage "+str$(i%) : on_click ne%,SelectionnerEtage
  next i%
  mark_on base_MenuEtage%+EtageSelectionne%
end_sub

sub SelectionnerEtage()
  mark_off base_MenuEtage%+EtageSelectionne%
  hide base_GridEtage%+EtageSelectionne%
  EtageSelectionne% = number_click - base_MenuEtage%
  mark_on base_MenuEtage%+EtageSelectionne%
  show base_GridEtage%+EtageSelectionne%
  set_focus base_GridEtage%+EtageSelectionne%
  AfficherCaption()
end_sub

sub saisie1()
  dim_local no%
  no% = no_SaisieCellule%
  form no% : hide no% : height no%,180 : width no%,200 : caption no%,"Saisie"
    border_hide no% : color no%,255,200,200
    top no%,(screen_y-height(no%))/2 : left no%,(screen_x-width(no%))/2
  no% = no% + 1 : alpha no% : parent no%,no_SaisieCellule%
    top no%,20 : left no%,20 : caption no%,"Etage:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieCellule%
    top no%,50 : left no%,20 : caption no%,"Ligne:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieCellule%
    top no%,80 : left no%,20 : caption no%,"Colonne:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieCellule%
    top no%,110 : left no%,20 : caption no%,"Contenu:"
  no% = no% + 1 : button no% : parent no%,no_SaisieCellule%
    top no%,140 : left no%,20 : caption no%,"Valider" : on_click no%,Saisie1Valider
  no% = no% + 1 : button no% : parent no%,no_SaisieCellule%
    top no%,140 : left no%,120 : caption no%,"Abandonner" : on_click no%,Saisie1Abandonner
  no% = no_SaisieCellule% + 20
  no% = no% + 1 : spin no% : parent no%,no_SaisieCellule% : width no%,60 : inactive no% : ' no_SaisieCellule%+21
    top no%,20 : left no%,120 : max no%,20000
  no% = no% + 1 : spin no% : parent no%,no_SaisieCellule% : width no%,60 : inactive no% : ' no_SaisieCellule%+22
    top no%,50 : left no%,120 : max no%,20000
  no% = no% + 1 : spin no% : parent no%,no_SaisieCellule% : width no%,60 : inactive no% : ' no_SaisieCellule%+23
    top no%,80 : left no%,120 : max no%,20000
  no% = no% + 1 : edit no% : parent no%,no_SaisieCellule% : width no%,60                : ' no_SaisieCellule%+24
    top no%,110 : left no%,120
end_sub

sub ClicEtage()
  dim_local ne%, x%, y%, l%, c%
  if JeuEnCours%=0 then exit_sub
  ne% = number_click
  x% = mouse_x_left_down(ne%)
  y% = mouse_y_left_down(ne%)
  c% = grid_x_to_column(ne%,x%)
  l% = grid_y_to_row(ne%,y%)
  position no_SaisieCellule%+21,ne%-base_GridEtage%
  position no_SaisieCellule%+22,l%
  position no_SaisieCellule%+23,c%
  text no_SaisieCellule%+24,grid_read$(ne%,l%,c%)
  inactive 0
  show no_SaisieCellule%
  set_focus no_SaisieCellule%+24
  LigneActive% = l%
  ColonneActive% = c%
end_sub

sub Saisie1Valider()
  dim_local s$
  CodeActif$    = text$(no_SaisieCellule%+24)
  LigneActive%  = position(no_SaisieCellule%+22)
  ColonneActive% = position(no_SaisieCellule%+23)
  ModifierCellule()
  hide no_SaisieCellule%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
  s$ = "write scan="+str$(scancode)
end_sub

sub Saisie1Abandonner()
  hide no_SaisieCellule%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub saisie2()
  dim_local no%
  no% = no_SaisieNombreEtages%
  form no% : hide no% : height no%,180 : width no%,200 : caption no%,"Saisie"
    border_hide no% : color no%,255,200,200
    top no%,(screen_y-height(no%))/2 : left no%,(screen_x-width(no%))/2
  no% = no% + 1 : alpha no% : parent no%,no_SaisieNombreEtages%
    top no%,20 : left no%,20 : caption no%,"Nombre d'étages:"
  no% = no% + 1 : button no% : parent no%,no_SaisieNombreEtages%
    top no%,140 : left no%,20 : caption no%,"Valider" : on_click no%,Saisie2Valider
  no% = no% + 1 : button no% : parent no%,no_SaisieNombreEtages%
    top no%,140 : left no%,120 : caption no%,"Abandonner" : on_click no%,Saisie2Abandonner
  no% = no_SaisieNombreEtages% + 20
  no% = no% + 1 : spin no% : parent no%,no_SaisieNombreEtages% : width no%,60 : ' no_SaisieNombreEtages%+21
    top no%,20 : left no%,120 : min no%,1 : max no%,100
end_sub

sub KeyEtage()
  dim_local ne%, x%, y%, l%, c%, sc%
  if JeuEnCours%=0 then exit_sub
  if LigneActive%=0 then exit_sub
  off_click number_key_down
  sc% = scancode
' caption 0,"scan "+str$(sc%)
  select sc%  : ' scancode
    case 37: ' flèche à gauche
      if ColonneActive%=1 then exit_sub
      ColonneActive% = ColonneActive% - 1
      ModifierCellule()
    case 100: ' flèche à gauche
      if ColonneActive%=1 then exit_sub
      ColonneActive% = ColonneActive% - 1
      ModifierCellule()
    case 38: ' flèche en haut
      if LigneActive%=1 then Exit_sub
      LigneActive% = LigneActive% - 1
      ModifierCellule()
    case 104: ' flèche en haut
      if LigneActive%=1 then Exit_sub
      LigneActive% = LigneActive% - 1
      ModifierCellule()
    case 39: ' flèche à droite
      if ColonneActive%=LargeurEtage% then exit_sub
      ColonneActive% = ColonneActive% + 1
      ModifierCellule()
    case 102: ' flèche à droite
      if ColonneActive%=LargeurEtage% then exit_sub
      ColonneActive% = ColonneActive% + 1
      ModifierCellule()
    case 40: ' flèche en bas
      if LigneActive%=HauteurEtage% then Exit_sub
      LigneActive% = LigneActive% + 1
      ModifierCellule()
    case 98: ' flèche en bas
      if LigneActive%=HauteurEtage% then Exit_sub
      LigneActive% = LigneActive% + 1
      ModifierCellule()
  end_select
end_sub

sub ModifierCellule()
  dim_local i%
  if ModifPartout%=1
    for i%=1 to NombreEtages%
      grid_write base_GridEtage%+i%,LigneActive%,ColonneActive%,CodeActif$
    next i%
  else
    grid_write base_GridEtage%+EtageSelectionne%,LigneActive%,ColonneActive%,CodeActif$
  end_if
end_sub

sub KeyUpEtage()
  on_click number_key_up,ClicEtage
end_sub

sub NombreEtages()
'  if JeuEnCours%=0 then exit_sub
  inactive 0
  position no_SaisieNombreEtages%+21,NombreEtages%
  show no_SaisieNombreEtages%
  set_focus no_SaisieNombreEtages%+21
end_sub

sub Saisie2Valider()
  dim_local n%
  n% = position(no_SaisieNombreEtages%+21)
  if n%<NombreEtages%
    if message_confirmation_yes_no("Vous allez perdre des étages. Continuer ?")<>1 then exit_sub
  end_if
  NombreEtages% = n%
  hide no_SaisieNombreEtages%
  hide base_GridEtage%+EtageSelectionne%
  EtageSelectionne% = 1
  show base_GridEtage%+EtageSelectionne%
  GenererEtages(0)
  MenuDesEtages()
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub Saisie2Abandonner()
  hide no_SaisieNombreEtages%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub saisie3()
  dim_local no%
  no% = no_SaisieDimensionsEtages%
  form no% : hide no% : height no%,180 : width no%,200 : caption no%,"Saisie"
    border_hide no% : color no%,255,200,200
    top no%,(screen_y-height(no%))/2 : left no%,(screen_x-width(no%))/2
  no% = no% + 1 : alpha no% : parent no%,no_SaisieDimensionsEtages%
    top no%,20 : left no%,20 : caption no%,"Largeur des étages:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieDimensionsEtages%
    top no%,50 : left no%,20 : caption no%,"Hauteur des étages:"
  no% = no% + 1 : button no% : parent no%,no_SaisieDimensionsEtages%
    top no%,140 : left no%,20 : caption no%,"Valider" : on_click no%,Saisie3Valider
  no% = no% + 1 : button no% : parent no%,no_SaisieDimensionsEtages%
    top no%,140 : left no%,120 : caption no%,"Abandonner" : on_click no%,Saisie3Abandonner
  no% = no_SaisieDimensionsEtages% + 20
  no% = no% + 1 : spin no% : parent no%,no_SaisieDimensionsEtages% : width no%,60 : ' no_SaisieDimensionsEtages%+21
    top no%,20 : left no%,130 : min no%,min_LargeurEtage% : max no%,max_LargeurEtage%
  no% = no% + 1 : spin no% : parent no%,no_SaisieDimensionsEtages% : width no%,60 : ' no_SaisieDimensionsEtages%+22
    top no%,50 : left no%,130 : min no%,min_HauteurEtage% : max no%,max_HauteurEtage%
end_sub

sub DimensionsEtages()
'  if JeuEnCours%=0 then exit_sub
  inactive 0
  position no_SaisieDimensionsEtages%+21,LargeurEtage%
  position no_SaisieDimensionsEtages%+22,HauteurEtage%
  show no_SaisieDimensionsEtages%
  set_focus no_SaisieDimensionsEtages%+21
end_sub

sub Saisie3Valider()
  LargeurEtage% = position(no_SaisieDimensionsEtages%+21)
  HauteurEtage% = position(no_SaisieDimensionsEtages%+22)
  if JeuEnCours%=0
    defaut_LargeurEtage% = position(no_SaisieDimensionsEtages%+21)
    defaut_HauteurEtage% = position(no_SaisieDimensionsEtages%+22)
  end_if
  GenererEtages(0)
  hide no_SaisieDimensionsEtages%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub Saisie3Abandonner()
  hide no_SaisieDimensionsEtages%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub saisie4()
  dim_local no%
  no% = no_SaisieDimensionsCellules%
  form no% : hide no% : height no%,180 : width no%,200 : caption no%,"Saisie"
    border_hide no% : color no%,255,200,200
    top no%,(screen_y-height(no%))/2 : left no%,(screen_x-width(no%))/2
  no% = no% + 1 : alpha no% : parent no%,no_SaisieDimensionsCellules%
    top no%,20 : left no%,20 : caption no%,"Largeur des étages:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieDimensionsCellules%
    top no%,50 : left no%,20 : caption no%,"Hauteur des étages:"
  no% = no% + 1 : button no% : parent no%,no_SaisieDimensionsCellules%
    top no%,140 : left no%,20 : caption no%,"Valider" : on_click no%,Saisie4Valider
  no% = no% + 1 : button no% : parent no%,no_SaisieDimensionsCellules%
    top no%,140 : left no%,120 : caption no%,"Abandonner" : on_click no%,Saisie4Abandonner
  no% = no_SaisieDimensionsCellules% + 20
  no% = no% + 1 : spin no% : parent no%,no_SaisieDimensionsCellules% : width no%,60 : ' no_SaisieDimensionsCellules%+21
    top no%,20 : left no%,130 : min no%,min_LargeurCellule% : max no%,max_LargeurCellule%
  no% = no% + 1 : spin no% : parent no%,no_SaisieDimensionsCellules% : width no%,60 : ' no_SaisieDimensionsCellules%+22
    top no%,50 : left no%,130 : min no%,min_HauteurCellule% : max no%,max_HauteurCellule%
end_sub

sub DimensionsCellules()
'  if JeuEnCours%=0 then exit_sub
  inactive 0
  position no_SaisieDimensionsCellules%+21,LargeurCellule%
  position no_SaisieDimensionsCellules%+22,HauteurCellule%
  show no_SaisieDimensionsCellules%
  set_focus no_SaisieDimensionsCellules%+21
end_sub

sub Saisie4Valider()
  if JeuEnCours%=0
    defaut_LargeurCellule% = position(no_SaisieDimensionsCellules%+21)
    defaut_HauteurCellule% = position(no_SaisieDimensionsCellules%+22)
  end_if
  LargeurCellule% = position(no_SaisieDimensionsCellules%+21)
  HauteurCellule% = position(no_SaisieDimensionsCellules%+22)
  hide no_SaisieDimensionsCellules%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub Saisie4Abandonner()
  hide no_SaisieDimensionsCellules%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub ModifPartout()
  if ModifPartout%=1
    mark_off number_click
    ModifPartout% = 0
  else
    mark_on number_click
    ModifPartout% = 1
  end_if
end_sub

sub Apropos()
  dim_local s$, crlf$
  crlf$ = chr$(13) + chr$(10)
  s$ = "Génération d'un monde 2D"+crlf$+crlf$
  s$ = s$ + "Version: 1.02"+crlf$+crlf$
  s$ = s$ + "Auteur: Klaus"+crlf$+crlf$
  s$ = s$ + "Créé le: 14/02/2017"
  message s$
end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jean Claude

avatar

Nombre de messages : 5041
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D   Mar 14 Fév 2017 - 11:00

Bonjour à tous,

@Klaus,
Cette nouvelle fonctionnalité est une très bonne idée.
Je te propose une barre d'état pour indiquer à l'utilisateur où il se trouve (étage), en quel mode (ModifPartout: activé ou pas). Ceci pour éviter à l'utilisateur d'être obligé de repasser par le menu pour vérifier où et comment.

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D   Mar 14 Fév 2017 - 12:04

Merci, Jean Claude !

L'étage actif s'affichait déjà dans la barre de titre. J'y ai ajouté l'état de l'indicateur "modif partout".

Code:
' demo_generer_monde_pour_jeu_de_plateau.bas

labels()
constantes()
variables()
GenererDefauts()
invisibles()
form0()
saisie1()    : ' saisie d'une cellule
saisie2()    : ' saisie du nombre d'étages
saisie3()    : ' saisie des dimensions des étages
saisie4()    : ' saisie des dimensions des cellules
menus()
MenuDesEtages()

end

sortir:
  sortir()
  return
 
NouveauJeu:
  NouveauJeu()
  return
 
FermerJeu:
  FermerJeu()
  return
 
EnregistrerJeu:
  EnregistrerJeu()
  return
 
EnregistrerJeuSous:
  EnregistrerJeuSous()
  return
 
OuvrirJeu:
  OuvrirJeu()
  return
 
SelectionnerEtage:
  SelectionnerEtage()
  return
 
ClicEtage:
  ClicEtage()
  return
 
Saisie1Abandonner:
  Saisie1Abandonner()
  return

Saisie1Valider:
  Saisie1Valider()
  return
 
KeyEtage:
  KeyEtage()
  return

KeyUpEtage:
  KeyUpEtage()
  return
 
NombreEtages:
  NombreEtages()
  return

Saisie2Abandonner:
  Saisie2Abandonner()
  return

Saisie2Valider:
  Saisie2Valider()
  return
 
DimensionsEtages:
  DimensionsEtages()
  return

Saisie3Abandonner:
  Saisie3Abandonner()
  return

Saisie3Valider:
  Saisie3Valider()
  return

DimensionsCellules:
  DimensionsCellules()
  return

Saisie4Abandonner:
  Saisie4Abandonner()
  return

Saisie4Valider:
  Saisie4Valider()
  return
 
ModifPartout:
  ModifPartout()
  return
 
Apropos:
  Apropos()
  return

sub labels()
  label sortir, NouveauJeu, FermerJeu, EnregistrerJeu, EnregistrerJeuSous, OuvrirJeu
  label SelectionnerEtage, ClicEtage, Saisie1Valider, Saisie1Abandonner, KeyEtage, Apropos
  label KeyUpEtage, ModifPartout
  label NombreEtages, Saisie2Valider, Saisie2Abandonner
  label DimensionsEtages, Saisie3Valider, Saisie3Abandonner
  label DimensionsCellules, Saisie4Valider, Saisie4Abandonner
end_sub

sub constantes()
  ' dimensions d'une unité graphique en pixels
  dim defaut_LargeurCellule% : defaut_LargeurCellule% =  20
    dim min_LargeurCellule% :    min_LargeurCellule% =  5
    dim max_LargeurCellule% :    max_LargeurCellule% = 100
  dim defaut_HauteurCellule% : defaut_HauteurCellule% =  20
    dim min_HauteurCellule% :    min_HauteurCellule% =  5
    dim max_HauteurCellule% :    max_HauteurCellule% = 100
  ' dimensions des étages (en nombre de cellules)
  dim defaut_LargeurEtage% : defaut_LargeurEtage% =  50
    dim min_LargeurEtage% :    min_LargeurEtage% =  10
    dim max_LargeurEtage% :    max_LargeurEtage% = 1000
  dim defaut_HauteurEtage% : defaut_HauteurEtage% =  50
    dim min_HauteurEtage% :    min_HauteurEtage% =  10
    dim max_HauteurEtage% :    max_HauteurEtage% = 1000
  ' nombe d'étages superposés
  dim defaut_NombreEtages% : defaut_NombreEtages% =  3
    dim min_NombreEtages% :    min_NombreEtages% =  1
    dim max_NombreEtages% :    max_NombreEtages% = 20
  ' numéro d'objet de base pour les menus des étages (+1, +2, ...)
  dim base_MenuEtage%      : base_MenuEtage% = 1000
  ' numéro d'objet de base pour les grids des étages (+1, +2, ...)
  dim base_GridEtage%      : base_GridEtage% = 2000
  ' numéro d'objet de la fenêtre de saisie d'une cellule
  dim no_SaisieCellule%    : no_SaisieCellule% = 3000
  ' numéro d'objet de la fenêtre de saisie du nombre d'étages
  dim no_SaisieNombreEtages%    : no_SaisieNombreEtages% = 3100
  ' numéro d'objet de la fenêtre de saisie des dimsions des étages
  dim no_SaisieDimensionsEtages% : no_SaisieDimensionsEtages% = 3200
  ' numéro d'objet de la fenêtre de saisie des dimsions des cellules
  dim no_SaisieDimensionsCellules% : no_SaisieDimensionsCellules% = 3300
end_sub

sub variables()
  ' variables techniques
  dim no%, no_OpenDialog%, no_SaveDialog%, no_parent_menu_etages%
  dim no_ModifPartout%
 
  ' variables de gestion
  dim JeuEnCours%          : ' flag 1=la définition d'un jeu est en cours
  dim NomDuJeu$            : ' le nom du jeu
  dim DossierDuJeu$        : ' le dossier dans lequel je jeu réside
  dim EtageSelectionne%    : ' numéro de l'étage sélectionné
  dim CodeActif$          : ' dernier code saisie pour une cellule
  dim LigneActive%        : '  et son numéro de ligne
  dim ColonneActive%      : '  et son numéro de colonne
  dim ModifPartout%        : ' flag "modifications dans tous les étages"

  ' variables à initialiser avec des valeurs par défaut
  dim LargeurCellule%      : ' dimensions actuelles des cellules graphiques en pixels
  dim HauteurCellule%
  dim LargeurEtage%        : ' dimensions actuelles des étages en nombre de cellules
  dim HauteurEtage%
  dim NombreEtages%        : ' nombre actuel des étages
end_sub

sub invisibles()
  no% = no% + 1 : open_dialog no% : no_OpenDialog% = no%
  no% = no% + 1 : save_dialog no% : no_SaveDialog% = no%
end_sub

sub form0()
  full_space 0
  AfficherCaption()
end_sub

sub menus()
  dim_local no1%, no2%
  no% = no% + 1 : main_menu no% : no1% = no%
  no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Jeux"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau"              : on_click no%,NouveauJeu
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..."            : on_click no%,OuvrirJeu
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer"          : on_click no%,EnregistrerJeu
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..."  : on_click no%,EnregistrerJeuSous
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer"                : on_click no%,FermerJeu
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir"                : on_click no%,sortir
  no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Edition" : no_parent_menu_etages% = no%
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Dimensions des cellules"  : on_click no%,DimensionsCellules
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Dimensions des étages" : on_click no%,DimensionsEtages
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nombre d'étages"      : on_click no%,NombreEtages
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Modifs sur tous les étages" : on_click no%,ModifPartout
      no_ModifPartout% = no%
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
  no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Aide"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"A propos"              : on_click no%,Apropos
end_sub



sub NouveauJeu()
  if JeuEnCours%=1
    if message_confirmation_yes_no("Une définition d'un jeu est en cours. Ecarter ?")<>1 then exit_sub
  end_if
  JeuEnCours% = 1
  ModifPartout% = 0
  mark_off no_ModifPartout%
  GenererDefauts()
  MenuDesEtages()
  NomDuJeu$ = ""
  AfficherCaption()
  DossierDuJeu$ = dir_current$
end_sub

sub FermerJeu()
  if JeuEnCours%=1
    if message_confirmation_yes_no("Une définition d'un jeu est en cours. Ecarter ?")<>1 then exit_sub
  end_if
  JeuEnCours% = 0
  ModifPartout% = 0
  mark_off no_ModifPartout%
  NomDuJeu$ = ""
  DossierDuJeu$ = dir_current$
  AfficherCaption()
end_sub

sub Sortir()
  if JeuEnCours%=1
    if message_confirmation_yes_no("Une définition d'un jeu est en cours. Ecarter ?")<>1 then exit_sub
  end_if
  terminate
end_sub

sub GenererDefauts()
  LargeurCellule%  = defaut_LargeurCellule%
  HauteurCellule%  = defaut_HauteurCellule%
  LargeurEtage%    = defaut_LargeurEtage%
  HauteurEtage%    = defaut_HauteurEtage%
  NombreEtages%    = defaut_NombreEtages%
  EtageSelectionne% = 1
  CodeActif$ = ""
  GenererEtages(1)
end_sub

sub GenererEtages(vider%)
  dim_local i%, ne%
  for i%=1 to NombreEtages%
    ne% = base_GridEtage% + i%
    if object_exists(ne%)=1
      grid_row ne%,HauteurEtage%+1 : grid_column ne%,LargeurEtage% : ' hide ne%
      grid_column_width ne%,12 : grid_row_height ne%,12
      if vider%=1 then grid_clear ne%,HauteurEtage%+1,LargeurEtage%
    else
      grid ne% : full_space ne% : hide ne%
        grid_row ne%,HauteurEtage% : grid_column ne%,LargeurEtage%
        grid_row_fixed ne%,0 : grid_column_fixed ne%,0
        grid_column_width ne%,12 : grid_row_height ne%,12
        on_click ne%,ClicEtage : on_key_down ne%,KeyEtage : on_key_up ne%,KeyUpEtage
    end_if
  next i%
  ne% = base_GridEtage% + NombreEtages% + 1
  while object_exists(ne%)=1
    delete ne%
    ne% = ne% + 1
  end_while
  show base_GridEtage%+EtageSelectionne%
'  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub EnregistrerJeu()
  if JeuEnCours%=0
    message "Il n'y a aucune définition en cours."
    exit_sub
  end_if
  if NomDuJeu$=""
    message "Utiliser <Enregistrer sous...>."
    exit_sub
  end_if
  EnregistrerInterne()
end_sub

sub EnregistrerJeuSous()
  dim_local f$, p$, n$, e$
  if JeuEnCours%=0
    message "Il n'y a aucune définition en cours."
    exit_sub
  end_if
  filter no_SaveDialog%,"Projet de jeu de plateau (*.pjp)|*.pjp"
  f$ = file_name$(no_SaveDialog%)
  if f$="_" then exit_sub
  p$ = file_extract_path$(f$)
  n$ = file_extract_name$(f$)
  e$ = file_extract_extension$(f$)
  n$ = left$(n$,len(n$)-len(e$))
  if lower$(e$)<>".pjp" then e$ = ".pjp"
  f$ = p$ + n$ + e$
  if file_exists(f$)=1
    if message_confirmation_yes_no("Ce fichier existe déjà. Remplacer ?")<>1 then exit_sub
  end_if
  NomDuJeu$ = n$
  DossierDuJeu$ = p$
  AfficherCaption()
  EnregistrerInterne()
  end_sub
 
sub EnregistrerInterne()
  dim_local i%, il%, ic%, f$
  ' enregister le jeu
  f$ = DossierDuJeu$ + NomDuJeu$ + ".pjp"
  if file_exists(f$)=1 then file_delete f$
  file_open_write 1,f$
  file_writeln 1,"Jeu Plateau"
  file_writeln 1,NomDuJeu$
  file_writeln 1,str$(LargeurCellule%)
  file_writeln 1,str$(HauteurCellule%)
  file_writeln 1,str$(LargeurEtage%)
  file_writeln 1,str$(HauteurEtage%)
  file_writeln 1,str$(NombreEtages%)
  for i%=1 to NombreEtages%
    ' pour l'étage i%
    file_writeln 1,"Etage "+str$(i%)
    for il%=1 to HauteurEtage%
      for ic%=1 to LargeurEtage%
        file_writeln 1,grid_read$(base_GridEtage%+i%,il%,ic%)
      next ic%
    next il%
  next i%
  file_writeln 1,"Fin"
  file_close 1
  message "Sauvegarde effectuée."
end_sub

sub OuvrirJeu()
  dim_local f$, p$, n$, e$, s$, v%, i%, il%, ic%
  if JeuEnCours%=1
    if message_confirmation_yes_no("Une définition d'un jeu est en cours. Ecarter ?")<>1 then exit_sub
  end_if
  filter no_OpenDialog%,"Projet de jeu de plateau (*.pjp)|*.pjp"
  f$ = file_name$(no_OpenDialog%)
  if f$="_" then exit_sub
  p$ = file_extract_path$(f$)
  n$ = file_extract_name$(f$)
  e$ = file_extract_extension$(f$)
  n$ = left$(n$,len(n$)-len(e$))
  if lower$(e$)<>".pjp" then e$ = ".pjp"
  f$ = p$ + n$ + e$
  if file_exists(f$)=0
    message "Ce fichier est introuvable."
    exit_sub
  end_if
  ' charger le jeu
  file_open_read 1,f$
  ' --- entête du fichier
  file_readln 1,s$
  if s$<>"Jeu Plateau"
    message "Ce n'est pas une sauvegarde d'un projet de jeu."
    file_close 1
    exit_sub
  end_if
  ' --- nom du jeu
  file_readln 1,s$
  if s$<>n$
    message "Le nom du jeu ne correspond pas au fichier."
    file_close 1
    exit_sub
  end_if
  JeuEnCours% = 0
  ' --- largeur des cellules
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_LargeurCellule%) or (v%>max_LargeurCellule%)
    JeuCorrompu()
    exit_sub
  end_if
  LargeurCellule% = v%
  ' --- hauteur des cellules
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_HauteurCellule%) or (v%>max_HauteurCellule%)
    JeuCorrompu()
    exit_sub
  end_if
  HauteurCellule% = v%
  ' --- largeur des étages
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_LargeurEtage%) or (v%>max_LargeurEtage%)
    JeuCorrompu()
    exit_sub
  end_if
  LargeurEtage% = v%
  ' --- hauteur des étages
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_HauteurEtage%) or (v%>max_HauteurEtage%)
    JeuCorrompu()
    exit_sub
  end_if
  HauteurEtage% = v%
  ' --- nombre d'étages
  file_readln 1,s$
  if numeric(s$)=0
    JeuCorrompu()
    exit_sub
  end_if
  v% = val(s$)
  if (v%<min_NombreEtages%) or (v%>max_NombreEtages%)
    JeuCorrompu()
    exit_sub
  end_if
  NombreEtages% = v%
  for i%=1 to NombreEtages%
    ' pour l'étage i%
    file_readln 1,s$
    if s$<>"Etage "+str$(i%)
      JeuCorrompu()
      exit_sub
    end_if
    for il%=1 to HauteurEtage%
      for ic%=1 to LargeurEtage%
        file_readln 1,s$
        grid_write base_GridEtage%+i%,il%,ic%,s$
      next ic%
    next il%
  next i%
  file_readln 1,s$
  if s$<>"Fin"
    JeuCorrompu()
    exit_sub
  end_if
  file_close 1
  NomDuJeu$ = n$
  DossierDuJeu$ = p$
  AfficherCaption()
  GenererEtages(0)
  MenuDesEtages()
  JeuEnCours% = 1
  ModifPartout% = 0
  mark_off no_ModifPartout%
end_sub

sub JeuCorrompu()
  message "Le projet de jeu est corrompu."
  file_close 1
  JeuEnCours% = 0
  NomDuJeu$ = ""
  DossierDuJeu$ = dir_current$
  GenererDefauts()
  AfficherCaption()
  MenuDesEtages()
end_sub

sub AfficherCaption()
  dim_local s$
  if ModifPartout%=1 then s$ = "(modification tous étages)"
  if NomDuJeu$=""
    caption 0,"Création de Jeu - <Nouveau>  Cellules de "+str$(LargeurCellule%)+"x"+str$(HauteurCellule%)+"  Etage="+str$(LargeurEtage%)+"x"+str$(HauteurEtage%)+"  "+str$(EtageSelectionne%)+"/"+str$(NombreEtages%)+" étage(s)  "+s$
  else
    caption 0,"Création de Jeu - <"+NomDuJeu$+">  Cellules de "+str$(LargeurCellule%)+"x"+str$(HauteurCellule%)+"  Etage="+str$(LargeurEtage%)+"x"+str$(HauteurEtage%)+"  "+str$(EtageSelectionne%)+"/"+str$(NombreEtages%)+" étage(s)  "+s$
  end_if
end_sub

sub MenuDesEtages()
  dim_local ne%, i%
  ne% = base_MenuEtage% + 1
  while object_exists(ne%)=1
    delete ne%
    ne% = ne% + 1
  end_while
  for i%=1 to NombreEtages%
    ne% = base_MenuEtage% + i%
    sub_menu ne% : parent ne%,no_parent_menu_etages% : caption ne%,"Etage "+str$(i%) : on_click ne%,SelectionnerEtage
  next i%
  mark_on base_MenuEtage%+EtageSelectionne%
end_sub

sub SelectionnerEtage()
  mark_off base_MenuEtage%+EtageSelectionne%
  hide base_GridEtage%+EtageSelectionne%
  EtageSelectionne% = number_click - base_MenuEtage%
  mark_on base_MenuEtage%+EtageSelectionne%
  show base_GridEtage%+EtageSelectionne%
  set_focus base_GridEtage%+EtageSelectionne%
  AfficherCaption()
end_sub

sub saisie1()
  dim_local no%
  no% = no_SaisieCellule%
  form no% : hide no% : height no%,180 : width no%,200 : caption no%,"Saisie"
    border_hide no% : color no%,255,200,200
    top no%,(screen_y-height(no%))/2 : left no%,(screen_x-width(no%))/2
  no% = no% + 1 : alpha no% : parent no%,no_SaisieCellule%
    top no%,20 : left no%,20 : caption no%,"Etage:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieCellule%
    top no%,50 : left no%,20 : caption no%,"Ligne:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieCellule%
    top no%,80 : left no%,20 : caption no%,"Colonne:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieCellule%
    top no%,110 : left no%,20 : caption no%,"Contenu:"
  no% = no% + 1 : button no% : parent no%,no_SaisieCellule%
    top no%,140 : left no%,20 : caption no%,"Valider" : on_click no%,Saisie1Valider
  no% = no% + 1 : button no% : parent no%,no_SaisieCellule%
    top no%,140 : left no%,120 : caption no%,"Abandonner" : on_click no%,Saisie1Abandonner
  no% = no_SaisieCellule% + 20
  no% = no% + 1 : spin no% : parent no%,no_SaisieCellule% : width no%,60 : inactive no% : ' no_SaisieCellule%+21
    top no%,20 : left no%,120 : max no%,20000
  no% = no% + 1 : spin no% : parent no%,no_SaisieCellule% : width no%,60 : inactive no% : ' no_SaisieCellule%+22
    top no%,50 : left no%,120 : max no%,20000
  no% = no% + 1 : spin no% : parent no%,no_SaisieCellule% : width no%,60 : inactive no% : ' no_SaisieCellule%+23
    top no%,80 : left no%,120 : max no%,20000
  no% = no% + 1 : edit no% : parent no%,no_SaisieCellule% : width no%,60                : ' no_SaisieCellule%+24
    top no%,110 : left no%,120
end_sub

sub ClicEtage()
  dim_local ne%, x%, y%, l%, c%
  if JeuEnCours%=0 then exit_sub
  ne% = number_click
  x% = mouse_x_left_down(ne%)
  y% = mouse_y_left_down(ne%)
  c% = grid_x_to_column(ne%,x%)
  l% = grid_y_to_row(ne%,y%)
  position no_SaisieCellule%+21,ne%-base_GridEtage%
  position no_SaisieCellule%+22,l%
  position no_SaisieCellule%+23,c%
  text no_SaisieCellule%+24,grid_read$(ne%,l%,c%)
  inactive 0
  show no_SaisieCellule%
  set_focus no_SaisieCellule%+24
  LigneActive% = l%
  ColonneActive% = c%
end_sub

sub Saisie1Valider()
  dim_local s$
  CodeActif$    = text$(no_SaisieCellule%+24)
  LigneActive%  = position(no_SaisieCellule%+22)
  ColonneActive% = position(no_SaisieCellule%+23)
  ModifierCellule()
  hide no_SaisieCellule%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
  s$ = "write scan="+str$(scancode)
end_sub

sub Saisie1Abandonner()
  hide no_SaisieCellule%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub saisie2()
  dim_local no%
  no% = no_SaisieNombreEtages%
  form no% : hide no% : height no%,180 : width no%,200 : caption no%,"Saisie"
    border_hide no% : color no%,255,200,200
    top no%,(screen_y-height(no%))/2 : left no%,(screen_x-width(no%))/2
  no% = no% + 1 : alpha no% : parent no%,no_SaisieNombreEtages%
    top no%,20 : left no%,20 : caption no%,"Nombre d'étages:"
  no% = no% + 1 : button no% : parent no%,no_SaisieNombreEtages%
    top no%,140 : left no%,20 : caption no%,"Valider" : on_click no%,Saisie2Valider
  no% = no% + 1 : button no% : parent no%,no_SaisieNombreEtages%
    top no%,140 : left no%,120 : caption no%,"Abandonner" : on_click no%,Saisie2Abandonner
  no% = no_SaisieNombreEtages% + 20
  no% = no% + 1 : spin no% : parent no%,no_SaisieNombreEtages% : width no%,60 : ' no_SaisieNombreEtages%+21
    top no%,20 : left no%,120 : min no%,1 : max no%,100
end_sub

sub KeyEtage()
  dim_local ne%, x%, y%, l%, c%, sc%
  if JeuEnCours%=0 then exit_sub
  if LigneActive%=0 then exit_sub
  off_click number_key_down
  sc% = scancode
' caption 0,"scan "+str$(sc%)
  select sc%  : ' scancode
    case 37: ' flèche à gauche
      if ColonneActive%=1 then exit_sub
      ColonneActive% = ColonneActive% - 1
      ModifierCellule()
    case 100: ' flèche à gauche
      if ColonneActive%=1 then exit_sub
      ColonneActive% = ColonneActive% - 1
      ModifierCellule()
    case 38: ' flèche en haut
      if LigneActive%=1 then Exit_sub
      LigneActive% = LigneActive% - 1
      ModifierCellule()
    case 104: ' flèche en haut
      if LigneActive%=1 then Exit_sub
      LigneActive% = LigneActive% - 1
      ModifierCellule()
    case 39: ' flèche à droite
      if ColonneActive%=LargeurEtage% then exit_sub
      ColonneActive% = ColonneActive% + 1
      ModifierCellule()
    case 102: ' flèche à droite
      if ColonneActive%=LargeurEtage% then exit_sub
      ColonneActive% = ColonneActive% + 1
      ModifierCellule()
    case 40: ' flèche en bas
      if LigneActive%=HauteurEtage% then Exit_sub
      LigneActive% = LigneActive% + 1
      ModifierCellule()
    case 98: ' flèche en bas
      if LigneActive%=HauteurEtage% then Exit_sub
      LigneActive% = LigneActive% + 1
      ModifierCellule()
  end_select
end_sub

sub ModifierCellule()
  dim_local i%
  if ModifPartout%=1
    for i%=1 to NombreEtages%
      grid_write base_GridEtage%+i%,LigneActive%,ColonneActive%,CodeActif$
    next i%
  else
    grid_write base_GridEtage%+EtageSelectionne%,LigneActive%,ColonneActive%,CodeActif$
  end_if
end_sub

sub KeyUpEtage()
  on_click number_key_up,ClicEtage
end_sub

sub NombreEtages()
'  if JeuEnCours%=0 then exit_sub
  inactive 0
  position no_SaisieNombreEtages%+21,NombreEtages%
  show no_SaisieNombreEtages%
  set_focus no_SaisieNombreEtages%+21
end_sub

sub Saisie2Valider()
  dim_local n%
  n% = position(no_SaisieNombreEtages%+21)
  if n%<NombreEtages%
    if message_confirmation_yes_no("Vous allez perdre des étages. Continuer ?")<>1 then exit_sub
  end_if
  NombreEtages% = n%
  hide no_SaisieNombreEtages%
  hide base_GridEtage%+EtageSelectionne%
  EtageSelectionne% = 1
  show base_GridEtage%+EtageSelectionne%
  GenererEtages(0)
  MenuDesEtages()
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub Saisie2Abandonner()
  hide no_SaisieNombreEtages%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub saisie3()
  dim_local no%
  no% = no_SaisieDimensionsEtages%
  form no% : hide no% : height no%,180 : width no%,200 : caption no%,"Saisie"
    border_hide no% : color no%,255,200,200
    top no%,(screen_y-height(no%))/2 : left no%,(screen_x-width(no%))/2
  no% = no% + 1 : alpha no% : parent no%,no_SaisieDimensionsEtages%
    top no%,20 : left no%,20 : caption no%,"Largeur des étages:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieDimensionsEtages%
    top no%,50 : left no%,20 : caption no%,"Hauteur des étages:"
  no% = no% + 1 : button no% : parent no%,no_SaisieDimensionsEtages%
    top no%,140 : left no%,20 : caption no%,"Valider" : on_click no%,Saisie3Valider
  no% = no% + 1 : button no% : parent no%,no_SaisieDimensionsEtages%
    top no%,140 : left no%,120 : caption no%,"Abandonner" : on_click no%,Saisie3Abandonner
  no% = no_SaisieDimensionsEtages% + 20
  no% = no% + 1 : spin no% : parent no%,no_SaisieDimensionsEtages% : width no%,60 : ' no_SaisieDimensionsEtages%+21
    top no%,20 : left no%,130 : min no%,min_LargeurEtage% : max no%,max_LargeurEtage%
  no% = no% + 1 : spin no% : parent no%,no_SaisieDimensionsEtages% : width no%,60 : ' no_SaisieDimensionsEtages%+22
    top no%,50 : left no%,130 : min no%,min_HauteurEtage% : max no%,max_HauteurEtage%
end_sub

sub DimensionsEtages()
'  if JeuEnCours%=0 then exit_sub
  inactive 0
  position no_SaisieDimensionsEtages%+21,LargeurEtage%
  position no_SaisieDimensionsEtages%+22,HauteurEtage%
  show no_SaisieDimensionsEtages%
  set_focus no_SaisieDimensionsEtages%+21
end_sub

sub Saisie3Valider()
  LargeurEtage% = position(no_SaisieDimensionsEtages%+21)
  HauteurEtage% = position(no_SaisieDimensionsEtages%+22)
  if JeuEnCours%=0
    defaut_LargeurEtage% = position(no_SaisieDimensionsEtages%+21)
    defaut_HauteurEtage% = position(no_SaisieDimensionsEtages%+22)
  end_if
  GenererEtages(0)
  hide no_SaisieDimensionsEtages%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub Saisie3Abandonner()
  hide no_SaisieDimensionsEtages%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub saisie4()
  dim_local no%
  no% = no_SaisieDimensionsCellules%
  form no% : hide no% : height no%,180 : width no%,200 : caption no%,"Saisie"
    border_hide no% : color no%,255,200,200
    top no%,(screen_y-height(no%))/2 : left no%,(screen_x-width(no%))/2
  no% = no% + 1 : alpha no% : parent no%,no_SaisieDimensionsCellules%
    top no%,20 : left no%,20 : caption no%,"Largeur des étages:"
  no% = no% + 1 : alpha no% : parent no%,no_SaisieDimensionsCellules%
    top no%,50 : left no%,20 : caption no%,"Hauteur des étages:"
  no% = no% + 1 : button no% : parent no%,no_SaisieDimensionsCellules%
    top no%,140 : left no%,20 : caption no%,"Valider" : on_click no%,Saisie4Valider
  no% = no% + 1 : button no% : parent no%,no_SaisieDimensionsCellules%
    top no%,140 : left no%,120 : caption no%,"Abandonner" : on_click no%,Saisie4Abandonner
  no% = no_SaisieDimensionsCellules% + 20
  no% = no% + 1 : spin no% : parent no%,no_SaisieDimensionsCellules% : width no%,60 : ' no_SaisieDimensionsCellules%+21
    top no%,20 : left no%,130 : min no%,min_LargeurCellule% : max no%,max_LargeurCellule%
  no% = no% + 1 : spin no% : parent no%,no_SaisieDimensionsCellules% : width no%,60 : ' no_SaisieDimensionsCellules%+22
    top no%,50 : left no%,130 : min no%,min_HauteurCellule% : max no%,max_HauteurCellule%
end_sub

sub DimensionsCellules()
'  if JeuEnCours%=0 then exit_sub
  inactive 0
  position no_SaisieDimensionsCellules%+21,LargeurCellule%
  position no_SaisieDimensionsCellules%+22,HauteurCellule%
  show no_SaisieDimensionsCellules%
  set_focus no_SaisieDimensionsCellules%+21
end_sub

sub Saisie4Valider()
  if JeuEnCours%=0
    defaut_LargeurCellule% = position(no_SaisieDimensionsCellules%+21)
    defaut_HauteurCellule% = position(no_SaisieDimensionsCellules%+22)
  end_if
  LargeurCellule% = position(no_SaisieDimensionsCellules%+21)
  HauteurCellule% = position(no_SaisieDimensionsCellules%+22)
  hide no_SaisieDimensionsCellules%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub Saisie4Abandonner()
  hide no_SaisieDimensionsCellules%
  active 0
  set_focus base_GridEtage%+EtageSelectionne%
end_sub

sub ModifPartout()
  if ModifPartout%=1
    mark_off number_click
    ModifPartout% = 0
  else
    mark_on number_click
    ModifPartout% = 1
  end_if
  AfficherCaption()
end_sub

sub Apropos()
  dim_local s$, crlf$
  crlf$ = chr$(13) + chr$(10)
  s$ = "Génération d'un monde 2D"+crlf$+crlf$
  s$ = s$ + "Version: 1.02"+crlf$+crlf$
  s$ = s$ + "Auteur: Klaus"+crlf$+crlf$
  s$ = s$ + "Créé le: 14/02/2017"
  message s$
end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jean Claude

avatar

Nombre de messages : 5041
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D   Mar 14 Fév 2017 - 14:06

Oups ! Embarassed Je suis distrait.
J'ai changé la couleur de mes fenêtres Windows, maintenant je perçois mieux les informations dans le bandeau.

Merci et A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D   

Revenir en haut Aller en bas
 
Un outil pour créer et maintenir des plateaux de jeux 2D
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Outil pour programmer : Eclipse
» classement et rangement des partitions
» silent bloc a/r laguna2 ph1
» Routeconverter, un outil pour afficher, éditer, enrichir et convertir des routes, des traces et des points
» Resize et compression automatique pour l'envoi par email

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: