Coucou !
Me voilà devant vous en ce soir tardif pour vous présenter un petit projet qui est en train de germer dans mon ordi ; j'ai peur que le fond comme la forme soient assez atypiques pour rebuter certains, mais bon : partager est bénéfique pour l'émulsion, je suis d'humeur à écrire, et j'ai envie de faire vivre ce forum. Trois bonnes raisons, c'est bien assez.
Alors, de quoi ça s'agit !
Brève présentation
Il appert (du verbe apparoir, allez vous cultiver, il est joli) qu'au long de mes tribulations sur cette toile où nous sommes tous pris au piège, j'ai croisé à de nombreuses reprises dans la communauté francophone des aveugles et déficients visuels technophiles. L'un d'eux a même été mon gourou dans l'apprentissage du langage auquel je voue désormais ma prédilection, Python.
J'en ai gardé deux amis proches, dont l'un avec lequel je dissertais récemment de la crise que subit le marché des jeux accessibles (alias audiogames) : à savoir, y'en a pas. Ou peu. Ou ils sont mauvais. Et ce, pour des raisons assez évidentes qu'il est inutile de détailler ici (on peut en parler plus bas dans le thread, si vous voulez). Je cherchais un projet à mener à plus ou moins long terme, d'abord pour me dérouiller les doigts en sortant de prépa, ensuite pour avoir quelque chose de concret sous le coude ; l'idée était toute trouvée.
L'idée
Je m'y suis lancé il y a quelques semaines : la création d'un moteur de jeu destiné explicitement à la création de jeux accessibles, en Python. Pour être précis, j'ai suivi le schéma de réflexion classique ("bah, je vais faire un jeu accessible"
Avant de passer à la suite, autant te prévenir, cher lecteur, que ce thread ne suivra sans doute pas le canevas des topics de présentation de projets que tu connais bien. En effet, vu la teneur du projet, je risque fort de ne pas avoir grand-chose à montrer niveau images, pour commencer. Plus vraisemblablement, je posterai régulièrement (ou pas) pour t'informer de l'avancée du projet, te montrer des bouts de code, te demander ton opinion sur des choix techniques ou te proposer une version de test totalement inutile mais probablement divertissante.
Avant que je m'égare, rentrons dans le vif du sujet
Mon objectif est de coder un moteur basique, proposant un empilement de couches d'abstractions suffisant pour que le développement d'un audiogame quel qu'il soit, soit facilité sans être prémâché. Et quand je dis quel qu'il soit, on peut envisager parmi les possibilités (liste non exhaustive) :
- un sidescroller (genre très en vogue chez les DVs) ;
- un RPG avec une dimension exploration sonore spatialisée ;
- un Point&Click, sans pointer ni cliquer (j'ai des idées là-dessus) ;
- un jeu de combat à la SF ;
- …
Pour cela, j'ai conçu et (en partie) spécifié une architecture modulaire que je décortiquerai dans le paragraphe suivant. Je suis actuellement en train de développer les modules de base du moteur ; partant de là, n'importe qui pourra prendre le code source du moteur une fois achevé et y greffer autant de modules de jeu qu'il le voudra, développés par ses bons soins et constituant ainsi, un jeu réel. Simple comme bonjour, hein.
L'architecture, comme promis :
1 2 3 4 5 6 7 8 9 10 11 12 | - abstraites - module # classe abstraite des modules - objet # la même pour les objets enregistrables - bases - config # module de config - log # devine... - importeur # gestionnaire des modules primaires, le papa du moteur - primaires - interpreteur # module d'interprétation des interactions utilisateur - audio # module de gestion du son (TTS entre autres) - affichage # l'affichage, parce qu'il en faut un peu, parce que je ne suis pas DV ! - enregistreur # ben, module d'enregistrement |
Tous ces modules sont coordonnés par un fichier à la racine qui les appelle dans l'ordre voulu ; la boucle d'exécution est gérée par l'importeur, qui a la main sur tous les modules ; chacun des modules primaires est au même niveau dans la hiérarchie, et peut interagir avec tous les autres. Ainsi, il suffit d'ajouter les modules pertinents pour que ce squelette devienne un jeu fonctionnel, comme je le disais plus haut.
Pour l'instant, les modules de config et de logging sont achevés, la conception et la programmation de la classe abstraite des modules et de l'importeur en bonne voie, et je spécifie le reste en parallèle. Oui, c'est seulement un début. D'ailleurs, si vous avez des commentaires ou des questions sur mon choix d'architecture, ils sont très bienvenus ; rien n'est gravé dans le marbre pour l'heure (j'attends d'avoir un interpréteur Python compatible avec le marbre, mais ça coûte cher).
Les choix technologiques
J'allais oublier d'en parlé, et pourtant j'ai eu du mal à me fixer. Le principal problème a été de trouver un moyen efficace de faire du TTS en Python 3.x, puisque je tiens à ma version 3. J'ai fini par trouver une lib nommée SteelTTS, la 2to3iser, et je suis satisfait de ce que j'obtiens. Pour ce qui est de la gestion de l'interaction, du son et de l'affichage fenêtré (nécessaire), j'ai choisi pySFML qui a le mérite inestimable d'offrir une spatialisation sonore efficace. Et en conséquence de ces choix, me voilà avec Python 3.2.4…
Le mot de la fin
Choucroute. Non, je plaisante ; ce thread vous est légué, toutes les remarques, conseils et questions sont les bienvenus ; notamment, si vous souhaitez un peu de détail sur les spécifications des modules vus plus haut, dites-le (j'ai été un peu évasif). Pour le reste, je posterai de temps en temps pour parler de mon avancée, évoquer les problèmes que je rencontre, tout ça (d'où le titre de worklog). Bonne soirée !
Note remisée à la fin parce que sujet sensible : je code en français. Pour l'instant. Par choix personnel et philosophique longuement mûri, appuyé entre autres par une parfaite maîtrise de la procrastination ("j'traduirai plus tard, si y'a besoin"). On ne discute pas, on ne se moque pas, merci pour votre tolérance et votre esprit ouvert qui vous fait honneur !
Choucroute.