Forum d'entraide à la création de jeux d'aventure
 
PortailPortail  AccueilAccueil  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment :
Manga Chainsaw Man : où acheter le Tome 17 ...
Voir le deal
19.99 €

 

 Enigme ordre de leviers/interrupteurs

Aller en bas 
3 participants
AuteurMessage
Samaël Pyro
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?
Samaël Pyro


Nombre de messages : 22

Age : 26

Localisation : France - Normandie

Date d'inscription : 24/11/2015


Enigme ordre de leviers/interrupteurs Empty
MessageSujet: Enigme ordre de leviers/interrupteurs   Enigme ordre de leviers/interrupteurs EmptyLun 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.

Enigme ordre de leviers/interrupteurs 1493050610-room7-copie

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
http://samaelpyro.deviantart.com/
Atavismus
Grand Cliqueur Royal
Grand Cliqueur Royal
Atavismus


Nombre de messages : 1857

Localisation : France

Date d'inscription : 27/01/2014


Enigme ordre de leviers/interrupteurs Empty
MessageSujet: Re: Enigme ordre de leviers/interrupteurs   Enigme ordre de leviers/interrupteurs EmptyMar 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
http://store.steampowered.com/app/367110/
Samaël Pyro
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?
Samaël Pyro


Nombre de messages : 22

Age : 26

Localisation : France - Normandie

Date d'inscription : 24/11/2015


Enigme ordre de leviers/interrupteurs Empty
MessageSujet: Re: Enigme ordre de leviers/interrupteurs   Enigme ordre de leviers/interrupteurs EmptyMar 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
http://samaelpyro.deviantart.com/
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai


Nombre de messages : 2907

Date d'inscription : 01/08/2006


Enigme ordre de leviers/interrupteurs Empty
MessageSujet: Re: Enigme ordre de leviers/interrupteurs   Enigme ordre de leviers/interrupteurs EmptyMar 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.
Revenir en haut Aller en bas
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 ?
Samaël Pyro


Nombre de messages : 22

Age : 26

Localisation : France - Normandie

Date d'inscription : 24/11/2015


Enigme ordre de leviers/interrupteurs Empty
MessageSujet: Re: Enigme ordre de leviers/interrupteurs   Enigme ordre de leviers/interrupteurs EmptyMar 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
http://samaelpyro.deviantart.com/
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai


Nombre de messages : 2907

Date d'inscription : 01/08/2006


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

Essaie de remplacer les eWalkableAreas par eAnywhere.
Revenir en haut Aller en bas
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 ?
Samaël Pyro


Nombre de messages : 22

Age : 26

Localisation : France - Normandie

Date d'inscription : 24/11/2015


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

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





Enigme ordre de leviers/interrupteurs Empty
MessageSujet: Re: Enigme ordre de leviers/interrupteurs   Enigme ordre de leviers/interrupteurs Empty

Revenir en haut Aller en bas
 
Enigme ordre de leviers/interrupteurs
Revenir en haut 
Page 1 sur 1

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: