Le 4 juin 2008
La version 2008 du collège 3D est terminée.
Voici tout d’abord une vidéo du jeu :
Dans tous les cas, il faut d’abord installer Python et Soya3D, ainsi que pygame pour les musiques.
On peut aussi ajouter Psyco qui permet d’accélérer le fonctionnement du programme.
pour Linux : Python est normalement déjà installé. Installer soya et pygame si ce n’est déjà fait (pour Ubuntu, ce sont les paquets "python-soya" et "python-pygame"). Ajouter éventuellement psyco (paquets "python-psyco").
pour Windows : tout est décrit dans l’article Installation pour les "windowsiens".
Télécharger le fichier college3d_2008.tar.gz joint à cet article (voir au bas de la page).
Ensuite, le décompresser (cela donne un dossier "college3d" et sous Windows il faudra sans doute décompresser en 2 fois) et lancer le fichier "college3d.pyw".
On peut ensuite se créer un lanceur vers l’emplacement du fichier "college3d.pyw".
Python est le langage de programmation dans lequel "Collège 3D" est développé.
Pyrex permet de lier Python avec le langage C (il est utilisé par Soya).
Soya3D est le moteur 3D.
PIL permet de manipuler les images.
Pygame est utilisé pour les sons.
Psyco permet d’accélérer les programmes écrits en Python.
13/04/2008
Quelques modifications suite aux premières visites d’élèves de CM2.
22/03/2008
Un gros travail sur les scénarios, en prévision de la visite du collège par les élèves de CM2.
02/03/2008
Les salles C13 et A15 sont faites !
Mises à jour précédentes
Les intérieurs des bâtiments B et C sont en place, ainsi que les escaliers pour accéder aux étages.
Une première texture est visible en salle info.
Le club a lieu une fois par semaine et il y a une quinzaine d’élèves.
Comme tous sont débutants, il y a une période d’apprentissage des logiciels à utiliser (Blender et Gimp) qui devrait prendre à peu près tout le premier trimestre.
L’objectif pour cette année est de s’attaquer aux intérieurs des bâtiments (cloisons et portes avec leurs textures ; ça suffira bien pour commencer) et de faire les escaliers pour qu’on puisse se rendre aux étages.
D’autre part, les élèves du club serviront aussi de testeurs du jeu et feront les scénarios.
En parallèle, je m’occupe du développement afin de pouvoir intégrer tout cela.
Description des modifications apportées depuis la version précédente.
Un menu au lancement du jeu :

Sons et musiques :
Ils sont gérés par PyGame.
Scénarios :
Début d’essai d’une sorte de moteur de scénarios. Un premier scénario pour faire des tests consistant à trouver l’entrée des différents bâtiments.
2 caméras :
Il y a maintenant 2 possibilités de vue :
On passe d’un mode à l’autre avec la touche c.
Détails chargés à la demande :
Afin d’éviter de trop gros fichiers et de ralentir le jeu, les détails peuvent être chargés en fonction de la proximité du joueur. Par exemple, l’intérieur du bâtiment B ne sera chargé que si l’on est assez proche de lui, et déchargé si on s’éloigne.
Résolution du problème des collisions :
Avec l’ajout de détails, les fichiers deviennent plus gros et les collisions ont de plus en plus de mal à fonctionner. C’est particulièrement visible sous le hall, du fait des casiers qui sont faits de nombreux morceaux, et le personnage et la caméra ont tendance à s’y bloquer.
La solution adoptée est la suivante :
Le "monde" est séparé en 2 parties :
Les fichiers Blender sont créés en double, le premier pour la partie visible, et le second (avec l’ajout du suffixe "_c") pour les collisions.
Par exemple, le fichier "Hall.blend" contient ce qui est visible dans le hall du collège (en particulier les casiers) :
Et le fichier "Hall_c.blend" contient des "cubes" à la place de la plupart des objets. Le toit y a été carrément supprimé :
Lorsqu’on est dans le jeu, on voit le premier fichier, mais le second est invisible et sert à gérer les collisions.
Le chargement des fichiers dans le fichier "college3D.py" se fait ainsi :
# level what you see, but no collisions :
level = soya.World.get("level_college")
level.solid = 0
scene.add(level)
# for collisions, but invisible :
level_c = soya.World.get("level_c_college")
level_c.visible = 0
scene.add(level_c)
9.3 Mo