Application Android utilisant la géolocalisation

De Ensiwiki
Aller à : navigation, rechercher

Mycomputer.png  Deuxième Année  CDROM.png  Informatique 

Project schedule.png
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




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.

Capture d'écran de la carte du jeu



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.

Structure de l'application

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.

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.

Schéma du protcole GGP

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

Architecture 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.

Architecture de la base de données du jeu

Webographie

Documentations du projet

Tutoriels utilisés

Auteurs

Projet de Spécialité : Application Android utilisant la géolocalisation
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