Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Un outil pour créer et maintenir des plateaux de jeux 2D | |
| | Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Un outil pour créer et maintenir des plateaux de jeux 2D Sam 11 Fév 2017 - 23: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
EDITLa 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. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D Dim 12 Fév 2017 - 2: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. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D Dim 12 Fév 2017 - 4: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. 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 ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D Dim 12 Fév 2017 - 8: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.
| |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D Dim 12 Fév 2017 - 9: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+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D Dim 12 Fév 2017 - 10: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
| |
| | | Oscaribout
Nombre de messages : 471 Date d'inscription : 29/12/2016
| Sujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D Dim 12 Fév 2017 - 12: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. | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D Dim 12 Fév 2017 - 23: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 | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D Lun 13 Fév 2017 - 0: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 ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D Lun 13 Fév 2017 - 1: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
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D Mar 14 Fév 2017 - 2: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
| |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D Mar 14 Fév 2017 - 9: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+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D Mar 14 Fév 2017 - 10: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
| |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D Mar 14 Fév 2017 - 12:06 | |
| Oups ! 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+ | |
| | | Contenu sponsorisé
| Sujet: Re: Un outil pour créer et maintenir des plateaux de jeux 2D | |
| |
| | | | Un outil pour créer et maintenir des plateaux de jeux 2D | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |