|
| Enigme ordre de leviers/interrupteurs | |
| | Auteur | Message |
---|
Samaël Pyro C'est quoi la Tasse Bleue ?
Nombre de messages : 22
Age : 27
Localisation : France - Normandie
Date d'inscription : 24/11/2015
| Sujet: 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à En espérant avoir une réponse rapidement. Merci d'avance pour votre aide. |
| | | Atavismus Grand Cliqueur Royal
Nombre de messages : 1857
Localisation : France
Date d'inscription : 27/01/2014
| Sujet: 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 |
| | | Samaël Pyro C'est quoi la Tasse Bleue ?
Nombre de messages : 22
Age : 27
Localisation : France - Normandie
Date d'inscription : 24/11/2015
| Sujet: 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. |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: 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 ! |
| | | Samaël Pyro C'est quoi la Tasse Bleue ?
Nombre de messages : 22
Age : 27
Localisation : France - Normandie
Date d'inscription : 24/11/2015
| Sujet: 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.) |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: 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 ! |
| | | Samaël Pyro C'est quoi la Tasse Bleue ?
Nombre de messages : 22
Age : 27
Localisation : France - Normandie
Date d'inscription : 24/11/2015
| Sujet: Re: Enigme ordre de leviers/interrupteurs Mer 26 Avr 2017 - 1:53 | |
| Toujours pareil malheureusement. * (Mais merci je cherchais justement comment s'appelait le "eanywhere" avant d'ajouter des Walkable areas à ma room.) |
| | | Contenu sponsorisé
| Sujet: Re: Enigme ordre de leviers/interrupteurs | |
| |
| | | | Enigme ordre de leviers/interrupteurs | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |