Projet Annuel Analyse statistique sur DoTAPar Julien BANVILLE et Adrien KOSCIANSKIResponsable de Projet : Mr François RIOU...
Analyse statistique sur DOTA
Analyse statistique sur DOTA
Analyse statistique sur DOTA
Analyse statistique sur DOTA
Analyse statistique sur DOTA
Analyse statistique sur DOTA
Analyse statistique sur DOTA
Analyse statistique sur DOTA
Analyse statistique sur DOTA
Analyse statistique sur DOTA
Analyse statistique sur DOTA
Analyse statistique sur DOTA
Analyse statistique sur DOTA
Analyse statistique sur DOTA
Analyse statistique sur DOTA
Analyse statistique sur DOTA
Analyse statistique sur DOTA
Analyse statistique sur DOTA
Analyse statistique sur DOTA
Analyse statistique sur DOTA
Prochain SlideShare
Chargement dans…5
×

Analyse statistique sur DOTA

514 vues

Publié le

Projet annuel de Master 1 Informatique

Publié dans : Technologie, Business
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
514
Sur SlideShare
0
Issues des intégrations
0
Intégrations
3
Actions
Partages
0
Téléchargements
0
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Analyse statistique sur DOTA

  1. 1. Projet Annuel Analyse statistique sur DoTAPar Julien BANVILLE et Adrien KOSCIANSKIResponsable de Projet : Mr François RIOULTDate: le 19/06/200818288004572000<br />Sommaire TOC o " 1-3" h z u Introduction PAGEREF _Toc75408293 h 4Présentation du projet PAGEREF _Toc75408294 h 5Notre application PAGEREF _Toc75408295 h 5DoTA : Defense of The Ancients PAGEREF _Toc75408296 h 5Objectif de notre application PAGEREF _Toc75408297 h 6Cahier des charges PAGEREF _Toc75408298 h 6Implémentation PAGEREF _Toc75408299 h 8Le langage XML et XSLT PAGEREF _Toc75408300 h 8Le développement de l’application PAGEREF _Toc75408301 h 8Analyse statistique PAGEREF _Toc75408302 h 12Observations générales PAGEREF _Toc75408303 h 12Observations approfondies PAGEREF _Toc75408304 h 12Items fréquemment utilisés PAGEREF _Toc75408305 h 12Combinaisons pour les personnages PAGEREF _Toc75408306 h 13Liaisons entre objets et influences des objets sur les résultats PAGEREF _Toc75408307 h 13Les limites et avantages de ces analyses statistiques PAGEREF _Toc75408308 h 14Projet : Travail de groupe PAGEREF _Toc75408309 h 15Outils mis en place PAGEREF _Toc75408310 h 15Répartition des tâches PAGEREF _Toc75408311 h 15Problèmes rencontrées PAGEREF _Toc75408312 h 15Conclusion PAGEREF _Toc75408313 h 16Annexes PAGEREF _Toc75408314 h 17Exemple de résultat fourni à la fin de notre devoir de recherche PAGEREF _Toc75408315 h 17Exemple de fichier XML utilisé par la base de données PAGEREF _Toc75408316 h 18Exemple de fichier XSLT PAGEREF _Toc75408317 h 19Fragment du fichier avec les données transformées via XSLT PAGEREF _Toc75408318 h 20<br />Introduction<br />Dans le cadre de notre projet annuel en Master Informatique 1ère année, il nous a été demandé de concevoir une application qui à partir de données XML détermine des statistiques sur les objets les plus usités lors de parties de DoTA.<br />Nous allons donc vous présenter à travers ce rapport notre avancement et les différentes étapes que nous avons du franchir pour atteindre notre objectif.<br />Dans un premier temps, nous allons expliquer notre projet : sur quel jeu il se base, comment cela fonctionne. <br />Ensuite, nous allons développer une partie sur notre implémentation : quels choix technologiques, comment se divise notre recherche, quelles difficultés nous avons rencontrées.<br />Par la suite, nous montrerons les résultats que nous avons obtenus, ce que l’on peut déduire de ces statistiques.<br />Enfin, nous conclurons avec un résumé du travail en groupe sur notre projet, la répartition des tâches, l’avancement dans le temps.<br />Présentation du projet<br />Notre application<br />Le but de notre application est avant tout de pouvoir récupérer et trier des informations récupérées à partir de parties jouées en ligne du jeu DoTA.<br />Ainsi notre projet se base essentiellement sur le mode de jeu DoTA. <br />DoTA : Defense of The Ancients<br />Il s’agit d’un jeu ou plutôt d’une extension d’un autre jeu : Warcraft III. DoTA ou Defense of The Ancients est une extension développée par des fans du jeu Warcraft III. <br />Le jeu se répartit généralement en deux équipes de 5 joueurs, ceux-ci ont le choix parmi une palette de héros qui ont chacun leur caractéristique et leur compétence (force, agilité et intelligence). Chaque héros peut évoluer grâce à l’expérience qu’il acquit en tuant des monstres. Il peut évoluer jusqu’au niveau 25 qui est le niveau le plus haut.<br />Chaque héros possède trois sorts de base et un sort ultime qu’il peut faire évoluer en puissance suivant son niveau.<br />Un des éléments important du jeu, qui est la base de notre projet, sont les objets ou items. Chaque héros peut acheter ces objets grâce à l’or qu’il acquit lorsqu’il tue des héros adverses ou des creeps, c'est-à-dire des monstres géré par le jeu lui-même. Celui-ci peut combiner des objets de base afin d’avoir des objets plus évolués et qui confèrent plus de bonus aux caractéristiques du héros.<br />Le but du jeu est de détruire la base principale de l’ennemie à l’aide de l’intelligence artificielle du jeu, qui envoie toutes les 30 secondes des creeps sur le camp ennemi. Ainsi le vainqueur est celui qui a anéanti la base de l’ennemie le premier<br />A chaque fin de partie un tableau récapitulatif affiche les héros avec le nombre d’ennemis tués, le niveau auquel il se trouve à la fin du jeu, les objets qu’ils possédaient, le ratio nombre mort / nombre de Kill,…<br />Chacun de ses tableaux constituent la source de notre application. Il est traité par une autre application, qui reconnaît les caractères automatiquement et les transfère dans un fichier XML.<br />Objectif de notre application<br />A partir de ces tableaux à la fin des parties, notre application doit transformer ce tableau et interpréter les résultats. Notre objectif est de récupérer les informations sur les objets pour chaque héros. Ainsi il est possible de déterminer quels objets ont été le plus souvent utilisés, et ainsi on peut déterminer une stratégie pour chaque héros et une stratégie globale sur les objets les plus souvent utilisés par la plupart des héros. <br />Nous ne nous chargeons pas de transformer ces tableaux en fichier XML une application a déjà été implémentée et fournit les résultats. Nous travaillons directement sur ces résultats sous forme de fichiers XML.<br />Ainsi notre application fait partie d’un ensemble d’autres applications qui s’occupe de récupérer et transformer les tableaux, de convertir les données en fichiers lisibles.<br />Au final, notre partie doit ressortir des statistiques sur l’utilisation des objets par les héros qui ont gagné une partie, afin d’en tirer des tendances.<br />Cahier des charges<br />Lors de notre premier entretien avec Mr Rioult un certain nombre de demande, nous a été formulé :<br />Utiliser le langage XML pour notre application : vu que le reste des applications utilisent ce type de langage<br />De nous concentrer essentiellement sur les « items » (objets) à chaque fin de partie<br />D’intégrer la relation Héros-Objets dans notre base de données.<br />Il a donc fallu suivre ce cahier des charges pour établir notre application.<br />Implémentation<br />Une fois le cahier des charges définit, nous avons commencé le développement de notre partie. <br />Comme vu précédemment, nous nous basons donc essentiellement sur ces fichiers XML de résultats pour calculer les statistiques, nous nous sommes donc appuyés sur le langage XML et le langage de transformation XSLT pour la restructuration des données nous intéressant. <br />Le langage XML et XSLT<br />Vu que les autres applications utilisaient le langage XML, l’application est restée sur ce modèle, XML reste un langage simple et hiérarchique, et XSLT est un langage basé sur XML, chargé de le transformer dans n’importe quel format. Il est important de rappeler les avantages d’utiliser ce type de langage pour la programmation :<br />La structure arborescente rend le document hiérarchique et facile à traiter.<br />C’est un langage portable sur n’importe quelle plateforme que ce soit Windows, Mac ou Linux. Et ainsi, il est également possible de l’utiliser avec un autre langage tel que Java, C++,…<br />Il est auto descriptif et extensible s’il est nécessaire d’introduire d’autres données.<br />L’avantage du langage XSLT est qu’il est possible de reformater un document XML sous n’importe quel autre format, ainsi il est possible de transformer la sortie en.txt si nécessaire. On peut envisager de transformer un document XML en HTML, en simple texte, ou même en Flash ou format SVG.<br />Ainsi, on remarque que le langage XML et XSLT dénote plusieurs avantages qui facilite le traitement de notre application. Vu que notre méthode a été testée avec environ cent cinquante fichiers de résultats et qu’il doit pouvoir être utilisé avec un grand nombre de documents, la rapidité de traitement et d’exécution est primordiale. Les documents XML restent légers tout en étant hiérarchisés, la quantité de document ne pose pas de problème, tant que l’on n’excède pas un nombre important.<br />Le développement de l’application<br />Notre développement commence dès la réception de documents en format XML. Ces documents contiennent les tableaux de résultats des différentes parties. Vu l’importance des documents, nous avons donc mis en place une base de données, qui regroupe tous ces documents, d’une part pour faciliter le traitement de ces fichiers, mais aussi d’une autre part pour améliorer la recherche d’objets et de héros dans ces documents.<br />Après consultation auprès de notre responsable de projet, nous avons mis en place une base de données utilisant XML déjà existante et appelée eXist.<br />C’est une base de données qui s’appuie sur la structure du langage XML pour stocker et faire des requêtes complexes sur ces données.<br />declare namespace dc=" dota" ;let $players :=//dota[mapVersion != " v651" and mapVersion != " v6S1" and mapVersion !=" v651b" and mapVersion !=" v6S1b" ]for $t in $players let $v := $t/winner/text()for $p in $t/players/player[@team=$v] let $carac := //dc:heros/dc:hero[@name=$p/@name]/@ppalCharlet $items := $p/items/item return <result><perso>{$p/@name} {$carac}</perso><items>{$items}</items>{$p/attribute}</result>Ainsi nous importons tous les fichiers XML dans la base de données pour pouvoir les traiter par la suite à l’aide de requêtes utilisant le langage XQuery. Ces requêtes recherchent dans la base de données tout ce qui correspond au héros du joueur et les objets qu’ils possèdent. On va en fait rechercher tous les héros ayant remporté la victoire, et pour chaque héros, récupérer son nom, sa caractéristique principale, les objets utilisés durant la partie, et les statistiques de fin de partie.<br />Ainsi une fois, la requête terminée, on exporte les résultats dans un fichier. Ce fichier est utilisé par XSLT qui convertit tout les résultats et les structures de façons à avoir un fichier en texte simple formaté par colonnes.<br />XSLT sert principalement à la modification et à la transformation de document XML en autre format de fichier tel que du HTML ou un fichier texte. <br />Nous appliquons cette modification afin de transformer le fichier XML en un format texte simple, pour faciliter la recherche de nos « items » et de nos héros. Ainsi, il est plus facile de trouver des résultats redondants.<br />#nomAbaddonAkashaBalanarBaneElementalBarathrumBeastMasterBloodSeekerBoneBountyBroodMother<br />A l’aide de ce dictionnaire, on recherche dans le fichier XSLT si l’on retrouve, un des patterns recherchés. Dans l’exemple ci-dessus, le dictionnaire contient les noms des héros, il est possible de cette manière de pouvoir retrouver le nom du héros. Il en va de même pour les objets.<br />Ainsi une fois le fichier texte obtenus, on utilise trois programmes fournis par M. Rioult :<br />La commande mvdico test.txt test.atr > sample.dico qui permet de répertorier les attribuer et de séparer les valeurs numériques. <br />La commande mvsegment –i test.txt –o test.bin –d sample.dico –t fichiertrad qui analyse les données et convertit les valeurs des attributs (convertit avec la commande au dessus) en « items ». Il crée aussi un fichier de traduction utilisé plus tard.<br />Et enfin la commande mvminer –i test.bin –a 20 –d 4 –n |traduc fichiertrad > resultatsFinaux.txt qui permet de faire les recherches de règles, et traduire les résultats en résultats compréhensibles dans un fichier texte.<br />Enfin la dernière étape consiste à filtrer, via la commande grep, les fichiers obtenus en retirant tout les éléments qui ne sont pas utiles par la suite dont :<br />les lignes contenant un item vide, soit les lignes contenant EMPTY<br />les lignes ne contenant pas le mot « item »<br />et enfin les lignes ne contenant pas un nom de personnage se trouvant dans le dictionnaire de nom.<br />item1:MaskOfMadness , _nom:FacelessVoid(4) _nom:Riki(6) _nom:Sven(6) _nom:Treant(5) carac:NONE _item2:BattleFury(6) _item2:BootsOfTravel(6) _item2:Butterfly(4) _item2:HeaddressOfRejuvenation(6) _item2:RefresherOrb(6) _item3:BootsOfTravel(6) _item3:Bottle(6) _item3:Circlet(6) _item3:CraniumBasher(6) _item3:GauntletsOfOgreStrength(6) _item3:WraithBand(5) _item4:BootsOfSpeed(6) _item4:PowerTreads(4) _item4:Radiance(6) _item4:VitalityBooster(6) _item4:WraithBand(6) _item5:BlackKingBar(6) _item5:BootsOfTravel(6) _item5:Circlet(6) _item5:CraniumBasher(6) _item5:Eaglehorn(6) _item5:WraithBand(5) _item6:Crystalys(6) _item6:GauntletsOfOgreStrength(6) _item6:Gem(6) _item6:HyperStone(6) _item6:MesserschmidtsReaver(6) _item6:WraithBand(5) _level<=17(5) _level<=21(4) _level<=25(5) _gold<=789(5) _gold<=2168(3) _gold<=14258(6) _kill<=3(5) _kill<=7(6) _kill<=25(3) _death<=2(5) _death<=5(4) _death<=25(5) _wards<=0 _towerKill<=0(6) _towerKill<=6(1) _towerDeny<=0(1) _towerDeny<=2(6) _creepKill<=74(5) _creepKill<=127(3) _creepKill<=466(6) _creepDeny<=0(4) _creepDeny<=8(4) _creepDeny<=56(6) _neutralKill<=4(4) _neutralKill<=213(3) _killGold<=780(3) _killGold<=9430(4) _timeDead<=120(5) _timeDead<=260(5) _timeDead<=1220(4) _goldLost<=810(5) _goldLost<=1860(5) _goldLost<=12570(4) _consumables<=1(5) _consumables<=5(5) _consumables<=31(4) doubleKill<=7 _tripleKill<=1(5) _tripleKill<=4(5) _tripleKill<=25(4) : 7Une fois ce filtre effectué, on obtient donc un fichier contenant les résultats qui nous intéressent. <br />Une fois, le fichier construit, l’étape de recherche statistique débute.<br />Analyse statistique<br />Observations générales<br />Les analyses statistiques délivrées par l’ensemble de programmes « mv » permet d’avoir différentes informations.<br />On peut voir en effet qu’une fois qu’un tri a été effectué sur les résultats (en retirant ce dont nous n’avons pas besoin, à savoir les résultats ne parlant pas d’item), des statistiques intéressantes sont délivrées en ce qui concerne l’utilisation des objets par les héros, et les relations entre les objets.<br />Prenons par exemple cette ligne dans le fichier : <br />item1:MaskOfMadness , _nom:FacelessVoid(4) _nom:Riki(6) _nom:Sven(6) _nom:Treant(5) carac:NONE _item2:BattleFury(6) _item2:BootsOfTravel(6) _item2:Butterfly(4) _item2:HeaddressOfRejuvenation(6) _item2:RefresherOrb(6) _item3:BootsOfTravel(6) _item3:Bottle(6) _item3:Circlet(6) _item3:CraniumBasher(6) _item3:GauntletsOfOgreStrength(6) _item3:WraithBand(5) _item4:BootsOfSpeed(6) _item4:PowerTreads(4) _item4:Radiance(6) _item4:VitalityBooster(6) _item4:WraithBand(6) _item5:BlackKingBar(6) _item5:BootsOfTravel(6) _item5:Circlet(6) _item5:CraniumBasher(6) _item5:Eaglehorn(6) _item5:WraithBand(5) _item6:Crystalys(6) _item6:GauntletsOfOgreStrength(6) _item6:Gem(6) _item6:HyperStone(6) _item6:MesserschmidtsReaver(6) _item6:WraithBand(5) _level<=17(5) _level<=21(4) _level<=25(5) _gold<=789(5) _gold<=2168(3) _gold<=14258(6) _kill<=3(5) _kill<=7(6) _kill<=25(3) _death<=2(5) _death<=5(4) _death<=25(5) _wards<=0 _towerKill<=0(6) _towerKill<=6(1) _towerDeny<=0(1) _towerDeny<=2(6) _creepKill<=74(5) _creepKill<=127(3) _creepKill<=466(6) _creepDeny<=0(4) _creepDeny<=8(4) _creepDeny<=56(6) _neutralKill<=4(4) _neutralKill<=213(3) _killGold<=780(3) _killGold<=9430(4) _timeDead<=120(5) _timeDead<=260(5) _timeDead<=1220(4) _goldLost<=810(5) _goldLost<=1860(5) _goldLost<=12570(4) _consumables<=1(5) _consumables<=5(5) _consumables<=31(4) doubleKill<=7 _tripleKill<=1(5) _tripleKill<=4(5) _tripleKill<=25(4) : 7<br />On peut voir que pour lorsqu’un item MaskOfMadness a été pris par un joueur, l’item BattleFury a été utilisé six fois, ce qui est un nombre assez conséquent. On peut donc en déduire que ces deux items sont une bonne combinaison.<br />En ce qui concerne le nombre d’utilisations d’un item par un personnage, on les observe aussi. Prenons là encore le premier exemple : Le personnage Riki a utilisé six fois l’item MaskOfMadness. On peut en conclure que cet item sera conseillé pour ce personnage.<br />Les lignes de résultats ne sont pas forcément très lisible, mais un simple outil de type parseur pourrait transcrire facilement ces résultats dans un format plus simple, type tableur, ou bien de type graphique.<br />Observations approfondies<br />Items fréquemment utilisés<br />On peut remarquer que certains items sont particulièrement utilisés, notamment l’item BootsOfSpeed ou BootsOfTravel, servant à faire des téléportassions du personnage vers la base alliée, et qui sont très fréquemment utilisés par les joueurs. <br />On notera que des items comme les Bracer sont très utilisés. Mais on peut voir aussi que certains personnages en ont plus l’utilité que d’autres. Notamment, lorsque l’item Bracer est utilisé et que le nombre de Kill est inférieur à 7, mais que le nombre de tripleKill est inférieur à 25, certains personnages sont présents.<br />Combinaisons pour les personnages<br />Il est possible de voir certaines combinaisons pour des personnages, à partir des résultats donnés.<br />Par exemple, le personnage FacelessVoid utilise souvent l’item MaskOfMadness (six fois), l’item Crystalys (six fois également). On pourra donc suggérer à un joueur de prendre ces items.<br />Le personnage Sven utilise souvent le MaskOfMadness, les Bracers, alors que le personnage Treant utilise plutôt l’item AegisOfImmortality, un Bracer, le MaskOfMadness, ce qui lui confère de nombreux tripleKill.<br />Avec un nombre de parties plus importants, il serait possible de voir des tendances beaucoup plus importantes, la méthode est donc fonctionnelle, on manque juste de résultats.<br />Voici un tableau regroupant les items pour quelques personnages :<br />PersonnageItemItemItemItemEnigmaAegisOfImmortalityBracerLeviathanAegisOfImmortalityPointBoosterBracerLuciferAegisOfImmortalitySobiMaskLunaBootsOfTravelAegisOfImmortalityWraithBandBracerLycanthropeAegisOfImmortalityCrystalysPitLordAegisOfImmortalityPlateMailSilenceCrystalysPlateMailPhantomLancerAegisOfImmortalityGemWraithBandBracer<br />Liaisons entre objets et influences des objets sur les résultats<br />Enfin, les résultats permettent de voir que certains items sont fréquemment utilisés avec d’autres. En général, le but est d’obtenir une combinaison permettant d’avoir un autre item, mais l’objectif peut être aussi d’avoir des bonus dans des compétences variées.<br />Ainsi, on peut voir par exemple que l’item MaskOfMadness est souvent utilisé avec ces autres items: <br />WraithBand (21 fois)<br /> BootsOfTravel (18 fois) <br />Circlet (12 fois) <br />CraniumBasher (12 fois) <br />GauntletsOfOgreStrength (12 fois) <br />BattleFury (6 fois)<br /> VitalityBooster (6 fois) <br />BlackKingBar (6 fois) <br />Eaglehorn (6 fois) <br />Crystalys (6 fois)<br />HeaddressOfRejuvenation (6 fois)<br /> RefresherOrb (6 fois) <br />Bottle (6 fois)<br />BootsOfSpeed (6 fois)<br />Gem (6 fois)<br />HyperStone (6 fois)<br />MesserschmidtsReaver (6 fois)<br />Radiance (6 fois)<br />Butterfly (4 fois)<br />PowerTreads (4 fois) <br />On voit très clairement que cet objet est souvent utilisé avec l’item WraithBand, l’item BootsOfTravel,…<br />On a donc les relations entre objets qui sont représentés dans ce fichier de résultats.<br />On peut aussi voir des relations entre les items et les résultats, tel que le nombre de Kill, l’argent dépensé (au total) lorsque cet item était pris, des résultats qui peuvent confirmer la bonne utilisation de cet objet selon tel personnage.<br />Les limites et avantages de ces analyses statistiques<br />Après plusieurs tentatives d’analyses, il a paru évident que nous manquions de données pour faire des analyses complètes. En ayant un nombre de parties enregistrées dans la base de données eXist, nous aurions eu beaucoup plus de statistiques, et des résultats beaucoup plus concluants.<br />Néanmoins, un avantage à ces études est qu’il est très facile de faire d’autres comparatifs, notamment pour voir si le jeu est bien équilibré. Par exemple, on peut facilement voir combien de fois a gagné chaque faction, ou combien de fois a gagné tel type de personnage.<br />Projet : Travail de groupe<br />Outils mis en place<br />Pour pouvoir faire avancer l’application en parallèle, nous avons mis en place plusieurs outils de communications afin de pouvoir échanger nos informations, assembler notre méthode et enfin visualiser l’avancement du projet.<br />Ainsi, nous avons utilisé :<br />L’outil SVN (subversion), permettant ainsi de pouvoir stocker et récupérer l’avancement de nos travaux.<br />Le service mail de l’université, afin de pouvoir communiquer ensemble.<br />Répartition des tâches<br />Vu que le projet s’effectuait à deux nous avons donc partagé les tâches, même si les tâches s’effectuaient les une à la suite des autres, nous avons réussi à dispatché correctement le travail :<br />Julien BANVILLE s’est occupé de la partie transformation avec XSLT des fichiers obtenus avec la requête XQuery sur les résultats en XML, il a filtré les résultats fournis par les programmes de la série « mv » et a travaillé sur la partie statistique de l’application.<br />Adrien KOSCIANSKI s’est intéressé à l’intégration des fichiers XML dans la base de données eXist et de la recherche des requêtes en XQuery. Il a également travaillé sur la partie statistique.<br />Problèmes rencontrées<br />A l’origine, nous avions développé l’application sous Java, vu qu’il s’agissait d’un langage multiplateforme et que nous comptions ajouter une interface graphique. Mais suite à notre rencontre avec notre responsable de projet, nous avons donc laissé tomber cette méthode, pour nous orienter vers XML et XSLT et un traitement des résultats en « brut ». Il serait facile d’interfacer les résultats obtenus dans des éléments graphiques.<br />Nous avons également rencontré des difficultés lors de la réception des fichiers après les traitements via les programmes de la série  « mv », les fichiers étaient soit trop légers et comportaient trop peu d’informations, soit l’inverse : trop d’informations (jusqu’à 30 Mo de résultats), et donc une masse d’informations inutiles.<br />Conclusion<br />Ce fut un projet intéressant car cela nous a permis d’aborder un traitement complet du langage XML, de sa définition jusqu’à une transformation grâce au langage XSLT.<br />De plus, l’univers de Warcraft DoTA est passionnant, il était intéressant de pouvoir mêler le monde du jeu vidéo à notre projet. De plus cela nous a permis de pouvoir étudier la mise en place d’une solution, la conception, le développement ainsi que la rédaction d’un rapport ne parlant pas forcément d’une application, mais des résultats transmis après une recherche. <br />Enfin, ce projet est intéressant car il montre que l’équilibrage au sein d’un jeu vidéo est quelque chose de très important, car c’est ca qui va définir un GamePlay cohérent et éviter qu’une méthode unique soit appliquée pour obtenir la victoire, surtout dans un jeu de stratégie comme WarCraft.<br />Annexes<br />Exemple de résultat fourni à la fin de notre devoir de recherche<br />item1:MaskOfMadness , _nom:FacelessVoid(4) _nom:Riki(6) _nom:Sven(6) _nom:Treant(5) carac:NONE _item2:BattleFury(6) _item2:BootsOfTravel(6) _item2:Butterfly(4) _item2:HeaddressOfRejuvenation(6) _item2:RefresherOrb(6) _item3:BootsOfTravel(6) _item3:Bottle(6) _item3:Circlet(6) _item3:CraniumBasher(6) _item3:GauntletsOfOgreStrength(6) _item3:WraithBand(5) _item4:BootsOfSpeed(6) _item4:PowerTreads(4) _item4:Radiance(6) _item4:VitalityBooster(6) _item4:WraithBand(6) _item5:BlackKingBar(6) _item5:BootsOfTravel(6) _item5:Circlet(6) _item5:CraniumBasher(6) _item5:Eaglehorn(6) _item5:WraithBand(5) _item6:Crystalys(6) _item6:GauntletsOfOgreStrength(6) _item6:Gem(6) _item6:HyperStone(6) _item6:MesserschmidtsReaver(6) _item6:WraithBand(5) _level<=17(5) _level<=21(4) _level<=25(5) _gold<=789(5) _gold<=2168(3) _gold<=14258(6) _kill<=3(5) _kill<=7(6) _kill<=25(3) _death<=2(5) _death<=5(4) _death<=25(5) _wards<=0 _towerKill<=0(6) _towerKill<=6(1) _towerDeny<=0(1) _towerDeny<=2(6) _creepKill<=74(5) _creepKill<=127(3) _creepKill<=466(6) _creepDeny<=0(4) _creepDeny<=8(4) _creepDeny<=56(6) _neutralKill<=4(4) _neutralKill<=213(3) _killGold<=780(3) _killGold<=9430(4) _timeDead<=120(5) _timeDead<=260(5) _timeDead<=1220(4) _goldLost<=810(5) _goldLost<=1860(5) _goldLost<=12570(4) _consumables<=1(5) _consumables<=5(5) _consumables<=31(4) doubleKill<=7 _tripleKill<=1(5) _tripleKill<=4(5) _tripleKill<=25(4) : 7<br />item6:AegisOfImmortality , _nom:Enigma(9) _nom:Leviathan(9) _nom:Lucifer(9) _nom:Luna(9) _nom:Lycanthrope(9) _nom:Morphling(9) _nom:PhantomLancer(9) _nom:Rhasta(9) _nom:Slardar(9) _nom:Treant(9) carac:NONE _item1:BattleFury(9) _item1:BootsOfTravel(8) _item1:Butterfly(9) _item1:DaggerOfEscape(9) _item1:PowerTreads(7) _item1:SangeAndYasha(8) _item2:Bracer(9) _item2:Butterfly(9) _item2:HeartOfTarrasque(9) _item2:LinkenSphere(9) _item2:Satanic(9) _item2:Tango(9) _item2:Vanguard(9) _item2:VladmirOffering(7) _item3:AghanimScepter(9) _item3:ArcaneRing(9) _item3:Bottle(9) _item3:Bracer(9) _item3:MantaStyle(9) _item3:PowerTreads(7) _item3:RingOfRegeneration(9) _item3:WraithBand(9) _item4:BattleFury(9) _item4:BootsOfTravel(9) _item4:Bracer(9) _item4:Butterfly(8) _item4:HeartOfTarrasque(7) _item4:MonkeyKingBar(9) _item4:RingOfBasilius(9) _item5:Bracer(8) _item5:DaggerOfEscape(9) _item5:HelmOfDominator(9) _item5:HyperStone(9) _item5:Perceverance(9) _item5:PowerTreads(9) _item5:RingOfRegeneration(9) _item5:VladmirOffering(9) _item5:WraithBand(9) _level<=21(6) _level<=25(4) _gold<=789(9) _gold<=2168(5) _gold<=14258(6) _kill<=3(8) _kill<=7(9) _kill<=25(3) _death<=2(5) _death<=5(6) _death<=25(9) _wards<=0 _towerKill<=0(8) _towerKill<=6(2) _towerDeny<=0 _creepKill<=74(6) _creepKill<=127(8) _creepKill<=466(6) _creepDeny<=0(8) _creepDeny<=8(3) _creepDeny<=56(9) _neutralKill<=4(8) _neutralKill<=23(8) _neutralKill<=213(4) _killGold<=780(7) _killGold<=2010(9) _killGold<=9430(4) _timeDead<=120(3) _timeDead<=260(7) _goldLost<=810(4) _goldLost<=1860(7) _goldLost<=12570(9) _consumables<=1(7) _consumables<=5(9) _consumables<=31(4) doubleKill<=7 _tripleKill<=1(9) _tripleKill<=4(6) _tripleKill<=25(5) : 10<br />Exemple de fichier XML utilisé par la base de données<br /><dota><br /> <file>WC3ScrnShot_010308_232002_01.tga</file><br /> <date><br /> <day>1</day><br /> <month>3</month><br /> <year>8</year><br /> <hour>23</hour><br /> <minute>20</minute><br /> <second>2</second><br /> </date><br /> <resolution>1400</resolution><br /> <nplayer>10</nplayer><br /> <author>9</author><br /> <nSentinel>5</nSentinel><br /> <mapVersion>v649b</mapVersion><br /> <time>4625</time><br /> <modes><br /> <mode>rd</mode><br /> </modes><br /> <winner>Scourge</winner><br /> <players><br /> <player name=" Akasha" team=" Sentinel" ><br /> <nickname>cRs-</nickname><br /> <items><br /> <item name=" LinkenSphere" /><br /> <item name=" EulScepterOfDivinity" /><br /> <item name=" Bracer" /><br /> <item name=" Bracer" /><br /> <item name=" BootsOfTravel" /><br /> <item name=" ShivasGuard" /><br /> </items><br /> <attribute level=" 25" gold=" 190" kill=" 19" death=" 11" wards=" 0" towerKill=" 2" towerDeny=" 0" creepKill=" 208" creepDeny=" 7" neutralKill=" 15" killGold=" 5365" timeDead=" 812" goldLost=" 6090" consumables=" 4" doubleKill=" 1" tripleKill=" 1" longestSpree=" 9" /><br /> <killDeaths><br /> <killDeath kill=" 4" death=" 3" /><br /> <killDeath kill=" 1" death=" 0" /><br /> <killDeath kill=" 4" death=" 4" /><br /> <killDeath kill=" 3" death=" 3" /><br /> <killDeath kill=" 7" death=" 1" /><br /> </killDeaths><br /> <leftAt time=" 4625" /><br /> </player><br />Exemple de fichier XSLT<br /><xsl:stylesheet version = '1.0' <br /> xmlns:xsl='http://www.w3.org/1999/XSL/Transform'><br /><xsl:output<br />method=" text" <br />version=" string" <br />encoding=" string" <br />omit-xml-declaration=" yes" <br />standalone=" yes" <br />doctype-public=" string" <br />doctype-system=" string" <br />cdata-section-elements=" namelist" <br />indent=" yes" <br />media-type=" string" /><br /><xsl:template match=" //result" > <br /><xsl:value-of select=" ./perso/@name" /><br /><xsl:text></xsl:text><br /><xsl:choose><br /><xsl:when test=" ./perso/@ppalChar" ><xsl:value-of select=" ./perso/@ppalChar" /></xsl:when><xsl:otherwise><xsl:text>NONE </xsl:text></xsl:otherwise><br /></xsl:choose><br /><xsl:for-each select=" ./items/item" ><br /><xsl:text></xsl:text><br /><xsl:value-of select=" ./@name" /><br /></xsl:for-each><br /><xsl:text></xsl:text><br /><xsl:value-of select=" ./attribute/@level" /><br /><xsl:text></xsl:text><br /><xsl:value-of select=" ./attribute/@gold" /><br /><xsl:text></xsl:text><br /><xsl:value-of select=" ./attribute/@kill" /><br /><xsl:text></xsl:text><br /><xsl:value-of select=" ./attribute/@death" /><br /><xsl:text></xsl:text><br /><xsl:value-of select=" ./attribute/@wards" /><br /><xsl:text></xsl:text><br /><xsl:value-of select=" ./attribute/@towerKill" /><br /><xsl:text></xsl:text><br /><xsl:value-of select=" ./attribute/@towerDeny" /><br /><xsl:text></xsl:text><br /><xsl:value-of select=" ./attribute/@creepKill" /><br /><xsl:text></xsl:text><br /><xsl:value-of select=" ./attribute/@creepDeny" /><br /><xsl:text></xsl:text><br /><xsl:value-of select=" ./attribute/@neutralKill" /><br /><xsl:text></xsl:text><br /><xsl:value-of select=" ./attribute/@killGold" /><br /><xsl:text></xsl:text><br /><xsl:value-of select=" ./attribute/@timeDead" /><br /><xsl:text></xsl:text><br /><xsl:value-of select=" ./attribute/@goldLost" /><br /><xsl:text></xsl:text><br /><xsl:value-of select=" ./attribute/@consumables" /><br /><xsl:text></xsl:text><br /><xsl:value-of select=" ./attribute/@doubleKill" /><br /><xsl:text></xsl:text><br /><xsl:value-of select=" ./attribute/@tripleKilm" /><br /><xsl:text></xsl:text><br /><xsl:value-of select=" ./attribute/@longestSpree" /> <br /></xsl:template><br /></xsl:stylesheet><br />Fragment du fichier avec les données transformées via XSLT<br />PitLord NONE SangeAndYasha BattleFury Bracer PowerTreads RingOfBasilius PlateMail 18 38 2 5 0 2 1 128 0 24 555 224 1680 3 0<br />Barathrum NONE BootsOfTravel RingOfRegeneration AssaultCuirass Bracer Bracer HeartOfTarrasque 25 919 10 5 0 0 1 187 0 0 2755 284 2130 1 0 6<br />Spectre NONE Butterfly StygianDesolator MantaStyle Empty Vanguard Empty 22 759 18 6 0 0 1 -1 0 -1 -1 324 2430 2 0 5<br />Ezalor NONE BootsOfTravel AghanimScepter RingOfBasilius Bracer HeartOfTarrasque RingOfRegeneration 23 2597 2 1 0 1 0 173 0 5 -1 44 330 1 0 2<br />Treant NONE RefresherOrb PowerTreads BloodStone MithrilHammer ScrollOfTownPortal Empty -1 0 6 0 0 1 0 88 1 21 1585 0 0 3 0 6<br />Riki NONE PowerTreads Bracer Butterfly Bracer Perceverance Empty 24 5595 15 3 0 0 0 36 1 14 -1 72 0 1 0 13<br />

×