| [résolu]Placement d'une variable | |
|
|
Auteur | Message |
---|
Hairedplayer C'est quoi la Tasse Bleue ?
Nombre de messages : 24
Age : 44
Localisation : Aix en Provence
Date d'inscription : 29/07/2013
| Sujet: [résolu]Placement d'une variable Jeu 1 Aoû 2013 - 12:44 | |
| Salut les Point and Clickeur ! Comme je l'avais annoncé , je n'aurais pas qu'un seul problème de débutant et que j'aurais besoin de gens comme Valoulef pour m'aider ! Bon je vous fait le topo de la situation : Mon héros clique sur une poubelle / le narrateur parle / mon héros parle / le héros récupére un papier dans son inventaire. Alors ça , ça marche pas de soucis mais où placer dans mon script une variable qui me permettra de ne pas récupérer de papier et avoir d'autres phrases si le joueur re-click sur la poubelle ? Je connais le principe des variables , malheureusement dans AGS je suis encore un peu dans le flou...
Dernière édition par Hairedplayer le Jeu 1 Aoû 2013 - 17:20, édité 1 fois |
|
| |
Billbis Disciple de la Grande Tasse Bleue
Nombre de messages : 1346
Date d'inscription : 10/05/2012
| Sujet: Re: [résolu]Placement d'une variable Jeu 1 Aoû 2013 - 13:03 | |
| Coucou Hairedplayer ! Plusieurs solutions s'offrent à toi : 1)La plus classique avec des booléens - Code:
-
bool HasInteractWithBin = false;
function oPoubelle_Interact() { if (!HasInteractWithBin) { player.Walk(262, 164, eBlock); Display("Et Dieu dit : Fouille cette poubelle !"); player.Say("Oh, une poubelle avec du papier dedans !") player.AddInventory(iPapier); HasInteractWithBin = true; return; } else { player.Say("J'ai déjà du papier"); } } 2) L'économe, plus risquée : - Code:
-
function oPoubelle_Interact() { if (!player.HasInventory(iPapier)) { //Ne fonctionne que si le joueur ne peut pas refouiller la poubelle en ayant perdu le papier player.Walk(262, 164, eBlock); Display("Et Dieu dit : Fouille cette poubelle !"); player.Say("Oh, une poubelle avec du papier dedans !") player.AddInventory(iPapier); return; } else { player.Say("J'ai déjà du papier"); } } 3) La solution magique : - Code:
-
function oPoubelle_Interact() { if (Game.DoOnceOnly("Merci Billbis.")) { player.Walk(262, 164, eBlock); Display("Et Dieu dit : Fouille cette poubelle !"); player.Say("Oh, une poubelle avec du papier dedans !") player.AddInventory(iPapier); return; } else { player.Say("J'ai déjà du papier"); } } 4) Tu peux aussi complexifier le truc : - Code:
-
int NclickPoubelle = 0;
function oPoubelle_Interact() { if (NclickPoubelle ==0) { player.Walk(262, 164, eBlock); Display("Et Dieu dit : Fouille cette poubelle !"); player.Say("Oh, une poubelle avec du papier dedans !") player.AddInventory(iPapier); NclickPoubelle++; return; } else if (NclickPoubelle <4) { player.Say("J'ai déjà du papier"); NclickPoubelle++; return; } else { player.Say("J'en ai un peu marre de fouiller la poubelle."); } } J'ai pas testé les codes, il peut rester une ou deux coquilles. Cliques sur les mots de script inconnus pour aller voir la page d'aide AGS correspondante. |
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: [résolu]Placement d'une variable Jeu 1 Aoû 2013 - 13:23 | |
| - Hairedplayer a écrit:
Comme je l'avais annoncé , je n'aurais pas qu'un seul problème de débutant et que j'aurais besoin de gens comme Valoulef pour m'aider !
Je suis quand même loin d'être le plus qualifié ici, tu auras l'occasion de t'en rendre compte D'ailleurs méchant Billbis m'a devancé J'ajouterai que pour citer du code, tu n'as pas besoin de faire de capture d'écran, il suffit de copier ton code entre les balises [ code ] [ /code ] (sans espace évidemment). Par ailleurs : - Hairedplayer a écrit:
- e connais le principe des variables , malheureusement dans AGS je suis encore un peu dans le flou...
Ne t'inquiète pas, c'est pareil pour tout le monde au début. N'hésite pas à continuer de poser tes questions quand tu ne trouve pas de solution. Ça aidera en plus d'autres personnes à l'avenir. Ici, tu ne te heurteras pas (en principe) à des "google est ton ami" ou autre petites phrases désagréables (d'ailleurs rien de plus insupportable de chercher un problème sur google, de cliquer sur le premier lien, et de ne trouver que des réponses du style "apprends à rechercher", "laisse moi te trouver ça avec google" et autre pitreries - ça c'était pour le p'tit coup de gueule hors sujet ). D'ailleurs à ce sujet je précise quand même que si tu veux faire une recherche sur le forum, clique sur "recherche avancée" et passe plutôt par la bouton "Rechercher Google" (qui te donnera les résultats de ce forum uniquement), car le moteur de recherche du forum est vraiment peu performant voire aléatoire. _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Hairedplayer C'est quoi la Tasse Bleue ?
Nombre de messages : 24
Age : 44
Localisation : Aix en Provence
Date d'inscription : 29/07/2013
| Sujet: Re: [résolu]Placement d'une variable Jeu 1 Aoû 2013 - 13:39 | |
| Hello Valoulef ! J'aime l'esprit qui règne sur ce site pour l'instant , ça me va tout bien (je suis d'accord avec ton coup de gueule) ! Salut et Merci Billbis pour cette magnifique explication efficace et personnalisée ! J'ai néanmoins une erreur quand je test avec la première méthode :
function oPoubelle_Interact() { if (!hasInteractWithBin) { cPhil.Walk (262, 164, eBlock, eWalkableAreas); Display ("Sans aucune hesitation tu fouilles dans la poubelle...et tu trouve un papier sale") cPhil.Say ("Je le prends quand meme !"); player.AddInventory(iPapier); HasInteractWithBin = true return; } else { cLan.Say("Je ne veux plus mettre mes mains la-dedans"); } } C'est où que je me plante comme un gros bleu ? |
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: [résolu]Placement d'une variable Jeu 1 Aoû 2013 - 13:46 | |
| Il faut que tu regardes quelle erreur tu as, mais déjà il manque un ";" sur ces deux lignes : - Code:
-
Display ("Sans aucune hesitation tu fouilles dans la poubelle...et tu trouve un papier sale") HasInteractWithBin = true Par ailleurs je ne suis pas sûr qu'on puisse placer "else" sur la même ligne que l'accolade fermée, mais je peux me tromper. A part ça, je ne vois pas à quoi sert le "retrurn" que Billbis t'a soufflé, mais il m'éclairera peut-être à ce sujet... _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Hairedplayer C'est quoi la Tasse Bleue ?
Nombre de messages : 24
Age : 44
Localisation : Aix en Provence
Date d'inscription : 29/07/2013
| Sujet: Re: [résolu]Placement d'une variable Jeu 1 Aoû 2013 - 13:51 | |
| Effectivement il manquait ces deux là ! Mon erreur viens de la ligne 5 if (!HasInterract... |
|
| |
Billbis Disciple de la Grande Tasse Bleue
Nombre de messages : 1346
Date d'inscription : 10/05/2012
| Sujet: Re: [résolu]Placement d'une variable Jeu 1 Aoû 2013 - 13:52 | |
| J'ai oublié de te préciser que pour la portée des variables, tu pouvais lire ce petit passage du manuel. Quelle est l’erreur renvoyée ? en particulier la ligne concerné ? Au hasard, rajoute un ";" ici : - Code:
-
HasInteractWithBin = true ; Et fait attention à la case (majuscule) ici : - Code:
-
if (!HasInteractWithBin) { EDIT : Valouef le ninja est rapide. Pour le return, c'est par sécurité. J'ai un doute sur le fait de savoir si rendre vrai un bool faux dans le if ne déclencherai pas le else suivant (c'est pas très claire). Mais je n'ai pas AGS sous la mains pour tester si le return est nécessaire ou pas... |
|
| |
Hairedplayer C'est quoi la Tasse Bleue ?
Nombre de messages : 24
Age : 44
Localisation : Aix en Provence
Date d'inscription : 29/07/2013
| Sujet: Re: [résolu]Placement d'une variable Jeu 1 Aoû 2013 - 13:57 | |
| J'avais remarqué par la suite cette majuscule mais j'ai toujours l'erreur sur cette ligne :
if (!HasInteractWithBin) {
Je vois pas ? |
|
| |
Billbis Disciple de la Grande Tasse Bleue
Nombre de messages : 1346
Date d'inscription : 10/05/2012
| Sujet: Re: [résolu]Placement d'une variable Jeu 1 Aoû 2013 - 14:01 | |
| Et que dit l'erreur (le texte en anglais)? Tu doit définir la variable en haut du script de la pièce et elle doit avoir le même nom. En gros, n'oublie pas la ligne 1. |
|
| |
Hairedplayer C'est quoi la Tasse Bleue ?
Nombre de messages : 24
Age : 44
Localisation : Aix en Provence
Date d'inscription : 29/07/2013
| Sujet: Re: [résolu]Placement d'une variable Jeu 1 Aoû 2013 - 14:04 | |
| Voila Msieur : room4.asc(24): Error (line 24): undefined symbol 'HasInteractWithBin' Je sent que j'ai oublié quelque chose d’essentiel...je sais pas msieur |
|
| |
Hairedplayer C'est quoi la Tasse Bleue ?
Nombre de messages : 24
Age : 44
Localisation : Aix en Provence
Date d'inscription : 29/07/2013
| Sujet: Re: [résolu]Placement d'une variable Jeu 1 Aoû 2013 - 14:15 | |
| Ayé ! J'ai effectivement oublié cette première ligne ! Honte sur moi !! Pardon Monsieur je recommencerai plus ! J'ai bien RETIENDU la leçon !! Tout fonctionne comme je veux ! Merci pour votre patience les gars ! |
|
| |
Billbis Disciple de la Grande Tasse Bleue
Nombre de messages : 1346
Date d'inscription : 10/05/2012
| Sujet: Re: [résolu]Placement d'une variable Jeu 1 Aoû 2013 - 14:21 | |
| De rien. Bon courage ! |
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: [résolu]Placement d'une variable Jeu 1 Aoû 2013 - 14:21 | |
| - Billbis a écrit:
- J'ai un doute sur le fait de savoir si rendre vrai un bool faux dans le if ne déclencherai pas le else suivant
Ah oui je vois ce que tu veux dire. Vu comment j'utilise ces fonctions, je pense que ce n'est pas nécessaire, mais c'est une bonne question, il faudra que je vérifie. _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Billbis Disciple de la Grande Tasse Bleue
Nombre de messages : 1346
Date d'inscription : 10/05/2012
| Sujet: Re: [résolu]Placement d'une variable Jeu 1 Aoû 2013 - 14:28 | |
| Tu as raison valouef, il n'y en a pas besoin. Du coup on peut faire soit ça : - Code:
-
bool HasInteractWithBin = false; function oPoubelle_Interact() { if (!HasInteractWithBin) { player.Walk(262, 164, eBlock); Display("Et Dieu dit : Fouille cette poubelle !"); player.Say("Oh, une poubelle avec du papier dedans !") player.AddInventory(iPapier); HasInteractWithBin = true; } else { player.Say("J'ai déjà du papier") } } soit ça : - Code:
-
bool HasInteractWithBin = false; function oPoubelle_Interact() { if (!HasInteractWithBin) { player.Walk(262, 164, eBlock); Display("Et Dieu dit : Fouille cette poubelle !"); player.Say("Oh, une poubelle avec du papier dedans !") player.AddInventory(iPapier); HasInteractWithBin = true; return; } player.Say("J'ai déjà du papier") } Et si, on peut faire " } else {" |
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: [résolu]Placement d'une variable Jeu 1 Aoû 2013 - 15:30 | |
| Ah d'accord, pourquoi pas. Enfin je crois que je continuerai à utiliser else, c'est plus clair. Maintenant que j'y pense, c'est logique qu'avec else la commande return soit obsolète, car à partir du moment où le if est vérifié, le else n'est pas appelé. _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: [résolu]Placement d'une variable Ven 2 Aoû 2013 - 10:03 | |
| Je m'avance un peu, mais à mon avis un programmeur rigoureux (ou une programmeuse rigoureuse) ne verrait pas d'un très bon œil cette utilisation "interchangeable" de return et de else (utilisation à laquelle j'ai moi-même recours). Je pense que là où on peut utiliser un else, il faut utiliser un else. Exemple de mauvaise pratique : - Code:
-
float Inverse(float x) { if (x == 0.0) return 0.0; // Valeur par défaut return 1.0 / x; } Bonne pratique : - Code:
-
float Inverse(float x) { if (x == 0.0) return 0.0; else return 1.0 / x; } EDIT : Remplacement des entiers par des flottants suite à la remarque de Billbis. _________________ 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 !
Dernière édition par Kitai le Ven 2 Aoû 2013 - 10:52, édité 1 fois (Raison : IntToFloat) |
|
| |
Billbis Disciple de la Grande Tasse Bleue
Nombre de messages : 1346
Date d'inscription : 10/05/2012
| Sujet: Re: [résolu]Placement d'une variable Ven 2 Aoû 2013 - 10:18 | |
| Juste un petit commentaire hors sujet et inutile pour dire que ta fonction inverse ne peut retourner comme valeur que -1, 0 ou 1 en l'état, vu qu'elle entre et retourne des int. D'ailleurs elle ne retournera 1 que si on entre 1, et -1 que si on entre -1. Tout le reste renverra 0. Pas super utile comme fonction... Sinon la technique du return permet d’interrompre le fonctionnement d'une longue fonction en cas d'exceptions sans avoir à incrémenter comme un malade la suite de la fontion. C'est assez utilisé dans le code source d'AGS, par exemple dans le code du pathfinder. |
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: [résolu]Placement d'une variable Ven 2 Aoû 2013 - 11:01 | |
| - Billbis a écrit:
- Juste un petit commentaire hors sujet et inutile pour dire que ta fonction inverse ne peut retourner comme valeur que -1, 0 ou 1 en l'état, vu qu'elle entre et retourne des int. D'ailleurs elle ne retournera 1 que si on entre 1, et -1 que si on entre -1. Tout le reste renverra 0. Pas super utile comme fonction...
Bien vu ! J'ai modifié le code en conséquence. - Billbis a écrit:
- Sinon la technique du return permet d’interrompre le fonctionnement d'une longue fonction en cas d'exceptions sans avoir à incrémenter comme un malade la suite de la fontion.
Je ne dis pas que ça n'a pas d'intérêt, et il y a une vraie pertinence à utiliser return pour interrompre l'exécution d'une fonction lorsqu'on est véritablement dans un cas de "fin de processus". En revanche l'utiliser simplement pour éviter de placer un else après le if, je pense que c'est une mauvaise idée : si tu veux finalement ajouter du code qui sera exécuté inconditionnellement après, il faudra enlever ton return et ajouter un else en conséquence. De plus ça rend la compréhension du code bien plus difficile à la relecture. - Billbis a écrit:
- C'est assez utilisé dans le code source d'AGS, par exemple dans le code du pathfinder.
Comme le dit CJ lui-même : - Chris Jones a écrit:
- DO NOT use this source code as a learning resource or a guide on best practice.
The state of the source code is VERY BAD and should in fact be considered an example of BAD PRACTICE. _________________ 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 ! |
|
| |
Hairedplayer C'est quoi la Tasse Bleue ?
Nombre de messages : 24
Age : 44
Localisation : Aix en Provence
Date d'inscription : 29/07/2013
| Sujet: Re: [résolu]Placement d'une variable Ven 2 Aoû 2013 - 11:07 | |
| Hors sujet , mais c'est quoi le code du pathfinder ? |
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: [résolu]Placement d'une variable Ven 2 Aoû 2013 - 12:17 | |
| - Hairedplayer a écrit:
- Hors sujet , mais c'est quoi le code du pathfinder ?
Si tu cliques sur le lien dans le message de Billbis ( lien que je remets ici), tu tombes sur une page GitHub où tu peux voir du code en C++. Cette page s'inscrit dans un projet GitHub plus large qui correspond à l'intégralité du code source d'AGS (moteur et éditeur). Le code sur la page en question est la partie du moteur d'AGS qui calcule la route que doit prendre un personnage pour se rendre d'un point A à un point B (on parle de pathfinding pour désigner un tel calcul). On s'intéresse au pathfinder d'AGS notamment parce qu'on y a découvert un bug occasionnellement gênant et pas encore résolu. _________________ 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 ! |
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: [résolu]Placement d'une variable Ven 2 Aoû 2013 - 12:36 | |
| - Kitai a écrit:
- Chris Jones a écrit:
- DO NOT use this source code as a learning resource or a guide on best practice.
The state of the source code is VERY BAD and should in fact be considered an example of BAD PRACTICE. Ce pathfinder Je crois que Chris Johnes était dans le vrai sur ce coup là. Parce que ce pathfinder est monstrueusement en train de me rendre zinzin (Je n'ai jamais vu de jeu AGS qui tentait d'utiliser des déplacements "réalistes" et je commence à comprendre pourquoi ) - Kitai a écrit:
- On s'intéresse au pathfinder d'AGS notamment parce qu'on y a découvert un bug occasionnellement gênant et pas encore résolu.
D'ailleurs je vois que dans mon dernier post sur ce topic je minimise ce bug, qui semble être plus grave que je ne pensais, sans compter qu'il y en a d'autres... Bon mais je crois qu'on s'écarte du sujet. _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
Dernière édition par valoulef le Ven 2 Aoû 2013 - 12:41, édité 1 fois |
|
| |
Contenu sponsorisé
| Sujet: Re: [résolu]Placement d'une variable | |
| |
|
| |
| [résolu]Placement d'une variable | |
|