Projet IHM - Aliens

aliens

Objectif : développer l'interface graphique d'un jeu de stratégie.

Le thème de ce projet s'inspire du film "Aliens", un combat sans merci entre un groupe de "marines" et des aliens très agressifs. L'environnement est représenté par une vue en 2D, plus précisément une succession de cases carrées, sur lequel les protagonistes se déplacent en dépensant des points d'action (qu'ils ont en nombre limité). Les actions possibles sont principalement se déplacer ou attaquer, mais on peut effectuer d'autres manœuvres moins courantes (ouvrir une porte par exemple). Chaque partie peut comporter un objectif moins évident qu'exterminer le groupe adverse, mais ne sera pas gérer explicitement par le programme.


Cahier des charges

Ce projet est l'aboutissement concret des notions vu dans le module IHM. A ce titre, il doit se focaliser essentiellement sur les notions sous-jacentes au concept d'interface graphique i.e ergonomie, utilisabilité, retour d'informations, aide, personnalisation, etc. De plus, le projet étant conséquent pour un module de cette taille, une évaluation progressive a été mise en place.

Mise en place

La première étape est bien entendu la construction d'un scénario dont les éléments constitutifs sont la disposition initiale des pièces fixes (portions de couloirs ou de salles, portes, zones d'entrée des aliens, zone de sortie des marines) et des pièces mobiles (marines et aliens). Tous ces éléments peuvent être représentés par un code et une position dans un espace discret de forme rectangulaire. On doit pouvoir ajouter ou supprimer un élément et une fois la construction terminée, sauvegarder celle-ci dans un fichier ASCII.

La seconde étape est la gestion de la partie. Elle débute par le choix du scénario et la disposition définitive choisie par le joueur qui contrôle les marines en fonction de leur spécialité, à savoir : simple soldat, sous-officier ou arme lourde (la plupart du temps un lance-flamme). Une fois ce choix effectué, le jeu commence réellement.

Le joueur marine

Le joueur n'a que 2 minutes pour agir par tour, auxquelles s'ajoutent 30 secondes par sous-officier présent.

Les marines disposent de 4 points d'action chacun (notées PA par la suite) qui leur permettent : de se déplacer en avant d'une case (1 pt), de tourner sur eux-même de 90° (1 pt), de reculer d'une case (2 pts), de tirer (1 ou 2 pts), d'ouvrir ou de fermer une porte (1 pt), de se mettre en alerte (1 pt), de désenrayer leur arme (1 pt) ou de recharger pour les armes lourdes (4 pts). Une fois un marine joué, on ne peut plus le faire agir de nouveau avec ses points d'action s'il lui en restait.

Se déplacer : le marine peut se déplacer en ligne droite ou en diagonale mais jamais latéralement ; la case de destination doit être libre et aucun obstacle ne doit empêcher le mouvement (voir schéma ci-dessous). Les déplacements peuvent se faire en tirant en même temps sans dépenser de point supplémentaire.

mouvements mouvement

Tirer : le tir volontaire peut se faire dans l'arc de tir du marine (voir schéma ci-dessous), avec une portée illimitée ; il permet de lancer 2d6 contre la cible (alien ou porte). Pour réussir le 1er tir, le tireur doit faire 6 sur un des deux dés. S'il reste à l'arrêt le 2ième tir réussi sur 5 ou 6, le 3ième tir sur 4, 5 ou 6 et tous les suivants sur 3, 4, 5 ou 6. Un marine peut tirer pendant le tour du joueur alien (tir involontaire) s'il se met en état d'alerte et si un alien agit dans son arc de tir ; dans ce cas il ne réussit son tir que sur un 6 et peut enrayer son arme sur un double.

modélisation du tir

Le joueur alien

Le joueur bénéficie d'un temps de réflexion illimité durant son tour.

Les aliens disposent de 6 PA chacun qui leur permettent : de se déplacer en avant d'une case (1 pt), de se déplacer latéralement d'une case (2 pts), de tourner sur eux-même de 90° (0 pt), de reculer d'une case (2 pts), d'attaquer au corps à corps (1 pt), d'ouvrir ou de fermer une porte (1 pt). Une fois un alien joué, on ne peut plus le faire agir de nouveau avec ses points d'action s'il lui en restait.

Se déplacer : l'alien peut se déplacer en ligne droite, en diagonale ou latéralement ; la case de destination doit être libre et aucun obstacle ne doit empêcher le mouvement.

Combattre au corps à corps : celui-ci ne peut se faire qu'avec un adversaire situé sur la case face à l'alien ; il lui permet de lancer 3d6 et de ne conserver que le meilleur score, le marine attaqué ne peut répliquer (automatiquement) qu'avec 1d6.


Programmation

L'ensemble du projet devra être écrit en TclTk exclusivement. L'utilisation des namespace est recommandée concernant toute la partie non graphique du projet.

Quelques recommendations utiles :

  • ne jamais oublier de mettre à jour la structure de données interne (i.e les différents namespaces gérant les objets du jeu) en même temps que la partie graphique du jeu.
  • les "tags" associés aux objets graphiques sont très utiles pour toutes les informations non graphiques : pour les cases du plateau de jeu leurs indices en coordonnées entières, pour les objets fixes (comme une porte) l'identificateur (unique) de la case à laquelle ils sont associés et pour les objets mobiles leur type et leur index unique associé au namespace correspondant.
  • la gestion des tags est assez délicate : deux options du widget canvas permettent de les gérer addtag et dtag (qui n'ont pas la même syntaxe !) mais ne permettent pas de contrôler l'ordre dans lequel elles sont insérées ; il faut donc créer des tags uniques que l'on recherchera grâce à la commande lsearch.
  • la création de "sprite" se fait en deux étapes :
    1. association d'un identificateur interne à un fichier image par la commande : image create photo <id> -file "<fichier>"
    2. création du sprite lui-même dans un canvas par la commande : <canvas> create image <x> <y> -image <id> Attention : il n'existe pas d'opérateur de rotation pour les objets graphiques, il faut donc prévoir sans doute 4 images différentes par sprite en fonction de leur orientation.

Notation

La notation de ce projet prendra en compte le respect du cahier des charges, la qualité de la programmation (robustesse, lisibilité et modularité de votre code) ainsi que les aspects propres à une IHM que sont : cohérence, concision (limitation du nombre d'intervention de l'utilisateur), structuration des activités (décomposition d'une tâche complexe), flexibilité (application personnalisable), retour d'informations et gestion des erreurs, toutes choses qui garantissent une interface ergonomique et intuitive et qui n'apparaissent pas explicitement dans cette présentation.

Cependant, au vue de l'ampleur du projet, une notation progressive sera appliquée (tout en conservant le système d'évaluation décris ci-dessus) :

  • création d'un scénario (8 pts)
  • sauvegarde et chargement (2 pts)
  • démarrage d'une partie (mise en place) (2 pts)
  • gestion des marines (4 pts)
  • gestion des aliens (4 pts)