Excitebike est un jeu à défilement latéral dans lequel vous pilotez une moto sur des sauts, manœuvrez autour d'obstacles et accélérez vers la ligne d'arrivée.
Nintendo a d'abord lancé ce jeu de course BMX pour la NES. À partir de là, la société a modernisé Excitebike et l'a publié sur la N64 et, éventuellement, sur la Wii.
Il n'existe plus beaucoup de consoles NES, ce qui rend à nouveau difficile de jouer à Excitebike. Grâce à certains fans rétro de Wireframe Magazine, un extrait de code Python peut recréer ce classique NES pour des heures de plaisir sur votre Raspberry Pi ou votre PC personnel.
Obtention du code et configuration
Bien que vous puissiez utiliser nano ou vim pour éditer votre code python, vous voudrez profiter d'un outil complet éditeur de texte ou IDE.
Vous devrez installer Pygame Zero pour prendre en charge les fonctionnalités intégrées à cet hommage à Excitebike. Pygame Zero contient des modules Python permettant aux créateurs de jeux de se concentrer sans avoir à répéter des bases simples.
Si vous n'avez pas installé python3 sur votre PC, vous pouvez télécharger la dernière version depuis Python directement. Vous voudrez également assurez-vous que PIP est installé aussi.
Avec la dernière version de Python et PIP installée, ouvrez votre terminal PowerShell ou Linux et tapez :
pip3 installer pgzéro
Enfin, vous devrez récupérer une copie du code Python dans le référentiel GitHub du magazine Wireframe. Tapez la commande suivante dans un terminal :
git cloner https://github.com/Wireframe-Magazine/Wireframe-66.git
Alternativement, vous pouvez télécharger le code compressé directement depuis la page Wireframe GitHub.
Décomposer le code
Pour comprendre ce que fait le code, lancez d'abord le jeu Excitebike. Pour ce faire, accédez au code source, puis exécutez-le à l'aide de Pygame Zero :
CD Filaire-66/source-code-excitebike/
pgzrunvélo de sortie.py
Vous pouvez ensuite ouvrir le fichier exitebike.py avec un éditeur de texte pour afficher le code.
Le dessiner La fonction dessine l'arrière-plan au fur et à mesure que l'image du vélo se déplace. UN "blit" fait référence à un bloc dessiné à l'écran. Le mot, "arrière-plan," fait référence à l'image d'arrière-plan (la liaison des images au bloc d'arrière-plan se fait grâce aux modules Pygame Zero importés).
définitivementdessiner():
écran.blit("arrière-plan", (0, 0))
drawTrack()
vélo.dessiner()
screen.draw.text("CHRONO: "+str (int (time.time() - startTime)), (20, 555),color=(255,255,255), fontsize=50)
screen.draw.text("DERNIER TOUR: "+str (dernier tour), en haut à droite = (780, 555), color=(255,255,255), fontsize=50)
Vous remarquerez également des calculs pour le temps au tour et le dernier tour (ceci est représenté par le compteur de temps en bas de l'écran). Le temps au tour calcule en permanence la différence entre l'appui initial sur la touche fléchée droite (heure de début) et l'heure actuelle.
Le dernier tour est un calcul similaire. Au lieu de l'heure de départ, le temps est calculé à partir du moment où la moto passe une position de piste prédéfinie (mentionnée comme trackPos < -4800 dans le code). Les éléments ci-dessous entre guillemets représentent une image.
Ce code dessine des blocs d'image sur l'écran à certains intervalles et positions particulières sur l'écran. L'image de foule fournie ne mesure que 100 pixels de large. Pourtant, le code ci-dessous indique à l'ordinateur quand dessiner l'image afin qu'elle apparaisse comme s'il y avait une foule simulée derrière la moto lorsqu'elle se déplace.
Les images de roches sont affichées à l'écran en deux parties. Les deuxième et troisième lignes de code, ci-dessous, fonctionnent ensemble pour simuler le paysage de manière ordonnée.
Une fois que vous avez créé une copie de sauvegarde du code python, essayez de modifier les chiffres ci-dessous pour voir ce qu'il advient des rochers à l'écran !
écran.blit("foule1", ((t*100)+trackOffset-100, 0))
écran.blit("rocher1", ((t*100)+trackOffset-100, 270))
écran.blit("rocher1", ((t*100)+trackOffset-50, 270))
Vous souhaitez remplacer votre moto par un Monster truck, un quad ou un autre véhicule? Peut-être voulez-vous faire courir une licorne jusqu'à la ligne d'arrivée ?
Tout ce que vous avez à faire est de dessiner une image 50x50px (avec un fond transparent). Ensuite, placez ce fichier (image.png) dans le 'images' (dans le dossier code source-excitebike dossier). Vous voudrez créer deux images (une avec une hauteur légèrement augmentée) pour ajouter du réalisme. Tout ce que vous avez à faire est de changer la référence en 'vélo0' ici:
vélo = acteur('vélo0', centre=(150, 350), ancre=('centre', 'bas'))
Assurez-vous également d'effectuer une action de recherche et de remplacement avec le nom de l'image (sans l'extension d'image).
checkBikeRamp() est la fonction qui fait le travail pour calculer l'axe Y afin que votre moto (ou camion) monte la rampe (et obtienne de l'air sérieux si vous avez de la chance). Le clavier.droit et clavier.gauche les paramètres sont définis dans le mise à jour() fonction.
Ces bits de code indiquent à l'ordinateur de ralentir ou d'accélérer la moto (selon la touche sur laquelle l'utilisateur appuie sur le clavier). Traduction: Plus votre moto roule vite, plus le numéro de l'axe Y (ou très grand saut) est élevé.
Transversalement, la on_key_down (touche) fonction enverra votre moto en piqué.
si clé.nom == "BAS":
vélo.direction = 1
bike.laneY = limite(vélo.pisteY + 50, 375, 525)
vélo.y += vélo.direction
Le mucklane paramètre ralentira votre moto en utilisant le calcul suivant :
muckLane = entier((vélo.voieY-375)/50)+1
La ligne 66 du code détermine quand afficher l'image 'muck' à l'écran. Maintenant que l'ordinateur sait quand votre moto passera sur la boue, il ralentira de moitié la vitesse de votre moto lorsque vous vous déplacerez sur la boue sur la piste. Modifiez la valeur muckLane de /50 à /25 ou /75 pour voir ce qui se passe ensuite.
Coureurs (hum, programmeurs Python)! Démarrez vos moteurs!
Même si vous n'êtes pas à l'aise pour programmer cet hommage à Excitebike à partir de zéro, ce code reste une excellente introduction. En l'ajustant et en réalisant l'impact visuel des changements, vous pouvez en apprendre beaucoup. Allez-vous essayer d'ajouter plus de fonctionnalités ou de coureurs IA dans votre jeu? Allez-y!
Avec un peu de pratique Python à votre actif, une autre idée à essayer consiste à ajouter différents niveaux une fois que vous avez franchi la ligne d'arrivée après 4 ou 5 fois. De plus, vous voudrez peut-être ajouter des récompenses pour la première, la deuxième et la troisième place. Si vous êtes en première place, ajoutez également un fichier audio encourageant la foule! Il y a tellement de possibilités.
Lorsque vous êtes satisfait de vos améliorations Excitebike, pourquoi ne pas vous lancer dans la création d'un jeu d'aventure textuel? Il existe de nombreuses pièces différentes qui vous permettront d'apprendre quelque chose d'excitant pendant des heures, des jours ou même des semaines !