Projets

Jeux - PMgp3

Bonjour, voici un nouveau projet de jeu (PM game project 3), les deux précédents étant le SF2 et le DOOM dsp.

Le concept de ce jeu est très simple, proche de puzzle bobble: vous devez créer des chaînes de 3 billes ou plus pour qu'elles disparaissent de l'écran, avant qu'elles n'atteignent la sortie.

Plusieurs versions/clones de ce jeu existent déjà pour win32, MacOSX ou autres:

Il n'y a pas de version Linux, et encore moins de version Atari. Et j'aimerais remédier à ce désagrément.

20051003 - Un peu de dessin

Je suis pas un bon graphiste, et je pourrais toujours demander à quelqu'un de plus doué que moi pour cette partie là, mais j'ai besoin de matière pour démarrer. Donc voilà, il me faut:

20051004 - Un peu de code

Avec tous ces éléments, je peux commencer à coder un peu, donc là j'ai défini le chemin (la piste) sous forme d'une liste de segments, que les billes parcourent automatiquement.

En gros, ca donne ça:

pmgp3 screenshot

20051101 - Développement en pause

20051005 - Le joueur à l'écran

pmgp3 screenshot

Pour le joueur, j'ai le choix entre un machin rotatif au centre de l'écran (Puzz Loop, Zuma), ou bien une raquette de casse-briques (Luxor, Atlantis). J'ai choisi la raquette, j'ai qu'un dessin à faire. Le contrôle est fait à la souris.

Voilà avec la raquette affichée (et un peu de transparence au milieu, qu'on puisse voir les deux billes que le joueur peut utiliser.

20051006 - Le joueur en action

Donc maintenant, sélection aléatoire de deux billes pour le joueur, et affichage sous la raquette, et possibilité de shooter. Pas de bol, c'est la que je m'aperçois que la piste descend trop bas sur l'écran (sous la raquette), en plus j'ai pas prévu la place pour la barre d'état.

Ca commence à avoir de la gueule.

pmgp3 screenshot

20051011 - Les courbes de bézier

pmgp3 screenshot

Bon, il faut tout de même définir les morceaux de courbe de la piste, zou, un petit tour dans les maths pour savoir comment calculer des courbes de bézier. A la manière récursive, ça marche très bien.

En blanc, le chemin défini: segments droits, et courbes de bézier (3 points).

20051012 - Tous ensemble!

Voilà, maintenant les billes parcourent la piste défini en suivant la courbe. Je peux tirer dessus, petit test de collision (en fonction de la distance) et suppression de la bille qui a été touchée.

Bon là j'appuie sur une touche pour générer une nouvelle bille sur la piste. Donc quand on appuie trop vite, les billes se superposent.

pmgp3 screenshot

20051018 - La bille pousseuse

pmgp3 screenshot

Là aussi, un choix à faire. Dans Puzz Loop et Zuma, les billes sont dans une unique file, et avancent automatiquement. Dans Luxor et Atlantis, vous avez affaire à plusieurs files de billes successives, poussées par une autre bille.

Voilà ce que ça donne avec une bille pousseuse.

20051019 - Insertion de la bille tirée

Moment délicat, il faut maintenant insérer la bille tirée dans la file existante. Pas de bol, ya un bug, et il arrive que les billes restent coincées.

Voilà des billes coincées, car elles ne sont plus poussées.

pmgp3 screenshot

20051106 - Supprimer le recalcul des courbes de bézier

pmgp3 screenshot

Un premier bug corrigé: quand les billes se trouvaient sur une courbe, le calcul de distance entre les billes n'était pas fait correctement, et la distance entre deux billes devenait variable. Donc, maintenant les courbes de bézier sont découpées en segments pour faciliter les calculs, et aussi supprimer ce bug.

Les billes se retrouvent toujours coincées, car le déplacement des billes est gérée deux fois au lieu d'une: une fois quand elles sont poussées, et une fois en cas de collision avec la bille tirée. Gérer le déplacement dans une seule routine devrait résoudre ce bug.

20051116 - Décoinçage des billes

Autre correction de taille: les billes ne se retrouvent plus coincées après insertion de la bille tirée. Sur l'image, on voit la bille tirée juste au moment de la collision et les billes qui ont été poussées un peu plus loin.

pmgp3 screenshot

20051130 - Suppression des chaines

pmgp3 screenshot

Voila, maintenant quand la bille tirée se retrouve dans une chaine de 3 billes ou plus de même couleur, la chaine est supprimée. Ca marche pas à tout les coups, mais on peut vider toutes les billes de la piste maintenant, si on est assez rapide.

Nouveautés
Réalisations personnelles
Patches
Portages
Projets
HOW-TOs
Outils de développement
Créer un patch pour les binutils (Anglais, binutils 2.16.1)
Créer un patch pour gcc (Anglais, gcc 3.3.6, seulement pour le langage C)
Créer un patch pour gcc (Anglais, gcc 3.3.6, langage C++)
Divers

HTML 4.0 valide ! La montée de Pikes Peak Non aux brevets logiciels Nectarine demoscene radio
Ecrivez-moi à pmandin(at)caramail(point)com
(Adresse modifiée pour protéger des spammers)