QUESTIONNEMENTS

Problématique

Comment, dans un jeu de tir, peut-on intégrer des connaissances de sciences physiques tout en restant dans l'optique d'un jeu agréable et convivial ?

Objectif principal

Créer un jeu de tir où, dans un vortex, avec un vaisseau, il faut détruire des astéroïdes, qui, possédant des couleurs et des tailles différentes et variés, nécessitent la sélection d'une longueur d'onde adéquate pour ne pas siphonner l'énergie du canon laser et détruire efficacement les débris gênants.

Introduction

Vous êtes un pilote vous battant dans une lutte spatiale. Vous avez essuyé de nombreux tirs d'une flotte ennemi, ce qui vous a poussé à vous replier vers un portail, vous permettant d'accéder à un vortex, cependant rempli d'astéroïdes et de débris, un cimetière insoupçonné. Mais votre vaisseau est resté quasiment intact et vous avez survécu ! Maintenant, il est temps de sortir de cet interminable vortex qui de plus est dangereux... Mais trouverez-vous la fin interminable ?

Votre but est d'établir le plus grand score possible, c'est-à-dire de survivre le plus longtemps possible, en évitant et/ou en détruisant les astéroïdes et autres débris qui obstrueront votre parcours sans les percuter. Dès que votre vaisseau sera détruit, vous aurez perdu, "game over".

Décortication générale

  • Comment faire défiler l'image (puisqu'on avance dans le vortex) ?
  • Comment faire apparaître le vaisseau ? Comment le faire bouger ?
  • Comment modéliser le tir ? Comment lui assigner un son ?
  • Comment faire apparaître des débris "aléatoirement" (il ne faut pas qu'ils soient trop nombreux ou trop rares) et de tailles et couleurs variées ? Comment les faire disparaître si on les détruit ?
  • Comment faire constamment augmenter l'énergie de la jauge ? Comment vider l'énergie quand on tire, selon la longueur d'onde ? Comment empêcher le tir si le réservoir est siphonné ?
  • Comment affecter l'efficacité de la destruction des astéroïdes en fonction de la couleur ? Comment affecter le temps de destruction nécessaire en fonction de la taille de l'astéroïde ou du débris ?
  • Comment affecter les points de coque et de bouclier du vaisseau en fonction des débris percutés ?
  • Comment faire augmenter le score en fonction du temps passé (puisque plus l'on survit longtemps, plus le score augmente) ?
  • Comment insérer des cinématiques vidéos ? Comment insérer un menu de jeu (avec un logo "jouer", une image animée jolie, une musique et une explication rapide du fonctionnement du canon laser, pour les non-amateurs de physique) ? Comment insérer une musique de fond (pendant le jeu) ? Comment insérer un message du type "GAME OVER" si le vaisseau est détruit, c'est-à-dire si le vaisseau n'a plus de points de coque, égale à zéro ?
  • Comment assigner des commandes (touches clavier, souris) aux différentes actions du vaisseau ? Quelles commandes assigner ?

Décortication intrinsèquement liée au code informatique

  • Comment créer un écran infini sur la longueur et de la taille de l'écran de l'ordinateur en hauteur afin de faire défiler continuellement le vortex de la gauche vers la droite ?
  • Comment insérer une image telle qu'elle soit "périodique", "continuelle", sans que l'on remarque de "coupure" (pour avoir un fond d'écran continu) ?
  • Comment construire le vaisseau à partir de plusieurs formes géométriques "simples" ? Comment faire de ces entités indépendantes un objet unique (éventuellement) ?
  • Quelle boucle "for" créer pour faire apparaître aléatoirement des débris et des astéroïdes de plusieurs couleurs et de plusieurs tailles ? De plus, éventuellement, comment générer de plus en plus de débris afin de compliquer le niveau au fur et à mesure que l'on évolue ?
  • Comment faire en sorte qu'il n'y ait pas trop de débris pour ne pas saturer l'écran et permettre une jouabilité correcte ?
  • Comment créer une boucle "if", avec éventuellement un booléen, pour gérer les tirs, les destructions de débris et l'efficacité du tir ainsi que l'épuisement du réservoir d'énergie ?
  • Comment empêcher le vaisseau de sortir de l'écran ?
  • Comment faire exploser le débris, le faire disparaître et générer une explosion lorsqu'il est détruit ? Comment faire perdre des points de coque au vaisseau et faire disloquer le débris s'il y a percussion (c'est-à-dire coordonnées égales) ? Comment créer une condition pour savoir s'il y a égalité ou pas (booléen, boucle "if" et compagnie) ?
  • Comment afficher un curseur pour la santé (qui sera toujours au même endroit sur l'écran et ne défilera pas) ainsi qu'une jauge d'énergie (qui pourrait rougir lorsqu'il n'y a plus beaucoup d'énergie voire clignoter quand il sera complètement siphonné) ? Comment afficher un curseur permettant de sélectionner la longueur d'onde ?
  • Comment créer une boucle "if" si l'on perd, c'est à dire si le booléen "points de coque = 0" vrai ? Comment ainsi faire apparaître un message "GAME OVER" avec le score explicitement notifié ?

Décortication structurelle du code informatique

  • Comment insérer des variables ? Quelles variables insérer ?
  • Que mettre dans le "void setup" ? Et dans le "void draw" ?
  • Comment compartimenter les différentes fonctions ayant des paramètres communs en plusieurs "void" distincts (pour une visibilité du code optimisée) ? Voire en plusieurs onglets ?
  • Comment générer des classes pour gérer des objets similaires (débris) ainsi que les tableaux ? Et pour les différents astéroïdes ? Et pour leur couleur ? Faut-il séparer les objets ou peut-on les regrouper ?
  • Comment "détecter" les couleurs des astéroïdes, en utilisant la quantité de couleur des pixels bleus, verts et rouges qui le constituent, pour faire varier l'efficacité de l'arme ? Comment faire varier le temps de destruction en fonction de la taille ?
  • Comment faire varier les coordonnées du vaisseau en fonction des commandes que l'on assignera (déplacement de la souris ou utilisation des flèches) ?

Déroulement général de l'encodage du programme

  • Pour insérer des débris et des astéroïdes, nous allons utiliser des classes puisque les objets sont les mêmes. Il faudra coupler des fonctions aléatoires pour assigner des couleurs et deux tailles possibles aux astéroïdes.
  • Pour insérer le vaisseau, on dessine celui-ci sur un logiciel de dessin, puis on enregistre l'image et on l'assimile au programme. Pour le faire se déplacer, on assignera les coordonnées du centre de l'image (à savoir les coordonnées de position plus la demi taille de la longueur et de la largeur de l'image) au curseur de la souris, qu'il faudra faire disparaître.
  • Pour modéliser le trait du tir, lorsque l'on clique gauche sur la souris - il faudra donc créer une boucle "if" pour déclencher le tir, tout en n'oubliant pas de prendre en compte un autre booléen pour empêcher le tir s'il n'y a pas suffisamment d'énergie dans le réservoir -, il faudra créer un rectangle fin dont la coordonnée en abscisse dépend du temps (afin que le tir se propage rapidement vers l'objet visé). Sa couleur dépendra que la longueur d'onde sélectionnée (en appuyant sur c pour diminuer la longueur d'onde et v pour l'augmenter).
  • Il faudra créer des "cases mémoires", deux types :
  1. Pour la taille : en fonction des petits ou gros astéroïdes, il faudra assigner une taille "1" (petit) ou "2" (grand) afin de faire varier le temps de destruction - on choisira ainsi aléatoirement la taille "1" ou "2", qui assignera des tailles différentes. Lorsque le tir rencontre un astéroïde portant le marqueur "1", celui-ci sera détruit au bout de 2 tirs - si l'on considère que le tir est sur la même longueur d'onde que l'astéroïde -. Sinon, si le marqueur est "2", l'astéroïde sera détruit au bout de 4 tirs - si l'on considère toujours que le tir est sur la même longueur d'onde que l'astéroïde.
  2. Pour la couleur : il y aura 5 couleurs (associés à 5 longueurs d'ondes différentes) : violet (400 nm), bleu (500 nm), vert (600 nm), jaune (700 nm) et rouge (800 nm). On peut créer des cases mémoire correspondant aux longueurs d'ondes pour sélectionner la couleur de l'astéroïde. Ainsi, la couleur de l'astéroïde pourra être défini en choisissant la case mémoire aléatoirement. De plus, si le tir correspond à la couleur de l'astéroïde - il suffira de détecter la quantité de couleur des pixels dans une fonction "if" -, alors le tir prendra le coefficient "a", et plus la longueur d'onde sera loin de celle de l'astéroïde, plus le coefficient sera "b", "c", "d" ou "e".
  3. Les "points de vie" de l'astéroïde : si sa taille est petite (1), il aura 20 PV. S'il est grand, il aura 40 PV. Si le coefficient est "a", les dégâts infligés seront de 10 PV. Si le coefficient est "b", les dégâts seront réduits à 8 PV. "c", 6 PV - "d" 4 PV et "e", 2 PV.
  • Pour les tirs et le réservoir d'énergie, il faudra faire augmenter continuellement le réservoir de 1 PE ("point d'énergie") à chaque actualisation du site, qui sera en 30 actualisations par seconde (soit 30 PE/s), sauf si évidemment le réservoir est plein : il faudra utiliser une boucle "if" pour empêcher cela si le réservoir atteint les 200 PE, le maximum. Selon la longueur d'onde du tir, quand on tire - avec une fonction "if" -, il faudra ôter un certain nombre de PE au réservoir : pour les tirs à 400 nm, les plus énergétiques, il faudra enlever 46 PE ; pour les 500 nm, 37 PE ; 600 nm, 28 PE - 700 nm, 19 PE et 800 nm, 10 PE. Pour la cadence de tir, il faudra l'ajuster à 4 tirs/seconde, soit avec un booléen faux qui deviendra vrai au bout de 25 millis, puis à nouveau faux si l'on tire. Il faut ajouter une boucle "if" pour que le tir soit invalidé s'il n'y a pas assez d'énergie.
Nous vous souhaitons une agréable visite sur notre site.
Optimisé par Webnode Cookies
Créez votre site web gratuitement ! Ce site internet a été réalisé avec Webnode. Créez le votre gratuitement aujourd'hui ! Commencer