Avancement du projet
Prolématique: Comment créer un jeux en 2D ou 3D de style RPG où le joueur peut bouger son personnage et interargir avec le décor. Nous aimerions aussi que chaque choix du joueur influe sur la suite de l'histoire sur processing?

Mise à plat du projet:

 

Description précise du programme:

Lors de l'ouverture du programme, le joueur a le choix entre plusieurs rubriques, "Continuer", "Nouvelle Partie" ou "Quitter le jeu". Lorsqu'il clique sur l'une de ces rubriques, de nouvelles rubriques apparaissent laissant place à un nouveau menu:

Lorsque le joueur clique sur:

  • Continuer: Un Layer apparait avec trois places de sauvegarde. Pour que ce menu apparaisse, il faut que l'une des places de sauvegarde soit commencée. Lorsque le joueur clique sur l'un de ces emplacements de sauvegarde, le jeu reprend là où le jeu a été sauvegardé.

 

  • Nouvelle partie: Le jeu commence et le menu disparait.

 

  • Quitter le jeu: Le programme se ferme.

 

A l’écran apparaissent deux type de personnages (masculin ou féminin), le joueur peut alors choisir l’un des deux, qui le représentera au long du jeu. Ensuite, un onglet apparait et demande un pseudonyme au joueur. Celui-ci entre une suite de caractères et clique sur "OK", si certains caractères ne sont pas pris en compte, un layer d'erreur apparait et demande d'entrer à nouveau le pseudonyme. S'il clique sur "annuler", le programme retourne au menu de base. Sinon, le jeu commence. Un didacticiel apparait sous forme de livre. Le joueur peut faire défiler les quelques pages d’explications (bouger, déplacer les objets …). Enfin,  il peut commencer l'histoire et donc interagir avec les objets, les PNJ, passer d'une salle à une autre, etc. …

Le didacticiel nous apprend aussi les touches raccourci, telle que 'M' permettant d'accéder au Menu, c'est-à-dire, un nouveau layer comportant « Sauvegarder » (enregistrement de la partie sur un emplacement de sauvegarde choisit par le joueur), « Quitter » (retourne au menu d’ouverture),  « Option » (gestion des volumes, de la taille de l’écran, etc. …). La touche ‘I’ permettra d’ouvrir l’inventaire, c’est l’endroit où sont stockés tous les objets du joueur. Objets qu’il pourra ramasser au long du jeu. Lorsqu’il ramasse un objet, celui-ci apparait dans l’inventaire, lorsqu’il utilise un objet de l’inventaire il y a deux types de réactions :

  • Soit l’objet est à usage unique et disparait automatiquement de l'inventaire après son utilisation.
  • Soit l’objet n’est pas à usage unique et reste dans l’inventaire une fois utilisé.

 

    Partie graphique, ce jeu comportera plusieurs salles reliées les unes aux autres par des portes ou des passages secrets, le programme affichera ces salles une par une. Lorsque le joueur change de pièce, la map recentre la caméra sur la nouvelle pièce.

 Une partie des objets du décor seront interactifs, ils pourront alors être déplacés, mis dans l’inventaire… Par exemple si le joueur s'approche d'un objet et appuis sur la touche action, un layer apparait, celui-ci donne le nom de l'objet et une courte déscription, ensuite le joueur a le choix: si l'item peut être pris, les choix "prendre" ou "ne rien faire" apparaissent, le joueur doit selectioner l'un d'eux à l'aide des flèches directionnelles. S'il choisit "prendre", l'objet est mis dans l'inventaire et disparait du décor. S'il choisit "ne rien faire", le jeux reprend et l'objet est toujours à sa place. Si l'item est déplaçable, la même opération se répéte mais avec les choix "déplacer" et "ne rien faire". Les situations varies mais marche toute sur le même système.

Lorsque le joueur se trouve devant une porte, il lui suffit de se diriger vers celle ci pour passer à la pièce suivante aucune touche autre que le déplacement n'est nécessaire. Par contre la porte peut être fermer, un message apparait alors: "c'est fermé". Pour débloquer la porte il faut donc trouver une clé, une fois celle-ci trouvée et placée dans l'inventaire, il faut s'approcher de la porte, ouvrir l'inventaire et selectionner la clé. Les choix "utiliser" et "ne rien faire" apparaisse, il suffit alors de choisir en selectionnant.

Certains objets sont utilisables tout au long du jeu, il faut donc répéter l'action. Si un objet est selectionné dans l'inventaire et que le joueur choisit de l'utilisé mais que l'objet n'est pas utilisable à cet endroit, le message "cet objet ne peut pas être utilisé ici " apparait.

Si le joueur prend un objet piégé ou tombe dans un piège un message « GAME OVER » apparait et la partie reprend au dernier endroit sauvegardé.

Par défaut se sera les fléches directionelles du clavier qui serviront à déplacer le personnage, fléche du haut vers le haut, de la droite vers la droit etc...

Par défaut la touche action sera "E".

 

Questions

 

  1.    Page d'accueil
  • Comment faire réagir les rubriques de la page et les rendre interactives?
  • Comment sauvegarder une partie avec Processing et la récupérer plus tard?

 

  • Début du jeu
    • Comment faire en sorte que le jeu prenne en compte le pseudo et le choix de personnage ?
    • Comment programmer des touches par défauts changeables au souhait du joueur ?

     

  • Menu du jeu
  • Comment faire en sorte que l'une des touches du clavier ouvre un icone menu?
  • Comment créer/intégrer des sous rubriques?

 

  • Programmation:
    • Comment rendre le jeu interactif (fenêtre, décor...)?
    • Comment créer un jeu en 2D ou en 3D?
    • Comment créer et rendre une map dynamique?
    • Comment la trame peut-elle suivre un arbre de choix complexe?

 

  1. Personnage:

Déplacer le personnage à l’aide des touches du clavier.

Faire en sorte qu’il ne puisse pas sortir de la pièce exceptée par les portes ou les escaliers.

Faire en sorte qu’il ne passa pas au travers du décor

  • Comment le faire interagir ou déplacer certains objets ?
  • Comment programmer la mort du personnage à cause de pièges ou accidents ?

 

  1. Items
  • Gérer leur apparition ?
  • Faire en sorte qu’il ressorte du fond ?
  • Gérer les items piégés ?

 

  1. PNJ:
  • Comment intégrer des personnages non joueurs?

 

 

Détermination des éléments nécesaire à la programmation.

 

  1. Variables « universelles »
    • Déclaration d’une variable int nommée « page » servant à ordonner chaque menu et page.
    • Déclaration d’un tableau de caractère (fonction char) de 10 000 cases actuellement afin de définir chaque touches reliée à un caractère lors du gameplay, et permettant également la personnalisation de ces touches.
    • déclaration d’un booléen nommé « jeu » qui permettra de lancer le jeu ou de l’arrêter
    • Déclaration de deux booléen nommés « affichage1 » et « affichage2 » qui servirons à assurer le fonctionnement de l’affichage du menu exclusivement pendant le jeu.
    • Déclaration d'un tableau d'objets PImage de 30 case qui contiendra les images associée aux boutons des menus.
    • Déclaration d'un tableau de String nommé "Etat" qui servira à créer l'interaction graphique des boutons en modifiant un partie du nom de l'image chargée pour ceux-ci.
    • Déclaration de deux booléen nommés « Bouton1 » et « Bouton2» qui servirons à assurer le fonctionnement des boutons.
  2. Setup :

Fonction nommée void  setup ne prenant aucun paramètre

  • Fonction size prenant deux paramètres, respectivement la largeur puis la hauteur de la fenêtre.

 

  1. Draw

Actuellement, le draw ne sera composée que de condition et de la définition du background :

  • Fonction background ( ) de paramètre 0 pour un fond noir.
  • condition de « page = = 1 » exécutant si elle est remplie la fonction « MenuAccueil ( ) » affichant le menu de base.
  • condition de « « page = = 2 » exécutant si elle est remplie la fonction « menuContinuer ( ) » qui affichera les sauvegardes
  • condition de « « jeu = =  true» exécutant si elle est remplie la fonction « jeu ( ) », qui lancera le jeu.
  • condition de « « page = = 4 » exécutant si elle est remplie la fonction « MenuParamètre  ( ) » qui affichera le menu des paramètres de jeu.
  • conditions de « « page = = x » exécutant chacune si elles sont remplies les fonctions se trouvant entre leurs accolades.

Pour résumer, cette partie du programme gèrera l’affichage des pages et l’exécution ou arrêt du jeu.

 

 

  1. Menu de Base :

Fonction Nommée : void  MenuAccueil ( ) n’ayant aucun paramètre.

  1. Fond
    • Fonction PImage permettant  d’intégrer une image  destinée à l’arrière plan du Menu
    • Fonction background ( ) de paramètre 0 afin d’avoir un fond noir derrière l’image
  2. Couleurs :
    • Fonction  fill ( ) ayant pour paramètre le code couleur du remplissage des formes.
    • Fonction stroke ( ) ayant pour paramètre la couleur des contours de ces mêmes formes.
  3. Boutons :
    • Fonction void  boutonContinuer ( ) ne prenant aucun paramètre.
      • Déclaration de deux variable int nommée « a » et « b » variant en fonction de la taille de la fenêtre.
      • Définition d’un rectangle avec la fonction rect ( ) affichant un rectangle qui servira de bouton.
      • Redéfinition d’une couleur pour les formes et texte avec la fonction  fill ( ) ayant pour paramètre le code couleur désiré.
      • Fonction textSize ( ) définissant la taille des textes affiché.
      • Fonction text ( ) prenant en outre le paramètre « Continuer » qui sera le texte affiché au coordonnée choisie dans les autres paramètres.

 

  • Fonction void  boutonNouvellePartie ( ) ne prenant aucun paramètre.
    • Déclaration de deux variable int nommée « a » et « b » variant en fonction de la taille de la fenêtre.
    • Définition d’un rectangle avec la fonction rect ( ) affichant un rectangle qui servira de bouton.
    • Redéfinition d’une couleur pour les formes et texte avec la fonction  fill ( ) ayant pour paramètre le code couleur désiré.
    • Fonction textSize ( ) définissant la taille des textes affiché.
    • Fonction text ( ) prenant en outre le paramètre « Nouvelle Partie » qui sera le texte affiché au coordonnée choisie dans les autres paramètres.

 

  • Fonction void  boutonExit ( ) ne prenant aucun paramètre.
    • Déclaration de deux variable int nommée « a » et « b » variant en fonction de la taille de la fenêtre.
    • Définition d’un rectangle avec la fonction rect ( ) affichant un rectangle qui servira de bouton.
    • Redéfinition d’une couleur pour les formes et texte avec la fonction  fill ( ) ayant pour paramètre le code couleur désiré.
    • Fonction textSize ( ) définissant la taille des textes affiché.
    • Fonction text ( ) prenant en outre le paramètre « Quitter le Jeu » qui sera le texte affiché au coordonnée choisie dans les autres paramètres.

 

  1. Menu « Continuer »

 

  • Fonction background ( ) de paramètre 0 afin d’avoir un arrière plan noir.
  • Redéfinition d’une couleur pour les formes et texte avec la fonction  fill ( ) ayant pour paramètre le code couleur désiré.
  • Définition de trios rectangle avec la fonction rect ( ) et des paramètres de position en ordonnée différent affichant des rectangle de même taille et sur une même colonne, mais à des hauteurs différentes. Ceux-ci  serviront de boutons pour choisir la sauvegarde à charger.
  • exécution de la fonction « boutonRetour » affichant le bouton de retour.
  • Fonctions text ( ) et textSize ( ) qui permettrons de programmer le texte qui affichera les donnée d’avancement du joueur (temps de jeu, numéro de l’emplacement de sauvegarde, etc. …)

 

  1. Fonction  « boutonRetour »
    • Conditions if ( ) pour l’identité de la page
      • Fonction fill ( ) ayant pour paramètre le code couleur, qui varie selon la page sur laquelle le joueur navigue.
      • Créée une forme initialement un rectangle avec la fonction rect ( ) ayant des paramètres le positionnant en haut à droite de l’écran.
      • Fonction textSize ( ) définissant la taille des textes affiché.
      • Fonction text ( ) prenant en outre le paramètre « Retour» qui sera le texte affiché au coordonnée choisie dans les autres paramètres.

 

  1. Interaction des boutons :

Fonction void  mousePressed ( ) détectant le clic de la souris.

  1. Page du Menu
    • Condition if ( ) du « numéro d’identité de la page »
      • Pour  « page = 1 » (Menu de base)
        • Déclaration de deux variable int nommée « a » et « b » variant en fonction de la taille de la fenêtre.
        • Conditions if ( ) de la position de la souris en X suivies chacune de conditions de la position de la souris en Y
          • selon la position de la souris lors du clic :
            •  « page » prend la valeur de « 2 » ainsi l’identité de la page change et on affiche une autre page.
            • Si le bouton « Nouvelle Partie » est pointé lors du clique, « jeu » prend la valeur true et « page » prend la valeur 0, n’affichant donc plus aucune page de menu et lançant le jeu.
            •  Pour la position de la souris sur le bouton « Quitter le jeu », utilisation de la fonction exit ( ), fermant le programme.
      • Pour « page = 2 » (menu Continuer)
        • Conditions if ( ) de la position de la souris en X suivies chacune de conditions de la position de la souris en Y
          • selon la position de la souris lors du clic, le programme charge la sauvegarde associée au rectangle pointé.

Comment charger une sauvegarde à partir d’un bouton ? (Fichier Texte.)

 

  1. Affectation des touches

Fonction void Touches( ).

Au début du programme, le tableau de caractère « monTableauTouches[ ] » a été déclaré, celui-ci sera capable d’avoir une quantité de 10 000 valeur actuellement.

Nous nous servirons de ce tableau pour affecter à chaque case une touche qui servira pour effectuer des actions tout au long du jeu (aller à droit, ouvrir le menu, l’inventaire, etc. …).

Enfin, ce tableau permettra de rendre les touches personnalisables dans une autre fonction qui sera présente dans le menu des paramètres de jeu.

 

 

  1. Lancement du jeu :
    1. Lors du clic sur « Nouvelle partie » dans le menu de base :
      • Récapitulatif :
        • le booléen « jeu » prend la valeur  true et affecte la valeur 0 à l’identité de la page, 0 ne renvoyant à aucune page créée
        • Dans le void  draw ( ), la condition « jeu= = true » étant la seule remplie, la fonction « jeu ( ) » se lance.
      • Dans la fonction « jeu ( ) » :
        • La fonction  « Touche ( ) » est appelée
        • La trame de l’histoire et le design n’ayant pas encore été décidés, celle-ci n’est pas encore entièrement complète. Elle sera composée de plusieurs appels de fonction pour les graphismes, les choix ou encore l’affichage du personnage.
        • Une condition sera mise en place pour l’affichage d’un menu dans le jeu. Appel à la fonction « menujeu ( ) » si « affichage1 = = true » et « affichage2 = = true »

 

  1. Interaction des touches du clavier :

Fonction void  keyPressed ( ) :

  • Lorsque le jeu est en cour, condition « jeu= = true » remplie
    • Condition vérifiant si la touche correspondant à la 5eme case du tableau de caractère « monTableauTouches[ ] » est pressée
      • Affectation de la valeur « true » au booléen « affichage1 »
        • Condition vérifiant si que lorsque cette touche est pressé, si « affichage1 = = true » et « affichage2 = = true »
  • affectation de la valeur « false » au booléen « affichage1 »

Fonction void  keyReleased ( ) :

  • Lorsque le jeu est en cour, condition « jeu= = true » remplie
    • Condition vérifiant si la touche correspondant à la 5eme case du tableau de caractère « monTableauTouches[ ] » est relâchée après une pression
      • Condition vérifiant si affichage 1 à pour valeur « false »
        • Affectation de la valeur « false » au booléen « affichage2 »
      • Condition vérifiant si affichage 1 à pour valeur « true »
        • Affectation de la valeur « true » au booléen « affichage2 »

 

 

  1. Menu du jeu :
    1. Affichage :
      • Déclaration d’un layer avec la fonction createGraphics ( ) 
    2. Bouton
      • Déclaration de rectangle avec la fonction rect ( ) qui servirons de bouton, qui seront interactif et qui pourront envoyer le joueur sur les autres rubriques du menu (paramètre, quitter le jeu, etc. …)

                                                           

                                                         

   12. Rendre la map dynamique

1. Déplacer les objets

  •  Condition if ( ) vérifiant la position du personnage par rapport à l'objet(coordonnées) puis un autre vérifiant la pression d'une touche. Si l'objet est à droite du personnage, la condition suivant vérifie si la touche pressée est la flèche droite.
  •  La variable de l'abscisse de la position de l'objet sera alors incrémentée afin de déplacer l'objet vers la droite. Si l'objet est à gauche du personnage, la condition suivant vérifie si la touche pressée est la flèche gauche.
  • La variable de l'abscisse de la position de l'objet sera alors décrémentée afin de déplacer l'objet vers la gauche.  

Même chose pour les déplacement verticaux.