Application Android utilisant la géolocalisation
![]() | |
---|---|
Titre du projet | Application Android utilisant la géolocalisation |
Cadre | Projets de spécialité |
Page principale | Application Android utilisant la géolocalisation
|
Équipe | Benoît Raymond, Matiaz Ouine, David Duménil, Florian Guffon |
Encadrants | Catherine Oriat |
Sommaire
Introduction
Pour notre projet de spécialité nous avons décidé de créer une application Android utilisant la géolocalisation. Cette application est en temps et position réels : l'utilisateur est localisé à sa position réelle et les déplacements apparaissent en temps réel. Pour utiliser cette fonctionnalité de manière ludique, nous avons décidé de créer un jeu de rôle multi-joueur.
Le but du jeu de rôle est d’être le plus fort possible, avoir le plus d’argent et posséder les meilleurs objets qui augmentent ses capacités d’attaques ou de défenses.
Pour améliorer ses caractéristiques, le joueur peut acheter ou vendre des objets (dans des lieux spécifiques) ou combattre d'autres joueurs.
Aussi, pour apporter une dimension sociale et utiliser la géolocalisation, le joueurs dispose d'une zone d’interaction maximale. Il peut interagir avec les lieux ou les autres joueurs uniquement dans cette zone ! Cette zone est représentée par un cercle d'1 km de rayon, autour de sa position géographique réelle.
L'application est de type client-serveur et comporte donc deux parties principales: l'application coté client et le traitement coté serveur. Afin d'assurer les communications entre les clients et le serveur, nous avons développé notre propre protocole de communication. Le serveur communique avec une base de données afin de gérer les données de l'application, mais également avec Google Place pour récupérer des lieux à proximité du joueur.
Application Android
L'application a été conçue de manière à séparer au maximum les mécanismes de géolocalisation, d'affichage et d’interaction du jeu en lui même et cela du coté client, mais également sur le serveur ainsi que dans la conception du protocole de communication. Ainsi le jeu que nous présentons ici n'est qu'un exemple de la multitude d'application qu'il serait possible de greffer sur cette base.
Fonctionnalités de l'application
Le jeu permet le combat entre joueurs, l'achat et l'utilisation d'objets augmentant les caractéristiques du joueur ainsi que l'envoi de messages entres joueurs.
Plus précisément, notre jeu de rôle multi-joueur permet les actions suivantes :
- Créer son pseudo
- Se connecter avec son pseudo
- Se positionner sur la carte
- Afficher les joueurs à proximité
- Afficher les lieux à proximité
- Afficher notre zone d'interaction
- Interagir avec les autres joueurs :
- Envoyer un message
- Combattre un joueur
- Interagir avec les lieux :
- Acheter des objets
- Vendre des objets
- Afficher la liste des messages reçus
- Répondre à un message reçu
- Afficher ses propres caractéristiques :
- Points de vie
- Attaque
- Défense
- Argent
- Afficher la liste de ses objets
- Afficher les infos sur un objet (nom,description, catégorie, caractéristiques, prix)
- Afficher les infos sur un lieu (nom, description)
- Afficher les infos sur un joueur (pseudo, caractéristiques)
Vous trouverez, dans la galerie ci-dessous, des captures d'écran qui détaillent l'interface et les fonctionnalités décrites précédemment.
- Galerie des fonctionnalités
Protocole
Pour assurer la communication entre le smartphone Android et le serveur de jeu nous avons créé un protocole de communication, nommé Géo Game Protocol (GGP).
Généralités
GGP est un protocole de communication client / serveur. Le principal attrait de ce protocole est la forte intégration de la géolocalisation.
Le protocole GGP se situe au niveau applicatif dans le modèle TCP/IP. Les messages sont formés exclusivement de texte. Enfin il ne définit pas de couche de transport spécifique. Dans le cadre de notre application, nous utilisons TCP pour assurer une bonne qualité de service.
Description et détails
Dans le protocole GGP il existe 3 grandes familles de messages. Les messages de positionnement (en vert sur le schéma ci-dessous), les messages d'informations (en rouge sur le schéma ci-dessous) et enfin les messages d’actions (en orange sur le schéma ci-dessous).
Les messages de positionnement, d’actions et d’informations peuvent s'enchaîner de n’importe quelle manière lors de l’échange client serveur.
Dans chaque grande famille il y a un message de requête, qui vient du client, et une réponse qui vient du serveur. Comme dans tout protocole Client/Serveur la requête du client précède obligatoirement la réponse du serveur.
Enfin, si une requête du client est erronée alors le serveur envoie, en lieu et place de la réponse attendue, un message de type ERROR.
Pour connaitre le détail des messages du protocole, nous vous invitons à consulter la documentation du protocole GGP (Fichier:Documentation protocole GGP.pdf)
Description du protocole dans le cadre d’un jeu géolocalisé
Le client partage sa position géographique avec le serveur grâce au message de type LOCALISATION. Le serveur répond avec un message UPDATEMAP où il partage la position des autres joueurs du jeu et des lieux.
Le client peut demander des informations sur les autres joueurs, les lieux du jeu et les objets. Pour interroger le serveur sur ces informations, il utilise un message GETINFO. Ensuite le serveur répond au client avec un INFO dont les données contiennent les informations demandées.
Le client notifie le serveur d’action qu’il veut effectuer, comme la connexion/déconnexion/création de compte, l’achat/vente d’objet, l’envoi de message, le combat entre joueurs, grâce au message SETACTION. Le serveur répond et donne le résultat de l’action dans un message ACTION.
Implémentation
Nous avons développé une implémentation de notre protocole pour le langage Java. Elle se décompose en 4 paquetages :
- GGPpacket : il définit une structure de données associée aux paquets GGP.
- packetCreation : il contient les outils permettant de créer des packets GGP.
- packetValidation : il permet de valider qu’un paquet reçu respecte bien les spécifications du protocole GGP.
- packetExceptions : il regroupe les exceptions qui peuvent être levées dans les paquetages précédents
Pour utiliser ce paquetage vous pouvez télécharger le fichier jar (Fichier:GGPpacket.zip) de notre implémentation. Nous vous invitons fortement à consulter la documentation du protocole (Fichier:Documentation protocole GGP.pdf), si vous souhaitez créer votre implémentation de GGP.
Pour le futur
Une évolution possible de GGP serait de sécuriser ces échanges. Cette évolution se nommerait GGPs. GGPs assurerait les propriétés de confidentialité, intégrité, authenticité et fraîcheur sur les messages échangés. GGPs conserverait le même format des messages et les mêmes types de messages.
Nos premières pistes pour assurer les propriétés précédentes sont :
- Chiffrer les messages
- Signer les messages par l’émetteur
- Utiliser une architecture PKI
Serveur et Base de Donnée
Le serveur de jeu permet de faire l’interface entre les clients et la base de données où sont enregistrées toutes les données relatives au jeu. Ce serveur permet aussi de faire le traitement des requêtes des joueurs et de leurs actions.
Le serveur écoute sur un port spécifique et attend les connexions. À chaque nouvelle connexion, il crée un thread indépendant qui va traiter la requête et renvoyer la réponse. Les paquets sont envoyés grâce au protocole de communication Geo Game Protocol (GGP).
Les traitements des requêtes effectués par les threads du serveur permettent de traiter les différents types de paquets du protocole GGP. Ils permettent aussi de lancer les algorithmes du jeu, notamment celui du combat.
Pour une description plus détaillé du serveur de jeu, consultez la documentation du serveur de jeu (Fichier:Documentation serveur jeu.pdf).
Architecture du serveur
Le schéma ci-dessous décrit l'architecture des paquetages du serveur de jeu
Paquetage server
Ce paquetage permet la réception des requêtes du client, via un Thread. Il permet également de traiter le paquet reçu. Enfin il contient l’interface RequestProcessing qui fait la liaison entre la partie communication du serveur et la partie traitement du jeu. Elle permet ainsi d’implémenter facilement un autre jeu ou une autre application basée sur les même principes tout en gardant la base commune.
Paquetage GGPpacket
Ce paquetage implémente le protocole GGP, créé au cours de notre projet. Pour voir les spécifications détaillés de GGP, se référer à la documentation détaillée du protocole GGP (Fichier:Documentation protocole GGP.pdf).
Paquetage game
Ce paquetage contient l’implémentation de l’interface RequestProcessing, appelée GameRequestProcessing et permet ainsi de traiter les différents paquets reçus suivant notre spécification pour le jeu. Il contient aussi les différents algorithmes de jeu.
Paquetage dataBase
Le paquetage dataBase fournit toutes les interactions avec la base de données (création d'un nouveau joueur, déconnexion d'un joueur, déplacement d'un joueur, ...)
Description de la BD
Le schéma ci-dessous décrit l'architecture de notre base de données. Elle est composée de trois tables principales : joueur, lieu et objet. Ces 3 tables représentent les différentes composantes de notre jeu.
Webographie
Documentations du projet
- Documentation du protocole GGP : Fichier:Documentation protocole GGP.pdf
- Implémentation du protocole en JAVA : Fichier:GGPpacket.zip
- Documentation du serveur de jeu : Fichier:Documentation serveur jeu.pdf
- Documentation de l'application mobile : Fichier:Documentation implem mobile.pdf
- Tutoriel Android (API GoogleMap, Géolocalisation) : Fichier:Tutoriel Android.pdf
Tutoriels utilisés
- Guide de développement Android: http://developer.android.com/guide/index.html
- Pour le drag and drop: http://blahti.wordpress.com/2011/10/03/drag-drop-for-android-gridview/
Auteurs
Projet de Spécialité 2012 | Géo Android Game : Application Android utilisant la géolocalisation |
Equipe | Benoît Raymond, Matiaz Ouine, David Duménil, Florian Guffon |
Encadrant | Catherine Oriat |
École | Grenoble INP -- Ensimag |
Date | Juin 2012 |