Paper Ball

6
Rapport de projet Android Paper Ball Nelaupe Lucas Ferrand Anthony Faculté des Sciences Université de Montpellier 2 Abdelhak-Djamel SERIAI 27 mai 2015

description

Rapport Paper Ball Android App

Transcript of Paper Ball

  • Rapport de projet AndroidPaper Ball

    Nelaupe LucasFerrand Anthony

    Facult des SciencesUniversit de Montpellier 2

    Abdelhak-Djamel SERIAI

    27 mai 2015

  • Table des matires

    1 Introduction 31.1 Motivation pour le dveloppement dun jeu . . . . . . . . . . . . . . . . . . . . . . . . 31.2 Mthode de dveloppement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.3 Notre ide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.4 Notre travail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

    2 Notre framework de cration de jeu : Scyla 42.1 Modle multi-facettes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.2 Scne & forces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.3 Gestion des threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.4 Support multi-appareil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    3 Notre application 63.1 Lvolution de notre jeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.2 Utilisation des capteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.3 Enregistrement de la progression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.4 Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.5 Bibliothques utilises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.6 Dpt Github . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    2

  • 1 Introduction

    1.1 Motivation pour le dveloppement dun jeu

    Travailler sur un jeu nous a paru tre une ide ambitieuse pour plusieurs raisons. Premirement,cest une application complte et non triviale, ce sujet mixe la fois le dveloppement dune applicationpuissante et performante. Cependant, elle doit galement tre simple et extensible afin de dvelopper uncontenu consquent.

    1.2 Mthode de dveloppement

    Dans loptique dun travail en binme, nous avons mis en place quelques prceptes clefs des mthodesagiles : perptuelle amlioration par courte itration, runion et tests rguliers. Nous avons choisi Git,dont nous avons utilis les diffrentes fonctionnalits (Branch, issues...). Cela nous a permis de travaillerensemble, et davoir un dveloppement actif et efficace. De plus nous avons suivi des rgles strictes denmmage afin davoir un code clair.

    1.3 Notre ide

    Le but tait de crer une application o lon doit faire tomber une boule de papier dans une corbeillegrce la gravit. Pour pouvoir dplacer la balle horizontalement, lutilisateur pourra disposer de ventila-teurs pour la "pousser". On a choisi dajouter dautre lments de gameplay : des boules de feu qui nousfont perdre la partie si on les touche, ou encore une bulle deau qui protge la boule de papier et exploseau contact du feu.

    1.4 Notre travail

    Pour nous, il sest impos rapidement de dvelopper une application extensible et rutilisable. Cetteapplication est une partie du projet, nous lavons pens en framework.Scyla (nom donne notre framework de jeu) gre les diffrentes fonctionnalits quun jeu peut imaginer :gestion des diffrents lments affichs lcran comme par exemple les collisions, laffichage, ou encorele comportement des lments.Ce framework devra permettre lors de la cration des lments du jeu de sabstraire de toutes les difficultstechniques.

    3

  • 2 Notre framework de cration de jeu : Scyla

    2.1 Modle multi-facettes

    Lors de ce projet, nous avons mis en oeuvre ce que nous avons appris lors de notre parcours dinforma-ticien. Ainsi nous avons mis au point un paradigme de programmation unique pour grer les donnes deScyla, que lon a nomm "Modle multi-facettes". Le but de cette approche est de dcouper les donnes etle traitement. La mtaphore est de voir les modles comme des structures de donnes brutes, auxquelles onapplique un traitement spcifique que lon appelle facette. Lavantage de cette approche est quelle nouspermet de choisir pour chaque lments : une faon de lafficher, un comportement lors de la collision ouencore une action qui pourrait faire (par exemple, aller de gauche droite...). Cela se traduit sous cetteforme :

    Ball ball = new Ball();ball.defineMovingFacet(new MoveBetweenX(50, 100));

    Ce pseudo-code demandera la boule daller de gauche droite. La force de cette approche, est quonaurait aussi bien lui dire daller de haut en bas ou de suivre nimporte quel autre dplacement. De plus,cette approche permet de dfinir des comportements inlines via la possibilit de Java de crer des soustypes dune classe abstraite.

    Dans notre application, le modle est appel Shape, cela reprsente tous les diffrents lments quelon peut mettre dans une scne (voir plus bas). Point de vue implantation, nous avons utilis la gnricitF-Born pour paramtrer nos facettes, et avoir covariance des types de paramtres entrants dans lesmthodes de Shape. La gnricit F-Borne se prsente ainsi :

    class Shape

    Ainsi les classes filles doivent tre crites de cette manire

    class Ball extends Shape

    Notre approche est la fois performante, extensible, pratique utiliser et assure une prcisionmaximum des types statiques.

    2.2 Scne & forces

    Lors de la cration dune scne, il faut indiquer Scyla les diffrents lments quon souhaite utiliser.La scne peut recevoir trois types dlments diffrents :

    Dynamique : Ils sont sujets aux forces (voir plus bas) et leurs collisions sont vrifis chaque tourdhorloge.

    Statique : Ils peuvent avoir une collision avec les dynamiques, mais pas entre eux. Fantme : Ils ne peuvent pas avoir de collision.

    Cette slection permet doptimiser les tests que fait Scyla, cela permet davoir une performance maximalelors de lexcution.Scyla embarque aussi un systme de force qui peut sappliquer sur les lments dynamique, ce qui permetde les faire rebondir par exemple aprs une collision. La gravit est automatique mais peut tre retire sibesoin en fonction de llment.

    4

  • 2.3 Gestion des threads

    Scyla paralllise les diffrentes taches quil doit raliser. Tous les calculs de force et de collisionsont fait dans une tache part spcialise et consacre au calcul. Le rendu se fait quant lui sur le fildexcution principal dAndroid, car cest le seul qui permet de faire de laffichage. Cette implmentationnous permet de tirer le meilleur partie des appareils limits en ressource mais qui ont souvent desprocesseurs multi-curs.

    2.4 Support multi-appareil

    Quand on doit dvelopper une application mobile, on est forcment confront au problme de supportdes diffrentes tailles dcran. En effet, sur Android, les appareils vont de 3 pouces plus de 80 poucespour les TV. Nous avons donc dvelopp un systme qui permet de faire un rendu adapt la taille delcran de lutilisateur sans pour autant dgrader lexprience. Inspir du framework CSS Bootstrap, nousavons dvelopp un systme de grille. Celle-ci comporte 30 lignes et 40 colonnes. Le code suivant dcritun exemple dutilisation :

    grid.getPosition(column,row);

    Cette fonction permet de rcuprer un point sur lcran en fonction des paramtres donnes.

    grid.getPosition(20,15);

    Le code ci-dessus permet de rcuprer le point central de lcran. Et ce quelque soit la taille de lcran enquestion.

    Pour avoir une meilleur exprience utilisateur, Scyla nous permet dafficher des images. Dans lesparamtres du cadriciel il faut donc indiquer pour quel taille dcran on souhaite optimiser notre application.En ce qui nous concerne, nous avons choisi un cran 12.

    Si on excute le programme sur un tlphone 6, Scyla va automatique rduire limage de moiti. Lerendu sera donc exactement identique quelque soit lappareil.

    5

  • 3 Notre application

    3.1 Lvolution de notre jeu

    Notre application utilise et tend les lments de notre Framework. Cela permet lors de la cration dujeu de sabstraire des difficults techniques et de laisser notre esprit cratif.

    Nous avons ajout plusieurs lments graphiques et dfini les rgles dinteraction. Scyla se charge luimme des les appliquer.

    3.2 Utilisation des capteurs

    Pour grer la gravit, nous avons ajout un lment de jeu. Lutilisateur peut incliner la tablette vers lehaut ou vers le bas pour modifier lacclration de la pesanteur. Cela permet de contrler la vitesse dechute de la balle, mais galement de la faire remonter. Dans les niveaux difficiles, on peut donc prendreplusieurs fois les ventilateurs et ainsi tenter de rcuprer les pices.

    Le jeu demande une certaine dextrit. Pour avoir une meilleure prcision de dtection de mouvement,nous avons coupl trois capteurs :

    Acclromtre Capteur de gravit Capteur dacclration linaire

    3.3 Enregistrement de la progression

    Nous offrons lutilisateur la possibilit de crer un compte directement depuis lapplication. Dansce cas, la progression du joueur sera alors automatiquement sauvegarde sur un serveur distant. Ce quilui permet une continuit de jeu sur ses diffrents appareils. Lutilisateur commence un partie sur sontlphone et peu la continuer sur sa tablette.

    Dans le cas contraire, si lutilisateur nest pas connect, la progression est enregistr en locale.

    3.4 Service

    Nous avons implment un service dans notre application. Celui-ci nous permet dafficher unenotification et un message sur lappareil des utilisateurs. En effet, toutes les minutes, le tlphone vademander un serveur distant si une nouvelle mise jour existe. Lappareil envoie automatiquement sonnumro de version au serveur. Celui-ci lui rpond la liste des versions suprieures avec un message associ.Si lutilisateur est en retard, le service dclenche une notification et affiche le message en question.

    3.5 Bibliothques utilises

    Joda-time : Permet une gestion simple des dates et intervals de temps. Retrofit : Permet de faire des appels un serveur avec les diffrentes mthodes HTTP RxJava : Permet de faire de la programmation ractive, et donne une surcouche agrable pour le

    multi-threading.

    3.6 Dpt Github

    Nos applications sont disponible la page : https://github.com/Crikka/DivingBall

    6

    IntroductionMotivation pour le dveloppement d'un jeuMthode de dveloppementNotre ideNotre travail

    Notre framework de cration de jeu : Scyla Modle multi-facettesScne & forcesGestion des threadsSupport multi-appareil

    Notre applicationL'volution de notre jeuUtilisation des capteursEnregistrement de la progressionServiceBibliothques utilisesDpt Github