Un jeu d’aventure en C multiplateforme

Le langage C a été conçu pour rendre les programmes portables. Grâce aux compilateurs, le même code source peut fonctionner aussi bien sur un PC moderne que sur un vieil ordinateur des années 80s.

Dans cet article, j’ai adapté le jeu d’aventure Sorcellerie (voir l’article dédié sur le portage de Sorcellerie en langage C) afin qu’il fonctionne non seulement sur un PC moderne sous Linux (grâce au compilateur gcc), mais également sur les Apple II, Atari 8bits et Commodore 64 (grâce au compilateur cc65).

L’adaptation a été très légère, le plus gros du travail étant la reprise du makefile.

Voici le code source de Sorcellerie en version multiplateforme :

Le code source a été légèrement modifié pour prendre en compte les spécificités de l’ordinateur cible. Par exemple, pour les vieux ordinateurs avec un microprocesseur 6502, l’affichage est amélioré grâce à la librairie conio.h. Mais celle-ci n’est pas utilisée dans l’environnement Linux, alors que le code source est le même.

Mais comment cela est-il possible ? Grâce à la compilation conditionnelle que permet le pré-processeur du compilateur C. Les directives #ifdef ou #if defined du pré-processeur vont tester si des macros sont définies et inclure du code spécifique. Par exemple, dans le module princ.c, la fonction draw_hline() est appelée uniquement lorsque CONIO est définie :

#ifdef CONIO
    draw_hline(SCREEN_WIDTH);
#endif

la macro CONIO est définie dans le fichier sorcellerie.h, en fonction des macros __APPLE2__, __ATARI__ ou __C64__. Ces dernières sont automatiquement définies suivant le choix de l’ordinateur cible (option -t). Par exemple, si la cible choisie est atari, la macro __ATARI__ sera définie. Voici l’extrait de code de sorcellerie.h permettant de positionner la macro CONIO en fonction de la cible :

#if defined __APPLE2ENH__ || defined __APPLE2__ | defined __ATARI__ || defined __C64__
#define CONIO
#include <conio.h>
#define SCREEN_WIDTH        40
#else
#define SCREEN_WIDTH        80
#endif

La macro CONIO est ensuite utilisée pour appeler des fonctions d’affichage de la librairie conio.h.

Il est ainsi possible d’inclure du code spécifique à chaque plateforme cible. Exemple de code spécifique aux cibles atari et c64, extrait du fichier source util.c :

La première étape est d’extraire les fichiers de l’archive et de se positionner dans le répertoire sorcellerie :

Pour compiler, saisir la commande suivante depuis un terminal :

Puis lancer le programme :

Vous devriez visualiser la fenêtre suivante :

Pour compiler puis transférer l’exécutable sur l’image de disquette sorcellerie.dsk :

Le transfert sur l’image disque nécessite d’installer l’utilitaire AppleCommander. Pour que l’installation fonctionne, il est nécessaire d’installer le shell ac dans le répertoire $HOME/bin.

Vous pouvez ensuite jour grâce à l’émulateur AppleWin. Ce dernier fonctionne très bien sous Linux avec Wine. Il suffit d’ouvrir l’image de la disquette bootable sorcellerie.dsk puis de démarrer le jeu en saisissant la commande suivante dans l’émulateur :

Le jeu démarre :

Pour générer l’exécutable sorcellerie.xex :

Il est ensuite possible de lancer le programme avec l’émulateur Altirra. Après avoir lancé l’émulateur, sélectionner le menu File / Boot Image... Sélectionner ensuite le fichier sorcellerie.xex. Le programme démarre instantanément :

Pour compiler et fabriquer l’exécutable sorcellerie_c64 :

Vous pouvez alors jouer avec l’émulateur Vice, qui fonctionne sous Windows et, grâce à Wine, sous Linux.

Lancer l’émulateur puis appuyer sur la touche F12. Sélectionner alors l’option Autostart image qui vous permettra de charger le fichier sorcellerie_c64. Le programme démarre au bout de quelques dizaines de secondes (c’est un peu long).

Le programme fonctionne également sur un PC Windows, à condition que le compilateur gcc soit y installé. La procédure d’installation est détaillée dans cet article.

La procédure de compilation est la même que sous Linux. Depuis l’invite de commande :

Ou tout simplement :

Il est également possible d’installer cc65 dans l’environnement Windows et de lancer la cross-compilation pour Atari, Apple II et Commodore 64. Les commandes sont les mêmes.

Pour que l’installation de l’exécutable pour Apple II sur l’image de la disquette fonctionne, il est nécessaire d’installer AppleCommander. Le fichier java AppleCommander-ac-x.y.z.jar (x.y.z correspondant à la version utilisée) est à placer dans le répertoire $BIN. Cette variable d’environnement est à créer si elle n’existe pas. Pour copier l’exécutable pour Apple II sur le fichier image sorcellerie.dsk, la commande est la même que sous Linux : make disk_a2. Cependant, sous Windows, le makefile exécute le fichier install_a2.bat qui se charge de la copie.

Il est également possible d’exécuter sorcellerie sur d’autre ordinateurs :

Soit avec cc65 pour des ordinateurs à processeur de 6502, en choisissant d’autres cibles (option -t).

Soit avec d’autres compilateurs C pour d’autre plates-formes, et le choix est immense… A vous de jouer !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *