Introduction :


Ici se trouveront toutes les questions relatives à l'avancement du projet, des plus basiques aux questions un peu plus poussées.


Problématique :

Comment créer un jeu utilisant les principes de la mécanique classique ?

  Questions :  

                  

Son:


Comment gérer le sound design ?

On importe une librairie qui va servir à stocker du son avec : import ddf.minim.*; On crée ensuite un lecteur de son que l'on peut nommer comme on le veut, exemple : AudioPlayer player1;  On définie ensuite la librairie en lui donnant le nom que l'on souhaite : Minim minim; Après avoir copié un fichier audio au format mp3 dans le dossier du sketch, on définie la librairie et le lecteur de son dans le setup en utilisant : minim = new Minim(this); et player1 = minim.loadFile("NomDuFichier.mp3").

Après avoir définie tout ceci, on peut définir des actions pour le lecteur de son dans le setup si on veut que la musique se joue dés le début, ou ailleurs. Par exemple : player1.loop(); fera que le fichier audio se jouera en boucle, player1.pause(); fera s'arrêter le lecteur jusqu'à ce qu'une nouvelle instruction soit donnée.

Comment permettre de couper le son ?

On va faire en sorte que si l'on appuie sur une touche, le lecteur soit se mette en pause soit se ferme, dans les deux cas le son va s'arrêter.

if (keyPressed) {

 if (key == 'm' key == 'M') {

  player1.pause();

}

}

Dans ce cas, en appuyant sur la touche "M", le lecteur va se mettre en pause, il pourra reprendre si l'instruction "play" est donnée sous une autre condition.

OU

if (keyPressed) {

 if (key == 'm' key == 'M') {

  player1.close();

}

}

Dans ce cas, après avoir appuyé sur la touche "M", le lecteur va être fermé, ce qui veut dire que le son ne pourra plus être jouer quoiqu'il arrive.


Trajectoire :


Comment faire en sorte que la fusée décrive une trajectoire parabolique ?

Il va falloir former une équation du type y = ax²+bx+c, on assignera des valeurs cohérentes aux variables a,b et c qui permettront que le lancer ne soit ni trop court, ni trop long.

Dans la déclaration des variables : 

float a=-0.0089;

float b=2.7;

float c=-0.2;

float y=a*x*x+b*x+c;

float x=0;

Dans le draw :

y=a*x*x+b*x+c;

x++;

image(fusee, x, y);

De cette façon, comme x ne cesse d'augmenter, la fusée va décrire une trajectoire parabolique et ne va jamais s'arrêter.

Comment permettre le lancer ?

Il va falloir faire en sorte que x augmente seulement lorsque l'utilisateur va cliquer, pour cela on va commencer par créer un booléen "tir" qui deviendra vrai si on clique. Seulement il faut que le lancer s'opère en un seul clic, il ne faut pas que l'on soit obliger de rester appuyer sur le clic pour que le lancer s'opère. Pour cela on va créer une variable "ClicRestant" qui va valoir 1 au début et qui s'annulera par la suite. 

Dans la déclaration des variables :

int clicRestants = 1 ;

boolean tir = false;

Par la suite, on peut créer un "void clic" qui va rendre le code plus clair :

void clic() {

if (mousePressed) {

 if (clicRestants == 1) {

   clicRestants = clicRestants-1;

   tir = true;

}

}

if (tir == true) {

  x++;

}

}

De cette manière, lorsque l'on va cliquer la condition "mousePressed" va devenir fausse, mais le booléen "tir" va devenir vrai, x va alors augmenter, ce qui va déclencher le tir.

Comment stopper le lancer ?

Il va y avoir deux possibilités pour que le tir soit stoppé, soit la fusée a atteint sa cible, et alors c'est la victoire, soit la fusée a raté sa cible, c'est alors la défaite. Dans les deux cas la fusée s'arrête et le tir est stoppé. On va alors définir des booléens, qui s'ils s'activent arrêterons le lancer mais pourront également déclencher d'autres évènements comme l'affichage d'un texte et le déclenchement d'un son qui feront comprendre au joueur qu'il a gagné ou perdu. On va également définir une cible qui sera un cercle prenant pour paramètres de positions des variables, on définira ensuite des conditions pour que si la fusée entre dans le champ de ces variables, le tir s'arrête car la partie est gagnée. De le même manière, on pourra dire que si la fusée n'entre pas dans le champ, le tir s'arrête car la partie est perdue.

Dans la déclaration des variables :

boolean gagne = false;

boolean perdu = false;

float positionCibleX = 0 ;

float positionCibleY = 0 ;

On peut créer dans un premier temps un "void cible" :

void cible() {

  if (positionCibleX==0) {

    if (positionCibleY==0) {

      positionCibleX=250;

      positionCibleY=370;

      positionTir=true ;

}

}

ellipse(positionCibleX, positionCibleY, 20, 20) ;

}

Et dans un second temps on peut créer un "void affichage", on pourra y ajouter des éléments distinctifs de la victoire et de la défaite :

void affichage() {

if (y>positionCibleY-100) {

 if (x>positionCibleX-100) {

  if (y<positionCibleY+100) {

   if (x<positionCibleX+100) {

    gagne = true;

    tir = false;

}

}

}

}

if (y>positionCibleY) {

 if (x>positionCibleX) {

  perdu = true;

  tir = false;

Si le booléen tir est faux, la fusée s'arrête. Notons que dans ces conditions, il est assez aisé de gagner.


Interactivité :


Comment permettre de relancer le tir une fois celui-ci terminé ?

On va commencer par créer un booléen "fin", lorsque celui-ci sera vrai, cela indiquera que le tir est fini, lorsque cela se passera, il faudra appuyer sur une touche pour que la position de la cible change, que la fusée revienne à sa position de départ, et que toutes les conditions nécessaires au lancer redeviennent vraies. 

Dans la déclaration des variables :

boolean fin = false;

On crée un "void recommecer" :

void recommencer (){

if(fin==true) {

 if(keyPressed) {

  if(key=='r' '|| key =='R'){

   fin=false ;

   x=0;

   y=(716-(a*x*x+b*x+c));

   clicRestants =1 ;

   positionTir=false ;

   gagne=false ;

   perdu=false ;

}

}

}

if (fin ==true){

 if (gagne==true){

  if (positionTir==false){

   positionCibleX=250;

   positionCibleY=370

}

}

}

Notons que le booléen "fin" deviens vrai que la partie soit gagnée ou perdue.

Comment permettre a l'utilisateur de se servir des touches du clavier pour modifier un paramètre ?

On va créer un "void réglages" qui va faire en sorte que tant que le booléen "fin" reste faux, on peut modifier le coefficient de la trajectoire "a" en l'augmentant ou en le baissant, ce qui influera sur la puissance du tir.

void reglages() {

if (fin==false){

 if (keyPressed) {

  if (key == 'I' || key == 'i') {

   a=a+0.0002;

}

}

}

if (fin == false) {

 if (keyPressed) {

  if (key== 'D' || key== 'd') {

   a=a-0.0002 ;

}

}

}

}

De cette manière, en appuyant sur "I" on augmente la puissance du tir, en appuyant sur "D" on baisse la puissance du tir.


Affichage :


Comment afficher un message indiquant que le tir est fini ?

Dans le "void affichage" on fait en sorte que chaque condition induisant la défait ait pour effet l'affichage d'un texte faisant comprendre au joueur que le tir est fini.

 Ainsi, dans le cas d'une défaite, on rajoute dans les conditions induisant la défaite (dés que le booléen "perdu" devient vrai) :

textSize(60);

text("Game Over", 170, 320);

Dans le cas d'une victoire, c'est exactement le même principe, on rajoute dans les conditions induisant la victoire un message faisant comprendre au joueur que son tir est réussi (lorsque le booléen "gagne" devient vrai) :

textSize(45);

text("Bravo, vous avez gagné", 170, 320);

Comment afficher une jauge qui se remplie ou se vide ?

Pour cela, on va créer un "void jauge", et à l'intérieur nous allons mettre deux rectangle prenant exactement les mêmes paramètres, seulement il faudra les mettre de couleurs différentes, et l'un d'entres eux prendra "xj" comme variable à la place de sa position en x, cela permettra par la suite de faire varier sa position lorsque l'on appuiera sur une touche augmentant ou baissant la puissance du tir, cela se traduira par une jauge qui se remplie ou se vide.

void jauge() {

noStroke(); 

fill (#FF0000);

rect(10, 130, 290, 15);

fill(#0700FF);

rect(10 , 130, xj, 15 );

if (keyPressed) {

 if ( key == 'I' || key == 'i') {

  if (xj < 290 ) {

   xj = ( xj + 7);

}

}

}

if (keyPressed) {

 if (key == 'D' || key == 'd') {

  if (xj > 0 ) {

   xj = ( xj- 7);

   rect(10, 130, xj, 15);}

}

}

}

Comment afficher les objets tels que la fusée ?

Il faut tout d'abord déclarer une variable de type Pimage, puis la charger dans le bloc "void setup" à l'aide de la fonction loadImage, puis l'afficher dans le bloc "void draw" grâce à la fonction image, avec ses paramètres.

Dans la déclaration des variables :

PImage fusee ;

Dans le setup :

fusee = loadImage("fusee.png") ;

Dans le draw :

image(fusee, x, y);

Comment afficher en direct le nombre de cibles touchées et le nombre de tirs effectués ?

On va commencer par créer deux variables "score" et "tirEffectue", qui prendront pour valeur 0, par la suite on ajoutera 1 à la variable "score" dés que la fusée touchera la cible, et on ajoutera 1 à la variable "tirEffectue" dés que le tir sera déclenché. Par la suite on affichera des textes qui prendront pour paramètres l'affichage de l'évolution des valeurs de ces deux variables.

Dans la déclaration des variables :

int score = 0 ;

int tirEffectue=0 ;

Dans les conditions induisant la victoire :

score++ ;

Dans le "void clic" :

tirEffectue=tirEffectue+1 ;

Dans le "void affichage" :

text("Tir effectués="+tirEffectue, 805, 55) ;

text("Cibles touchées="+score,768, 83) ;

© 2017 Worlds Collide. Tous droits réservés.
Optimisé par Webnode
Créez votre site web gratuitement ! Ce site internet a été réalisé avec Webnode. Créez le votre gratuitement aujourd'hui ! Commencer