Comment coder un jeu en ASCII dans le terminal

Coder un jeu en ASCII dans le terminal est un excellent moyen d’apprendre la programmation et de créer des jeux simples mais amusants. En utilisant des caractères ASCII, vous pouvez créer des interfaces visuelles dans le terminal. Voici une approche pour coder un jeu simple en ASCII dans le terminal, avec un exemple de jeu classique : le jeu du serpent (Snake).

Pré-requis

Nous allons utiliser Python pour ce tutoriel, car il dispose de bibliothèques puissantes et faciles à utiliser, et il fonctionne très bien pour les applications en terminal. Pour rendre ce jeu interactif, nous allons utiliser la bibliothèque curses qui est spécialement conçue pour la gestion des entrées et sorties en mode texte.

Étapes pour créer un jeu Snake en ASCII

  1. Installer Python et la bibliothèque curses :
    • Python est souvent préinstallé sur les systèmes Linux et MacOS. Sur Windows, vous devrez peut-être installer Python et utiliser un terminal compatible.
    • La bibliothèque curses est généralement incluse dans Python sur Linux et MacOS, mais elle peut nécessiter l’installation d’un package tiers sur Windows via windows-curses :bashCopierModifierpip install windows-curses
  2. Code du jeu Snake en ASCII : Voici un exemple simple de code Python pour un jeu Snake en ASCII dans le terminal :
pythonCopierModifierimport curses
import random

# Initialisation de l'écran curses
stdscr = curses.initscr()
curses.curs_set(0)  # Masquer le curseur
height, width = stdscr.getmaxyx()  # Taille de l'écran
win = curses.newwin(height, width, 0, 0)  # Créer une nouvelle fenêtre
win.keypad(1)  # Activer la saisie au clavier
win.timeout(100)  # Définir le temps de rafraîchissement en millisecondes

# Initialisation de la position du serpent
snake_x = width // 4
snake_y = height // 2
snake = [
    [snake_y, snake_x],
    [snake_y, snake_x - 1],

[snake_y, snake_x – 2]

] # Initialisation de la direction key = curses.KEY_RIGHT # Initialisation de la nourriture food = [height // 2, width // 2] win.addch(food[0], food[1], curses.ACS_PI) # Ajouter la nourriture à l’écran while True: next_key = win.getch() key = key if next_key == -1 else next_key # Calculer la nouvelle position de la tête du serpent if key == curses.KEY_RIGHT: new_head = [snake[0][0], snake[0][1] + 1] elif key == curses.KEY_LEFT: new_head = [snake[0][0], snake[0][1] – 1] elif key == curses.KEY_UP: new_head = [snake[0][0] – 1, snake[0][1]] elif key == curses.KEY_DOWN: new_head = [snake[0][0] + 1, snake[0][1]] # Insertion de la nouvelle tête snake.insert(0, new_head) # Vérification si le serpent mange la nourriture if snake[0] == food: food = None while food is None: new_food = [ random.randint(1, height – 1), random.randint(1, width – 1) ] food = new_food if new_food not in snake else None win.addch(food[0], food[1], curses.ACS_PI) # Ajouter une nouvelle nourriture else: tail = snake.pop() # Supprimer la dernière partie du serpent win.addch(tail[0], tail[1], ‘ ‘) # Vérification des collisions avec les murs ou soi-même if ( snake[0][0] in [0, height] or snake[0][1] in [0, width] or snake[0] in snake[1:] ): curses.endwin() quit() # Dessiner le serpent win.addch(snake[0][0], snake[0][1], curses.ACS_CKBOARD)

Explication du code :

  1. Initialisation avec curses :
    • curses.initscr() initialise l’écran.
    • curses.curs_set(0) cache le curseur pour rendre l’interface plus propre.
    • win = curses.newwin(height, width, 0, 0) crée une nouvelle fenêtre dans le terminal.
    • win.timeout(100) définit la durée entre chaque mise à jour du jeu (100 ms dans cet exemple).
  2. Création du serpent :
    • Le serpent est représenté par une liste de coordonnées [y, x].
    • Au départ, il est positionné au centre de l’écran et s’étend vers la gauche.
  3. Gestion des entrées clavier :
    • key = win.getch() attend l’entrée de l’utilisateur.
    • Le serpent se déplace en fonction de la touche pressée (KEY_RIGHT, KEY_LEFT, KEY_UP, KEY_DOWN).
  4. Manger la nourriture :
    • Le serpent « mange » la nourriture si sa tête touche la position de celle-ci.
    • Après avoir mangé, une nouvelle nourriture est générée à un emplacement aléatoire.
  5. Collision et fin du jeu :
    • Si le serpent touche un mur ou se mord la queue, le jeu se termine.
  6. Affichage :
    • Le serpent est dessiné à l’aide de win.addch() pour placer les caractères ASCII à l’écran. La tête du serpent est représentée par un « caractère spécial » et le corps par un autre.

Améliorations possibles :

  • Ajouter un score qui s’affiche à l’écran.
  • Ajouter des niveaux de difficulté (augmenter la vitesse du serpent).
  • Ajouter des effets sonores ou de la musique avec une bibliothèque externe.
  • Implémenter des menus et des options pour personnaliser le jeu.

Conclusion

Coder un jeu en ASCII dans le terminal est une manière amusante et éducative de s’exercer à la programmation en utilisant des outils simples. Le jeu du serpent est un excellent point de départ, mais vous pouvez créer d’autres jeux ASCII comme un jeu de Pong, un jeu de labyrinthe ou même un jeu de puzzle. L’important est d’explorer et d’expérimenter avec les possibilités offertes par les graphismes ASCII et les outils de programmation en terminal !

carle
carle