Forum d'entraide à la création de jeux d'aventure
 
PortailPortail  AccueilAccueil  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  

 

 [résolu]Placement d'une variable

Aller en bas 
4 participants
AuteurMessage
Hairedplayer
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?
Hairedplayer


Nombre de messages : 24

Age : 43

Localisation : Aix en Provence

Date d'inscription : 29/07/2013


[résolu]Placement d'une variable Empty
MessageSujet: [résolu]Placement d'une variable   [résolu]Placement d'une variable EmptyJeu 1 Aoû 2013 - 12:44

Salut les Point and Clickeur ! langue 

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 ?

[résolu]Placement d'une variable Script10

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
Revenir en haut Aller en bas
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[résolu]Placement d'une variable Empty
MessageSujet: Re: [résolu]Placement d'une variable   [résolu]Placement d'une variable EmptyJeu 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. clin d'oeil
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


[résolu]Placement d'une variable Empty
MessageSujet: Re: [résolu]Placement d'une variable   [résolu]Placement d'une variable EmptyJeu 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 clin d'oeil D'ailleurs méchant Billbis m'a devancé langue

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.
Revenir en haut Aller en bas
Hairedplayer
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?
Hairedplayer


Nombre de messages : 24

Age : 43

Localisation : Aix en Provence

Date d'inscription : 29/07/2013


[résolu]Placement d'une variable Empty
MessageSujet: Re: [résolu]Placement d'une variable   [résolu]Placement d'une variable EmptyJeu 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 ?
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


[résolu]Placement d'une variable Empty
MessageSujet: Re: [résolu]Placement d'une variable   [résolu]Placement d'une variable EmptyJeu 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...
Revenir en haut Aller en bas
Hairedplayer
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?
Hairedplayer


Nombre de messages : 24

Age : 43

Localisation : Aix en Provence

Date d'inscription : 29/07/2013


[résolu]Placement d'une variable Empty
MessageSujet: Re: [résolu]Placement d'une variable   [résolu]Placement d'une variable EmptyJeu 1 Aoû 2013 - 13:51

Effectivement il manquait ces deux là ! Mon erreur viens de la ligne 5 if (!HasInterract...
Revenir en haut Aller en bas
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[résolu]Placement d'une variable Empty
MessageSujet: Re: [résolu]Placement d'une variable   [résolu]Placement d'une variable EmptyJeu 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. grand sourire

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...
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
Hairedplayer
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?
Hairedplayer


Nombre de messages : 24

Age : 43

Localisation : Aix en Provence

Date d'inscription : 29/07/2013


[résolu]Placement d'une variable Empty
MessageSujet: Re: [résolu]Placement d'une variable   [résolu]Placement d'une variable EmptyJeu 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 ?
Revenir en haut Aller en bas
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[résolu]Placement d'une variable Empty
MessageSujet: Re: [résolu]Placement d'une variable   [résolu]Placement d'une variable EmptyJeu 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.
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
Hairedplayer
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?
Hairedplayer


Nombre de messages : 24

Age : 43

Localisation : Aix en Provence

Date d'inscription : 29/07/2013


[résolu]Placement d'une variable Empty
MessageSujet: Re: [résolu]Placement d'une variable   [résolu]Placement d'une variable EmptyJeu 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 chou
Revenir en haut Aller en bas
Hairedplayer
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?
Hairedplayer


Nombre de messages : 24

Age : 43

Localisation : Aix en Provence

Date d'inscription : 29/07/2013


[résolu]Placement d'une variable Empty
MessageSujet: Re: [résolu]Placement d'une variable   [résolu]Placement d'une variable EmptyJeu 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 !
Revenir en haut Aller en bas
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[résolu]Placement d'une variable Empty
MessageSujet: Re: [résolu]Placement d'une variable   [résolu]Placement d'une variable EmptyJeu 1 Aoû 2013 - 14:21

sourire 
De rien. Bon courage !
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


[résolu]Placement d'une variable Empty
MessageSujet: Re: [résolu]Placement d'une variable   [résolu]Placement d'une variable EmptyJeu 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.

Revenir en haut Aller en bas
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[résolu]Placement d'une variable Empty
MessageSujet: Re: [résolu]Placement d'une variable   [résolu]Placement d'une variable EmptyJeu 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 {" ^^
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


[résolu]Placement d'une variable Empty
MessageSujet: Re: [résolu]Placement d'une variable   [résolu]Placement d'une variable EmptyJeu 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é.
Revenir en haut Aller en bas
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


[résolu]Placement d'une variable Empty
MessageSujet: Re: [résolu]Placement d'une variable   [résolu]Placement d'une variable EmptyVen 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.


Dernière édition par Kitai le Ven 2 Aoû 2013 - 10:52, édité 1 fois (Raison : IntToFloat)
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[résolu]Placement d'une variable Empty
MessageSujet: Re: [résolu]Placement d'une variable   [résolu]Placement d'une variable EmptyVen 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...
grand sourire 
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.
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
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


[résolu]Placement d'une variable Empty
MessageSujet: Re: [résolu]Placement d'une variable   [résolu]Placement d'une variable EmptyVen 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...
grand sourire 
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.
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Hairedplayer
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?
Hairedplayer


Nombre de messages : 24

Age : 43

Localisation : Aix en Provence

Date d'inscription : 29/07/2013


[résolu]Placement d'une variable Empty
MessageSujet: Re: [résolu]Placement d'une variable   [résolu]Placement d'une variable EmptyVen 2 Aoû 2013 - 11:07

Hors sujet , mais c'est quoi le code du pathfinder ?
Revenir en haut Aller en bas
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


[résolu]Placement d'une variable Empty
MessageSujet: Re: [résolu]Placement d'une variable   [résolu]Placement d'une variable EmptyVen 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.
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


[résolu]Placement d'une variable Empty
MessageSujet: Re: [résolu]Placement d'une variable   [résolu]Placement d'une variable EmptyVen 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 grand sourire
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.


Dernière édition par valoulef le Ven 2 Aoû 2013 - 12:41, édité 1 fois
Revenir en haut Aller en bas
Contenu sponsorisé





[résolu]Placement d'une variable Empty
MessageSujet: Re: [résolu]Placement d'une variable   [résolu]Placement d'une variable Empty

Revenir en haut Aller en bas
 
[résolu]Placement d'une variable
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [résolu]Pb de variable
» [résolu]Pb Probleme de variable
» [résolu]Comment importer un dessin papier/une photo dans AGS?resolu
» [résolu]Importation fichiers Speech, [résolu]idle View coupée, résolution bords
» Variable

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: