Simple quizz

Description

Systême de quizz simpliste.
Pour l'utiliser vous devez créer un txt nommé questions.txt avec les questions sous la forme:

Question ? Réponse
Exemple:
Combient vaut 2 + 2 ? 4

Car le script utilise la caractère "?" comme repère.

Néanmoins dans le zip j'ai ajouté la database de questions du célèbre Wquizz modifié pour qu'elle marche avec ce quizz.

Source / Exemple :


;Systême de quizz simple par Kentix

;Infos (si vous souhaitez modifier par la suite...)
;La variable %quizzchan contient le nom du salon
;La variable %questionsdir contient le chemin du fichier texte questions.txt
;La hash table utilisé pour les scores est quizzscores

;Commandes opérateurs
;!quizz active/désactive le quizz
;!quizz.reset Reset les scores

;Commandes pour tout le monde
;!premier affiche le meilleur score
;!myscore affiche son score

;Lors du chargement du script on cré la var %quizzchan qui contiendra donc le nom du salon où le quizz est exécuté + On initialise la hash table quizzscores
on *:LOAD:{
  set %quizzchan $input(Insérez le nom du salon où le quizz se déroulera:,oe,Nom du salon de quizz,#exemple)
  set %questionsdir $sfile(questions.txt,La database de questions)
  hmake -s quizzscores 100
}

;Lors du lancement de mirc.exe on intialise à chaque fois la hash table quizzscores
on *:START:{
  hmake -s quizzscores 100
}
;Récupération d'une question au hasard, on prend les mots avant le "?" d'une question et on stocke la question ainsi traitée dans %questionok
;On récupère ainsi aussi la réponse qui correspond à la question (sur la même ligne) qu'on stocke dans %reponse
alias quizzget {
  unset %reponse
  unset %questionok
  set %question $read(%questionsdir)
  var %b = 1, %a = $findtok(%question,?,1,32)
  while (%b <= %a) {
    var %c = $gettok(%question, %b, 32)
    set %questionok $addtok(%questionok, %c, 32)
    inc %b
  }
  inc %a
  var %d = $numtok(%question, 32)
  while (%a <= %d) {
    var %c = $gettok(%question, %a, 32)
    set %reponse $addtok(%reponse, %c, 32)
    inc %a
  }
} 

;Dis une question récupéré avec quizzget sur le salon contenu dans la var %quizzchan
alias sayquestion {
  if (%winner) {
    unset %winner
    quizzget
    msg %quizzchan %questionok (Vous avez 15 secondes pour trouver la bonne réponse)
  }
  else {
    msg %quizzchan Personne n'a trouvé ! La réponse était: %reponse
    quizzget
    .timer 1 2 msg %quizzchan %questionok (Vous avez 15 secondes pour trouver la bonne réponse)
  }
}

;départ du quizz si le $nick est opérateur du salon
on @*:TEXT:!quizz:%quizzchan:{
  if (%quizzon) {
    quizzlepremier
    timerQUIZZ off
    unset %quizzon
    msg $chan Le quizz est désormais arrêté, le premier est actuellement %quizzlepremier avec %quizzlepremierstats points.
  }
  else {
    set %winner 1
    set %quizzon 1
    msg $chan Quizz lancé première question dans 15 secondes préparez-vous...
    timerQUIZZ 0 15 sayquestion
  }
}

;réset des scores si $nick op
on @*:TEXT:!quizz.reset:%quizzchan:{
  hdel -w quizzscores *
  msg $chan Tous les scores ont été remis à 0.
}

;affiche son score
on *:text:!myscore:%quizzchan:msg $chan Tu as $iif($hget(quizzscores,$nick),$v1 points,0 point)

;on extrait le premier des scores (hash quizzscores)
alias quizzlepremier {
  unset %quizzlepremier %quizzlepremierstats
  if ($hget(quizzscores,0).item) { 
    var %h = quizzscores, %max = 0, %i = 1 
    while ($hget(%h,%i).item) { 
      var %hi = $v1 
      if ($hget(%h,%hi) > %max) { 
        var %max = $v1, %nick = %hi 
      } 
      inc %i 
    } 
    set %quizzlepremier %nick
    set %quizzlepremierstats %max 
  }
  else {
    set %quizzlepremier personne
    set %quizzlepremierstats pas de
  }
}

;afficher le premier des scores grace à quizzlepremier
on *:text:!premier:%quizzchan:{
  quizzlepremier
  msg $chan Le premier est actuellement %quizzlepremier avec %quizzlepremierstats points.
}
;détection des réponses si quizz activé
on *:TEXT:*:%quizzchan:{
  if (%quizzon) {
    if ($strip($1-,burc) == %reponse) {
      hinc quizzscores $nick
      set %winner 1
      msg $chan Félicitations $nick ( $+ $hget(quizzscores, $nick) points) tu as trouvé la bonne réponse, qui était: %reponse (On continue...)
    }
  }
}

;détection des changements de pseudo si le pseudo était un joueur alors on update son pseudo dans les quizzscores
on *:NICK:{
  if ($hget(quizzscores, $nick)) {
    hadd quizzscores $newnick $hget(quizzscores, $nick)
    hdel quizzscores $nick
  }
}

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (cs_Kentix)