Dirty Hockey : un jeu Android original !

Envoyé par le 5 Fév 2014

Poster présenté lors de l'exposition au centre-vie.

Poster présenté lors de l’exposition au centre-vie. (Cliquez pour agrandir.)

Lien vers les productions de Codecamp 2014, les .apk peuvent être installés sur votre système Android. Cherchez « Dirty Hockey.apk » !

Dirty Hockey est un jeu original reprenant le concept du air hockey (comme celui du foyer !), mais avec 7 palets au lieu d’un seul, et surtout, avec des BOMBES à la place des palets !! Il s’agit de l’application Android que j’ai réalisée lors de l’inter-semestre Codecamp 2.0 du 20 au 24 Janvier 2014.

Le but est de marquer le plus de points au cours de la partie qui est constituée de plusieurs manches.

Voici comment se déroule une manche : au début d’une manche, les 7 bombes sont disposées au centre du terrain. Dès le coup d’envoi, leur mèche est enflammée : les bombes rougiront de plus en plus jusqu’à l’explosion, au bout d’un certain temps. Ce délai peut être paramétré dans les « Options » (15 s par défaut). Toute bombe entrée dans le but de l’adversaire au cours de la partie vous rapporte 100 points ; les bombes ayant explosé sur le terrain à la fin du temps imparti partagent les 100 points proportionnellement à leur position sur le terrain : plus la bombe est avancée sur le terrain adverse, plus elle vous rapporte de point !
Le nombre de manche par partie est configurable dans les « Options » (5 manches par partie par défaut).

Screenshot_2014-02-05-01-26-33 Screenshot_2014-01-23-11-41-31 Screenshot_2014-01-23-11-42-15

Quelques captures du menu, du début d’une manche, et d’une manche en plein jeu !

Vous pouvez jouer seul contre une Intelligence Artificielle (IA) ou bien à deux sur le même mobile. Vous pouvez même faire des combats d’IA ! (L’IA joue contre l’IA) Notez que je n’ai pas eu le temps de me pencher sur la programmation de l’IA pendant ces 3 jours de développement. Je l’ai programmée a posteriori, le week-end suivant l’inter-semestre. La difficulté de l’IA est paramétrable dans les « Options ».

La physique du jeu est assez soignée et réaliste :
– Frottements
– Coefficient de restitution pour les rebonds contre les « bandes »
– Collisions bombes-bombes
– Collision bombes-buttoir

Pour gérer les collisions, j’ai repris le modèle que j’avais élaboré lors de la réalisation d’un jeu de billard pour les calculatrices graphiques TI-Nspire, programmé en Lua. Ce modèle consiste à modéliser de manière réaliste la trajectoire ET le transfert d’énergie après collision de deux boules. Pour plus de détails, j’avais écrit quelques explications sur ce forum (en anglais).

Pour ce qui est de l’IA, voici comment elle fonctionne en gros :
c’est une fonction de décision qui est appelée une frame sur deux. Voici ce qu’elle fait à chaque instant où elle est appelée :

Tout d’abord, elle vérifie pour chaque bombe sur le terrain si sa trajectoire se dirige vers son but, et le cas échéant, calcule le temps (en nombre de frames) en lequel elle atteindra le but (à partir de la vitesse actuelle de la bombe, sans tenir compte des frottements). Si au moins une des bombes a sa trajectoire dirigée vers le but, et qu’elle l’atteindra en moins de 2 s, alors il faut la repousser !!
Pour cela, si elle est dans l’alignement de la trajectoire de la bombe en question (avec une certaine tolérance), alors l’IA avance son « buttoir » (le petit Bugdroid) vers la bombe, jusqu’à la percuter ; sinon, l’IA amène le buttoir devant le but, à l’intersection avec la trajectoire de la bombe.
Si aucune bombe n’est en direction du but, alors on est en mode offensif : il s’agit d’aller taper dans la bombe la plus proche ! (pourvu qu’elle soit sur notre terrain) Pour modérer ce mode offensif, et aussi pour ajouter de l’aléatoire dans le comportement de l’IA (important pour imiter les comportements naturels) j’ai ajouté cela : on tire un nombre aléatoire (uniformément) entre 0 et 1, noté « r ». On définit un seuil d’agressivité « Sa » compris entre 0 et 1, qui pourrait même être paramétrable dans les « Options » (ce n’est pas encore le cas, mais pourquoi pas ?) actuellement fixé à 0.7. Si r<0.7 alors on est effectivement en mode offensif : on tape dans la boule la plus proche, sinon, on se replace devant notre but, au milieu. Ce nombre aléatoire définissant temporairement le comportement de l’IA est renouvelé toutes les secondes.
Enfin, la vitesse de déplacement du buttoir est fonction du niveau de difficulté de l’IA, comme paramétré dans les « Options ». Cette vitesse fluctue aussi toutes les secondes aléatoirement, permettant là aussi d’ajouter de l’aléatoire dans le comportement. 🙂

Voilà pour les quelques détails techniques ! Le jeu sera disponible un jour sur Play Store j’espère ! 😉

Louis DURAND

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *