Tifball : jeu de casse-briques 2d avec directx 9

Soyez le premier à donner votre avis sur cette source.

Vue 23 541 fois - Téléchargée 1 608 fois

Description

Ce programme est un jeu de casse-briques avec DirectX 9 et Visual Studio 2005.

On y trouve notamment :
- Déplacements d'images .PNG (ou .BMP) sur un fond d'écran .JPG (DirectX).
- Musique .MP3 et sons .WAV (DirectX).
- Calcul de collisions entre deux objets en mouvement.
- Ajout et récupération des images et des sons depuis un fichier '.resources' et stockage dans l'exécutable.
- Adaptation de la vitesse des objets en fonction du framerate.
- Enregistrement des high scores dans un fichier binaire avec signature MD5.

(Je joins également le projet 'Ressources' qui permet de visualiser comment le fichier TifBall.resources est généré).

Conclusion :


Quelques précisions :

MODES D'EXECUTION
1) Framerate synchronisé à la vitesse de l'écran.
2) Framerate maximal.

Pour ma config (Athlon 1800, 512 RAM, vidéo 128Mo et écran cathodique 85Hz), la solution 1) est la plus fluide (85 images/s constant).
Avec la solution 2), on ne limite pas le nombre d'images par seconde. Dès que le calcul des trajectoires est terminé, on affiche l'image à l'écran et on recommence le prochain calcul. (Je n'utilise pas non plus de 'Timer' qui déclenche l'affichage de l'image toutes les x millisecondes).
De cette manière, j'arrive parfois à plus de 200 images/s, mais comme le framerate varie beaucoup en fonction du nombre d'objets affichés, le jeu est finalement moins fluide.

MUSIQUE
Pour que le menu 'Musique' soit disponible, il suffit de copier un fichier mp3 nommé 'musique.mp3' dans le répertoire de l'exécutable.

IMAGES ET SONS
Ils sont stockés dans le fichier TifBall.resources.
(J'ai supprimé plusieurs éléments du fichier resources, afin de réduire sa taille pour la mise en ligne sur ce site).
Ces fichiers sont ensuite incorporés dans l'exécutable lors de la compilation.
les .PNG (balles, bonus, ...) ont une taille inférieure à 10Ko.
les .JPG (images de fond) ont une taille avoisinant les 200Ko.
les .WAV ont une taille inférieure à 20Ko.

PLANTAGES
Sur la plupart des PC (dont le mien), pas de plantage. Cependant, j'ai constaté des exceptions de DirectSound sur un PC récent. Non débuggé.

LIMITATIONS ET AMELIORATIONS
Encore beaucoup à faire ;)

1) Nombre de balles
Limité volontairement à 40 à cause du ralentissement du jeu lors de la multiplication des balles (le code du bonus 'trois balles' est à améliorer).
S'il n'y avait pas ce ralentissement, le jeu resterait fluide jusqu'à 200 balles environ avec ma config.

2) Levels
Il y a 20 levels. On peut compléter le fichier si on a du courage et de la patience, car c'est pénible ;)
Si on gagne le dernier level, on recommence au dernier level (...)

3) Collisions
- Les collisions sont limitées aux rectangles des images et non aux pixels.
On a donc parfois des 'colles dans le vide' ou des 'collisions à distance' (entre l'extrémité arrondie de la raquette et la balle par exemple).
- L'algo de collision entre les balles et les briques doit pouvoir être optimisé.
On teste des collisions aux endroits où il ne peut pas y en avoir (en dessous du mur de briques par exemple).

4) Vitesse des balles
La vitesse des balles augmente au cours du jeu. Cette augmentation de vitesse est cependant volontairement limitée car lorsque les balles sont trop rapides, elle font des 'bonds' visibles. (Si on augmente vraiment la vitesse, les balles finissent par passer au travers des briques...)

5) DirectX
Sur un PC, malgré l'installation de DirectX 9, le jeu a refusé de fonctionner (snif).
Pour résoudre le problème il a fallu copier les .DLL de DirectX directement dans le répertoire de l'exécutable :
- Microsoft.DirectX.AudioVideoPlayback.dll
- Microsoft.DirectX.Direct3D.dll
- Microsoft.DirectX.Direct3DX.dll
- Microsoft.DirectX.DirectSound.dll
- Microsoft.DirectX.dll

(...)

Si vous avez des remarques, des questions ou des améliorations à apporter n'hésitez pas à m'en faire part !

TiFred

lepiote21@free.fr

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

raouia_18
Messages postés
4
Date d'inscription
vendredi 24 novembre 2006
Statut
Membre
Dernière intervention
7 juin 2007
-
c'est bien continué je veux te donne 10/10
merci
Lepiote
Messages postés
1
Date d'inscription
vendredi 8 octobre 2004
Statut
Membre
Dernière intervention
17 juillet 2007
-
Merci Raouia_18 :)

Sinon, est-ce qu'il y en a qui ont réussi à battre mon high score à 5300K ?? :p
nycos62
Messages postés
11
Date d'inscription
vendredi 7 mars 2003
Statut
Membre
Dernière intervention
30 juillet 2007
-
Merci mec,

une vrai mine d'or pour les nazes en DirectX comme moi ;).
si tu avais un petit programme avec background et un perso 2D que tu fait bouger au clavier (animation de marche, attaque ...) çà serait le must. :))
DIMUSERS
Messages postés
37
Date d'inscription
jeudi 8 juin 2006
Statut
Membre
Dernière intervention
2 septembre 2010
-
Merci pour ce code manifique et instructif.
J'ai rarement vu un exemple aussi abouti.
Une chose m'interpelle cependant, je trouve étonnante ta technique de faire un Invalidate() dans le OnPaint(), ce qui pour moi va provoquer un rappel de la fonction OnPaint.
J'ai cru à une erreur (Ho !), et bien non, si on enlève cet appel, plus rien ne marche. J'avoue ne pas comprendre, et j'aimerai bien que tu m'expliques si tu as le temps ou alors que tu me revoies à un article expliquant celà.
Merci d'avance.
phoenikz
Messages postés
2
Date d'inscription
mardi 8 janvier 2008
Statut
Membre
Dernière intervention
17 avril 2008
-
Me suis bien amusé ! Merci

(ah, le but c'était le code... boah..)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.