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

Partagez | 
 

 Quizz

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
hanakin
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 490

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: Quizz   Dim 24 Aoû 2014 - 11:29

Salut a tous

je m'attaque a un nouveau petit projet un quizz sur mes series preferées
Est-ce que quelqu'un a déja utilisé des tableaux sous AGS. J'ai pas trouvé
grands choses la dessus (j'ai peut-etre mal chercher) j'ai regardé aussi sur le
forum du site d'AGS, c'est pas evidant.

Si quelqu'un a une solution je le mettrais volontier comme programmeur dans le A Propos

J'ai un fichier texte avec a chaque ligne:
1 question
reponse 1
reponse 2
reponse 3
reponse 4
et ici le N° de la bonne reponse

J'ai créé 2 Gui un pour la question et un pour les reponses
Comment faire pour faire un questionnaire aleatoire(si reponse ok passer a la question suivante),en chargeant en memoire le fichier txt
j'espere que j'a été assez clair.

Format du fichier TXT
Code:
Dans l'episode 1 qui va chercher O'neill ?
Daniel Jackson
Samantha Carter
Major Samuels
Le General Hammond
3


Le code de la room avec une seule question pour le moment

Code:
function room_AfterFadeIn()
{

cPorteSGC.Animate(0, 7, eRepeat, eNoBlock);//animation porte
aSG1.Play(eAudioPriorityNormal, eRepeat) ;//fond sonore
Label7.Text=Nom.Text ;//nom du joueur
gHighscore.Visible= true ;//Gui score

question.Text=("Dans l'episode 1 qui va chercher O'neill ?");//question
BtnRep1.Text=("Daniel Jackson");//reponse1
BtnRep2.Text=("Samantha Carter");//reponse2
BtnRep3.Text=("Major Samuels");//reponse3 bonne
BtnRep4.Text=("Le General Hammond");//reponse4
bonne=3; //N° de la bonne reponse
}

code de l'un des 4 boutons du Gui reponses
Code:
function BtnRep2_OnClick(GUIControl *control, MouseButton button)
{
  bt=2; //valeur lors de l'appui sur le bouton bouton1 bt=1 bouton2=bt2 etc..
if (bonne==bt) { //verification de la bonne reponse bt bouton appuyer bonne (reponse bonne)
aYes.Play();
GiveScore(25) ;
}
else if (bonne!=bt) {
  aNo.Play();
GiveScore(-50) ;
}
}

_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2479

Date d'inscription : 01/08/2006


MessageSujet: Re: Quizz   Dim 24 Aoû 2014 - 22:56

OK, si tu as toujours exactement le même format pour chaque question dans ton fichier texte, ça devrait être faisable.

Je n'ai pas le temps d'expliquer en détails là, mais le code suivant devrait faire le plus gros du travail :

Code:
// D'abord on crée des fonctions de pile, voir le sujet correspondant
int[] IntPile(int tableau[], int taille, int valeur) {
  if (taille < 0) taille = 0;
  int tmp[] = new int[taille+1];
  int i = 0;
  while (i < taille) {
    tmp[i] = tableau[i];
    i++;
  }
  tmp[i] = valeur;
  return tmp;
}
String[] StringPile(String tableau[], int taille, String valeur) {
  if (taille < 0) taille = 0;
  String tmp[] = new String[taille+1];
  int i = 0;
  while (i < taille) {
    tmp[i] = tableau[i];
    i++;
  }
  tmp[i] = valeur;
  return tmp;
}

// Ensuite on crée les variables globales dont on aura besoin
String Questions[], ReponsesA[], ReponsesB[], ReponsesC[], ReponsesD[];
int BonnesReponses[], Seq[];
int QuestionEnCours, Total;

// Fonction qui charge chaque ligne de chaque groupe de 6 lignes dans la variable correspondante
int chargeFichierQuizz(String nomfichier) {
  if (!File.Exists(nomfichier)) return 0;
  File* fquizz = File.Open(nomfichier, eFileRead);
  int i = 0;
  String stmp;
  while (!fquizz.EOF) {
    Questions = StringPile(Questions, i, fquizz.ReadRawLineBack());
    ReponsesA = StringPile(ReponsesA, i, fquizz.ReadRawLineBack());
    ReponsesB = StringPile(ReponsesB, i, fquizz.ReadRawLineBack());
    ReponsesC = StringPile(ReponsesC, i, fquizz.ReadRawLineBack());
    ReponsesD = StringPile(ReponsesD, i, fquizz.ReadRawLineBack());
    stmp = fquizz.ReadRawLineBack(); // La propriété AsInt ne peut pas directement s'accoler à ReadRawLineBack
    BonnesReponses = IntPile(BonnesReponses, i, stmp.AsInt);
    i++;
  }
  return i;
}

// Au démarrage du jeu, on charge nos questions
function game_start() {
  Total = chargeFichierQuizz("quizz.txt");
  Seq = new int[Total];
  int i = 0;
  while (i < Total) {
    Seq[i] = i;
    i++;
  }
  // Petit algorithme de tri aléatoire
  int j = 0, x = 0;
  while (i > 0) {
    j = Random(i-1);
    i--;
    x = Seq[i];
    Seq[i] = Seq[j];
    Seq[j] = x;
  }
}

// Plus bas dans le script, quand tu gères un changement de question
if (QuestionEnCours+1 < Total) QuestionEnCours++;
question.Text=Questions[Seq[QuestionEnCours]];//question
BtnRep1.Text=ReponsesA[Seq[QuestionEnCours]];//reponse1
BtnRep2.Text=ReponsesB[Seq[QuestionEnCours]];//reponse2
BtnRep3.Text=ReponsesC[Seq[QuestionEnCours]];//reponse3 bonne
BtnRep4.Text=ReponsesD[Seq[QuestionEnCours]];//reponse4
bonne=BonnesReponses[Seq[QuestionEnCours]]; //N° de la bonne reponse

Le lien vers le sujet sur les piles.

_________________
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
hanakin
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 490

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: script quiz   Dim 24 Aoû 2014 - 23:43

Merci Kitai

petite précision J'ai trois fichiers de questions(formaté pareil) car 3 séries différentes
J'ai un menu principal qui me permet d'aller ensuite sur un des 3 questionnaires qui s'affiche pareil que le screen shot plus haut mais bien 3 questionnaires différent suivant le choix de la room 1.

Le changement de question doit se faire juste lors de la bonne réponse , peut importe si on clique 10 fois sur une mauvaise réponse on perd des points et on avance pas , c'est pas grave car c'est juste un quizz pour les fans comme moi de ces 3 séries.(Stargate SG1, Stargate Atlantis, Stargate Univers).

Autre précision on peux changer de questionnaire en cours de jeux avec (donc réinitialisation des questionnaire uniquement lors du redemarrage du jeux)
Je suis casse pied mais désolé , j'ai jamais pris un cours en informatique, donc lorsque
l'on attaque de la pure programmation je sèche un peu.

J'avoue que je patauge un peu ( je l'avoue la programmation n'est pas mon fort je suis meilleur en graphisme)

J'ai essayé le script Hou la La ...... peur
J'ai essayer de mettre ça ou je pense que cela devait se placer mais ça doit pas etre bon

_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)


Dernière édition par hanakin le Lun 25 Aoû 2014 - 12:42, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
chefgeorges
Cliqueur Emérite
Cliqueur Emérite
avatar

Nombre de messages : 501

Date d'inscription : 01/02/2008


MessageSujet: Re: Quizz   Lun 25 Aoû 2014 - 11:46

Je vais suivre ce projet avec attention, car j'avais une envie similaire (faire un quizz) pour de futurs projets sourire

Bon courage en tout cas ^^
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://instagram.com/ichefgeorges
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2479

Date d'inscription : 01/08/2006


MessageSujet: Re: Quizz   Lun 25 Aoû 2014 - 13:24

Je reformule légèrement le code que j'ai donné et j'y ajoute des commentaires :
Code:
// Tout en haut de ton script global

// D'abord on crée des fonctions qui vont nous permettre
// de traiter les tableaux comme des piles, c'est-à-dire ajouter des entrées
// au fur et à mesure, de façon dynamique. Voir le sujet correspondant.
int[] IntPile(int tableau[], int taille, int valeur) {
  if (taille < 0) taille = 0;
  int tmp[] = new int[taille+1];
  int i = 0;
  while (i < taille) {
    tmp[i] = tableau[i];
    i++;
  }
  tmp[i] = valeur;
  return tmp;
}
String[] StringPile(String tableau[], int taille, String valeur) {
  if (taille < 0) taille = 0;
  String tmp[] = new String[taille+1];
  int i = 0;
  while (i < taille) {
    tmp[i] = tableau[i];
    i++;
  }
  tmp[i] = valeur;
  return tmp;
}

// Les variables globales dont on aura besoin
// Questions[] va contenir la liste des questions
// ReponsesX[] vont contenir les listes des réponses correspondant aux questions dans Questions[]
String Questions[], ReponsesA[], ReponsesB[], ReponsesC[], ReponsesD[];
// BonnesRespones[] va contenir les listes des bonnes réponses (1,2,3,4 pour A,B,C,D)
// Seq[] va contenir la liste des ID des questions, qu'on va mélanger aléatoirement
int BonnesReponses[], Seq[];
// QuestionEnCours permet de parcourir Seq[] pour récupérer la question et les réponses en cours
// Total représente le nombre total de questions
int QuestionEnCours = -1, Total;

// Fonction qui charge chaque ligne de chaque groupe de 6 lignes dans la variable correspondante
// chargeFichierQuizz("nomdefichier.txt") retourne true si tout s'est bien passé, false sinon
bool chargeFichierQuizz(String nomfichier) {
  // Si le fichier n'existe pas, erreur
  if (!File.Exists(nomfichier)) return false;
  // On ouvre le fichier en lecture
  File* fquizz = File.Open(nomfichier, eFileRead);
  // On initialise Total à 0
  Total = 0;
  String stmp; // Pour AsInt, voir plus bas
  // On parcourt le fichier dans fquizz
  while (!fquizz.EOF) {
    // On ajoute la première ligne qu'on lit à la pile des questions
    Questions = StringPile(Questions, Total, fquizz.ReadRawLineBack());
    // On ajoute les 4 lignes suivantes aux piles des réponses respectives
    ReponsesA = StringPile(ReponsesA, Total, fquizz.ReadRawLineBack());
    ReponsesB = StringPile(ReponsesB, Total, fquizz.ReadRawLineBack());
    ReponsesC = StringPile(ReponsesC, Total, fquizz.ReadRawLineBack());
    ReponsesD = StringPile(ReponsesD, Total, fquizz.ReadRawLineBack());
    // On récupère la 6ème ligne
    stmp = fquizz.ReadRawLineBack(); // La propriété AsInt ne peut pas directement s'accoler à ReadRawLineBack
    // On vérifie que c'est bien un nombre entre 1 et 4
    if (stmp.AsInt < 1 || stmp.AsInt > 4 || fquizz.Error) {
      // Si on n'a pas de nombre ou s'il y a eu une erreur de lecture auparavant,
      // on ferme le fichier et on retourne FALSE
      fquizz.Close();
      return false;
    }
    // Si on a bien affaire à un nombre entre 1 et 4, on l'ajoute à la pile des bonnes réponses
    BonnesReponses = IntPile(BonnesReponses, Total, stmp.AsInt);
    // On indique qu'on vient d'ajouter une question en augmentant Total
    Total++;
  }
  // On a finit de parcourir le fichier, on le ferme
  fquizz.Close();
  // On remplit Seq avec les ID des questions
  Seq = new int[Total];
  int i = 0;
  while (i < Total) {
    Seq[i] = i;
    i++;
  }
  // Puis on mélange les ID dans Seq avec l'algorithme de Fisher-Yates
  int j = 0, x = 0;
  while (i > 0) {
    i--;
    j = Random(i);
    x = Seq[i];
    Seq[i] = Seq[j];
    Seq[j] = x;
  }
  // Tout s'est bien passé, on retourne TRUE
  return true;
}

// Au démarrage du jeu, on charge nos questions
function game_start() {
  Total = chargeFichierQuizz("quizz.txt");
}

// Une fonction qui permet de passer à la question suivante
bool questionSuivante() {
  // Si on a déjà affiché la dernière question, on retourne FALSE
  if (QuestionEnCours+1 == Total) return false;
  // On passe à la question suivante
  QuestionEnCours++;
  // On affiche la question dont l'ID est le QuestionEnCours-ième élément de Seq
  question.Text=Questions[Seq[QuestionEnCours]];//question
  // Puis les réponses
  BtnRep1.Text=ReponsesA[Seq[QuestionEnCours]];//reponse1
  BtnRep2.Text=ReponsesB[Seq[QuestionEnCours]];//reponse2
  BtnRep3.Text=ReponsesC[Seq[QuestionEnCours]];//reponse3 bonne
  BtnRep4.Text=ReponsesD[Seq[QuestionEnCours]];//reponse4
  // On stocke dans "bonne" l'ID de la bonne réponse (= 1, 2, 3 ou 4)
  bonne=BonnesReponses[Seq[QuestionEnCours]]; //N° de la bonne reponse
  // On retourne TRUE
  return true;
}

_________________
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 Mar 26 Aoû 2014 - 10:18, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
hanakin
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 490

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: Quizz   Lun 25 Aoû 2014 - 13:46

Merci Kitai je retente

Si j'y arrive je ferais un tuto très très détaillé , car apparemment cela intéresse d'autre personnes.

_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
hanakin
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 490

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: quizz   Lun 25 Aoû 2014 - 14:31

VOILA CE QUE J'AI FAIT j'ai une erreur ??? voir ci-dessous





Gobal variable:



Le script:

Code:
GLOBALSCRIPT.asc

// main global script file

//Debut Script Kitai
// D'abord on crée des fonctions qui vont nous permettre
        // de traiter les tableaux comme des piles, c'est-à-dire ajouter des entrées
        // au fur et à mesure, de façon dynamique. Voir le sujet correspondant.
        int[] IntPile(int tableau[], int taille, int valeur) {
          if (taille < 0) taille = 0;
          int tmp[] = new int[taille+1];
          int i = 0;
          while (i < taille) {
            tmp[i] = tableau[i];
            i++;
          }
          tmp[i] = valeur;
          return tmp;
        }
        String[] StringPile(String tableau[], int taille, String valeur) {
          if (taille < 0) taille = 0;
          String tmp[] = new String[taille+1];
          int i = 0;
          while (i < taille) {
            tmp[i] = tableau[i];
            i++;
          }
          tmp[i] = valeur;
          return tmp;
        }
        
        // Les variables globales dont on aura besoin
        // Questions[] va contenir la liste des questions
        // ReponsesX[] vont contenir les listes des réponses correspondant aux questions dans Questions[]
        String Questions[], ReponsesA[], ReponsesB[], ReponsesC[], ReponsesD[];
        // BonnesRespones[] va contenir les listes des bonnes réponses (1,2,3,4 pour A,B,C,D)
        // Seq[] va contenir la liste des ID des questions, qu'on va mélanger aléatoirement
        int BonnesReponses[], Seq[];
        // QuestionEnCours permet de parcourir Seq[] pour récupérer la question et les réponses en cours
        // Total représente le nombre total de questions
        int QuestionEnCours = -1, Total;

// Fonction qui charge chaque ligne de chaque groupe de 6 lignes dans la variable correspondante
        // chargeFichierQuizz("nomdefichier.txt") retourne true si tout s'est bien passé, false sinon
        bool chargeFichierQuizz(String nomfichier) {
          // Si le fichier n'existe pas, erreur
          if (!File.Exists(nomfichier)) return false;
          // On ouvre le fichier en lecture
          File* fquizz = File.Open(nomfichier, eFileRead);
          // On initialise Total à 0
          Total = 0;
          String stmp; // Pour AsInt, voir plus bas
          // On parcourt le fichier dans fquizz
          while (!fquizz.EOF) {
            // On ajoute la première ligne qu'on lit à la pile des questions
            Questions = StringPile(Questions, Total, fquizz.ReadRawLineBack());
            // On ajoute les 4 lignes suivantes aux piles des réponses respectives
            ReponsesA = StringPile(ReponsesA, Total, fquizz.ReadRawLineBack());
            ReponsesB = StringPile(ReponsesB, Total, fquizz.ReadRawLineBack());
            ReponsesC = StringPile(ReponsesC, Total, fquizz.ReadRawLineBack());
            ReponsesD = StringPile(ReponsesD, Total, fquizz.ReadRawLineBack());
            // On récupère la 6ème ligne
            stmp = fquizz.ReadRawLineBack(); // La propriété AsInt ne peut pas directement s'accoler à ReadRawLineBack
            // On vérifie que c'est bien un nombre entre 1 et 4
            if (stmp.AsInt < 1 || stmp.AsInt > 4 || fquizz.Error) {
              // Si on n'a pas de nombre ou s'il y a eu une erreur de lecture auparavant,
              // on ferme le fichier et on retourne FALSE
              fquizz.Close();
              return false;
            }
            // Si on a bien affaire à un nombre entre 1 et 4, on l'ajoute à la pile des bonnes réponses
            BonnesReponses = IntPile(BonnesReponses, Total, stmp.AsInt);
            // On indique qu'on vient d'ajouter une question en augmentant Total
            Total++;
          }
          // On a finit de parcourir le fichier, on le ferme
          fquizz.Close();
          // On remplit Seq avec les ID des questions
          Seq = new int[Total];
          int i = 0;
          while (i < Total) {
            Seq[i] = i;
            i++;
          }
          // Puis on mélange les ID dans Seq avec l'algorithme de Fisher-Yates
          int j = 0, x = 0;
          while (i > 0) {
            i--;
            j = Random(i-1);
            x = Seq[i];
            Seq[i] = Seq[j];
            Seq[j] = x;
          }
          // Tout s'est bien passé, on retourne TRUE
          return true;
        }
      Total = chargeFichierQuizz("quizz.txt");
        }
        
        // Une fonction qui permet de passer à la question suivante
        bool questionSuivante() {
          // Si on a déjà affiché la dernière question, on retourne FALSE
          if (QuestionEnCours+1 == Total) return false;
          // On passe à la question suivante
          QuestionEnCours++;
          // On affiche la question dont l'ID est le QuestionEnCours-ième élément de Seq
          question.Text=Questions[Seq[QuestionEnCours]];//question
          // Puis les réponses
          BtnRep1.Text=ReponsesA[Seq[QuestionEnCours]];//reponse1
          BtnRep2.Text=ReponsesB[Seq[QuestionEnCours]];//reponse2
          BtnRep3.Text=ReponsesC[Seq[QuestionEnCours]];//reponse3 bonne
          BtnRep4.Text=ReponsesD[Seq[QuestionEnCours]];//reponse4
          // On stocke dans "bonne" l'ID de la bonne réponse (= 1, 2, 3 ou 4)
          bonne=BonnesReponses[Seq[QuestionEnCours]]; //N° de la bonne reponse
          // On retourne TRUE
          return true;
        }      
//Fin script Kitai  

 FONCTION GAME START

function game_start() {  
  // Put the code all in a function and then just call the function.
  // It saves cluttering up places like game_start.
  initialize_control_panel();
  // Use the KeyboardMovement module to, per default, replicate the standard
  // keyboard movement of most Sierra games. See KeyboardMovement.txt for more info
  KeyboardMovement.SetMode(eKeyboardMovement_Tapping);
//Debut script Kitai
Total = chargeFichierQuizz("quizz.txt");
        }
        
        // Une fonction qui permet de passer à la question suivante
        bool questionSuivante() {
          // Si on a déjà affiché la dernière question, on retourne FALSE
          if (QuestionEnCours+1 == Total) return false;
          // On passe à la question suivante
          QuestionEnCours++;
          // On affiche la question dont l'ID est le QuestionEnCours-ième élément de Seq
          question.Text=Questions[Seq[QuestionEnCours]];//question
          // Puis les réponses
          BtnRep1.Text=ReponsesA[Seq[QuestionEnCours]];//reponse1
          BtnRep2.Text=ReponsesB[Seq[QuestionEnCours]];//reponse2
          BtnRep3.Text=ReponsesC[Seq[QuestionEnCours]];//reponse3 bonne
          BtnRep4.Text=ReponsesD[Seq[QuestionEnCours]];//reponse4
          // On stocke dans "bonne" l'ID de la bonne réponse (= 1, 2, 3 ou 4)
          bonne=BonnesReponses[Seq[QuestionEnCours]]; //N° de la bonne reponse
          // On retourne TRUE
          return true;
        }
//Fin script Kitai        
}

 J AI MIS LA SUITE DU SCRIPT DANS CHAQUE BOUTON

function BtnRep1_OnClick(GUIControl *control, MouseButton button)
{
bt=1 ;
{
          // Si on a cliqué sur le bouton dont l'ID est 1 (par exemple, mais tu auras sûrement des ID différents), on indique qu'on a cliqué sur la réponse 1
          if (control.ID == 1) bt = 1;
          else if (control.ID == 2) bt = 2;
          else if (control.ID == 3) bt = 3;
          else if (control.ID == 4) bt = 4;
          // Si on a appuyé sur la bonne réponse
          if (bt == bonne) {
            aYes.Play(); // Le son qui va bien
            GiveScore(25) ; // Des sous-sous
            // On essaye de passer à la question suivante
            if (!questionSuivante()) {
              // Si questionSuivante a retourné FALSE, c'est qu'on est à la fin
              // ... code ce que tu veux qu'il se produise quand on a gagné ...
            }
          }
          // Sinon, si on a donné une mauvaise réponse
          else {
            aNo.Play(); // Le son qui va bien
            GiveScore(-50) ; // On retire des sous-sous
          }
}

ENSUITE DANS LA ROOM 2 EN AFTER FADE IN
 
function room_AfterFadeIn()
{
nomfichier=("SG1.dat") ;/////////////////////////SG1.dat pour room 2 SGA.dat pour room 3 SGU.dat pour room 4
cPorteSGC.Animate(0, 7, eRepeat, eNoBlock);//animation porte
aSG1.Play(eAudioPriorityNormal, eRepeat) ;//fond sonore
Label7.Text=Nom.Text ;//nom du joueur
gHighscore.Visible= true ;//Gui score

}
 
 

J'avais oublié ça Désolé

Code:
function cPorteSGC_AnyClick()
{
chargeFichierQuizz=("SG1.dat");
gQuestions.Visible= true ;
gReponses.Visible= true ;
gSoldat.Visible= false ;
questionSuivante();
}

function cPorteAtlantis_AnyClick()
{
chargeFichierQuizz=("SGA.dat");
gQuestions.Visible= true ;
gReponses.Visible= true ;
gSoldat.Visible=false ;
}

function cPorteUnivers_AnyClick()
{
chargeFichierQuizz=("SGU.dat"); 
gQuestions.Visible= true ;
gReponses.Visible= true ;
gSoldat.Visible= true ;
}

et depuis j'ai cette erreur:


_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
hanakin
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 490

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: quizz   Lun 25 Aoû 2014 - 15:55

Modification : Supression chargeFichierQuizz("SG1.dat"); ici

Code:
function cPorteSGC_AnyClick()
{
gQuestions.Visible= true ;
gReponses.Visible= true ;
gSoldat.Visible= false ;
questionSuivante();
}

function cPorteAtlantis_AnyClick()
{
gQuestions.Visible= true ;
gReponses.Visible= true ;
gSoldat.Visible=false ;
questionSuivante();
}

function cPorteUnivers_AnyClick()
{
gQuestions.Visible= true ;
gReponses.Visible= true ;
gSoldat.Visible= true ;
questionSuivante();  //////
}

Rajout ici : dans le game start

Code:
if (player.Room==2) {
 Total = chargeFichierQuizz("SG1.dat");
}
if (player.Room==3) {
 Total = chargeFichierQuizz("SGA.dat");
}
if (player.Room==4) {
 Total = chargeFichierQuizz("SGU.dat");

erreur differente:
Error (ligne 681):PE04: parse error at'questionSuivante'


On avance on avance grand sourire

_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2479

Date d'inscription : 01/08/2006


MessageSujet: Re: Quizz   Lun 25 Aoû 2014 - 20:07

Alors il y a deux problèmes.
Le premier, c'est que tu as utilisé l'éditeur pour définir des variables globales (BonnesReponses, Questions, etc.) qui sont définies directement dans le script (cela-dit tu dois continuer à définir les variables globales que tu définissais avant ce code, soit bonne, bt et nomfichier (?)). Là il y a conflit entre les deux définitions (notamment parce les variables définies comme tableaux d'entiers dans le script sont définies comme des entiers dans l'éditeur). En enlevant la définition depuis l'éditeur ça devrait régler ce problème.
Le second c'est que tu cherches à appeler les fonction chargeFichierQuizz et questionSuivante hors du script global (dans ton script de pièce). Je pensais que tu gérais tout par des clics sur des interfaces, auquel cas tout se passait dans le script global. Mais puisque tu passes par des zones interactives, tu dois entrer du code dans le script de pièce. Il faut donc exporter ces fonctions dont tu as besoin. Pour cela, tu vas dans l'en-tête du script global (GlobalScript.ash pour AGS < 3.3, "Edit Header" à partir de 3.3) et tu places les instructions suivantes :
Code:
import bool chargeFichierQuizz(String nomfichier);
import bool questionSuivante();

Avec ça, ton j'imagine que ton code devrait déjà mieux tourner.

Cela dit ce code que tu as copié contient aussi beaucoup de problèmes, je ne sais pas si tu l'as modifié depuis :
hanakin a écrit:
Code:
 FONCTION GAME START
 
function game_start() { 
  // Put the code all in a function and then just call the function.
  // It saves cluttering up places like game_start.
  initialize_control_panel();
  // Use the KeyboardMovement module to, per default, replicate the standard
  // keyboard movement of most Sierra games. See KeyboardMovement.txt for more info
  KeyboardMovement.SetMode(eKeyboardMovement_Tapping);
//Debut script Kitai
Total = chargeFichierQuizz("quizz.txt");
        }
       
        // Une fonction qui permet de passer à la question suivante
        bool questionSuivante() {
          // Si on a déjà affiché la dernière question, on retourne FALSE
          if (QuestionEnCours+1 == Total) return false;
          // On passe à la question suivante
          QuestionEnCours++;
          // On affiche la question dont l'ID est le QuestionEnCours-ième élément de Seq
          question.Text=Questions[Seq[QuestionEnCours]];//question
          // Puis les réponses
          BtnRep1.Text=ReponsesA[Seq[QuestionEnCours]];//reponse1
          BtnRep2.Text=ReponsesB[Seq[QuestionEnCours]];//reponse2
          BtnRep3.Text=ReponsesC[Seq[QuestionEnCours]];//reponse3 bonne
          BtnRep4.Text=ReponsesD[Seq[QuestionEnCours]];//reponse4
          // On stocke dans "bonne" l'ID de la bonne réponse (= 1, 2, 3 ou 4)
          bonne=BonnesReponses[Seq[QuestionEnCours]]; //N° de la bonne reponse
          // On retourne TRUE
          return true;
        }
//Fin script Kitai       
}
 
 J AI MIS LA SUITE DU SCRIPT DANS CHAQUE BOUTON
 
function BtnRep1_OnClick(GUIControl *control, MouseButton button)
{
bt=1 ;
{
          // Si on a cliqué sur le bouton dont l'ID est 1 (par exemple, mais tu auras sûrement des ID différents), on indique qu'on a cliqué sur la réponse 1
          if (control.ID == 1) bt = 1;
          else if (control.ID == 2) bt = 2;
          else if (control.ID == 3) bt = 3;
          else if (control.ID == 4) bt = 4;
          // Si on a appuyé sur la bonne réponse
          if (bt == bonne) {
            aYes.Play(); // Le son qui va bien
            GiveScore(25) ; // Des sous-sous
            // On essaye de passer à la question suivante
            if (!questionSuivante()) {
              // Si questionSuivante a retourné FALSE, c'est qu'on est à la fin
              // ... code ce que tu veux qu'il se produise quand on a gagné ...
            }
          }
          // Sinon, si on a donné une mauvaise réponse
          else {
            aNo.Play(); // Le son qui va bien
            GiveScore(-50) ; // On retire des sous-sous
          }
}
 
ENSUITE DANS LA ROOM 2 EN AFTER FADE IN
 
function room_AfterFadeIn()
{
nomfichier=("SG1.dat") ;/////////////////////////SG1.dat pour room 2 SGA.dat pour room 3 SGU.dat pour room 4
cPorteSGC.Animate(0, 7, eRepeat, eNoBlock);//animation porte
aSG1.Play(eAudioPriorityNormal, eRepeat) ;//fond sonore
Label7.Text=Nom.Text ;//nom du joueur
gHighscore.Visible= true ;//Gui score
 
}
Les lignes " FONCTION GAME START", " J AI MIS LA SUITE DU SCRIPT DANS CHAQUE BOUTON" et "ENSUITE DANS LA ROOM 2 EN AFTER FADE IN" ne sont pas précédées de '//', donc ce ne sera pas considéré comme des commentaires et AGS tentera alors de les exécuter comme du code (et va logiquement échouer). Mais j'imagine que tu as seulement rajouté ces textes dans le message sur le forum.
Par contre tu as collé une partie de mon code dans la fonction game_start alors qu'il n'y a pas sa place, étant donné qu'il se trouve déjà (comme il se doit) en haut du script.
Enfin j'ai l'impression que tu n'as pas bien compris ce que tu devrais faire avec les boutons. Si tu regardes dans la propriété "Événement" (Event) du bouton dans l'éditeur, tu as une ligne "OnClick" où il y a du texte. Ce texte c'est le nom de la fonction dans le script global qui sera appelée lors d'un clic sur le bouton. Ce que je te propose de faire, c'est d'entrer le même nom quel que soit le bouton réponse : clicSurReponse. Si tu as bien entré dans le script global le code de cette fonction que j'ai donné plus haut, et si tu as bien adapté les ID des boutons dans les conditions, ça devrait marcher.

_________________
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
hanakin
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 490

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: quizz   Lun 25 Aoû 2014 - 20:31

Les lignes " FONCTION GAME START", " J AI MIS LA SUITE DU SCRIPT DANS CHAQUE BOUTON" et "ENSUITE DANS LA ROOM 2 EN AFTER FADE IN"
ces lignes etait juste des commentaires rajouté apres pour te montrer ou ce trouvait le script

Effectivement j'avais pas bien recopier et mis du script en trop dans le game start)

chargeFichierQuizz et questionSuivante sont bien dans le Globalscript
je te le mets en entier.

Code:
// main global script file
// D'abord on crée des fonctions qui vont nous permettre
// de traiter les tableaux comme des piles, c'est-à-dire ajouter des entrées
// au fur et à mesure, de façon dynamique. Voir le sujet correspondant.
int[] IntPile(int tableau[], int taille, int valeur) {
  if (taille < 0) taille = 0;
  int tmp[] = new int[taille+1];
  int i = 0;
  while (i < taille) {
    tmp[i] = tableau[i];
    i++;
  }
  tmp[i] = valeur;
  return tmp;
}
String[] StringPile(String tableau[], int taille, String valeur) {
  if (taille < 0) taille = 0;
  String tmp[] = new String[taille+1];
  int i = 0;
  while (i < taille) {
    tmp[i] = tableau[i];
    i++;
  }
  tmp[i] = valeur;
  return tmp;
}
 
// Les variables globales dont on aura besoin
// Questions[] va contenir la liste des questions
// ReponsesX[] vont contenir les listes des réponses correspondant aux questions dans Questions[]
String Questions[], ReponsesA[], ReponsesB[], ReponsesC[], ReponsesD[];
// BonnesRespones[] va contenir les listes des bonnes réponses (1,2,3,4 pour A,B,C,D)
// Seq[] va contenir la liste des ID des questions, qu'on va mélanger aléatoirement
int BonnesReponses[], Seq[];
// QuestionEnCours permet de parcourir Seq[] pour récupérer la question et les réponses en cours
// Total représente le nombre total de questions
int QuestionEnCours = -1, Total;
 
// Fonction qui charge chaque ligne de chaque groupe de 6 lignes dans la variable correspondante
// chargeFichierQuizz("nomdefichier.txt") retourne true si tout s'est bien passé, false sinon
bool chargeFichierQuizz(String nomfichier) {
  // Si le fichier n'existe pas, erreur
  if (!File.Exists(nomfichier)) return false;
  // On ouvre le fichier en lecture
  File* fquizz = File.Open(nomfichier, eFileRead);
  // On initialise Total à 0
  Total = 0;
  String stmp; // Pour AsInt, voir plus bas
  // On parcourt le fichier dans fquizz
  while (!fquizz.EOF) {
    // On ajoute la première ligne qu'on lit à la pile des questions
    Questions = StringPile(Questions, Total, fquizz.ReadRawLineBack());
    // On ajoute les 4 lignes suivantes aux piles des réponses respectives
    ReponsesA = StringPile(ReponsesA, Total, fquizz.ReadRawLineBack());
    ReponsesB = StringPile(ReponsesB, Total, fquizz.ReadRawLineBack());
    ReponsesC = StringPile(ReponsesC, Total, fquizz.ReadRawLineBack());
    ReponsesD = StringPile(ReponsesD, Total, fquizz.ReadRawLineBack());
    // On récupère la 6ème ligne
    stmp = fquizz.ReadRawLineBack(); // La propriété AsInt ne peut pas directement s'accoler à ReadRawLineBack
    // On vérifie que c'est bien un nombre entre 1 et 4
    if (stmp.AsInt < 1 || stmp.AsInt > 4 || fquizz.Error) {
      // Si on n'a pas de nombre ou s'il y a eu une erreur de lecture auparavant,
      // on ferme le fichier et on retourne FALSE
      fquizz.Close();
      return false;
    }
    // Si on a bien affaire à un nombre entre 1 et 4, on l'ajoute à la pile des bonnes réponses
    BonnesReponses = IntPile(BonnesReponses, Total, stmp.AsInt);
    // On indique qu'on vient d'ajouter une question en augmentant Total
    Total++;
  }
  // On a finit de parcourir le fichier, on le ferme
  fquizz.Close();
  // On remplit Seq avec les ID des questions
  Seq = new int[Total];
  int i = 0;
  while (i < Total) {
    Seq[i] = i;
    i++;
  }
  // Puis on mélange les ID dans Seq avec l'algorithme de Fisher-Yates
  int j = 0, x = 0;
  while (i > 0) {
    i--;
    j = Random(i-1);
    x = Seq[i];
    Seq[i] = Seq[j];
    Seq[j] = x;
  }
  // Tout s'est bien passé, on retourne TRUE
  return true;
}
 
// A function that initializes a bunch of stuff.
function initialize_control_panel() {
  // Centre the control panel
  gPanel.Centre();
  // Centre the Restart dialog as well
  gRestartYN.Centre();
  if (!IsSpeechVoxAvailable()) {
    // If there is no speech-vox file, and therefore no speech,
    // disable all the controls related with speech.
    lblVoice.Visible = false; 
    btnVoice.Visible = false; 
    sldVoice.Visible = false;
  }
  else {
    // If there *is*, then set it to voice and text. It's best to use
    // both whenever possible, for the player's sake.
    SetVoiceMode(eSpeechVoiceAndText);
    // And reflect this in the control panel.
    btnVoice.Text = "Voice and Text";
  }
  if (!System.SupportsGammaControl) {
    // If we can't change the gamma settings, disable the relevant options.
    sldGamma.Visible = false;
    lblGamma.Visible = false;
  }
 
  //And now, set all the defaults
  System.Volume = 100;
  sldAudio.Value = System.Volume;
  SetGameSpeed(40);
  sldSpeed.Value = 40;
  if (IsSpeechVoxAvailable()) {
    SetVoiceMode(eSpeechVoiceAndText);
    btnVoice.Text = "Voice and Text";
    sldVoice.Value = 255;
    SetSpeechVolume(255);
  }
  if (System.SupportsGammaControl) {
    System.Gamma = 100;
    sldGamma.Value = 100;
  }
}

// Called when the game starts, before the first room is loaded
function game_start() { 
  // Put the code all in a function and then just call the function.
  // It saves cluttering up places like game_start.
  initialize_control_panel();
  // Use the KeyboardMovement module to, per default, replicate the standard
  // keyboard movement of most Sierra games. See KeyboardMovement.txt for more info
  KeyboardMovement.SetMode(eKeyboardMovement_Tapping);
  if (player.Room==2) {
  Total = chargeFichierQuizz("SG1.dat");
}
  if (player.Room==3) {
  Total = chargeFichierQuizz("SGA.dat");
}
  if (player.Room==4) {
  Total = chargeFichierQuizz("SGU.dat");
}
}
// Une fonction qui permet de passer à la question suivante
bool questionSuivante() {
  // Si on a déjà affiché la dernière question, on retourne FALSE
  if (QuestionEnCours+1 == Total) return false;
  // On passe à la question suivante
  QuestionEnCours++;
  // On affiche la question dont l'ID est le QuestionEnCours-ième élément de Seq
  question.Text=Questions[Seq[QuestionEnCours]];//question
  // Puis les réponses
  BtnRep1.Text=ReponsesA[Seq[QuestionEnCours]];//reponse1
  BtnRep2.Text=ReponsesB[Seq[QuestionEnCours]];//reponse2
  BtnRep3.Text=ReponsesC[Seq[QuestionEnCours]];//reponse3 bonne
  BtnRep4.Text=ReponsesD[Seq[QuestionEnCours]];//reponse4
  // On stocke dans "bonne" l'ID de la bonne réponse (= 1, 2, 3 ou 4)
  bonne=BonnesReponses[Seq[QuestionEnCours]]; //N° de la bonne reponse
  // On retourne TRUE
  return true;
}
     


function repeatedly_execute() {
 
  // Put here anything you want to happen every game cycle, even when
  // the game is paused. This will not run when the game is blocked
  // inside a command like a blocking Walk()
 
  if (IsGamePaused() == 1) return;

  // Put here anything you want to happen every game cycle, but not
  // when the game is paused.
}

function repeatedly_execute_always() {
 
  // Put anything you want to happen every game cycle, even
  // when the game is blocked inside a command like a
  // blocking Walk().
  // You cannot run blocking commands from this function.
 
}

function show_inventory_window ()
{
  http://gInventory.Visible = true;
  // switch to the Use cursor (to select items with)
  mouse.Mode = eModeInteract;
  // But, override the appearance to look like the arrow
  mouse.UseModeGraphic(eModePointer);
}

function show_save_game_dialog()
{
  gSaveGame.Visible = true;
  // Get the list of save games
  lstSaveGamesList.FillSaveGameList();
  if (lstSaveGamesList.ItemCount > 0)
  {
    // If there is at least one, set the default text
    // to be the first game's name
    txtNewSaveName.Text = lstSaveGamesList.Items[0];
  }
  else
  {
    // No save games yet, default empty text.
    txtNewSaveName.Text = "";
  }
  mouse.UseModeGraphic(eModePointer);
  http://gIconbar.Visible = false;
}

function show_restore_game_dialog()
{
  gRestoreGame.Visible = true;
  lstRestoreGamesList.FillSaveGameList();
  mouse.UseModeGraphic(eModePointer);
  http://gIconbar.Visible = false;
 
}

function close_save_game_dialog()
{
  gSaveGame.Visible = false;
  mouse.UseDefaultGraphic();
  http://gIconbar.Visible = true;
}

function close_restore_game_dialog()
{
  gRestoreGame.Visible = false;
  mouse.UseDefaultGraphic();
 // gIconbar.Visible = true;
}

// Called when a key is pressed. keycode holds the key's ASCII code
function on_key_press(eKeyCode keycode) {
  // The following is called before "if game is paused keycode=0", so
  // it'll happen even when the game is paused.
 
  if ((keycode == eKeyEscape) && gRestartYN.Visible) {
    //Use ESC to cancel restart.
    gRestartYN.Visible = false;
  // gIconbar.Visible = true;
    // If the panel's not ON, then the player must have gotten here by tapping F9,
    // therefore his cursor needs restoring. If the panel IS on, then it doesn't,
    // because it's already a pointer. Get used to thinking like this!!
    if (!gPanel.Visible) mouse.UseDefaultGraphic();
 
    return;
  }
  if ((keycode == eKeyEscape) && gPanel.Visible) {
    // Use ESC to turn the panel off.
   
    gPanel.Visible = false;
    mouse.UseDefaultGraphic();
  // gIconbar.Visible = true;
    return;
  }
  if ((keycode == eKeyEscape) && (gSaveGame.Visible))
  {
    // Use ESC to close the save game dialog
    close_save_game_dialog();
    return;
  }
  if ((keycode == eKeyEscape) && (gRestoreGame.Visible))
  {
    // Use ESC to close the restore game dialog
    close_restore_game_dialog();
    return;
  }
 
  if (keycode == eKeyReturn) {
    // ENTER, in this case merely confirms restart
    if (gRestartYN.Visible) RestartGame();
  }

  if (IsGamePaused() || (IsInterfaceEnabled() == 0))
  {
    // If the game is paused with a modal GUI on the
    // screen, or the player interface is disabled in
    // a cut scene, ignore any keypresses.
    return;
  }

  // FUNCTION KEYS AND SYSTEM SHORTCUTS
  if (keycode == eKeyEscape) {
    // ESC
    gQuestions.Visible= false ;
gReponses.Visible= false ;
    gSoldat.Visible=false ;
    gPanel.Visible = true;
    http://gIconbar.Visible = false;
    mouse.UseModeGraphic(eModePointer);
  }
  if (keycode == eKeyCtrlQ)  QuitGame(1);  // Ctrl-Q
 // if (keycode == eKeyF5) show_save_game_dialog();  // F5
 // if (keycode == eKeyF7) show_restore_game_dialog();  // F7         
 
  if (keycode == eKeyF9) {
    // F9, asks the player to confirm restarting (so much better to always confirm first)
    gRestartYN.Visible = true; 
    http://gIconbar.Visible = false;
    mouse.UseModeGraphic(eModePointer);
  }
  if (keycode == eKeyF1) {
    gAide.Visible=true ;
  }
 
  if (keycode == eKeyF12) SaveScreenShot("SG1Quiz.bmp");  // F12
  if (keycode == eKeyTab)  show_inventory_window();  // Tab, show inventory
if (keycode == eKeyF10) {
gPanel.Visible= false ;
gQuestions.Visible=false ;
gReponses.Visible=false ;
cEgo.ChangeRoom(1) ;
}
  // GAME COMMAND SHORTCUTS
  if (keycode == 'W') mouse.Mode=eModeWalkto; //Notice this alternate way to indicate keycodes.
  if (keycode == 'L') mouse.Mode=eModeLookat; //Note that all we do here is set modes.
  if (keycode == 'U') mouse.Mode=eModeInteract; //If you want something else to happen, such as GUI buttons highlighting,
  if (keycode == 'T') mouse.Mode=eModeTalkto; //you'll need some more scripting done.
  if (keycode == 'I') mouse.Mode=eModeUseinv; //But this will, as-is, give you some standard keyboard shortcuts your players will very much appreciate.

  // For extra cursor modes, such as pick up, feel free to add as you will.
  // Uncomment the line below if you use the "Pick Up" mode.
  //if (keycode == 'P' || keycode == 'G') mouse.Mode=eModePickup;

  // DEBUG FUNCTIONS
  if (keycode == eKeyCtrlS)  Debug(0,0);  // Ctrl-S, give all inventory
  if (keycode == eKeyCtrlV)  Debug(1,0);  // Ctrl-V, version
  if (keycode == eKeyCtrlA)  Debug(2,0);  // Ctrl-A, show walkable areas
  if (keycode == eKeyCtrlX)  Debug(3,0);  // Ctrl-X, teleport to room
  if (keycode == eKeyCtrlW && game.debug_mode)
    player.PlaceOnWalkableArea(); //Ctrl-W, move to walkable area
}


function on_mouse_click(MouseButton button) {
  // called when a mouse button is clicked. button is either LEFT or RIGHT
  if (IsGamePaused() == 1) {
    // Game is paused, so do nothing (ie. don't allow mouse click)
  }
  else if (button == eMouseLeft) {
    ProcessClick(mouse.x, mouse.y, mouse.Mode );
  }
  else if (button == eMouseRight || button == eMouseWheelSouth){
    // right-click our mouse-wheel down, so cycle cursor
    mouse.SelectNextMode();
  }
  else if (button == eMouseMiddle) {
    // Middle-button-click, default make character walk to clicked area (a little shortcut)
    // Could have been just "player.Walk(mouse.x,mouse.y)", but it's best to
    // leave our options open - what if you have a special script triggered
    // on "walking" mode?
    ProcessClick(mouse.x, mouse.y, eModeWalkto);
  }
  else if (button == eMouseWheelNorth) {
    // Mouse-wheel up, cycle cursors
    // If mode isn't WALK, set the previous mode (notice usage of numbers instead
    // of eNums, when it suits us)...
    if (mouse.Mode>0) mouse.Mode=mouse.Mode-1;
    else
    {
      // ...but if it is WALK mode...
      if (player.ActiveInventory!=null)
      {
        //...and the player has a selected inventory item, set mouse mode to UseInv.
        mouse.Mode=eModeUseinv;
      }
      else
      {
        // If they don't, however, just set it to mode TALK (change this line if you add more cursor modes)
        mouse.Mode=eModeTalkto;
      }
    }
  }
}

function interface_click(int interface, int button) {
  // This function is obsolete, from 2.62 and earlier versions.
}

function btnInvUp_Click(GUIControl *control, MouseButton button) {
 // invCustomInv.ScrollUp();
}

function btnInvDown_Click(GUIControl *control, MouseButton button) {
  http://invCustomInv.ScrollDown();
}

function btnInvOK_Click(GUIControl *control, MouseButton button) {
   // They pressed the OK button, close the GUI
   //gInventory.Visible = false;
   mouse.UseDefaultGraphic();
}

function btnInvSelect_Click(GUIControl *control, MouseButton button) {
 
   // They pressed SELECT, so switch to the Get cursor
   mouse.Mode = eModeInteract;
   // But, override the appearance to look like the arrow
   mouse.UseModeGraphic(eModePointer);
}

function btnIconInv_Click(GUIControl *control, MouseButton button) {
 
  show_inventory_window();
}

function btnIconCurInv_Click(GUIControl *control, MouseButton button) {
 
  if (player.ActiveInventory != null)
    mouse.Mode = eModeUseinv;
}

function btnIconSave_Click(GUIControl *control, MouseButton button)
{
  show_save_game_dialog();
}

function btnIconLoad_Click(GUIControl *control, MouseButton button)
{
  show_restore_game_dialog();
}

function btnIconExit_Click(GUIControl *control, MouseButton button) {
 
  QuitGame(1);
}

function btnIconAbout_Click(GUIControl *control, MouseButton button) {
 
  gPanel.Visible=true;
//  gIconbar.Visible=false;
  mouse.UseModeGraphic(eModePointer);
}

function cEgo_Look()
{
  Display("Damn, I'm looking good!");
}

function cEgo_Interact()
{
  Display("You rub your hands up and down your clothes.");
}

function cEgo_Talk()
{
  Display("Talking to yourself is a sign of madness!");
}

//START OF CONTROL PANEL FUNCTIONS
function btnSave_OnClick(GUIControl *control, MouseButton button)
{
  gPanel.Visible = false;
  mouse.UseDefaultGraphic();
  http://gIconbar.Visible = true;
  Wait(1);
  gSaveGame.Visible= true ;
// btnIconSave_Click(btnIconSave, eMouseLeft);
}

function gControl_OnClick(GUI *theGui, MouseButton button)
{

}

function btnAbout_OnClick(GUIControl *control, MouseButton button)
{
  gPanel.Visible=false ;
  SoldLabel.Text= ("2014");
Bienvenue.Text=("Stargate Quizz"); 
Sold2.Text=("Graphisme G.Ferre Programmation G.Ferre , Kitai");
gSoldat.Visible= true ;
//Display("Stargate Quizz G.Ferre 2014.");
}

function btnQuit_OnClick(GUIControl *control, MouseButton button)
{
  gPanel.Visible = false;
  Wait(1);
  gQuitGame.Visible=true;
  //QuitGame(1);
  http://gPanel.Visible = true;
 // gIconbar.Visible = false;
  mouse.UseModeGraphic(eModePointer);
}

function btnLoad_OnClick(GUIControl *control, MouseButton button)
{
  gPanel.Visible = false;
  mouse.UseDefaultGraphic();
  http://gIconbar.Visible = true;
  Wait(1);
  gRestoreGame.Visible=true ;
 // btnIconLoad_Click(btnIconLoad, eMouseLeft);
}

function btnResume_OnClick(GUIControl *control, MouseButton button)
{
 if ((player.Room==2)||(player.Room==3)||(player.Room==4)) {
gQuestions.Visible= true ;
gReponses.Visible= true ;
 }
gPanel.Visible = false;
mouse.UseDefaultGraphic();
  http://gIconbar.Visible = true;
}

function sldAudio_OnChange(GUIControl *control)
{
  System.Volume = sldAudio.Value;
}

function sldVoice_OnChange(GUIControl *control)
{
  // Sets voice volume. Note that we don't check for the existence of speech.vox -
  // we did that in game_start, so if it's not there the slider won't even be available.
  SetSpeechVolume(sldVoice.Value);
}

function btnVoice_OnClick(GUIControl *control, MouseButton button)
{

// Note that we don't check for the existence of speech.vox - we did that in game_start,
  // so if it's not there the button won't even be available.
  if (btnVoice.Text == "Voice and Text") {
    SetVoiceMode(eSpeechVoiceOnly);
    btnVoice.Text = "Voice only";
  }
  else if (btnVoice.Text == "Voice only") {
    SetVoiceMode(eSpeechTextOnly);
    btnVoice.Text = "Text only";
  }
 // else if (btnVoice.Text == "Text only") {
  //  SetVoiceMode(eSpeechVoiceAndText);
  //  btnVoice.Text = "Voice and Text";
 // }
}

function sldGamma_OnChange(GUIControl *control)
{
  // Set the gamma. Note there's no need to check for anything else, as we ensured,
  // in game_start, that the slider won't even appear if it's not possible to do this.
  System.Gamma = sldGamma.Value;
}

function btnDefault_OnClick(GUIControl *control, MouseButton button)
{
  // Reset everything to default. You'll have to edit these as well as the sliders
  // if you'd rather have different default parameters.
  System.Volume = 100;
  sldAudio.Value = System.Volume;
  sldSpeed.Value = 40;
  SetGameSpeed(40);
  if (IsSpeechVoxAvailable()) {
    SetVoiceMode(eSpeechVoiceAndText);
    btnVoice.Text = "Voice and Text";
    sldVoice.Value = 255;
    SetSpeechVolume(255);
  }
  if (System.SupportsGammaControl) {
    System.Gamma = 100;
    sldGamma.Value = 100;
  }
}
//END OF CONTROL PANEL FUNCTIONS

function dialog_request(int param)
{
  // This is used by the dialog text parser if you need to process
  // text that the player types in to the parser.
  // It is not used by default.
}

function sldSpeed_OnChange(GUIControl *control)
{
  SetGameSpeed(sldSpeed.Value);
}

function btnRestart_OnClick(GUIControl *control, MouseButton button)
{
  gRestartYN.Visible=true;
 // gIconbar.Visible=false;
}

function btnRestartYes_OnClick(GUIControl *control, MouseButton button)
{
  RestartGame();
}

function btnRestartNo_OnClick(GUIControl *control, MouseButton button)
{
  gRestartYN.Visible = false;
  http://gIconbar.Visible = true;
  // If the panel's not ON, then the player must have gotten here by tapping F9,
  // therefore his cursor needs restoring. If the panel IS on, then it doesn't,
  // because it's already a pointer. Get used to thinking like this!!
  if (!gPanel.Visible) mouse.UseDefaultGraphic();
}

function btnCancelSave_OnClick(GUIControl *control, MouseButton button)
{
  close_save_game_dialog();
gPanel.Visible=true ;
}


function btnSaveGame_OnClick(GUIControl *control, MouseButton button)
{

int gameSlotToSaveInto = lstSaveGamesList.ItemCount + 1;
  int i = 0;
  while (i < lstSaveGamesList.ItemCount)
  {
    if (lstSaveGamesList.Items[i] == txtNewSaveName.Text)
    {
      gameSlotToSaveInto = lstSaveGamesList.SaveGameSlots[i];
    }
    i++;
  }
  SaveGameSlot(gameSlotToSaveInto, txtNewSaveName.Text);
  close_save_game_dialog();
}

function btnCancelRestore_OnClick(GUIControl *control, MouseButton button)
{
  close_restore_game_dialog();
gPanel.Visible=true ;
}

function btnRestoreGame_OnClick(GUIControl *control, MouseButton button)
{
  if (lstRestoreGamesList.SelectedIndex >= 0)
  {
    RestoreGameSlot(lstRestoreGamesList.SaveGameSlots[lstRestoreGamesList.SelectedIndex]);
  }
  close_restore_game_dialog();
}

function lstSaveGamesList_OnSelectionCh(GUIControl *control)
{
  txtNewSaveName.Text = lstSaveGamesList.Items[lstSaveGamesList.SelectedIndex];
}

function txtNewSaveName_OnActivate(GUIControl *control)
{
  // Pressing return in the text box simulates clicking the Save button
  btnSaveGame_OnClick(control, eMouseLeft);
}

function btnDeleteSave_OnClick(GUIControl *control, MouseButton button)
{
  if (lstSaveGamesList.SelectedIndex >= 0)
  {
    DeleteSaveSlot(lstSaveGamesList.SaveGameSlots[lstSaveGamesList.SelectedIndex]);
    lstSaveGamesList.FillSaveGameList();
  }
}

function Entrer_OnClick(GUIControl *control, MouseButton button)
{

Bienvenue.Text=("...BIENVENUE...");
gEnterNom.Visible= false ;
SoldLabel.Text=Nom.Text ;
gSoldat.Visible=true ;
}


function Button2_OnClick(GUIControl *control, MouseButton button)
{
gQuitGame.Visible=false;
gPanel.Visible = true;
}

function Button1_OnClick(GUIControl *control, MouseButton button)
{
QuitGame(0);
}

function Button3_OnClick(GUIControl *control, MouseButton button)
{
gAide.Visible=false ;
}



function BtMenu_OnClick(GUIControl *control, MouseButton button)
{
gPanel.Visible= false ;
cEgo.ChangeRoom(1) ;
}

function gSoldat_OnClick(GUI *theGui, MouseButton button)
{
 if ((player.Room==2)||(player.Room==3)||(player.Room==4)) {
gQuestions.Visible= true ;
gReponses.Visible= true ;
 }
gSoldat.Visible = false ;
}

function cPorteSGC_AnyClick()
{
chargeFichierQuizz("SG1.dat") ;
gQuestions.Visible= true ;
gReponses.Visible= true ;
gSoldat.Visible= false ;
}

function cPorteAtlantis_AnyClick()
{
chargeFichierQuizz("SGA.dat") ;
gQuestions.Visible= true ;
gReponses.Visible= true ;
gSoldat.Visible=false ;
}

function cPorteUnivers_AnyClick()
{
chargeFichierQuizz("SGU.dat") ;
gQuestions.Visible= true ;
gReponses.Visible= true ;
gSoldat.Visible= true ;
}

function BtnRep3_OnClick(GUIControl *control, MouseButton button)
{
// Si on a cliqué sur le bouton dont l'ID est 1 (par exemple, mais tu auras sûrement des ID différents), on indique qu'on a cliqué sur la réponse 1
  if (control.ID == 3) bt = 3;
  else if (control.ID == 2) bt = 2;
  else if (control.ID == 1) bt = 1;
  else if (control.ID == 4) bt = 4;
  // Si on a appuyé sur la bonne réponse
  if (bt == bonne) {
    aYes.Play(); // Le son qui va bien
    GiveScore(25) ; // Des sous-sous
    // On essaye de passer à la question suivante
    if (!questionSuivante()) {
      // Si questionSuivante a retourné FALSE, c'est qu'on est à la fin
      // ... code ce que tu veux qu'il se produise quand on a gagné ...
    }
  }
  // Sinon, si on a donné une mauvaise réponse
  else {
    aNo.Play(); // Le son qui va bien
    GiveScore(-50) ; // On retire des sous-sous
  }
}
function BtnRep4_OnClick(GUIControl *control, MouseButton button)
{
// Si on a cliqué sur le bouton dont l'ID est 1 (par exemple, mais tu auras sûrement des ID différents), on indique qu'on a cliqué sur la réponse 1
  if (control.ID == 4) bt = 4;
  else if (control.ID == 2) bt = 2;
  else if (control.ID == 3) bt = 3;
  else if (control.ID == 1) bt = 1;
  // Si on a appuyé sur la bonne réponse
  if (bt == bonne) {
    aYes.Play(); // Le son qui va bien
    GiveScore(25) ; // Des sous-sous
    // On essaye de passer à la question suivante
    if (!questionSuivante()) {
      // Si questionSuivante a retourné FALSE, c'est qu'on est à la fin
      // ... code ce que tu veux qu'il se produise quand on a gagné ...
    }
  }
  // Sinon, si on a donné une mauvaise réponse
  else {
    aNo.Play(); // Le son qui va bien
    GiveScore(-50) ; // On retire des sous-sous
  }
}

function BtnRep2_OnClick(GUIControl *control, MouseButton button)
{
// Si on a cliqué sur le bouton dont l'ID est 1 (par exemple, mais tu auras sûrement des ID différents), on indique qu'on a cliqué sur la réponse 1
  if (control.ID == 2) bt = 2;
  else if (control.ID == 1) bt = 1;
  else if (control.ID == 3) bt = 3;
  else if (control.ID == 4) bt = 4;
  // Si on a appuyé sur la bonne réponse
  if (bt == bonne) {
    aYes.Play(); // Le son qui va bien
    GiveScore(25) ; // Des sous-sous
    // On essaye de passer à la question suivante
    if (!questionSuivante()) {
      // Si questionSuivante a retourné FALSE, c'est qu'on est à la fin
      // ... code ce que tu veux qu'il se produise quand on a gagné ...
    }
  }
  // Sinon, si on a donné une mauvaise réponse
  else {
    aNo.Play(); // Le son qui va bien
    GiveScore(-50) ; // On retire des sous-sous
  }
}

function BtnRep1_OnClick(GUIControl *control, MouseButton button)
{
// Si on a cliqué sur le bouton dont l'ID est 1 (par exemple, mais tu auras sûrement des ID différents), on indique qu'on a cliqué sur la réponse 1
  if (control.ID == 1) bt = 1;
  else if (control.ID == 2) bt = 2;
  else if (control.ID == 3) bt = 3;
  else if (control.ID == 4) bt = 4;
  // Si on a appuyé sur la bonne réponse
  if (bt == bonne) {
    aYes.Play(); // Le son qui va bien
    GiveScore(25) ; // Des sous-sous
    // On essaye de passer à la question suivante
    if (!questionSuivante()) {
      // Si questionSuivante a retourné FALSE, c'est qu'on est à la fin
      // ... code ce que tu veux qu'il se produise quand on a gagné ...
    }
  }
  // Sinon, si on a donné une mauvaise réponse
  else {
    aNo.Play(); // Le son qui va bien
    GiveScore(-50) ; // On retire des sous-sous
  }
}

function Button4_OnClick(GUIControl *control, MouseButton button)
{
gAide.Visible= true ;
}

Les onclick regarde dans le globalscript sont bien ou ils faut a mon avis (ils sont a la fin)


_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)


Dernière édition par hanakin le Lun 25 Aoû 2014 - 22:44, édité 8 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2479

Date d'inscription : 01/08/2006


MessageSujet: Re: Quizz   Lun 25 Aoû 2014 - 20:50

Oh, tu as laissé l'ancien code en fait.
En fait je pense qu'on n'y arrivera pas sans tout reprendre à zéro. Je verrai si je trouve le temps de faire un petit tutoriel avec images pour rendre tout ça plus clair.

_________________
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
hanakin
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 490

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: Quizz   Lun 25 Aoû 2014 - 21:20

Non j'ai repris le code que tu as remodelé  (me serais-je tromper) ?

C'est pas grave, c'est pas au pièces et prend ton temps de toutes façon ce que je vais faire en attendant c'est
les questionnaires 3 multipliers par le nombre de séries et d'épisodes par saison j'ai de quoi faire environs 200 questions
en considerant une par episodes.

Deja j'ai tout repris a zero le jeux se lance j'atteins la room 2 , 3 , ou 4 ça plante uniquement lorsque je veux lancer le questionnaire



J'ai remis le nouveau globalscript dans mon message precedent.

Merci encore.

_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2479

Date d'inscription : 01/08/2006


MessageSujet: Re: Quizz   Mar 26 Aoû 2014 - 10:14

OK je pense qu'on avance alors. Si le nombre passé comme argument de Random (i-1) est négatif, c'est que i vaut 0, c'est-à-dire qu'aucune question n'a été chargée depuis le fichier. EDIT : c'est faux. C'est moi qui ai fait une bourde en modifiant le code, l'argument devrait être i et pas i-1.
Remplace tes lignes chargeFichierQuizz("SGX.dat"); par if (!chargeFichierQuizz("SGX.dat")) AbortGame("Erreur au chargement des questions"); (où X est le caractère que tu changes à chaque fois bien sûr). Comme ça on verra s'il y a effectivement une erreur de chargement des questions.

Je vais de mon côté faire un projet modèle pour que tu t'en inspires (plus rapide à faire qu'un tutoriel).
EDIT : Voilà le lien vers le projet modèle.

_________________
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
hanakin
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 490

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: Quizz   Mar 26 Aoû 2014 - 14:39

Bravo Bravo

Un petit exemple vaut mieux qu'un gros Tuto
J'ai reussit a adapter ton script dans mon jeux cela fonctionne du feu de Dieux

Encore merci Il me reste plus qu'a fignolé et saisir les questionnaires

chefgeorges Telecharge le petit exemple de Kitai il est extra pour ton future Projet Quizz


AH!!! une dernier petite question comment afficher le n° de la bonne question(ou éventuelement la bonne réponse)Lorsque la reponse choisit etait fausse dans un gui j'ai essayé plusieurs façons
ça va pas je voudrais mettre ça ici: label.Text= ??????

J'ai essayé ça:

label.Text= ("Le Nombrest: %d",(control.ID)) ;
label.Text= (String (control.ID)) ;

_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
hanakin
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 490

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: Quizz   Jeu 28 Aoû 2014 - 15:13

Bonjours Kitai

aurais-tu une petite info la dessus STP

Code:
// main global script file
//DebutScript Kitai
 // D'abord on crée des fonctions qui vont nous permettre
        // de traiter les tableaux comme des piles, c'est-à-dire ajouter des entrées
        // au fur et à mesure, de façon dynamique. Voir le sujet correspondant.
        int[] IntPile(int tableau[], int taille, int valeur) {
          if (taille < 0) taille = 0;
          int tmp[] = new int[taille+1];
          int i = 0;
          while (i < taille) {
            tmp[i] = tableau[i];
            i++;
          }
          tmp[i] = valeur;
          return tmp;
        }
        String[] StringPile(String tableau[], int taille, String valeur) {
          if (taille < 0) taille = 0;
          String tmp[] = new String[taille+1];
          int i = 0;
          while (i < taille) {
            tmp[i] = tableau[i];
            i++;
          }
          tmp[i] = valeur;
          return tmp;
        }
        
        // Les variables globales dont on aura besoin
        // Questions[] va contenir la liste des questions
        // ReponsesX[] vont contenir les listes des réponses correspondant aux questions dans Questions[]
        String Questions[], ReponsesA[], ReponsesB[], ReponsesC[], ReponsesD[];
        // BonnesRespones[] va contenir les listes des bonnes réponses (1,2,3,4 pour A,B,C,D)
        // Seq[] va contenir la liste des ID des questions, qu'on va mélanger aléatoirement
        int BonnesReponses[], Seq[];
        // QuestionEnCours permet de parcourir Seq[] pour récupérer la question et les réponses en cours
        // Total représente le nombre total de questions
        int QuestionEnCours = -1, Total;
        
        // Fonction qui charge chaque ligne de chaque groupe de 6 lignes dans la variable correspondante
        // chargeFichierQuizz("nomdefichier.txt") retourne true si tout s'est bien passé, false sinon
        bool chargeFichierQuizz(String nomfichier) {
          // Si le fichier n'existe pas, erreur
          if (!File.Exists(nomfichier)) return false;
          // On ouvre le fichier en lecture
          File* fquizz = File.Open(nomfichier, eFileRead);
          // On initialise Total à 0
          Total = 0;
          String stmp; // Pour AsInt, voir plus bas
          // On parcourt le fichier dans fquizz
          while (!fquizz.EOF) {
            // On ajoute la première ligne qu'on lit à la pile des questions
            Questions = StringPile(Questions, Total, fquizz.ReadRawLineBack());
            // On ajoute les 4 lignes suivantes aux piles des réponses respectives
            ReponsesA = StringPile(ReponsesA, Total, fquizz.ReadRawLineBack());
            ReponsesB = StringPile(ReponsesB, Total, fquizz.ReadRawLineBack());
            ReponsesC = StringPile(ReponsesC, Total, fquizz.ReadRawLineBack());
            ReponsesD = StringPile(ReponsesD, Total, fquizz.ReadRawLineBack());
            // On récupère la 6ème ligne
            stmp = fquizz.ReadRawLineBack(); // La propriété AsInt ne peut pas directement s'accoler à ReadRawLineBack
            // On vérifie que c'est bien un nombre entre 1 et 4
            if (stmp.AsInt < 1 || stmp.AsInt > 4 || fquizz.Error) {
              // Si on n'a pas de nombre ou s'il y a eu une erreur de lecture auparavant,
              // on ferme le fichier et on retourne FALSE
              fquizz.Close();
              return false;
            }
            // Si on a bien affaire à un nombre entre 1 et 4, on l'ajoute à la pile des bonnes réponses
            BonnesReponses = IntPile(BonnesReponses, Total, stmp.AsInt);
            // On indique qu'on vient d'ajouter une question en augmentant Total
            Total++;
          }
          // On a finit de parcourir le fichier, on le ferme
          fquizz.Close();
          // On remplit Seq avec les ID des questions
          Seq = new int[Total];
          int i = 0;
          while (i < Total) {
            Seq[i] = i;
            i++;
          }
          // Puis on mélange les ID dans Seq avec l'algorithme de Fisher-Yates
          int j = 0, x = 0;
          while (i > 0) {
            i--;
            j = Random(i);
            x = Seq[i];
            Seq[i] = Seq[j];
            Seq[j] = x;
          }
          // On initialise la question en cours à -1
          // pour qu'elle passe à 0 au prochain appel
          QuestionEnCours = -1;
          // Tout s'est bien passé, on retourne TRUE
          return true;
        }
        
        // Une fonction qui permet de passer à la question suivante
        bool questionSuivante() {
          // Si on a déjà affiché la dernière question, on retourne FALSE
          if (QuestionEnCours+1 == Total) return false;
          // On passe à la question suivante
          QuestionEnCours++;
          // On affiche la question dont l'ID est le QuestionEnCours-ième élément de Seq
          question.Text=Questions[Seq[QuestionEnCours]];//question
          // Puis les réponses
          BtnRep1.Text=ReponsesA[Seq[QuestionEnCours]];//reponse1
          BtnRep2.Text=ReponsesB[Seq[QuestionEnCours]];//reponse2
          BtnRep3.Text=ReponsesC[Seq[QuestionEnCours]];//reponse3
          BtnRep4.Text=ReponsesD[Seq[QuestionEnCours]];//reponse4
          // On retourne TRUE
          return true;
        }
//Fin script Kitai
// A function that initializes a bunch of stuff.
function initialize_control_panel() {
  // Centre the control panel
  gPanel.Centre();
  // Centre the Restart dialog as well
  gRestartYN.Centre();
  if (!IsSpeechVoxAvailable()) {
    // If there is no speech-vox file, and therefore no speech,
    // disable all the controls related with speech.
    lblVoice.Visible = false;  
    btnVoice.Visible = false;  
    sldVoice.Visible = false;
  }
  else {
    // If there *is*, then set it to voice and text. It's best to use
    // both whenever possible, for the player's sake.
    SetVoiceMode(eSpeechVoiceAndText);
    // And reflect this in the control panel.
    btnVoice.Text = "Voice and Text";
  }
  if (!System.SupportsGammaControl) {
    // If we can't change the gamma settings, disable the relevant options.
    sldGamma.Visible = false;
    lblGamma.Visible = false;
  }
  
  //And now, set all the defaults
  System.Volume = 100;
  sldAudio.Value = System.Volume;
  SetGameSpeed(40);
  sldSpeed.Value = 40;
  if (IsSpeechVoxAvailable()) {
     SetVoiceMode(eSpeechVoiceAndText);
     btnVoice.Text = "Voice and Text";
     sldVoice.Value = 255;
     SetSpeechVolume(255);
  }
  if (System.SupportsGammaControl) {
    System.Gamma = 100;
    sldGamma.Value = 100;
  }
}

// Called when the game starts, before the first room is loaded
function game_start() {  
  // Put the code all in a function and then just call the function.
  // It saves cluttering up places like game_start.
  initialize_control_panel();
  // Use the KeyboardMovement module to, per default, replicate the standard
  // keyboard movement of most Sierra games. See KeyboardMovement.txt for more info
  KeyboardMovement.SetMode(eKeyboardMovement_Tapping);
  
}
      


function repeatedly_execute() {
  
  // Put here anything you want to happen every game cycle, even when
  // the game is paused. This will not run when the game is blocked
  // inside a command like a blocking Walk()
  
  if (IsGamePaused() == 1) return;

  // Put here anything you want to happen every game cycle, but not
  // when the game is paused.
}

function repeatedly_execute_always() {
  
  // Put anything you want to happen every game cycle, even
  // when the game is blocked inside a command like a
  // blocking Walk().
  // You cannot run blocking commands from this function.
  
}

function show_inventory_window ()
{
  //gInventory.Visible = true;
  // switch to the Use cursor (to select items with)
  mouse.Mode = eModeInteract;
  // But, override the appearance to look like the arrow
  mouse.UseModeGraphic(eModePointer);
}

function show_save_game_dialog()
{
  gSaveGame.Visible = true;
  // Get the list of save games
  lstSaveGamesList.FillSaveGameList();
  if (lstSaveGamesList.ItemCount > 0)
  {
    // If there is at least one, set the default text
    // to be the first game's name
    txtNewSaveName.Text = lstSaveGamesList.Items[0];
  }
  else
  {
    // No save games yet, default empty text.
    txtNewSaveName.Text = "";
  }
  mouse.UseModeGraphic(eModePointer);
  //gIconbar.Visible = false;
}

function show_restore_game_dialog()
{
  gRestoreGame.Visible = true;
  lstRestoreGamesList.FillSaveGameList();
  mouse.UseModeGraphic(eModePointer);
  //gIconbar.Visible = false;
  
}

function close_save_game_dialog()
{
  gSaveGame.Visible = false;
  mouse.UseDefaultGraphic();
  //gIconbar.Visible = true;
}

function close_restore_game_dialog()
{
  gRestoreGame.Visible = false;
  mouse.UseDefaultGraphic();
 // gIconbar.Visible = true;
}

// Called when a key is pressed. keycode holds the key's ASCII code
function on_key_press(eKeyCode keycode) {
  // The following is called before "if game is paused keycode=0", so
  // it'll happen even when the game is paused.
  
  if ((keycode == eKeyEscape) && gRestartYN.Visible) {
    //Use ESC to cancel restart.
    gRestartYN.Visible = false;
   // gIconbar.Visible = true;
    // If the panel's not ON, then the player must have gotten here by tapping F9,
    // therefore his cursor needs restoring. If the panel IS on, then it doesn't,
    // because it's already a pointer. Get used to thinking like this!!
    if (!gPanel.Visible) mouse.UseDefaultGraphic();
  
    return;
  }
  if ((keycode == eKeyEscape) && gPanel.Visible) {
    // Use ESC to turn the panel off.
    
   // gPanel.Visible = false;
    mouse.UseDefaultGraphic();
   // gIconbar.Visible = true;
    return;
  }
  if ((keycode == eKeyEscape) && (gSaveGame.Visible))
  {
    // Use ESC to close the save game dialog
    close_save_game_dialog();
    return;
  }
  if ((keycode == eKeyEscape) && (gRestoreGame.Visible))
  {
    // Use ESC to close the restore game dialog
    close_restore_game_dialog();
    return;
  }
  
  if (keycode == eKeyReturn) {
    // ENTER, in this case merely confirms restart
    if (gRestartYN.Visible) RestartGame();
  }

  if (IsGamePaused() || (IsInterfaceEnabled() == 0))
  {
    // If the game is paused with a modal GUI on the
    // screen, or the player interface is disabled in
    // a cut scene, ignore any keypresses.
    return;
  }

  // FUNCTION KEYS AND SYSTEM SHORTCUTS
  if (keycode == eKeyEscape) {
    // ESC
    gQuestions.Visible= false ;
gReponses.Visible= false ;
     gSoldat.Visible=false ;
    gPanel.Visible = true;
    //gIconbar.Visible = false;
    mouse.UseModeGraphic(eModePointer);
  }
  if (keycode == eKeyCtrlQ)  QuitGame(1);   // Ctrl-Q
 // if (keycode == eKeyF5) show_save_game_dialog();   // F5
 // if (keycode == eKeyF7) show_restore_game_dialog();  // F7          
 
  if (keycode == eKeyF9) {
    // F9, asks the player to confirm restarting (so much better to always confirm first)
    gRestartYN.Visible = true;  
    //gIconbar.Visible = false;
    mouse.UseModeGraphic(eModePointer);
  }
  if (keycode == eKeyF1) {
    gAide.Visible=true ;
  }
  
  if (keycode == eKeyF12) SaveScreenShot("SG1Quiz.bmp");  // F12
  if (keycode == eKeyTab)   show_inventory_window();  // Tab, show inventory
if (keycode == eKeyF10) {
gPanel.Visible= false ;
gQuestions.Visible=false ;
gReponses.Visible=false ;
cEgo.ChangeRoom(1) ;
}
  // GAME COMMAND SHORTCUTS
  if (keycode == 'W') mouse.Mode=eModeWalkto; //Notice this alternate way to indicate keycodes.
  if (keycode == 'L') mouse.Mode=eModeLookat; //Note that all we do here is set modes.
  if (keycode == 'U') mouse.Mode=eModeInteract; //If you want something else to happen, such as GUI buttons highlighting,
  if (keycode == 'T') mouse.Mode=eModeTalkto; //you'll need some more scripting done.
  if (keycode == 'I') mouse.Mode=eModeUseinv; //But this will, as-is, give you some standard keyboard shortcuts your players will very much appreciate.

  // For extra cursor modes, such as pick up, feel free to add as you will.
  // Uncomment the line below if you use the "Pick Up" mode.
  //if (keycode == 'P' || keycode == 'G') mouse.Mode=eModePickup;

  // DEBUG FUNCTIONS
  if (keycode == eKeyCtrlS)  Debug(0,0);  // Ctrl-S, give all inventory
  if (keycode == eKeyCtrlV)  Debug(1,0);  // Ctrl-V, version
  if (keycode == eKeyCtrlA)  Debug(2,0);  // Ctrl-A, show walkable areas
  if (keycode == eKeyCtrlX)  Debug(3,0);  // Ctrl-X, teleport to room
  if (keycode == eKeyCtrlW && game.debug_mode)
    player.PlaceOnWalkableArea(); //Ctrl-W, move to walkable area
}


function on_mouse_click(MouseButton button) {
  // called when a mouse button is clicked. button is either LEFT or RIGHT
  if (IsGamePaused() == 1) {
    // Game is paused, so do nothing (ie. don't allow mouse click)
  }
  else if (button == eMouseLeft) {
    ProcessClick(mouse.x, mouse.y, mouse.Mode );
  }
  else if (button == eMouseRight || button == eMouseWheelSouth){
    // right-click our mouse-wheel down, so cycle cursor
    mouse.SelectNextMode();
  }
  else if (button == eMouseMiddle) {
    // Middle-button-click, default make character walk to clicked area (a little shortcut)
    // Could have been just "player.Walk(mouse.x,mouse.y)", but it's best to
    // leave our options open - what if you have a special script triggered
    // on "walking" mode?
    ProcessClick(mouse.x, mouse.y, eModeWalkto);
  }
  else if (button == eMouseWheelNorth) {
    // Mouse-wheel up, cycle cursors
    // If mode isn't WALK, set the previous mode (notice usage of numbers instead
    // of eNums, when it suits us)...
    if (mouse.Mode>0) mouse.Mode=mouse.Mode-1;
    else
    {
      // ...but if it is WALK mode...
      if (player.ActiveInventory!=null)
      {
        //...and the player has a selected inventory item, set mouse mode to UseInv.
        mouse.Mode=eModeUseinv;
      }
      else
      {
        // If they don't, however, just set it to mode TALK (change this line if you add more cursor modes)
        mouse.Mode=eModeTalkto;
      }
    }
  }
}

function interface_click(int interface, int button) {
  // This function is obsolete, from 2.62 and earlier versions.
}

function btnInvUp_Click(GUIControl *control, MouseButton button) {
 // invCustomInv.ScrollUp();
}

function btnInvDown_Click(GUIControl *control, MouseButton button) {
  //invCustomInv.ScrollDown();
}

function btnInvOK_Click(GUIControl *control, MouseButton button) {
 // They pressed the OK button, close the GUI
 //gInventory.Visible = false;
 mouse.UseDefaultGraphic();
}

function btnInvSelect_Click(GUIControl *control, MouseButton button) {
  
 // They pressed SELECT, so switch to the Get cursor
 mouse.Mode = eModeInteract;
 // But, override the appearance to look like the arrow
 mouse.UseModeGraphic(eModePointer);
}

function btnIconInv_Click(GUIControl *control, MouseButton button) {
  
  show_inventory_window();
}

function btnIconCurInv_Click(GUIControl *control, MouseButton button) {
  
  if (player.ActiveInventory != null)
    mouse.Mode = eModeUseinv;
}

function btnIconSave_Click(GUIControl *control, MouseButton button)
{
  show_save_game_dialog();
}

function btnIconLoad_Click(GUIControl *control, MouseButton button)
{
  show_restore_game_dialog();
}

function btnIconExit_Click(GUIControl *control, MouseButton button) {
  
  QuitGame(1);
}

function btnIconAbout_Click(GUIControl *control, MouseButton button) {
  
  gPanel.Visible=true;
//  gIconbar.Visible=false;
  mouse.UseModeGraphic(eModePointer);
}

function cEgo_Look()
{
  Display("Damn, I'm looking good!");
}

function cEgo_Interact()
{
  Display("You rub your hands up and down your clothes.");
}

function cEgo_Talk()
{
  Display("Talking to yourself is a sign of madness!");
}

//START OF CONTROL PANEL FUNCTIONS
function btnSave_OnClick(GUIControl *control, MouseButton button)
{
  gPanel.Visible = false;
  mouse.UseDefaultGraphic();
  //gIconbar.Visible = true;
  Wait(1);
  gSaveGame.Visible= true ;
// btnIconSave_Click(btnIconSave, eMouseLeft);
}

function gControl_OnClick(GUI *theGui, MouseButton button)
{

}

function btnAbout_OnClick(GUIControl *control, MouseButton button)
{
  gPanel.Visible=false ;
  SoldLabel.Text= ("2014");
Bienvenue.Text=("Stargate Quizz");  
SoldLabel.Text=("Graphisme G.Ferre");
Sold2.Text=("Programmation G.Ferre   Un grand Merci a Kitai pour le Script");
gSoldat.Visible= true ;
//Display("Stargate Quizz G.Ferre 2014.");
}

function btnQuit_OnClick(GUIControl *control, MouseButton button)
{
  gPanel.Visible = false;
  Wait(1);
  gQuitGame.Visible=true;
  //QuitGame(1);
  //gPanel.Visible = true;
 // gIconbar.Visible = false;
  mouse.UseModeGraphic(eModePointer);
}

function btnLoad_OnClick(GUIControl *control, MouseButton button)
{
  gPanel.Visible = false;
  mouse.UseDefaultGraphic();
  //gIconbar.Visible = true;
  Wait(1);
  gRestoreGame.Visible=true ;
 // btnIconLoad_Click(btnIconLoad, eMouseLeft);
}

function btnResume_OnClick(GUIControl *control, MouseButton button)
{
 if ((player.Room==2)||(player.Room==3)||(player.Room==4)) {
gQuestions.Visible= true ;
gReponses.Visible= true ;
 }
gPanel.Visible = false;
mouse.UseDefaultGraphic();
  //gIconbar.Visible = true;
}

function sldAudio_OnChange(GUIControl *control)
{
  System.Volume = sldAudio.Value;
}

function sldVoice_OnChange(GUIControl *control)
{
  // Sets voice volume. Note that we don't check for the existence of speech.vox -
  // we did that in game_start, so if it's not there the slider won't even be available.
  SetSpeechVolume(sldVoice.Value);
}

function btnVoice_OnClick(GUIControl *control, MouseButton button)
{

// Note that we don't check for the existence of speech.vox - we did that in game_start,
  // so if it's not there the button won't even be available.
  if (btnVoice.Text == "Voice and Text") {
    SetVoiceMode(eSpeechVoiceOnly);
    btnVoice.Text = "Voice only";
  }
  else if (btnVoice.Text == "Voice only") {
    SetVoiceMode(eSpeechTextOnly);
    btnVoice.Text = "Text only";
  }
 // else if (btnVoice.Text == "Text only") {
  //  SetVoiceMode(eSpeechVoiceAndText);
  //  btnVoice.Text = "Voice and Text";
 // }
}

function sldGamma_OnChange(GUIControl *control)
{
  // Set the gamma. Note there's no need to check for anything else, as we ensured,
  // in game_start, that the slider won't even appear if it's not possible to do this.
  System.Gamma = sldGamma.Value;
}

function btnDefault_OnClick(GUIControl *control, MouseButton button)
{
  // Reset everything to default. You'll have to edit these as well as the sliders
  // if you'd rather have different default parameters.
  System.Volume = 100;
  sldAudio.Value = System.Volume;
  sldSpeed.Value = 40;
  SetGameSpeed(40);
  if (IsSpeechVoxAvailable()) {
     SetVoiceMode(eSpeechVoiceAndText);
     btnVoice.Text = "Voice and Text";
     sldVoice.Value = 255;
     SetSpeechVolume(255);
  }
  if (System.SupportsGammaControl) {
    System.Gamma = 100;
    sldGamma.Value = 100;
  }
}
//END OF CONTROL PANEL FUNCTIONS

function dialog_request(int param)
{
  // This is used by the dialog text parser if you need to process
  // text that the player types in to the parser.
  // It is not used by default.
}

function sldSpeed_OnChange(GUIControl *control)
{
  SetGameSpeed(sldSpeed.Value);
}

function btnRestart_OnClick(GUIControl *control, MouseButton button)
{
  gRestartYN.Visible=true;
 // gIconbar.Visible=false;
}

function btnRestartYes_OnClick(GUIControl *control, MouseButton button)
{
  RestartGame();
}

function btnRestartNo_OnClick(GUIControl *control, MouseButton button)
{
  gRestartYN.Visible = false;
  //gIconbar.Visible = true;
  // If the panel's not ON, then the player must have gotten here by tapping F9,
  // therefore his cursor needs restoring. If the panel IS on, then it doesn't,
  // because it's already a pointer. Get used to thinking like this!!
  if (!gPanel.Visible) mouse.UseDefaultGraphic();
}

function btnCancelSave_OnClick(GUIControl *control, MouseButton button)
{
  close_save_game_dialog();
gPanel.Visible=true ;
}


function btnSaveGame_OnClick(GUIControl *control, MouseButton button)
{

int gameSlotToSaveInto = lstSaveGamesList.ItemCount + 1;
  int i = 0;
  while (i < lstSaveGamesList.ItemCount)
  {
    if (lstSaveGamesList.Items[i] == txtNewSaveName.Text)
    {
      gameSlotToSaveInto = lstSaveGamesList.SaveGameSlots[i];
    }
    i++;
  }
  SaveGameSlot(gameSlotToSaveInto, txtNewSaveName.Text);
  close_save_game_dialog();
}

function btnCancelRestore_OnClick(GUIControl *control, MouseButton button)
{
  close_restore_game_dialog();
gPanel.Visible=true ;
}

function btnRestoreGame_OnClick(GUIControl *control, MouseButton button)
{
  if (lstRestoreGamesList.SelectedIndex >= 0)
  {
    RestoreGameSlot(lstRestoreGamesList.SaveGameSlots[lstRestoreGamesList.SelectedIndex]);
  }
  close_restore_game_dialog();
}

function lstSaveGamesList_OnSelectionCh(GUIControl *control)
{
  txtNewSaveName.Text = lstSaveGamesList.Items[lstSaveGamesList.SelectedIndex];
}

function txtNewSaveName_OnActivate(GUIControl *control)
{
  // Pressing return in the text box simulates clicking the Save button
  btnSaveGame_OnClick(control, eMouseLeft);
}

function btnDeleteSave_OnClick(GUIControl *control, MouseButton button)
{
  if (lstSaveGamesList.SelectedIndex >= 0)
  {
    DeleteSaveSlot(lstSaveGamesList.SaveGameSlots[lstSaveGamesList.SelectedIndex]);
    lstSaveGamesList.FillSaveGameList();
  }
}

function Entrer_OnClick(GUIControl *control, MouseButton button)
{

Bienvenue.Text=("...BIENVENUE...");
gEnterNom.Visible= false ;
SoldLabel.Text=Nom.Text ;
gSoldat.Visible=true ;

}


function Button2_OnClick(GUIControl *control, MouseButton button)
{
gQuitGame.Visible=false;
gPanel.Visible = true;
}

function Button1_OnClick(GUIControl *control, MouseButton button)
{
QuitGame(0);
}

function Button3_OnClick(GUIControl *control, MouseButton button)
{
gAide.Visible=false ;
}



function BtMenu_OnClick(GUIControl *control, MouseButton button)
{
gPanel.Visible= false ;
cEgo.ChangeRoom(1) ;
}

function gSoldat_OnClick(GUI *theGui, MouseButton button)
{
if ((player.Room==2)||(player.Room==3)||(player.Room==4)) {
gQuestions.Visible= true ;
gReponses.Visible= true ;
 }
gSoldat.Visible = false ;
}

function cPorteSGC_AnyClick()
{
gSoldat.Clickable=true ;
gQuestions.Visible= true ;
gReponses.Visible= true ;
gSoldat.Visible= false ;
}

function cPorteAtlantis_AnyClick()
{
gSoldat.Clickable=true ;
gQuestions.Visible= true ;
gReponses.Visible= true ;
gSoldat.Visible=false ;
}

function cPorteUnivers_AnyClick()
{
gSoldat.Clickable=true ;  
gQuestions.Visible= true ;
gReponses.Visible= true ;
gSoldat.Visible= false ;
}

function BtnRep3_OnClick(GUIControl *control, MouseButton button)
{
  // Si le bouton cliqué correspond à la bonne réponse...
  if (((control.ID == BtnRep1.ID) && (BonnesReponses[Seq[QuestionEnCours]] == 1)) ||
      ((control.ID == BtnRep2.ID) && (BonnesReponses[Seq[QuestionEnCours]] == 2)) ||
      ((control.ID == BtnRep3.ID) && (BonnesReponses[Seq[QuestionEnCours]] == 3)) ||
      ((control.ID == BtnRep4.ID) && (BonnesReponses[Seq[QuestionEnCours]] == 4)))
      
{
 aYes.Play(); // Le son qui va bien
            GiveScore(25) ;             // Des sous-sous Fin
            // On essaie de passer à la question suivante
        if (!questionSuivante()) {
          
          // Si on a échoué, ça veut dire qu'on a atteint la fin du quizz
         gQuestions.Visible = false;
         gReponses.Visible=false ;
         Bienvenue.Text=("...BRAVO...") ;
         SoldLabel.Text=("") ;
          aTada.Play(); // Le son qui va bien
            GiveScore(200) ;
         Sold2.Text=("Bravo, vous avez repondu a toutes les questions ! 200 points de Bonus.") ;
         gSoldat.Visible=true ;
         gSoldat.Visible=true ;
         Wait(160) ;
         gSoldat.Visible=false ;
         cPorteSGC.Clickable=false;
         cPorteAtlantis.Clickable=false;
         cPorteUnivers.Clickable=false;
           }
        }
  
  else {
    // Si le bouton cliqué ne correspond *PAS* à la bonne réponse
    aNo.Play();
    GiveScore(-100) ;
    gSoldat.Visible=true ;
            gQuestions.Visible=false ;
            gReponses.Visible=false ;
            Bienvenue.Text=("...PERDU...") ;
            SoldLabel.Text=("La bonne reponse etait:");
            Sold2.Text=("") ;
            Wait(200);
            RestartGame() ;
      
  }
}
function BtnRep4_OnClick(GUIControl *control, MouseButton button)
{
  // Si le bouton cliqué correspond à la bonne réponse...
  if (((control.ID == BtnRep1.ID) && (BonnesReponses[Seq[QuestionEnCours]] == 1)) ||
      ((control.ID == BtnRep2.ID) && (BonnesReponses[Seq[QuestionEnCours]] == 2)) ||
      ((control.ID == BtnRep3.ID) && (BonnesReponses[Seq[QuestionEnCours]] == 3)) ||
      ((control.ID == BtnRep4.ID) && (BonnesReponses[Seq[QuestionEnCours]] == 4))) {
         aYes.Play(); // Le son qui va bien
            GiveScore(25) ;
        // On essaie de passer à la question suivante
        if (!questionSuivante()) {
          
          // Si on a échoué, ça veut dire qu'on a atteint la fin du quizz
            gQuestions.Visible = false;
         gReponses.Visible=false ;
         Bienvenue.Text=("...BRAVO...") ;
         SoldLabel.Text=("") ;
          aTada.Play(); // Le son qui va bien
            GiveScore(200) ;
         Sold2.Text=("Bravo, vous avez repondu a toutes les questions ! 200 points de Bonus.") ;
         gSoldat.Visible=true ;
         gSoldat.Visible=true ;
         Wait(200) ;
         gSoldat.Visible=false ;
         cPorteSGC.Clickable=false;
         cPorteAtlantis.Clickable=false;
         cPorteUnivers.Clickable=false;
                 }
                }
  else {
    // Si le bouton cliqué ne correspond *PAS* à la bonne réponse
       aNo.Play();
    GiveScore(-100) ;
    gSoldat.Visible=true ;
            gQuestions.Visible=false ;
            gReponses.Visible=false ;
            Bienvenue.Text=("...PERDU...") ;
            SoldLabel.Text=("La bonne reponse etait:");
            Sold2.Text=("") ;
            Wait(200);
            RestartGame() ;
  }
}

function BtnRep2_OnClick(GUIControl *control, MouseButton button)
{
  // Si le bouton cliqué correspond à la bonne réponse...
  if (((control.ID == BtnRep1.ID) && (BonnesReponses[Seq[QuestionEnCours]] == 1)) ||
      ((control.ID == BtnRep2.ID) && (BonnesReponses[Seq[QuestionEnCours]] == 2)) ||
      ((control.ID == BtnRep3.ID) && (BonnesReponses[Seq[QuestionEnCours]] == 3)) ||
      ((control.ID == BtnRep4.ID) && (BonnesReponses[Seq[QuestionEnCours]] == 4))) {
        aYes.Play(); // Le son qui va bien
            GiveScore(25) ;
       // On essaie de passer à la question suivante
        if (!questionSuivante()) {
          
          // Si on a échoué, ça veut dire qu'on a atteint la fin du quizz
           gQuestions.Visible = false;
         gReponses.Visible=false ;
         Bienvenue.Text=("...BRAVO...") ;
         SoldLabel.Text=("") ;
          aTada.Play(); // Le son qui va bien
            GiveScore(200) ;
         Sold2.Text=("Bravo, vous avez repondu a toutes les questions ! 200 points de Bonus.") ;
         gSoldat.Visible=true ;
         gSoldat.Visible=true ;
         Wait(200) ;
         gSoldat.Visible=false ;
         cPorteSGC.Clickable=false;
         cPorteAtlantis.Clickable=false;
         cPorteUnivers.Clickable=false;
                 }
        }
  else {
    // Si le bouton cliqué ne correspond *PAS* à la bonne réponse
         aNo.Play();
    GiveScore(-100) ;
    gSoldat.Visible=true ;
            gQuestions.Visible=false ;
            gReponses.Visible=false ;
            Bienvenue.Text=("...PERDU...") ;
            SoldLabel.Text=("La bonne reponse etait:");
            Sold2.Text=("") ;
            Wait(200);
            RestartGame() ;
  }
}

function BtnRep1_OnClick(GUIControl *control, MouseButton button)
{
  // Si le bouton cliqué correspond à la bonne réponse...
  if (((control.ID == BtnRep1.ID) && (BonnesReponses[Seq[QuestionEnCours]] == 1)) ||
      ((control.ID == BtnRep2.ID) && (BonnesReponses[Seq[QuestionEnCours]] == 2)) ||
      ((control.ID == BtnRep3.ID) && (BonnesReponses[Seq[QuestionEnCours]] == 3)) ||
      ((control.ID == BtnRep4.ID) && (BonnesReponses[Seq[QuestionEnCours]] == 4))) {
        aYes.Play(); // Le son qui va bien
            GiveScore(25) ; //des sous
       // On essaie de passer à la question suivante
               if (!questionSuivante()) {
          
          // Si on a échoué, ça veut dire qu'on a atteint la fin du quizz
           gQuestions.Visible = false;
         gReponses.Visible=false ;
         Bienvenue.Text=("...BRAVO...") ;
         SoldLabel.Text=("") ;
         aTada.Play(); // Le son qui va bien
            GiveScore(200) ;
         Sold2.Text=("Bravo, vous avez repondu a toutes les questions ! 200 points de Bonus.") ;
                  gSoldat.Visible=true ;
         Wait(200) ;
         gSoldat.Visible=false ;
         cPorteSGC.Clickable=false;
         cPorteAtlantis.Clickable=false;
         cPorteUnivers.Clickable=false;
                }
            }
  else {
    // Si le bouton cliqué ne correspond *PAS* à la bonne réponse
       aNo.Play();
    GiveScore(-100) ;
    gSoldat.Visible=true ;
            gQuestions.Visible=false ;
            gReponses.Visible=false ;
            Bienvenue.Text=("...PERDU...") ;
            SoldLabel.Text=("La bonne reponse etait:");
            Sold2.Text =("");
            Wait(200);
            RestartGame() ;
            
  }
}

function Button4_OnClick(GUIControl *control, MouseButton button)
{
 gAide.Visible = true ;
}

function cDebutSG1_AnyClick()
{
  mouse.ChangeModeGraphic(eModeInteract, 6) ;
  gEnterNom.Visible= false ;
aMenu.Stop() ;
gSoldat.Visible= false ;
cEgo.ChangeRoom(2) ;
if (!chargeFichierQuizz("SG1.dat")) AbortGame("Erreur au chargement de SG1.dat");
  questionSuivante();
}


function cDebutSGA_AnyClick()
{
  mouse.ChangeModeGraphic(eModeInteract, 4) ;
  gEnterNom.Visible= false ;
aMenu.Stop() ;
gSoldat.Visible= false ;
cEgo.ChangeRoom(3) ;
if (!chargeFichierQuizz("SGA.dat")) AbortGame("Erreur au chargement de SGA.dat");
  questionSuivante();
}

function cDebutSGU_AnyClick()
{
  mouse.ChangeModeGraphic(eModeInteract, 1) ;
  gEnterNom.Visible= false ;
aMenu.Stop() ;
gSoldat.Visible= false ;
cEgo.ChangeRoom(4) ;
if (!chargeFichierQuizz("SGU.dat")) AbortGame("Erreur au chargement de SGU.dat");
  questionSuivante();
}

AH!!! une dernier petite question comment afficher le n° de la bonne reponse (ou éventuelement la bonne réponse en clair) Lorsque la reponse choisit est fausse dans un gui j'ai essayé plusieurs façons
ça va pas je voudrais mettre ça ici dans le script: SoldLabel.Text=("La bonne reponse etait:");
Sold2.Text =("");//je ne sais pas quelle valeur mettre ici

J'ai essayé ça:

Sold2.Text= ("Le Nombrest: %d",(control.ID)) ;
Sold2.Text= (String (control.ID)) ;


Est-ce que quelqu'un aurais la reponse svp (voir le script plus ) car je rame un peu ;
il va falloir que j'arrete d'ailleurs je vais percer le bateau!; grand sourire

_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2479

Date d'inscription : 01/08/2006


MessageSujet: Re: Quizz   Mer 17 Sep 2014 - 16:01

Excuse-moi j'avais zappé ta question.

Comme tu le vois sur les lignes 743 à 746 du script que tu as posté et que je répète ici, on récupère le numéro de la bonne réponse avec BonnesReponses[Seq[QuestionEnCours]] :
Code:
  if (((control.ID == BtnRep1.ID) && (BonnesReponses[Seq[QuestionEnCours]] == 1)) ||
      ((control.ID == BtnRep2.ID) && (BonnesReponses[Seq[QuestionEnCours]] == 2)) ||
      ((control.ID == BtnRep3.ID) && (BonnesReponses[Seq[QuestionEnCours]] == 3)) ||
      ((control.ID == BtnRep4.ID) && (BonnesReponses[Seq[QuestionEnCours]] == 4)))
C'est donc cette valeur que tu vas utiliser pour afficher le numéro de la bonne réponse, comme ça :
Code:
Sold2.Text = String.Format("La reponse numero %d", BonnesReponses[Seq[QuestionEnCours]]);
Si tu veux directement modifier l'apparence du bouton qui correspond à la bonne réponse (changer la couleur du texte par exemple), il faut passer par des if pour la correspondance entre le numéro de la bonne réponse et le bouton correspondant :
Code:
if (BonnesReponses[Seq[QuestionEnCours]] == 1) BtnRep1.TextColor = 15; // 15 = Blanc
else if (BonnesReponses[Seq[QuestionEnCours]] == 2) BtnRep2.TextColor = 15;
else if (BonnesReponses[Seq[QuestionEnCours]] == 3) BtnRep3.TextColor = 15;
else if (BonnesReponses[Seq[QuestionEnCours]] == 4) BtnRep4.TextColor = 15;
Si tu fais ça, n'oublie pas de remettre le texte du bouton à sa couleur initiale avant de passer à la prochaine question.

_________________
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
hanakin
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 490

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: qiuzz   Mer 17 Sep 2014 - 16:51

merci merci je vais pouvoir tester differentes solutions




ça marche au poil

_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
hanakin
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 490

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: Quizz   Mar 23 Sep 2014 - 18:28

Bonsoir

encore une petite question (du casse pied)
je voudrais afficher le nombre de question décroissant
J'ai bien compris que le nombre de question était Total
et donc pour l'afficher j'ai mis dans la

function repeatedly_execute() {
Nombre.Text=String.Format("Question:%d", Total);

pas de soucis en début de questionnaire j'ai bien le nombre de questions existantes dans le fichier ; mais comment faire pour qu'il s'affiche au fur et a mesure que l'on repond au questions
10 ,9, 8 etc...
J'avais mis ça:  Total=Total-1 ; juste apres le Givescore(25);dans chaques boutons ça decompte bien mais arrivé à 0 cela plante.

Merci d'avance oh toi le grand programmeur grand sourire

_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2479

Date d'inscription : 01/08/2006


MessageSujet: Re: Quizz   Mer 24 Sep 2014 - 12:54

En fait tu n'as pas besoin de placer ton instruction dans la fonction repeatedly_execute, qui s'exécute à chaque cycle et donc consomme plus de ressources que nécessaire. Tu devrais plutôt placer ton instruction là où tu gères l'affichage des nouvelles questions, donc juste avant l'instruction return true; de la fonction questionSuivante par exemple.

Il ne faut pas modifier la valeur de Total, car comme tu dis elle correspond au nombre total de questions dans le fichier : si tu diminues la valeur de Total à chaque question, le programme "croira" qu'il y a de moins en moins de questions dans le fichier (alors qu'en réalité il y a toujours autant de questions puisqu'on ne modifie pas le fichier).
Tu vas notamment avoir des problèmes lorsque l'instruction if (QuestionEnCours+1 == Total) return false; de questionSuivante sera évaluée, puisque la condition ne pourra jamais être satisfaite et donc le programme tentera d'afficher des questions même lorsqu'il n'y en a aura plus. Pour se prémunir de tout bug dans ce style j'aurais dû remplacer l'instruction par if (QuestionEnCours+1 >= Total) return false; comme ça tu n'auras plus de plantage.

Par ailleurs, plutôt que modifier directement la valeur de Total, tu vas simplement afficher la soustraction de QuestionEnCours (qui est incrémentée à chaque nouvelle question) à Total, comme ça :
Code:
Nombre.Text=String.Format("Question:%d", Total-QuestionEnCours);

_________________
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
hanakin
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 490

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: Re: Quizz   Mer 24 Sep 2014 - 17:45

Merci Merci

J'ai appliquer ta formule c'est nickel Chrome

mais que ferons nous sans toi clin d\\\\'oeil clin d\\\\'oeil

_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Contenu sponsorisé




MessageSujet: Re: Quizz   

Revenir en haut Aller en bas
 
Quizz
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Studio Quizz !
» Arcade-system - Les corrections du Quizz anniversaire 4ans
» Quizz Cinéphile
» Quizz battle
» Vos questions sur l'évènement : La quizz des 4 ans.

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: LES JEUX :: Les jeux en préparation-
Sauter vers: