Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Pierrick's Blog

.Net "full power"

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 :
Posted: dimanche 24 décembre 2006 16:25 par pierrick
Classé sous : , ,

Commentaires

Fox a dit :

C'est ENORME bravo Pierrick ...

Il y a Casta dans une option ?

# décembre 28, 2006 00:27

minsou a dit :

C'est vraiment du super travail ! Bravo !

# décembre 28, 2006 13:46

pierrick a dit :

Euh non Fox, il n'y a pas Casta

# décembre 28, 2006 18:24

Fox a dit :

:( dans la v2 avec les touches qui s'inverse, les pieces qui montent, le jeux qui disparait etc... ?

# décembre 28, 2006 18:31
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Kinect 1.5 is out ! par Cyril Sansus le il y a 23 heures et 22 minutes

- Les actualités de la semaine sur c2i.fr (14 mai - 20 mai) par Richard Clark le 05-21-2012, 08:50

- Reactive Extensions : Consommer des services avec Rx Partie 3, les pièges à éviter par Léonard Labat le 05-20-2012, 23:45

- SharePoint Blog Site, problème d’archives par Le Blog (Vert) d'Arnaud JUND le 05-20-2012, 13:09

- Soirée ALT.NET Mai - 3 présentations par #Rui le 05-18-2012, 11:59

- [ #SharePoint 2010][ #SQLServer 2012] AlwaysOn pour SharePoint (2/4) : Configuration (2e partie)… par Le blog de Patrick [MVP SharePoint] le 05-18-2012, 11:31

- Team Foundation Server 11: tous les trésors cachés du site d’équipe par Philess le 05-16-2012, 19:01

- [PowerShell 3] Télécharger et installer la documentation en ligne par Blog de SPBrouillet (Pierrick BROUILLET) le 05-16-2012, 17:36

- [#SharePoint 2010][#SQLServer 2012] AlwaysOn pour SharePoint (1/4) : Configuration (1ère partie)… par Le blog de Patrick [MVP SharePoint] le 05-16-2012, 12:10

- Job Day @MIC Brussels - .Net Developers on Mobile applications par Le Blog (Vert) d'Arnaud JUND le 05-15-2012, 20:26