# Fonctionnement global
Les explications se rapportent principalement au fichier
./window.py
!
# Core
The core of the project is inside the file main.py
and the file window.py
under the class Window
.
First of all, the main function is main
under Window
. This function is a loop where the state is run and the screen is updated.
These functions are able to manage screens !
Finalement, les 3 fonctions essentiels dans le fichier window.py
sont
- flip_state, permet de réaliser le changement entre les écrans
- events, permet de gérer les events globaux et de transmettre au écran les évents
- run, permet de faire tourner les fonctions principales de chaque écran.
# Architecture générale
Le projet utilise des vues. Il s'agit de l'ensemble des fichiers qui se trouvent dans le dossiers screens
. L'intégralité des fichiers sont des enfants des classes _State
ou _Elements
qui se trouve dans le fichier window
. Ensuite les autres fonctionnalités sont répartis dans d'autres dossiers.
Dans le dossier assets
, on va trouver l'ensemble des images pour le jeu mais aussi l'ensemble des fichiers de sauvegarde.
Dans le dossier components
, on va trouver des composants comme un slider ou le menu déroulant.
Dans le dossier config
, on va trouver un ensemble de fichiers dont le nom correspond à son contexte d'utilisation qui permet de réaliser des réglages et d'avoir un endroit pour les variables globales.
Dans le dossier data
, on va trouver les fichiers de bases qui vont servir de base pour la création de data dans le jeu qui sera enregistrée ensuite dans les assets.
Dans le dossier docs
, on va trouver l'ensemble de la documentation que vous être en train de lire.
Dans le dossier inventory
, on va trouver tout ce qui se rapporte à l'inventaire et à la gestion des items.
Dans le dossier manager
, on va trouver l'ensemble des managers du jeu tel que le versus, le tour par tout ou le logger en console in-game.
Dans le dossier map
editor, on va trouver l'intégralité du map editor.
Dans le dossier screens
, on va trouver l'ensemble des écrans du jeu.
Dans le dossier server
, on va un fichier qui permet de gérer les clients (network.py
) et un fichier qui permet de gérer les connexions au serveur (main.py
).
Dans le dossier sprites
, on va trouver l'ensemble des fichiers des sprites qui se trouve dans le jeu.
Dans le dossier store
, on va trouver le store et le shop, un enfant du store.
Dans le dossier utils
, il s'agit de fichier qui contiennent des fonctions ou des classes d'utilitaires.
# States
In the main.py
file, all the states, which are called screens in this project, are loaded, using the setup_states
function. They are classes which inherit from _State
or from _Elements
.
In the Window
, there is a function called flip_state
which is called every time the screen change. The goal is to load the new state and keep some data from the previous state. Ainsi, il est possible de transmettre de la data entre les différents écrans afin que ces derniers communiquent entre eux.
# Operation of a state
The run
function from the Window
class run the run
function from the state. This function call a function depending of the chosen sub-state. For example, the normal_run
is the main loop of a classique pygame project, which is often call main
. Inside, we can call the update
, events
and draw
functions. The call of this is to have the same design that for a single screen game. Multiple screens is now easy !
# Sub-states
Chaque écran peut avoir des sous états. C'est une fonction pratique qui permet de créer des sous menu sans avoir à changer d'écran. C'est donc beaucoup plus léger. Ainsi, la fonction run
de l'écran choisir le bon sous état à faire tourner. Pour cela, on dispose d'un dictionnaire des sous états qui est fourni par la fonction make_states_dict
. Ensuite, on appelant la fonction toggle_sub_state
avec le nom du sous état voulu, nom qui est la clé du dictionnaire d'état, on peut changer de sous état.
If done is set to true, the flip_state
function, from the Window
class, will load a new state, startup and the global run
loop will run the state run
loop, which run the sub-state function each frame !
# Différences entre _State et _Elements
La classe _State
est la classe minimal pour créer un écran. En effet, on y trouve les fonctions startup
,run
, make_states_dict
,normal_run
. Les fonctions sur les transitions vont permettre de générer de manière simplifier les transitions entres les écrans. C'est une classe qui comporte aussi des fonctions utilitaires comme draw_text
, load_data
.
La classe _Elements
est un enfant de la classe _State
. Ainsi, on profite de l'ensemble des éléments précédant mais avec des améliorations pour la gestion de l'interface. En effet, on va pouvoir charger très facilement un fond pour l'arrière. Aussi, la création des boutons, du bouton retour, l'affichage d'un titre, d'un sous-titre est aussi simplifiées.
Au final, _Element
est très pratique pour la création d'un sous-menu.
# Screens
Les écrans sont gérés dans le dossier screens
et ils représentent une vue de l'application.
Par exemple, on a l'écran de chargement du jeu, celui pour les crédits et même celui pour le jeu. Chacun d'eux est autonome et permet de gérer facilement et efficacement le développement de chacun des vue. En effet, la parallélisation des tâches est extrêmement simple, d'autant plus que la structure est classique avec pygame. Le seul ajout est celui des sub-state pour rester dans le même écran mais en y ajoutant des fonctionnalités.