Attention ! Avec le temps le compilateur a évolué, et il faudrait modifier le code pour être compilable au-delà de la 4.20.
Suivez ce topic pour voir comment faire cohabiter plusieurs versions du compilateur : http://www.purebasic.fr/french/viewtopi ... 21&t=13137
Voici ce que j'ai fait en glanant à droite et à gauche les informations des divers tuto, en particulier j'ai carrément tout pompé pour la version multilangue de ce qui est déjà présent ici.
Je vous propose un premier jet pour débuter dans la programmation d'un jeu de plateau. L'objectif est d'avoir des tuiles et cartes pour le jeu, facilement utilisables. Chaque tuile est associée à diverses variables, nom, description, cout, bonus, malus ...
En plus, les images étant dans un fichier externe à l'exécutable, il est toujours possible de les modifier, pour en changer la lisibilité, par exemple.
Au-delà de celà, j'ai donc réutilisé le code multilangue basé sur les fichiers de préférence pour permettre une traduction facile du jeu.
Autre sujet pour faire suite à celui-ci : [TUTO]Une fenêtre de Zoom sur des tuiles de jeux de plateau
Synopsis :
5 fichiers + toutes les images
Fichier 1 : projectmain.pb - fichier principal, appèle les autres, ouvre les fenêtres, fait tourner la boucle principale - sollicite projectPrefs.pb, projectCommon.pb
Fichier 2 : projectPrefs.pb - utilisé uniquement pour la langue des fenêtres et modules utilisés dans tout le programme - sollicite langues.pref
Fichier 3 : langues.pref - sollicité par projectPrefs.pb - fichier texte contenant les diverses traductions des textes utilisés dans le jeu
Fichier 4 : projectCommon.pb - sollicité par projectmain.pb, fichier principal de définition des variables, structures, procédures utilisées dans la boucle principale - sollicite projectData.pb
Fichier 5 : projectData.pb - sollicité par projectCommon.pb, contient l'énumération des divers champs des tuiles et cartes du jeu
Question : Pourquoi faire reposer le programme sur 5 fichiers au lieu d'un seul ?
Parce qu'une telle architecture est d'une part plus lisible, et d'autre part plus facilement déboguable. En plus regrouper la définition des datas dans un fichier à part permet de passer du temps à le remplir sans toucher au reste du code.
Question : Pourquoi ne pas inclure les images dans le code principal ?
L'inclusion des images sous format binaire agrandit considérablement la taille de l'exécutable. Pour un gros programme, cela augmente aussi le temps de compilation, et dans des périodes de test, on n'a pas envie de patienter, même 30 secondes, pour la compilation du code. En plus, les images peuvent être retouchées par la suite, voire modifiées si on veut y inclure un texte traduit, par exemple. Cela serait impossible si les images étaient incluses dans le binaire compilé.
Au dela des 5 fichiers dont je vais vous donner le code, vous aurez besoin, pour faire des tests, de 2 images de taille 250*250 :
Images\modules1\cg1.png
Images\modules2\cg2.png
Si vous n'avez pas d'image png sous la main, vous n'aurez qu'à adapter le fichier projectData.pb, et spécifier un autre plugin que UsePNGImageDecoder() dans projectCommon.pb
Voici le détail des divers fichiers :
fichier 1/5 : projectmain.pb
; projectmain.pb
; fichier principal
;=============================
; Appel de la gestion des préférences de language
IncludeFile "projectPrefs.pb"
;=============================
; Première fenêtre très temporaire qui propose la langue par séléction radio
; Cette procédure est définie dans le projectPrefs appelé juste avant
; on ira remarque que la FenetreLanguage ne porte pas de menu, ni option - seuls ses gadgest permettront la sortie de la boucle
FenetreLanguage()
;=============================
; Première boucle pour la première fenêtre
Repeat
EventID = waitwindowevent ()
If EventID = #PB_Event_Gadget
Select eventgadget ()
Case #radioEN
preferencegroup ( "EN" )
Case #radioCU
preferencegroup ( "CU" )
Case #radioDE
preferencegroup ( "DE" )
Default
preferencegroup ( "FR" )
EndSelect
EndIf
Until EventID = #PB_Event_Gadget ;Dès la sélection d'une langue, la fenêtre se ferme
;==============================
; Structures, Procédures, et Variables globales
; On devrait en théorie préciser les includefile en tête de programme,
; mais je trouve plus lisible de n'appeler les fichiers qu'à partir du moment ou on les utilise
IncludeFile "projectCommon.pb"
;==============================
; Appel de la fenêtre principale utilisée lors de la boucle principale
; Cette procédure est définie dans projectCommon appelé juste avant
FenetrePrincipale()
;==============================
; Boucle principale, au plus simple
Repeat
EventID = waitwindowevent ()
If EventID = #PB_Event_Gadget
Select eventgadget ()
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow ;sortie du programme avec fermeture de la fenêtre[/code]