Python >> Tutoriel Python >  >> Python GUI >> Pygame GUI

Construire un framework de jeu avec Python en utilisant le module Pygame

Dans mon premier article de cette série, j'ai expliqué comment utiliser Python pour créer un jeu de dés simple basé sur du texte. Vous avez également utilisé le module Turtle pour générer des graphiques simples. Dans cet article, vous commencez à utiliser un module appelé Pygame pour créer un jeu avec des graphismes.

Le module Turtle est inclus avec Python par défaut. Quiconque a installé Python a également Turtle. Il n'en va pas de même pour un module avancé comme Pygame. Comme il s'agit d'une bibliothèque de code spécialisée, vous devez installer Pygame vous-même. Le développement Python moderne utilise le concept d'environnements virtuels , qui fournit à votre code Python son propre espace d'exécution et aide également à gérer les bibliothèques de code utilisées par votre application. Cela garantit que lorsque vous transmettez votre application Python à un autre utilisateur pour jouer, vous savez exactement ce qu'il doit installer pour que cela fonctionne.

Vous pouvez gérer votre environnement virtuel Python manuellement ou vous pouvez laisser votre IDE vous aider. Pour l'instant, vous pouvez laisser PyCharm faire tout le travail. Si vous n'utilisez pas PyCharm, lisez l'article de László Kiss Kollár sur la gestion des packages Python.

Démarrer avec Pygame

Pygame est une bibliothèque, ou module Python . C'est une collection de code commun qui vous évite d'avoir à réinventer la roue à chaque nouveau jeu que vous écrivez. Vous avez déjà utilisé le module Turtle, et vous pouvez imaginer à quel point cela aurait pu être complexe si vous aviez dû écrire le code pour créer un stylo avant de dessiner avec. Pygame offre des avantages similaires, mais pour les jeux vidéo.

Un jeu vidéo a besoin d'un décor, d'un monde dans lequel il se déroule. Dans Pygame, il existe deux manières différentes de créer votre paramètre :

  • Définir une couleur d'arrière-plan
  • Définir une image d'arrière-plan

Dans tous les cas, votre arrière-plan n'est qu'une image ou une couleur. Vos personnages de jeux vidéo ne peuvent pas interagir avec les éléments en arrière-plan, alors n'y mettez rien de trop important. C'est juste de la vinaigrette.

Configurer votre premier script Pygame

Pour démarrer un nouveau projet Python, vous devez normalement créer un nouveau dossier sur votre ordinateur et placer tous vos fichiers de jeu dans ce répertoire. Il est extrêmement important que vous conserviez tous les fichiers nécessaires à l'exécution de votre jeu dans votre dossier de projet.

PyCharm (ou tout autre IDE que vous utilisez) peut le faire pour vous.

Pour créer un nouveau projet dans PyCharm, accédez au Fichier menu et sélectionnez Nouveau projet . Dans la fenêtre qui apparaît, entrez un nom pour votre projet (comme game_001 .) Notez que ce projet est enregistré dans un PycharmProjects spécial dossier dans votre répertoire personnel. Cela garantit que tous les fichiers dont votre jeu a besoin restent au même endroit.

Lors de la création d'un nouveau projet, laissez PyCharm créer un nouvel environnement à l'aide de Virtualenv et acceptez toutes les valeurs par défaut. Activez l'option pour créer un main.py fichier (et pour configurer certaines valeurs par défaut importantes.)

Après avoir cliqué sur Créer , un nouveau projet apparaît dans votre fenêtre PyCharm. Le projet consiste en un environnement virtuel (le venv répertoire répertorié dans la colonne de gauche) et un fichier de démonstration appelé main.py .

Supprimer tout le contenu de main.py afin que vous puissiez entrer votre propre code personnalisé. Un script Python commence par le type de fichier, votre nom et la licence que vous souhaitez utiliser. Utilisez une licence open source pour que vos amis puissent améliorer votre jeu et partager leurs modifications avec vous :

#!/usr/bin/env python3
# by Seth Kenlon

## GPLv3
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

Indiquez ensuite à Python quels modules vous souhaitez utiliser. Dans cet exemple de code, vous n'avez pas besoin de taper le caractère # ou quoi que ce soit après sur chaque ligne. Le caractère # en Python représente un commentaire , notes dans le code laissées pour vous-même et les autres codeurs.

import pygame  # load pygame keywords
import sys     # let  python use your file system
import os      # help python identify your OS

Notez que PyCharm ne comprend pas ce qu'est Pygame et le souligne pour le marquer comme une erreur. En effet, Pygame, contrairement à sys et os, n'est pas inclus par défaut avec Python. Vous devez inclure Pygame dans votre répertoire de projet avant de pouvoir l'utiliser avec succès dans le code. Pour l'inclure, passez votre souris sur le mot pygame jusqu'à ce que vous voyiez une notification contextuelle expliquant l'erreur.

Cliquez sur Installer le package pygame dans la boîte d'alerte et attendez que PyCharm installe Pygame dans votre environnement virtuel.

Une fois installé, l'erreur disparaît.

Sans un IDE comme PyCharm, vous pouvez installer manuellement Pygame dans votre environnement virtuel en utilisant le pip commande.

Sections de codes

Étant donné que vous travaillerez beaucoup avec ce fichier de script, il est utile de créer des sections dans le fichier pour savoir où placer les éléments. Pour ce faire, utilisez des commentaires de bloc, qui sont des commentaires qui ne sont visibles que lorsque vous consultez votre code source. Créez quatre blocs dans votre code. Ce sont tous des commentaires que Python ignore, mais ce sont de bons espaces réservés pour vous lorsque vous suivez ces leçons. J'utilise toujours des espaces réservés lorsque je code, car cela m'aide à m'organiser et à planifier.

'''
Variables
'''

# put variables here


'''
Objects
'''

# put Python classes and functions here


'''
Setup
'''

# put run-once code here


'''
Main Loop
'''

# put game loop here

Ensuite, définissez la taille de la fenêtre pour votre jeu. Gardez à l'esprit que tout le monde n'a pas un grand écran d'ordinateur, il est donc préférable d'utiliser une taille d'écran qui convient à "la plupart" des ordinateurs.

Il existe un moyen de basculer en mode plein écran, comme le font de nombreux jeux vidéo modernes, mais puisque vous débutez, restez simple et ne définissez qu'une taille.

'''
Variables
'''
worldx = 960
worldy = 720

Le moteur Pygame nécessite une configuration de base avant de pouvoir l'utiliser dans un script. Vous devez définir la fréquence d'images, démarrer son horloge interne et démarrer (à l'aide du mot-clé init , pour initialiser ) Pygame.

Ajoutez ces variables :

fps   = 40  # frame rate
ani   = 4   # animation cycles

Ajoutez des instructions pour démarrer l'horloge interne de Pygame dans la section Configuration :

'''
Setup
'''

clock = pygame.time.Clock()
pygame.init()

Vous pouvez maintenant définir votre arrière-plan.

Définir l'arrière-plan

Avant de continuer, ouvrez une application graphique et créez un arrière-plan pour votre monde de jeu. Enregistrez-le sous stage.png dans un dossier appelé images dans votre répertoire de projet. Si vous avez besoin d'un point de départ, vous pouvez télécharger un ensemble d'arrière-plans Creative Commons sur kenny.nl.

Il existe plusieurs applications graphiques gratuites que vous pouvez utiliser pour créer, redimensionner ou modifier les graphiques de vos jeux.

  • Pinta est une application de peinture de base facile à apprendre.
  • Krita est un émulateur de matériaux de peinture de niveau professionnel qui peut être utilisé pour créer de belles images. Si vous êtes très intéressé par la création d'art pour les jeux vidéo, vous pouvez même acheter une série de didacticiels d'art de jeu en ligne.
  • Inkscape est une application graphique vectorielle. Utilisez-le pour dessiner avec des formes, des lignes, des splines et des courbes de Bézier.

Votre graphique n'a pas besoin d'être complexe, et vous pouvez toujours revenir en arrière et le modifier plus tard. Une fois que vous avez un arrière-plan, ajoutez ce code dans la section de configuration de votre fichier :

world = pygame.display.set_mode([worldx,worldy])
backdrop = pygame.image.load(os.path.join('images','stage.png'))
backdropbox = world.get_rect()

Si vous souhaitez simplement remplir l'arrière-plan de votre monde de jeu avec une couleur, tout ce dont vous avez besoin est :

world = pygame.display.set_mode([worldx, worldy])

Vous devez également définir une couleur à utiliser. Dans votre section de configuration, créez des définitions de couleurs en utilisant des valeurs pour le rouge, le vert et le bleu (RVB).

'''
Variables
'''

BLUE  = (25, 25, 200)
BLACK = (23, 23, 23)
WHITE = (254, 254, 254)

Attention aux erreurs

PyCharm est strict, et c'est assez typique pour la programmation. La syntaxe est primordiale ! Lorsque vous saisissez votre code dans PyCharm, des avertissements et des erreurs s'affichent. Les avertissements sont jaunes et les erreurs sont rouges.

Cependant, PyCharm peut parfois être trop zélé, il est donc généralement prudent d'ignorer les avertissements. Vous violez peut-être le "style Python", mais ce sont des conventions subtiles que vous apprendrez avec le temps. Votre code fonctionnera toujours comme prévu.

Les erreurs, en revanche, empêchent votre code (et parfois PyCharm) de faire ce que vous attendez. Par exemple, PyCharm insiste beaucoup pour qu'il y ait un caractère de saut de ligne à la fin de la dernière ligne de code, donc vous devez appuyez sur Entrée ou Retourner sur votre clavier à la fin de votre code. Si vous ne le faites pas, PyCharm refuse discrètement d'exécuter votre code.

Lancer le jeu

À ce stade, vous pourriez théoriquement commencer votre partie. Le problème est que cela ne durerait qu'une milliseconde.

Pour le prouver, sauvegardez puis lancez votre jeu.

Si vous utilisez IDLE, lancez votre jeu en sélectionnant Run Module dans le menu Exécuter.

Si vous utilisez PyCharm, cliquez sur le Run file bouton dans la barre d'outils en haut à droite.

Vous pouvez également exécuter un script Python directement depuis un terminal Unix ou une invite de commande Windows, tant que vous êtes dans votre environnement virtuel.

Quelle que soit la façon dont vous le lancez, ne vous attendez pas à grand-chose, car votre partie ne dure que quelques millisecondes en ce moment. Vous pouvez résoudre ce problème dans la section suivante.

Boucle

Sauf indication contraire, un script Python s'exécute une fois et une seule. Les ordinateurs sont très rapides de nos jours, donc votre script Python s'exécute en moins d'une seconde.

Pour forcer votre jeu à rester ouvert et actif assez longtemps pour que quelqu'un puisse le voir (et encore moins y jouer), utilisez un while boucle. Pour que votre jeu reste ouvert, vous pouvez définir une variable sur une certaine valeur, puis indiquer un while boucle pour continuer à boucler tant que la variable reste inchangée.

Ceci est souvent appelé "boucle principale" et vous pouvez utiliser le terme main comme variable. Ajoutez ceci n'importe où dans votre section Variables :

main = True

Pendant la boucle principale, utilisez les mots-clés Pygame pour détecter si les touches du clavier ont été enfoncées ou relâchées. Ajoutez ceci à votre section de boucle principale :

'''
Main loop
'''

while main:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            try:
                sys.exit()
            finally:
                main = False

        if event.type == pygame.KEYDOWN:
            if event.key == ord('q'):
                pygame.quit()
            try:
                sys.exit()
            finally:
                main = False

Assurez-vous d'appuyer sur Entrée ou Retourner après la dernière ligne de votre code afin qu'il y ait une ligne vide au bas de votre fichier.

Toujours dans votre boucle principale, rafraîchissez l'arrière-plan de votre monde.

Si vous utilisez une image pour l'arrière-plan :

world.blit(backdrop, backdropbox)

Si vous utilisez une couleur pour le fond :

world.fill(BLUE)

Enfin, dites à Pygame de tout actualiser à l'écran et d'avancer l'horloge interne du jeu.

    pygame.display.flip()
    clock.tick(fps)

Enregistrez votre fichier et exécutez-le à nouveau pour voir le jeu le plus ennuyeux jamais créé.

Pour quitter le jeu, appuyez sur q sur votre clavier.

Gelez votre environnement Python

PyCharm gère vos bibliothèques de code, mais vos utilisateurs n'exécuteront pas votre jeu à partir de PyCharm. Tout comme vous enregistrez votre fichier de code, vous devez également préserver votre environnement virtuel.

Accédez aux Outils menu et sélectionnez Configuration requise pour la synchronisation de Python . Cela enregistre les dépendances de votre bibliothèque dans un fichier spécial appelé requirements.txt . La première fois que vous synchronisez vos exigences, PyCharm vous invite à installer un plugin et à ajouter des dépendances. Cliquez pour accepter ces offres.

Un requirements.txt est généré pour vous et placé dans votre répertoire de projet.

Code

Voici à quoi votre code devrait ressembler jusqu'à présent :

#!/usr/bin/env python3
# by Seth Kenlon

# GPLv3
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

import pygame
import sys
import os

'''
Variables
'''

worldx = 960
worldy = 720
fps = 40  # frame rate
ani = 4   # animation cycles
main = True

BLUE = (25, 25, 200)
BLACK = (23, 23, 23)
WHITE = (254, 254, 254)


'''
Objects
'''

# put Python classes and functions here


'''
Setup
'''

clock = pygame.time.Clock()
pygame.init()
world = pygame.display.set_mode([worldx, worldy])
backdrop = pygame.image.load(os.path.join('images', 'stage.png'))
backdropbox = world.get_rect()


'''
Main Loop
'''

while main:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            try:
                sys.exit()
            finally:
                main = False

        if event.type == pygame.KEYDOWN:
            if event.key == ord('q'):
                pygame.quit()
            try:
                sys.exit()
            finally:
                main = False
    world.blit(backdrop, backdropbox)
    pygame.display.flip()
    clock.tick(fps)

Que faire ensuite

Dans le prochain article de cette série, je vais vous montrer comment ajouter à votre monde de jeu actuellement vide, alors commencez à créer ou à trouver des graphiques à utiliser !