Un jeu de l'oie fait en Python 3 avec la bibliothèque Pygame 2.1.2 !
Ce programme tourne sur Python 3.10 et toute version de Python supérieure. Si vous n'avez pas Python d'installé sur votre machine, rendez-vous sur la page des téléchargements du site officiel de Python ici. Suivez ensuite les consignes du programme d'installation et Python sera installé.
Les librairies qui ne font pas partie de la bibliothèque standard, et dont dépend ce projet sont citées dans le fichier
requirements.txt
, avec une version spécifiée.
Vous pouvez installer directement toutes les dépendances avec l'outil pip
en entrant cette commande :
pip install -r requirements.txt
Si cette commande ne marche pas, c'est que pip
ne se trouve pas sur votre variable d'environnement PATH
.
Essayez alors :
py -m pip install -r requirements.txt
Si vous avez plusieurs versions de python installées sur votre machine, précisez laquelle en entrant plutôt :
py -m pip3.10 install -r requirements.txt
Après installation, double-cliquez simplement sur le fichier main.py
, et le jeu devrait alors se lancer.
Si ce n'est pas le cas, essayez la méthode suivante.
Il vous faudra d'abord ouvrir un terminal peu importe votre système d'exploitation. Ensuite suivez les instructions pour chaque plateforme :
Sans spécifier la version :
py main.py
En spécifiant la version :
py -3.10 main.py
python3 main.py
L'intégration dans d'autres programmes se fait aisément. En effet, grâce à la fonction main()
, vous pouvez très
simplement importer ce jeu dans d'autres projets. Assurez-vous seulement que le dossier du jeu se trouve dans votre
répertoire du projet, puis placez au début de votre programme :
from JeuDeLOie import main # Importe le fichier principal 'main' du dossier du jeu.
Ensuite vous pourrez l'utiliser dans tous les programmes aillant importé le jeu :
main.main() # Lance le jeu, comme lors d'un double-clique.
Vous pouvez aussi créer une nouvelle instance de la classe Application
pour la modifier :
jeu = main.Application() # Crée une instance d'application.
jeu.start() # Lance le jeu.
Il est possible de personnaliser le contenu du jeu pour ainsi créer votre propre plateau de jeu, et même votre propre cases personnalisées, spéciales ou non en utilisant vos propres images, et ce, de façon très simple !
Le fichier tiles.json
dans le dossier data
contient toutes les definitions de cases,
et il vous suffit d'ajouter vos propres nom de cases dans le dictionnaire comme ceci :
{
"bridge": "bridge",
"default": null,
"dices": "dices",
"end": "end",
"goose": "goose",
"hotel": "hotel",
"jail": "jail",
"maze": "maze",
"skull": "skull",
"start": null,
"well": "well",
// La définition des cases personnalisées débute ici
"custom": null
}
La chaîne de caractères située après le symbole :
correspond à l'action activée lorsque le joueur
va arriver sur la case, par défaut nous la mettrons sur null
, pour ne rien activer.
Lors du démarrage du jeu, toutes les cases seront chargées, avec une image qui porte le nom de la clé
correspondant à la case dans le dictionnaire des cases, il est donc important de placer
une image portant le nom de la case, de dimensions 64x64 pixels, dans le dossier assets/tiles
pour ne pas créer d'erreurs lors du lancement du jeu.
Les cases spéciales créent une action qui sera attribuée au joueur qui l'a activé, permettant de créer des actions qui perdurent sur plusieurs tours.
Évidemment, ces cases sont plus difficiles à définir et nécessitent de toucher au code source du jeu. Si vous ne souhaitez pas créer vos cases spéciales, que vous avez peur de modifier le code source, vous pouvez passer à la rubrique suivante sans tarder.
Il vous est conseillé en premier lieu, de lire la documentation du fichier actions.py
avant de modifier quoi que ce soit qui puisse mettre en péril le programme,
et vous devez posséder un minimum de connaissances en programmation Python,
ainsi qu'en Programmation Orientée Objet (OOP) en général, avant de vous essayer.
Et plutôt que de vous donner de longues explications, voici quelques exemples d'actions personnalisées que vous pourriez créer, mais il est cependant important de lire la documentation.
Pour une action qui n'est activée que lors de sa création, puis est supprimée :
"""
Il est aussi important de préciser que ce code doit être écrit dans le fichier 'actions.py',
en dessous de la définition de la classe Action, ou qu'il doit être importé à un moment dans
le programme sans causer d'erreurs.
"""
# Hérite de la classe 'Action'
class TemporaryCustomAction(Action):
"""
Action personnalisée ne s'exécutant qu'une seule fois lors de son activation.
"""
def default(self):
"""
Cette action est appelée par défaut et à la fin de son exécution,
l'action est supprimée.
"""
# Votre code ici
Pour une action qui est appelée en continu chaque tour.
"""
Il est aussi important de préciser que ce code doit être écrit dans le fichier 'actions.py',
en dessous de la définition de la classe Action, ou qu'il doit être importé à un moment dans
le programme sans causer d'erreurs.
"""
# Hérite de la classe 'Action'
class ContinueCustomAction(Action):
"""
Action personnalisée ne s'exécutant qu'une seule fois lors de son activation.
"""
def activate(self):
"""
Cette action est appelée à la création de l'action et permet de conserver l'action.
"""
# Votre code ici
def update(self):
"""
Cette action est appelée à chaque tour après la méthode 'activate'.
"""
# Votre code ici
Le plateau peut être modifié sans avoir recouru aux cases personnalisées, mais permet de mettre en œuvre beaucoup de choses.
Lors du lancement du jeu, le plateau est généré à partir du fichier data/board.json
,
que vous pouvez modifier.
Regardons d'un peu plus près le contenu :
{
// Dimensions du plateau :
// Largeur
"width": 8,
// Hauteur
"height": 8,
// Cases du jeu, dans l'ordre de déplacement
"tiles": [
"start", "default", "default", "default", "default", "goose", "bridge", "default",
"default", "goose", "default", "default", "bridge", "default", "goose", "default",
"default", "default", "goose", "hotel", "default", "default", "default", "goose",
"default", "default", "dices", "goose", "default", "default", "default", "well",
"goose", "default", "default", "default", "goose", "default", "default", "default",
"default", "goose", "maze", "default", "default", "default", "goose", "default",
"default", "default", "goose", "default", "jail", "dices", "goose", "default",
"default", "default", "skull", "goose", "default", "default", "default", "end"
]
}
Que signifie "dans l'ordre de déplacement" ? Eh bien, cela signifie que le nom des cases tel que vous le voyez n'est pas sous forme de spirale, à la fin de la première ligne, un virage est créé visuellement pour faire un effet de spirale, mais les cases suivantes seront celles de la deuxième ligne, et non celles de bord droit.
Maintenant que vous savez cela, vous pouvez très facilement changer l'ordre des cases,
utiliser vos cases personnalisées en plaçant leur nom, mais le nombre total de nom de cases
dans le dictionnaire tiles
doit être égal à width * height
, ou vous pourriez faire
face à des bugs, ou des phénomènes inattendus.
Soit dit en passant, si un nom de case ne figure pas dans le fichier data.tiles.json
,
une erreur sera levée.
Vous pouvez aussi faire varier les valeurs de width
et height
,
mais si elles ne sont plus comprises entre 1 et 8, une erreur sera produite.