Un tetris multijoueur utilisant les technos WPF, WCF, WF
Après avoir installé le nouveau framework .Net fourni par Microsoft dans sa version 3.0, j'ai voulu exploiter les nouvelles briques fournies (WPF, WCF, WF) au travers d'un petit jeu que tout le monde connait, puisqu'il s'agit d'un Tetris.
Dans le but d'utiliser toutes les briques du framework 3.0 (enfin presque, puisque j'ai laissé de coté InfoCard), j'ai réalisé ce jeu en mode multijoueurs (jusqu'à 9 joueurs).
Pour les fonctionnalités offerte par ce jeu, je me suis inspiré de "Tetrinet", pour ceux qui connaissent.
Je rappelle brièvement les règles : Empiler des formes géometrique les unes sur les autres afin de constituer des lignes complètes. Lorsque des lignes sont complète, elle disparaissent, et une option par ligne complète apparait alors. Et c'est ici que le mode multijoueur devient intéressant puisque ces options servent pour soi, mais aussi contre ses adversaires ( il y a des bonnes options (effacement de l'écran, ..), mais aussi des moins bonnes...(ajout de lignes, explosion...) :-)).
Vous l'aurez compris, l'interface graphique est réalisé via la couche WPF (Windows Presentation Foundation). La communication entre les joueurs utilise la couche WCF (Windows Communication Foundation). Enfin pour la gestion du demarrage du jeu en mode multijoueurs un workflow est utilisé via la brique WF (Workflow Foundation).
L'UI
elle se décompose en 2 couches. La fenêtre principale contient le jeu et la gestion des boites de dialogues.

Pour l'affichage du jeu, j'ai utilisé le pattern MVP (Model-View-Presenter)

Le model étant complètement autonome, non orienté UI, il est tout à fait possible de le réutiliser et d'y mettre une autre interface graphique.
Le réseau
Grâce à WCF, mettre une interface sur le réseau est un jeu d'enfant. Fini le remoting (SAO,CAO) et autre RemotingServices.GetLifetimeService(). Bref pour faire dialoguer mes applications a travers le réseau, je suis parti d'un exemple du SDK (le chat) en P2P. En effet en mode multijoueur je crée un maillage sur le serveur, ou chacun des joueurs peut s'y connecter.

Une fois que tous les joueurs sont connectés au maillage, il "discute" au travers d'une interface publiée

à chaque appel d'une méthode sur cette interface par un joueur, l'ensemble des joueurs reçoit l'appel, y compris celui qui à "envoyer" cet appel.

On remarque que la liaison en retour entre le "réseau" et le jeu se fait par événements. De plus pour mettre à jour UI, il ne faut pas oublier d'appeler Invoke sur le Dispatcher de l'UI si nécessaire.
N'oublier pas d'ouvrir les ports que vous avez configurés....sinon....
Le Workflow
Dernière brique du framework 3.0 utilisé dans ce jeu. Comme vous pouvez le constater le workflow n'a rien de bien complexe.

Quand le joueur "serveur" clic sur le menu "Game"-"Start Multiplayer game", Le workflow démarre et chacun recoit un "SendRequest".

Le workflow se termine quand l'ensemble des joueurs on répondu, ou quand le delai est dépassé (ici fixé à 10s).
Maintentant vous avez envie de jouer ?
Le jeu Tretris étant sous licence, je fournis les sources, à vous de les compiler.
Pour la compilation il vous faudra :
- Visual Studio 2005
- Framework .Net 3.0
- Framework .Net 3.0 SDK
- Workflow extension for Visual studio
Amusez vous bien, et Bonnes fêtes à tous !
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :