Forum d'entraide à la création de jeux d'aventure
 
PortailAccueilFAQRechercherS'enregistrerMembresConnexion

Partagez | 
 

 Enigme ordre de leviers/interrupteurs

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Samaël Pyro
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?
avatar

Nombre de messages : 20

Age : 20

Localisation : France - Normandie

Date d'inscription : 24/11/2015


MessageSujet: Enigme ordre de leviers/interrupteurs   Lun 24 Avr 2017 - 16:23

Salutation, je travaille actuellement sur la première vrai énigme de mon jeu de rodage.
(Contrairement aux précédentes qui consistaient à se débrouiller avec les items et les hotspots)
Malheureusement je fais face à un problème, elle ne fonctionne pas comme elle le devrait, je voudrais avoir votre avis dessus :

Elle est assez simple, il s'agit d'activer les différent interrupteurs dans un ordre précis afin de faire apparaître la carte.  
Les cranes correspondant à  : Premier= levier  2/ Second = levier 4 /Troisième= levier  1/ Quatrième =Levier 3
Donc la solution est dans l'ordre = 3; 1; 4; 2

Actuellement :
Le troisième crane (levier 1) s'actionne correctement et se lock.
Le premier crane (levier 2) ne fait rien.
Le deuxième et le quatrième (levier 3 et 4) s'actionne n'importe comment.

Voici le code :
Code:
// room script file


bool Levier1 = false;
bool Levier2 = false;
bool Levier3 = false;
bool levier4 = false;
bool Resolution = false;


function oSkull1_AnyClick()
{
   if (Levier1) {
   oSkull1.Move(135, 281, 4, eNoBlock, eWalkableAreas);
   Levier2 = true;
    }
    else if (Levier2) {
    Display("Le mecanisme semble enclenche.");
    }
else oSkull1.Move(135, 281, 4, eNoBlock, eWalkableAreas);
     oSkull1.Move(135, 137, 4, eNoBlock, eWalkableAreas);
}

function oSkull3_AnyClick()
{
  if (Levier1) {
  Display("Le mecanisme semble enclenche.");
  }
else oSkull3.Move(348, 281, 4, eNoBlock, eWalkableAreas);
     Levier1 = true;
}

function oSkull4_AnyClick()
{
    if (Levier1 && Levier2) {
    oSkull4.Move(444, 281, 4, eNoBlock, eWalkableAreas);
    Levier3 = true;
    }
    else if (Levier1) {
    oSkull4.Move(444, 281, 4, eNoBlock, eWalkableAreas);
    oSkull4.Move(444, 137, 4, eNoBlock, eWalkableAreas);
    oSkull3.Move(348, 137, 4, eNoBlock, eWalkableAreas);
    Levier1 = false;
    }
    else if (Levier3) {
    Display("Le mecanisme semble enclenche.");
}
else oSkull4.Move(444, 281, 4, eNoBlock, eWalkableAreas);
     oSkull4.Move(444, 137, 4, eNoBlock, eWalkableAreas);
}
    
    
function oSkull2_AnyClick()
{
    if (Levier1 && Levier2 && Levier3) {
      oSkull2.Move(241,  281, 4, eNoBlock, eWalkableAreas);
      levier4 = true;
      Resolution = true;
    }
    else if (Levier1) {    
    oSkull2.Move(241, 281, 4, eNoBlock, eWalkableAreas);
    oSkull2.Move(241, 137, 4, eNoBlock, eWalkableAreas);
    oSkull3.Move(348, 137, 4, eNoBlock, eWalkableAreas);
    Levier1 = false;
    }
    else if (Levier1 && Levier2) {    
    oSkull2.Move(241, 281, 4, eNoBlock, eWalkableAreas);
    oSkull2.Move(241, 137, 4, eNoBlock, eWalkableAreas);
    oSkull3.Move(348, 137, 4, eNoBlock, eWalkableAreas);
    Levier1 = false;
    oSkull1.Move(135, 137, 4, eNoBlock, eWalkableAreas);
    Levier2 = false;
    }
    else if (levier4) {
    Display("Le mecanisme semble enclenche.");
    }
 else oSkull2.Move(241, 281, 4, eNoBlock, eWalkableAreas);
      oSkull2.Move(241, 137, 4, eNoBlock, eWalkableAreas);
}

function room_Load()
{
if (Resolution) {
oMap.Visible = true;
}
else oMap.Visible = false;
}

Et voici un screenshot de la Room pour visualiser le fonctionnement.
(j'ai rajouté l'ordre des levier, qui lui n'est pas présent dans le jeu.)
Quand un levier est bien enclenché la partie supérieur du crane s'abaisse.
Normalement quand un mauvais levier est enclenché, ceux activés précédemment retournent à leurs situation initiale.
De plus dans mon cas, le crane ne s'aligne pas bien une fois arrivé en bas pour une raison qui m'échappe.



Donc voilà voilà grand sourire
En espérant avoir une réponse rapidement. Merci d'avance pour votre aide. clin d\\\\'oeil
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://samaelpyro.deviantart.com/
Atavismus
Grand Cliqueur Royal
Grand Cliqueur Royal
avatar

Nombre de messages : 1723

Localisation : France

Date d'inscription : 27/01/2014


MessageSujet: Re: Enigme ordre de leviers/interrupteurs   Mar 25 Avr 2017 - 8:59

Salut !

Je ne suis pas sûr de comprendre ta demande.
Cela dit, pour ce genre d'énigme, en général, j'utilise un string que je concatène au fur et à mesure des actions.
Si ton string a une longueur de 4 et qu'il n'est pas égal à "3142", alors tu lances une fonction qui remet à vide le string et à "zéro" tes leviers.
J'espère que je suis assez clair et que ça pourra t'aider.

Bon gamedev clin d\\\\'oeil

_________________
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://store.steampowered.com/app/367110/
Samaël Pyro
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?
avatar

Nombre de messages : 20

Age : 20

Localisation : France - Normandie

Date d'inscription : 24/11/2015


MessageSujet: Re: Enigme ordre de leviers/interrupteurs   Mar 25 Avr 2017 - 11:56

Merci Atavismus =)
Cependant je ne connais pas encore le fonctionnement d'un "String".
Je vais voir ce que me dis l'aide AGS. clin d\\\\'oeil
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://samaelpyro.deviantart.com/
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2510

Date d'inscription : 01/08/2006


MessageSujet: Re: Enigme ordre de leviers/interrupteurs   Mar 25 Avr 2017 - 13:59

À vrai dire la méthode que tu emploies actuellement devrait très bien fonctionner Samaël, même si c'est moins "esthétique" (et peut-être aussi moins pratique) que la méthode que mentionne Atavismus.

Je pense qu'un des problèmes principaux du code que tu as collé réside dans ce que tu mets à l'intérieur de chaque if, else if et else. Efforce-toi de bien indenter de façon à refléter les degrés d'imbrication (toute ligne à l'intérieur d'un if/else if/else devrait être alignée plus à droite que ledit if/else if/else).

Aussi, oublie pas de remettre toutes les variables Levier sur false (et tous tes crânes à leur position de départ ?) lorsqu'un crâne est activé dans le mauvais ordre. Ou bien lorsque les 4 crânes ont été activés, mais pas dans le bon ordre. C'est globalement la partie qui semble pécher dans ton code : la gestion des erreurs. Sous quelles conditions est-ce que l'erreur est "confirmée" (par exemple à chaque essai ou bien après 4 activations, comme on vient de le considérer) ? Lorsque l'erreur est "confirmée", quelles sont les conséquences (par exemple remettre tous les leviers à zéro, comme on vient aussi de le considérer) ?

EDIT : excuse-moi, en fait tu as déjà répondu à ces questions.
Samaël Pyro a écrit:
Normalement quand un mauvais levier est enclenché, ceux activés précédemment retournent à leurs situation initiale.
Du coup je serais toi, je ferais une fonction de remise à zéro globale, que j'appellerais dès qu'un levier est activé dans le mauvais ordre. Par ailleurs, je passerais l'animation d'activation du levier en eBlock et je la lancerais chaque fois que la variable Levier correspondante n'est pas true, afin qu'on voie la tentative même lors d'un échec. Quelque chose comme ça :
Code:
function RemiseLeviersAZero() {
    Levier1 = false;
    Levier2 = false;
    Levier3 = false;
    Levier4 = false;
    oSkull1.Move(135, 137, 4, eNoBlock, eWalkableAreas);
    oSkull2.Move(241, 137, 4, eNoBlock, eWalkableAreas);
    oSkull3.Move(348, 137, 4, eNoBlock, eWalkableAreas);
    oSkull4.Move(444, 137, 4, eNoBlock, eWalkableAreas);
}

function oSkull1_AnyClick()
{
    if (Levier2) {
        Display("Le mecanisme semble enclenche.");
        return; // On arrête l'exécution de ce code ici
    }
    // Tentative d'activation
    oSkull1.Move(135, 281, 4, eBlock, eWalkableAreas);
    if (Levier1) {
        Levier2 = true;
    }
    // Échec
    else {
        RemiseLeviersAZero();
    }
}
 
function oSkull3_AnyClick()
{
    if (Levier1) {
        Display("Le mecanisme semble enclenche.");
        return; // On arrête l'exécution de ce code ici
    }
    // Tentative d'activation
    oSkull3.Move(348, 281, 4, eBlock, eWalkableAreas);
    Levier1 = true;
}
 
function oSkull4_AnyClick()
{
    if (Levier3) {
        Display("Le mecanisme semble enclenche.");
        return; // On arrête l'exécution de ce code ici
    }
    // Tentative d'activation
    oSkull4.Move(444, 281, 4, eBlock, eWalkableAreas);
    if (Levier1 && Levier2) {
        Levier3 = true;
    }
    // Échec
    else {
        RemiseLeviersAZero();
    }
}    
    
function oSkull2_AnyClick()
{
    if (levier4) {
        Display("Le mecanisme semble enclenche.");
        return;  // On arrête l'exécution de ce code ici
    }
    // Tentative d'activation
    oSkull2.Move(241,  281, 4, eBlock, eWalkableAreas);
    if (Levier1 && Levier2 && Levier3) {
        Levier4 = true;
        Resolution = true;
    }
    // Échec
    else {
        RemiseLeviersAZero();
    }
}


Samaël Pyro a écrit:
De plus dans mon cas, le crane ne s'aligne pas bien une fois arrivé en bas pour une raison qui m'échappe.
C'est parce que la coordonnée X passée à la commande Move représente le milieu de l'objet et non pas son bord gauche (ou l'inverse, mais en gros y'a un mismatch ici quoi). Je te laisse ajuster ça en conséquence.

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Samaël Pyro
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?
avatar

Nombre de messages : 20

Age : 20

Localisation : France - Normandie

Date d'inscription : 24/11/2015


MessageSujet: Re: Enigme ordre de leviers/interrupteurs   Mar 25 Avr 2017 - 22:28

Merci beaucoup Kitai! Ton code semble fonctionner à merveille. =D
Cependant le levier2 (crane1) ne bouge toujours pas, vu que l'animation stop le jeu, celui-ci se bloque.
(Je cherches un moyen mais je vois pas trop se qui cloche.)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://samaelpyro.deviantart.com/
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2510

Date d'inscription : 01/08/2006


MessageSujet: Re: Enigme ordre de leviers/interrupteurs   Mer 26 Avr 2017 - 0:02

Essaie de remplacer les eWalkableAreas par eAnywhere.

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Samaël Pyro
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?
avatar

Nombre de messages : 20

Age : 20

Localisation : France - Normandie

Date d'inscription : 24/11/2015


MessageSujet: Re: Enigme ordre de leviers/interrupteurs   Mer 26 Avr 2017 - 1:53

Toujours pareil malheureusement. perplexe*
(Mais merci je cherchais justement comment s'appelait le "eanywhere" avant d'ajouter des Walkable areas à ma room.)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://samaelpyro.deviantart.com/
Contenu sponsorisé




MessageSujet: Re: Enigme ordre de leviers/interrupteurs   

Revenir en haut Aller en bas
 
Enigme ordre de leviers/interrupteurs
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Enigme ordre de leviers/interrupteurs
» Black Ops 2 : BURIED ( Tuto des secrets )
» Énigme.
» L'Ordre des Hospitaliers
» Charte de l'Ordre du Mérite

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Questions / Réponses-
Sauter vers: