Blind test (jeu en picwin) + pendu

Description

Voici ici un jeu en PicWin : le Blind Test

mIRC 6.17+ est obligatoire

Il consiste, comme la plupart d'entre vous le savent déjà, à deviner le titre et/ou le chanteur/groupe de la musique en cours de lecture, et ce le plus rapidement possible.
Les musiques doivent être stockées dans un fichier .m3u (qui peut-être créé avec Winamp par exemple).
Le jeu utilise les Tags, ça veut dire que si vous souhaitez faire un bon jeu, il faut que les flags soient clairs.
Par exemple, au lieu de Within.Temptation[2004]The.Silent.Force - 10_Within_Temptation_-_10_-_It's_The_Fear.mp3
Vous devriez avoir : Within Temptation - It's The Fear.
Pour régler les Tags avec Winamp, sélectionnez la musique puis faites "Alt + 3", ou alors clic droit, "View File Info"
Un conseil : évitez les _
Ce .m3u doit ensuite être enregistré dans le dossier mIRC (très important). Les chemins (menant vers les musiques) contenus dans ce .m3u dépendent de l'endroit où il est enregistré.

Plusieurs modes de jeu sont disponibles.
Ils permettent de modifier ce qu'on doit rentrer pour gagner la question.
Il y a donc à trouver :
Soit le titre, soit le chanteur/groupe
Le titre ET le chanteur/groupe
Uniquement le titre
Uniquement le chanteur/groupe

D'autres suppléments sont disponibles en fonction du mode activé.
Par exemple, plus de points seront accordées au titre.
Le titre peut-être donné dès le début de la question si ce qu'on cherche est le chanteur/groupe, et vice-versa
Tous les modes disposent d'une option Pendu, où la grille sera affichée dès le début. Vous pourrez y rentrer une lettre, mais aussi des mots.

Ce jeu dispose d'une aide intégrée (disponible via le menu)

Je suis d'accord que la PicWin n'est pas super super jolie, mais elle fonctionne très bien et est assez complète

Le système de score n'est qu'indicatif. Il peut néanmoins permettre de comparer le résultat de plusieurs personnes.

Tapez /blindtest pour lancer la PicWin
/blindtest uninstall pour effacer les fichiers en vue d'effacer le fichier (à faire manuellement)

Source / Exemple :


;**********
;Blind Test
;By ArKanis
;arkanis.eu
;   V1.0
;**********
alias blindtest {
  if ($1 == uninstall) {
    if ($exists(BlindTest.txt)) .remove BlindTest.txt
    if ($window(@Blind)) blind.close
    else blind.freehash
    remini Config.ini Blind
    if (!$ini(Config.ini,0)) .remove Config.ini
    echo -a Vous pouvez désormais décharger le code en tapant /unload -rs $qt($script)
  }
  elseif ($window(@Blind)) window -a @Blind
  else {
    if ($hget(Blind)) hfree Blind
    window -aBCdg0k0pRz +dl @Blind -1 -1 600 400
    drawrect -nr @Blind 0 1 0 0 600 400
    hadd -m Blind Menu1 Fichier£Jouer-Charger une playlist-Fermer
    hadd -m Blind Menu2 Options£Que répondre ?
    hadd -m Blind Menu3 Aide£Comment jouer ?-A propos
    blind.drawmenu $+(Fichier:,$hget(Blind,Menu1),¥Options:,$hget(Blind,Menu2),¥Aide:,$hget(Blind,Menu3))
    hadd -m Blind Fichier blind.start¥blind.load¥blind.close
    hadd -m Blind Options blind.config
    hadd -m Blind Aide blind.help¥blind.credits
    blind.menu.do blind.start
    drawdot @Blind
  }
}
alias -l blind.clear drawrect -fnr @Blind 16770790 1 1 16 598 383

;*****
;Close
;*****
on *:close:@Blind:{
  if (($hget(Blind,Titre)) && (!$?!="Laisser la musique en cours ?")) splay stop
  blind.freehash
}
alias -l blind.close {
  if ($window(@Blind)) window -c @Blind
  if ($window(@Blind.copy)) window -c @Blind.copy
  if (($hget(Blind,Titre)) && (!$?!="Laisser la musique en cours ?")) splay stop
  blind.freehash
}
alias -l blind.freehash {
  var %l = $iif($1-,$1-,Blind BlindButtons BlindBF BlindEdits BlindEF BlindTest), %t = $numtok(%l,32)
  while %t {
    if ($hget($gettok(%l,%t,32))) hfree $ifmatch
    dec %t
  }
}
;****
;Menu
;****
menu @Blind {
  sclick:blind.sclick $mouse.x $mouse.y
  mouse:blind.mouse $mouse.x $mouse.y
  Fermer:blind.close
}
alias -l blind.drawmenu {
  if (!$window(@Blind)) return
  drawrect -frn @Blind 16761024 1 1 1 598 15
  drawline -nr @Blind 16728128 1 1 15 599 15
  var %t = 1, %m = $numtok($1-,165), %x = 6
  hadd -m Blind Menu $1-
  while %t <= %m {
    var %q = $gettok($1-,%t,165), %e = $gettok(%q,2-,58), %p = %x, %z = $gettok(%q,1,58)
    if (!%e) var %z = $strip(%z)
    drawtext -pnr @Blind $iif(%e,0,8421504) Tahoma 10 %x 2 %z
    inc %x $calc($width($strip(%z),Tahoma,10) + 10)
    hadd -m Blind $+(PosMenu,%t) $+(%p,-,%x)
    inc %t
  }
  drawtext -nr @Blind 0 Tahoma 10 550 2 Blind Test
}
alias -l blind.menu {
  if (!$1) return
  var %h = $1-, %px = $hget(Blind,%h), %a = $hget(Blind,$remove(%h,Pos)), %x = $gettok(%px,1,45)
  if ((!%a) || (!%x)) return
  if ($hget(Blind ,SubmenuSel)) hdel Blind SubmenuSel
  hadd -m Blind SubmenuNom $strip($gettok(%a,1,163))
  var %ch = $gettok(%a,2-,163), %m = $gettok(%ch,0,45), %t = 1 ,%mpx = 0, %py = $calc(%m * 12 +5)
  while %t <= %m {
    if ($width($eval($gettok(%ch,%t,45),2),Tahoma,10) > %mpx) var %mpx = $ifmatch
    inc %t
  }
  if (%mpx) {
    inc %mpx 8
    drawrect -rn @Blind 10961427 1 $calc(%x -3) 15 %mpx %py
    drawrect -frn @Blind 16768192 1 $calc(%x -2) 16 $calc(%mpx -2) $calc(%py -2)
    var %t = 1, %y = 18
    while %t <= %m {
      var %co = $iif($hget(Blind,Main) == $gettok($hget(Blind,$hget(Blind,SubmenuNom)),%t,165),8421504,0)
      drawtext -nr @Blind %co Tahoma 10 %x %y $eval($gettok(%ch,%t,45),2)
      inc %y 12
      inc %t
    }
    hadd -m Blind Submenu %x 15 $calc(%mpx -4) $calc(%py -5) %ch
  }
}
alias -l blind.checkmenu {
  if (!$1) return
  var %t = 1, %m = $hmatch(Blind,PosMenu*,0).item
  while %t <= %m {
    var %h = $hmatch(Blind,PosMenu*,%t).item, %px = $hget(Blind,%h)
    if ($1 isnum %px) {
      if (!$hget(Blind,MenuSel)) { blind.svg | hadd -m Blind MenuSel %h }
      elseif ($hget(Blind,MenuSel) != %h) { blind.backup -n | hadd -m Blind MenuSel %h }
      else return
      hadd -m Blind Open 1
      blind.menu %h
      .break
    }
    inc %t
  }
}
alias -l blind.menu.do {
  if ($hget(Blind,Open)) hdel Blind Open
  if ($hget(Blind,Submenu)) hdel Blind Submenu
  if ($hget(Blind,MenuSel)) hdel Blind MenuSel
  blind.freehash BlindButtons BlindBF BlindEdits BlindEF BlindLists
  blind.clear
  hadd -m Blind Main $1-
  if ($1) $1-
  if ($window(@Blind)) drawdot @Blind
}
;*******
;Submenu
;*******
alias -l blind.getsub {
  if (!$2) return
  var %y = 17, %t = 0
  while %y < $1 {
    inc %y 12
    inc %t
  }
  if ((%t > $numtok($2,45)) || (!%t)) return
  return %t $gettok($2,%t,45)
}
alias -l blind.submenu.redrawline {
  if (!$4) return
  if ($hget(Blind,Main) != $gettok($hget(Blind,$hget(Blind,SubmenuNom)),$3,165)) {
    drawrect -frn @Blind 16768192 1 $calc($1 -1) $calc(17 + $3 * 12 - 11) $2 12
    drawtext -rn @Blind 0 Tahoma 10 $1 $calc(17 + $3 * 12 - 11) $4-
  }
  hdel Blind SubmenuSel
}
;***************
;Sclick & Events
;***************
alias -l blind.sclick {
  var %c
  if ($hget(Blind,Submenu)) {
    var %x = $1, %y = $2
    tokenize 32 $ifmatch
    if ($inrect(%x,%y,$1,$2,$3,$4)) {
      var %i = $blind.getsub(%y,$5-), %t = $gettok(%i,1,32), %c = 1
      if ((%c) && (%t)) blind.menu.do $gettok($hget(Blind,$hget(Blind,SubmenuNom)),%t,165)
    }
    elseif (!$inrect($1,$2,0,0,600,15)) blind.backup -n
    tokenize 32 %x %y
  }
  if ((!%c) && ($inrect($1,$2,0,0,600,15))) blind.checkmenu $1
  if (!$blind.edit(1,$1,$2)) {
    if ($hget(Blind,EditSel)) {
      .blind.edit $hget(BlindEdits,$ifmatch)
      hdel Blind EditSel
    }
  }
  var %res = $blind.id($1,$2), %id = $gettok(%res,1,32)
  if (%id == 1) {
    var %f = $sfile($mircdir *.m3u,Recherche d'un *.m3u,Sélectionner)
    blind.edit $gettok($$hget(BlindEdits,3),1-5,32) %f
  }
  elseif (%id == 2) {
    if ($remove($gettok($hget(BlindEdits,3),6-,32),$chr(124))) {
      var %f = $ifmatch
      if ((!$exists(%f)) || (!$regex(%f,\.m3u$))) drawtext -nr @Blind 0 Tahoma 12 125 345 Erreur : le fichier n'existe pas ou son extension n'est pas .m3u !
      else {
        writeini -n Config.ini Blind File %f
        blind.menu.do blind.start
      }
    }
  }
  elseif (%id == 3) {
    hadd -m Blind EditSel 3
    if (!$timer(blind.edit)) blind.chariot
  }
  elseif (%id == 4) blind.start.test
  elseif (%id == 5) blind.start.end
  elseif (%id == 6) {
    hadd -m Blind EditSel 6
    if (!$timer(blind.edit)) blind.chariot
  }
  elseif (%id == 7) blind.start.ok
  elseif (%id == 8) {
    if (!$hget(Blind,Titre)) return
    hinc -m Blind Indice
    var %o = $regsubex($replace($hget(Blind,Titre),$chr(40),<,$chr(41),>,$+($chr(32),-,$chr(32)),¥),/(<[^>]+>)/g,)
    var %a = $replace($gettok(%o,1,165),$chr(165),$+($chr(32),-,$chr(32))), %t = $replace($gettok(%o,2-,165),$chr(165),$+($chr(32),-,$chr(32)))
    var %c = $hget(Blind,Indice)
    if (((2 \\ %c) && (CG !isin $hget(Blind,Find))) || (T isin $hget(Blind,Find))) var %p = %a, %o = chanteur/groupe, %c = $calc(%c + 1)
    else var %p = %t, %o = titre
    if ($hget(Blind,Find)) var %c = $calc(%c * 4)
    var %l = $left(%p,$round(%c,0))
    blind.disp Voici le début du %o : %l
    if ($len(%l) >= %c) blind.score -0.05
  }
  elseif (%id == 9) {
    if (!$hget(Blind,Titre)) return
    blind.disp Il s'agissait de $hget(Blind,Titre)
    .blind.score -1
    blind.start.test
  }
  elseif (%id == 10) {
    var %q = $gettok(%res,2,32), %o = $gettok(T|CG T&CG T CG,%q,32)
    if (%o) writeini -n Config.ini Blind Réponses %o
    var %cg = chanteur/groupe, %t = titre, %a = Ne pas aider, %p = Pendu, %d = dès le début, %n = après une erreur
    var %l = $gettok($+($str($+(Aucune distinction¥Priorité au %t,¥Priorité au %cg,¥,%p,£),2),%a,¥Donner le %cg %d,¥Donner le %cg %n,¥,%p,£,%a,¥Donner le %t %d,¥Donner le %t %n,¥,%p),%q,163)
    var %nb = $iif($readini(Config.ini,Blind,%o),$ifmatch,1)
    blind.list 11 270 75 255 64 $puttok(%l,$+(!,$gettok(%l,%nb,165)),%nb,165)
  }
  elseif (%id == 11) {
    var %n = $gettok(%res,2,32), %o = $readini(Config.ini,Blind,Réponses)
    if (%o) writeini -n Config.ini Blind %o %n
  }
  elseif (%id == 12) blind.score set
  if ($window(@Blind)) drawdot @Blind
}
alias -l blind.subdraw {
  var %i = $3-, %t = $gettok(%i,1,32), %c = $eval($gettok(%i,2-,32),2), %g = $hget(Blind,SubmenuSel)
  if ((%g) && (%g != %t)) blind.submenu.redrawline $1 $2 %g $eval($gettok($gettok($hget(Blind,Submenu),5-,32),%g,45),2)
  if (%c) {
    if ($hget(Blind,Main) != $gettok($hget(Blind,$hget(Blind,SubmenuNom)),%t,165)) {
      hadd -m Blind SubmenuSel %t
      drawrect -frn @Blind 13731930 1 $calc($1 -1) $calc(17 + %t * 12 - 11) $2 12
      drawtext -rn @Blind 16445674 Tahoma 10 $1 $calc(17 + %t * 12 - 11) %c
    }
  }
}
alias -l blind.mouse {
  var %c
  if ($hget(Blind,Submenu)) {
    var %x = $1, %y = $2, %g = $hget(Blind,SubmenuSel)
    tokenize 32 $ifmatch
    if ($inrect(%x,%y,$1,$2,$3,$4)) {
      var %i = $blind.getsub(%y,$5-), %c = $eval($gettok(%i,2-,32),2)
      blind.subdraw $1 $3 %i
    }
    elseif (%g) blind.submenu.redrawline $1 $3 %g $eval($gettok($gettok($hget(Blind,Submenu),5-,32),%g,45),2)
    tokenize 32 %x %y
  }
  if ((!%c) && ($inrect($1,$2,0,0,600,15)) && ($hget(Blind,Open))) blind.checkmenu $1
  if ($blind.button(1,$1,$2)) noop
  elseif ($hget(BlindBF,0).item) {
    while $hget(BlindBF,1).item {
      var %h = $hget(BlindBF,$ifmatch)
      hdel BlindBF $ifmatch
      blind.button %h
    }
  }
  if ($blind.edit(1,$1,$2)) noop
  elseif ($hget(BlindEF,0).item) {
    while $hget(BlindEF,1).item {
      var %h = $hget(BlindEF,$ifmatch)
      hdel BlindEF $ifmatch
      blind.edit %h
    }
  }
  drawdot @Blind
}
;*************
;Save & Backup
;*************
alias -l blind.svg {
  if (!$window(@Blind)) return
  if (!$window(@Blind.copy)) window -BCdg0hk0npRz +d @Blind.copy -1 -1 600 400
  drawcopy @Blind 0 0 600 400 @Blind.copy 0 0 600 400
}
alias -l blind.backup {
  if (!$window(@Blind)) return
  if (!$window(@Blind.copy)) return
  if ($hget(Blind,Submenu)) hdel Blind Submenu
  if ($hget(Blind,MenuSel)) hdel Blind MenuSel
  if ($hget(Blind,Open)) hdel Blind Open
  drawcopy $iif($1,$1) @Blind.copy 0 0 600 400 @Blind 0 0 600 400
}
;*************
;Blind Aliases
;*************
;ID
alias -l blind.start {
  if (!$window(@Blind)) return
  var %f = $readini(Config.ini,Blind,File)
  if (($exists(%f)) && ($regex(%f,\.m3u$))) {
    drawtext -nr @Blind 0 Tahoma 12 20 375 Fichier de données : %f
    drawtext -nor @Blind 0 Tahoma 12 265 20 Ecran de jeu
    var %c = $readini(Config.ini,Blind,Réponses), %p = soit le titre, soit le chanteur/groupe
    if (%c == T&CG) var %p = le titre et le chanteur/groupe
    elseif (%c == T) var %p = le titre
    elseif (%c == CG) var %p = le chanteur/groupe
    if (!%c) writeini -n Config.ini Blind Réponses T|CG
    drawtext -nr @Blind 0 Tahoma 12 35 55 Le but du jeu est de trouver %p
    blind.button 4 90 305 100 20 $iif($hget(Blind,Titre),Musique suivante,Commencer)
    blind.button 5 410 305 100 20 Stopper
    blind.edit 6 50 75 420 20
    blind.button 7 475 75 80 20 Valider
    blind.button 8 90 345 100 20 Aide
    blind.button 9 410 345 100 20 Réponse
    blind.button 12 250 355 100 20 Remettre à zéro
    blind.score
    drawrect -nr @Blind 0 1 50 105 505 183
    drawrect -fnr @Blind 16777215 1 51 106 503 181
  }
  else blind.load
}
alias -l blind.score {
  if ($1 == set) {
    hadd -m Blind Score 0
    hadd -m Blind Total 0
  }
  else hadd -m Blind Score $calc($hget(Blind,Score) + $1)
  if ($hget(Blind,Main) != blind.start) return
  if (!$show) hinc -m Blind Total
  var %t = $round($hget(Blind,Score),2) pts en $hget(Blind,Total) $+(musique,$iif($hget(Blind,Total) > 1,s))
  drawrect -fnr @Blind 16770790 1 10 330 580 15
  drawtext -nr @Blind 0 Tahoma 12 $calc((600 - $width(%t,Tahoma,12))/2) 330 %t
}
alias -l blind.start.test {
  if (!$window(@Blind)) return
  splay stop
  var %k = $hget(Blind,Titre), %t = %k, %f = $readini(Config.ini,Blind,File), %l = $lines(%f), %b = 0
  if (%l <= 6) {
    blind.disp Veuillez mettre plus de musiques dans votre .m3u !
    blind.button 4 90 305 100 20 Arrêté
  }
  hadd -m BlindBF 4 90 305 100 20 Musique suivante
  if ($hget(Blind,Main) == blind.start) {
    blind.button 4 90 305 100 20 Musique suivante
    blind.disp Une musique vient de commencer
  }
  hadd -m Blind Indice 0
  drawdot @Blind
  if (!%k) blind.score set 0
  else .blind.score
  while (((%k == %t) || (!$exists(%d))) && (%b <= 50)) {
    var %r = $r(2,%l), %c = $read(%f,n,%r)
    if ($left(%c,7) != #EXTINF) { dec %r | var %d = %c, %c = $read(%f,n,%r), %t = $gettok(%c,2-,44) }
    else var %t = $gettok($read(%f,n,%r),2-,44), %d = $read(%f,n,$calc(%r +1))
    if ($left(%c,7) != #EXTINF) var %d, %t = %k
    inc %b
  }
  if (%b >= 50) {
    blind.disp Aucune musique possédant un tag n'a pu être trouvée en 50 essais.
    return
  }
  var %q = $readini(Config.ini,Blind,Réponses)
  hadd -m Blind Réponses %q
  write BlindTest.txt %t - %d
  hadd -m Blind Titre %t
  hadd -m Blind Zic $nopath(%d)
  if ($hget(Blind,Find)) hdel Blind Find
  if ($hget(Blind,Pendu2)) hdel Blind Pendu2
  if ($hget(Blind,Pendu)) hdel Blind Pendu
  var %o = $regsubex($replace($hget(Blind,Titre),$chr(40),<,$chr(41),>,$chr(91),<,$chr(93),>,$+($chr(32),-,$chr(32)),¥),/(<[^>]+>)/g,)
  var %a = $replace($gettok(%o,1,165),$chr(165),$+($chr(32),-,$chr(32))), %t = $replace($gettok(%o,2-,165),$chr(165),$+($chr(32),-,$chr(32)))
  if ($istok(T CG,%q,32)) {
    if (%q == T) {
      if ($readini(Config.ini,Blind,%q) == 2) blind.disp Le chanteur/groupe est %a
      hadd -m Blind Find CG
    }
    else {
      if ($readini(Config.ini,Blind,%q) == 2) blind.disp Le titre est %t
      hadd -m Blind Find T
    }
  }
  if ($readini(Config.ini,Blind,%q) == 4) {
    if (%q == T) hadd -m Blind Pendu %t
    elseif (%q == CG) hadd -m Blind Pendu %a
    else hadd -m Blind Pendu %a - %t
    var %r = $regsubex($hget(Blind,Pendu),/[a-z]/ig,_)
    blind.disp $regsubex(%r,/(_+)/g,$+($str(_,$len(\t)),$chr(40),$len(\t),$chr(41)))
  }
  splay $shortfn(%d)
  hadd -m Blind Ticks $ticks
}
alias -l blind.start.end {
  splay stop
  if ($hget(Blind,Titre)) hdel Blind Titre
  hadd -m BlindBF 4 90 305 100 20 Reprendre
  blind.button 4 90 305 100 20 Reprendre
}
alias -l blind.start.ok {
  if (!$window(@Blind)) return
  var %i = $hget(Blind,EditSel), %c = $hget(BlindEdits,%i), %e = $replace($remove($gettok(%c,6-,32),$chr(124)),$chr(165),$chr(32))
  hadd -m BlindEdits %i $gettok(%c,1-5,32) $chr(124)
  blind.edit $hget(BlindEdits,%i)
  if (%e) {
    var %o = $regsubex($replace($hget(Blind,Titre),$chr(40),<,$chr(41),>,$+($chr(32),-,$chr(32)),¥),/(<[^>]+>)/g,)
    var %a = $replace($gettok(%o,1,165),$chr(165),$+($chr(32),-,$chr(32))), %t = $replace($gettok(%o,2-,165),$chr(165),$+($chr(32),-,$chr(32)))
    var %q = $hget(Blind,Réponses), %x = $calc(($ticks - $hget(Blind,Ticks))/1000), %ticks = en $+($round(%x,2),s)
    var %sc = $calc(15 / (%x * ($hget(Blind,Indice) * 0.5 +1)))
    if ($hget(Blind,Pendu)) {
      if (%e isin $hget(Blind,Pendu)) {
        if ($hget(Blind,Pendu2)) var %r = $ifmatch
        else var %r = $replacex($regsubex($hget(Blind,Pendu),/[a-z]/ig,_),+,\+)
        var %p = $pos($hget(Blind,Pendu),%e,0)
        while %p {
          var %s = $calc($pos($hget(Blind,Pendu),%e,%p) -1), %m = $+(/^,$left(%r,%s),$chr(40),$str(.,$len(%e)),$chr(41),/i), %r = $regsubex(%r,%m,$+($left(%r,%s),%e))
          dec %p
        }
        if (%r != $hget(Blind,Pendu2)) {
          blind.disp Pendu : %r
          hadd -m Blind Pendu2 %r
        }
        if ($pos($hget(Blind,Pendu),_,0) == $pos(%r,_,0)) {
          blind.disp Bravo, vous avez réussi ce pendu !
          blind.disp Il s'agit de %a - %t
          blind.start.test
          .blind.score %sc
        }
        elseif ($hget(Blind,Réponses) == T|CG) {
          var %r = $replace($hget(Blind,Pendu2),$+($chr(32),-,$chr(32)),¥)
          var %a2 = $gettok(%r,1,165), %t2 = $replace($gettok(%r,2,165),2-,165),$chr(165),$+($chr(32),-,$chr(32))), %w
          if (%a2 == %a) {
            blind.disp Bravo, vous avez trouvé le chanteur/groupe %ticks
            if ($readini(Config.ini,Blind,%q) == 3) blind.score %sc
            var %w = 1
          }
          elseif (%t2 == %t) {
            if ($readini(Config.ini,Blind,%q) == 2) blind.score %sc
            blind.disp Bravo, vous avez trouvé le titre %ticks
            var %w = 1
          }
          if (%w) {
            blind.disp Il s'agit de %a - %t
            blind.start.test
            .blind.score %sc
          }
        }
      }
    }
    elseif (%q = T&CG) {
      if (%e isin %a) {
        if ((%e == %a) && (CG !isin $hget(Blind,Find))) {
          blind.disp Vous avez trouvé le chanteur/groupe %ticks
          if ($hget(Blind,Find)) {
            blind.disp Il s'agit de %a - %t
            blind.start.test
            .blind.score %sc
          }
          else {
            blind.score $iif($readini(Config.ini,Blind,%q) == 3),$calc(%sc *2),%sc)
            hadd -m Blind Find CG
            blind.disp Il vous reste encore le titre à trouver !
          }
        }
        else blind.disp Vous venez de trouver une partie du chanteur/groupe : %e
      }
      elseif ((%e isin %t) && (T !isin $hget(Blind,Find))) {
        if (%e == %t) {
          if ($hget(Blind,Find)) {
            blind.disp Bravo ! Vous avez trouvé le titre %ticks
            blind.disp Il s'agit de %a - %t
            .blind.score %sc
            blind.start.test
          }
          else {
            blind.score $iif($readini(Config.ini,Blind,%q) == 2),$calc(%sc *2),%sc)
            blind.score %sc
            blind.disp Il vous reste encore le chanteur/groupe à trouver !
            hadd -m Blind Find T
          }
        }
        else blind.disp Vous venez de trouver une partie du titre : %e
      }
      else {
        blind.disp %e n'est ni dans le titre, ni dans le nom du chanteur/groupe
        .blind.score
      }
    }
    elseif (%q == T) {
      if (%e == %t) {
        blind.disp Bravo ! Vous avez trouvé le titre : %t
        blind.disp Il s'agit de %a - %t
        .blind.score %sc
        blind.start.test

      }
      elseif (%e isin %t) blind.disp Vous avez trouvé une partie du titre : %e
      else blind.disp %e n'est pas dans le titre !
      if (!$hget(Blind,Find)) {
        hadd -m BlindFind CG
        if ($readini(Config.ini,Blind,OptionT) == 3) blind.disp Le chanteur/groupe est %a
      }
    }
    elseif (%q == CG) {
      if (%e == %a) {
        blind.disp Bravo ! Vous avez trouvé le chanteur/groupe : %a
        blind.disp Il s'agit de %a - %t
        .blind.score %sc
        blind.start.test
      }
      elseif (%e isin %a) blind.disp Vous avez trouvé une partie du chanteur/groupe : %e
      else blind.disp %e n'est pas dans le chanteur/groupe !
      if (!$hget(Blind,Find)) {
        hadd -m BlindFind T
        if ($readini(Config.ini,Blind,%q) == 3) blind.disp Le titre est %t
      }
    }
    else {
      if (%e isin %a) {
        if (%e == %a) {
          blind.disp Bravo ! Vous avez trouvé le chanteur/groupe : %a %ticks
          blind.disp Il s'agit de %a - %t
          blind.start.test
          .blind.score %sc
        }
        else blind.disp Vous venez de trouver une partie du chanteur/groupe : %e
      }
      elseif (%e isin %t) {
        if (%e == %t) {
          blind.disp Bravo ! Vous avez trouvé le titre : %t %ticks
          blind.disp Il s'agit de %a - %t
          .blind.score %sc
          blind.start.test
        }
        else blind.disp Vous venez de trouver une partie du titre : %e
      }
      else {
        blind.disp %e n'est ni dans le titre, ni dans le nom du chanteur/groupe
        .blind.score
      }
    }
  }
  drawdot @Blind
}
alias -l blind.load {
  if (!$window(@Blind)) return
  blind.button 1 470 195 100 20 Parcourir
  blind.button 2 250 235 100 20 Sélectionner
  blind.edit 3 50 195 415 20 $readini(Config.ini,Blind,File)

  drawtext -nr @Blind 0 Tahoma 12 178 100 Indiquez le chemin menant à un fichier .m3u
  drawtext -nr @Blind 0 Tahoma 12 191 120 Ce .m3u contient une liste de musiques
  drawtext -nr @Blind 0 Tahoma 12 54 140 Veuillez vous assurer que les Tags sont corrects (propres) avec un logiciel tel que Winamp
}
alias blind.config {
  if (!$window(@Blind)) return
  drawtext -nr @Blind 0 Tahoma 12 24 45 Quelle partie de la musique faut-il donner ou sous quelle forme ?
  var %o = $readini(Config.ini,Blind,Réponses)
  var %l = Titre ou Chanteur/Groupe¥Titre et Chanteur/Groupe¥Titre¥Chanteur/Groupe, %g = $iif($findtok(T|CG T&CG T CG,%o,1,32),$ifmatch,1)
  blind.list 10 40 75 155 64 $instok($deltok(%l,%g,165),$+(!,$gettok(%l,%g,165)),%g,165)
  var %cg = chanteur/groupe, %t = titre, %a = Ne pas aider, %p = Pendu, %d = dès le début, %n = après une erreur
  var %l = $gettok($+($str($+(Aucune distinction¥Priorité au %t,¥Priorité au %cg,¥,%p,£),2),%a,¥Donner le %cg %d,¥Donner le %cg %n,¥,%p,£,%a,¥Donner le %t %d,¥Donner le %t %n,¥,%p),%g,163)
  var %nb = $iif($readini(Config.ini,Blind,%o),$ifmatch,1)
  blind.list 11 270 75 255 64 $puttok(%l,$+(!,$gettok(%l,%nb,165)),%nb,165)
  drawtext -nr @Blind 0 Tahoma 12 137 255 Note : les changements s'opèreront à la prochaine musique
}
alias -l blind.help {
  if (!$window(@Blind)) return
  drawtext -nor @Blind 0 Tahoma 12 286 20 Aide
  var %o = drawtext -nr @Blind 0 Tahoma 12 40
  %o 50 Le BlindTest consiste à trouver le titre/chanteur/groupe des musiques en cours de lecture
  %o 70 Ce jeu nécessite un .m3u (c'est en fait une liste de musiques)
  %o 90 Pour en créer une, lancez Winamp (ou un autre logiciel de lecture de musiques)
  %o 110 Assurez vous que les tags sont bien remplis (et propre). Les _ sont déconseillés
  %o 130 Le jeu dépend de ces tags. Les réponses seront introuvables s'ils ne sont pas propres
  %o 150 Une fois votre liste prête, enregistrez la au format m3u et placez la dans votre dossier mIRC
  %o 170 S'il n'est pas dans votre dossier mIRC, quelques musiques pourraient être injouables
  %o 190 En effet, le chemin des musiques dépend de l'endroit où est enregistré le .m3u
  %o 210 Chargez le .m3u à l'aide de la PicWin puis configurez le jeu
  %o 230 Les différentes options permettent de pouvoir répondre ce que l'on veut à savoir :
  drawtext -nr @Blind 0 Tahoma 12 50 250 titre, artiste, les deux, un des deux
  %o 270 Un supplément est disponible en fonction du mode
  %o 290 Donner une priorité revient à accorder plus de points si l'on trouve le champ indiqué
  %o 310 Le pendu affiche le mot masqué, et fonctionne comme un vrai pendu
  %o 330 Vous pouvez donner des lettres mais aussi des mots entiers
  %o 370 Je vous souhaite bonne chance avec ce Blind Test :)
}
alias -l blind.credits {
  if (!$window(@Blind)) return
  drawtext -nor @Blind 0 Tahoma 12 272 20 A propos
  drawtext -nr @Blind 0 Tahoma 12 40 85 Jeu codé et imaginé par ArKanis (08/2006)
  drawtext -nr @Blind 0 Tahoma 12 40 105 Cette PicWin fait partie de l'add-on PicWins disponible avec Script-ArKanis
  drawtext -nr @Blind 0 Tahoma 12 40 125 Plus d'infos, codes, ... www.arkanis.eu
  drawtext -nr @Blind 0 Tahoma 12 40 165 Merci à mes testeurs Wims et Damon
  drawtext -pnr @Blind 0 Tahoma 12 40 205 Contact :
  drawtext -nr @Blind 0 Tahoma 12 50 225 Mail : arkanisfr@free.fr
  drawtext -nr @Blind 0 Tahoma 12 50 245 IRC : #arkanis @Quakenet
  drawtext -nr @Blind 0 Tahoma 12 40 285 Merci de me contacter si vous trouvez un bug
  drawtext -nr @Blind 0 Tahoma 12 40 305 N'hésitez pas à me contacter si vous avez des questions
}
;****
;Draw
;****
alias -l blind.button {
  if (!$window(@Blind)) return
  var %g = 1, %r = ^[0-9]+ [0-9]+ [0-9]+$
  if (!$regex($1-3,%r)) return
  if ($isid) {
    var %x = $2, %y = $3, %t = $hget(BlindButtons,0).item
    while %t {
      tokenize 32 $hget(BlindButtons,%t).data
      if ($inrect(%x,%y,$2,$3,$4,$5)) break
      dec %t
    }
    if (!%t) var %g = 0
    else hadd -m BlindBF $1 $1-
  }
  if (%g) {
    if (!$regex($3-5,%r)) return
    hadd -m BlindButtons $1 $1-
    drawrect -nr @Blind $iif($isid,0,16742520) 1 $2-5
    drawrect -fnr @Blind $iif($isid,16737380,16757940) 1 $calc($2 +1) $calc($3 +1) $calc($4 -2) $calc($5 -2)
    if ($6-) drawtext -nr @Blind $iif($isid,16777215,0) Tahoma 12 $calc($2 + ($4 - $width($6-,Tahoma,12))/2) $calc($3 + 3) $6-
    return $1
  }
}
alias -l blind.edit {
  if (!$window(@Blind)) return
  var %g = 1, %r = ^[0-9]+ [0-9]+ [0-9]+$, %o
  if (!$regex($1-3,%r)) return
  if ($isid) {
    var %x = $2, %y = $3, %t = $hget(BlindEdits,0).item
    while %t {
      tokenize 32 $hget(BlindEdits,%t).data
      if ($inrect(%x,%y,$2,$3,$4,$5)) break
      dec %t
    }
    if (!%t) var %g = 0
    else hadd -m BlindEF $1 $1-
  }
  if (%g) {
    if (!$regex($3-5,%r)) return
    hadd -m BlindEdits $1 $1-5 $iif($chr(124) !isin $6-,$+($6-,$chr(124)),$6-)
    if ($hget(BlindEF,$1)) var %o = 1
    drawrect -nr @Blind $iif(%o,0,16777215) 1 $2-5
    drawrect -fnr @Blind $iif(%o,16737380,16755370) 1 $calc($2 +1) $calc($3 +1) $calc($4 -2) $calc($5 -2)
    var %re = $replace($remove($6-,$chr(124)),$chr(165),$chr(32))
    if ((%re) && (%re != $chr(32))) drawtext -nr @Blind $iif(%o,16777215,0) Tahoma 12 $calc($2 +4) $calc($3 + 3) %re
    if (($isid) || ($show)) noop $blind.chariot($1)
    return $1
  }
}
alias -l blind.list {
  var %g = 1, %r = ^[0-9]+ [0-9]+ [0-9]+$, %o
  if (!$regex($1-3,%r)) return
  if ($isid) {
    var %x = $2, %y = $3, %t = $hget(BlindLists,0).item
    while %t {
      tokenize 32 $hget(BlindLists,%t).data
      if ($inrect(%x,%y,$2,$3,$4,$calc($5 -1))) break
      dec %t
    }
    if (!%t) var %g = 0
    else {
      var %li = $int($calc((%y -2 - $3) / 15 +1)), %l = $remove($6-,!), %g = 1
      tokenize 32 $1-5 $instok($deltok(%l,%li,165),$+(!,$gettok(%l,%li,165)),%li,165)
      if (%li <= 0) var %g = 0
    }
  }
  if (%g) {
    if (!$regex($3-5,%r)) return
    drawrect -nr @Blind 0 1 $2-5
    drawrect -fnr @Blind 16777215 1 $calc($2 +1) $calc($3 +1) $calc($4 -2) $calc($5 -2)
    hadd -m BlindLists $1 $1-
    var %y = $calc($3 +2), %my = $calc($3 + $5 +15), %l = $calc($4 -6), %x = $calc($2 +3), %id = $1
    tokenize 32 $6-
    var %t = 1, %m = $numtok($1-,165)
    while ((%t <= %m) && (%y <= %my)) {
      if ($gettok($1-,%t,165)) {
        var %q = $ifmatch
        if ($remove(%q,!)) {
          if (! isin %q) drawrect -fnr @Blind 16761024 1 $calc(%x - 2) $calc(%y -1) $calc(%l + 4) 17
          drawtext -cnr @Blind 0 Tahoma 12 %x %y %l 15 $remove(%q,!)
        }
      }
      inc %t
      inc %y 15
    }
    return %id %li
  }
}
alias -l blind.id {
  if ($blind.button(1,$$1,$$2)) return $ifmatch
  elseif ($blind.edit(1,$$1,$$2)) return $ifmatch
  else return $blind.list(1,$$1,$$2)
}
on *:keydown:@Blind:*:{
  if ($keyval == 27) {
    if ($hget(Blind,MenuSel)) blind.backup
    else blind.close
    return
  }
  if (!$hget(Blind,EditSel)) {
    if ($findtok(f o a,$keychar,1,32)) {
      var %n = $+(PosMenu,$ifmatch)
      if (!$hget(Blind,MenuSel)) {
        blind.svg
        hadd -m Blind MenuSel %n
      }
      if ($hget(Blind,MenuSel) != %n) {
        blind.backup -n
        hadd -m Blind MenuSel %n
      }
      blind.menu %n
    }
    elseif ($istok(37 39,$keyval,32)) {
      if ($hget(Blind,MenuSel)) {
        var %n = $calc($remove($hget(Blind,MenuSel),PosMenu) + $keyval - 38), %o = $+(PosMenu,%n), %m = $+(1-,$numtok($hget(Blind,Menu),165))
        if (%n isnum %m) {
          blind.backup -n
          hadd -m Blind MenuSel %o
          blind.menu %o
        }
      }
      else {
        blind.svg
        var %o = $+(PosMenu,$abs($calc($keyval - 40)))
        hadd -m Blind MenuSel %o
        blind.menu %o
      }
    }
    elseif ($istok(38 40,$keyval,32)) {
      if (!$hget(Blind,Submenu)) return
      var %i = $calc($hget(Blind,SubmenuSel) + $calc($keyval - 39))
      if (%i > $gettok($hget(Blind,$+(Menu,$remove($hget(Blind,MenuSel),PosMenu))),0,45)) var %i = $v2
      elseif (%i < 1) var %i = 1
      blind.subdraw $gettok($hget(Blind,Submenu),1,32) $gettok($hget(Blind,Submenu),3,32) %i $gettok($gettok($hget(Blind,Submenu),5-,32),%i,45)
      hadd -m Blind SubmenuSel %i
    }
    elseif ($keyval == 13) {
      tokenize 32 $hget(Blind,Submenu)
      var %t = $hget(Blind,SubmenuSel)
      if (!%t) return
      blind.backup -n
      if ($hget(Blind,Main) != $gettok($hget(Blind,$hget(Blind,SubmenuNom)),%t,165)) .timer -h 1 100 blind.menu.do $v2
      drawdot @Blind
    }
    drawdot @Blind
    return
  }
  if ($istok(9,$keyval,32)) return
  var %e = $hget(Blind,EditSel)
  if (($hget(Blind,MenuSel)) || (!%e)) return
  tokenize 32 $hget(BlindEdits,%e)
  var %h = hadd -m BlindEdits %e $1-5
  if ($keyval == 221) hadd -m Blind Remember $iif($mouse.key & 4,¨,^)
  elseif ($keyval == 13) $+($hget(Blind,Main),.ok) $remove($6-,$chr(124))
  elseif ($hget(Blind,EditSel)) {
    if ($keyval == 8) {
      if ($left($6-,1) == $chr(124)) return
      else %h $+($left($gettok($6-,1,124),-1),$chr(124),$gettok($6-,2,124))
    }
    elseif ($keyval == 46) {
      if ($left($6-,1) == $chr(124)) %h $replace($+($chr(124),$right($6-,-2)),$chr(32),$chr(165))
      else %h $replace($+($gettok($6-,1,124),$chr(124),$right($gettok($6-,2,124),-1)),$chr(32),$chr(165))
    }
    elseif ($istok(37 39,$keyval,32)) {
      var %p = $calc($pos($6-,$chr(124)) $iif($keyval == 37,-2)), %c = $remove($6-,$chr(124))
      if (($keyval == 37) && (%p == 0)) %h $replace($+($chr(124),%c),$chr(32),$chr(165))
      elseif (%p < 0) return
      else %h $replace($+($left(%c,%p),$chr(124),$right(%c,$+(-,%p))),$chr(32),$chr(165))
    }
    elseif ($keyval == 35) %h $replace($+($remove($6-,$chr(124)),$chr(124)),$chr(32),$chr(165))
    elseif ($keyval == 36) %h $replace($+($chr(124),$remove($6-,$chr(124))),$chr(32),$chr(165))
    elseif ($keychar != $null) {
      var %a = $keychar
      if ($istok(¨-^,$hget(Blind,Remember),45)) {
        var %b = $findtok(a-e-i-o-u,$keychar,45)
        if (%b) {
          if ($hget(Blind,Remember) == ¨) var %l = ä-ë-ï-ö-ü
          else var %l = â-ê-î-ô-û
          var %a = $gettok(%l,%b,45)
        }
      }
      if ($hget(Blind,Remember)) hdel Blind Remember
      if ($left($6-,1) == $chr(124)) %h $replace($+(%a,$chr(124),$gettok($6-,1,124)),$chr(32),$chr(165))
      else %h $replace($+($gettok($6-,1,124),%a,$chr(124),$gettok($6-,2,124)),$chr(32),$chr(165))
    }
    else return
    hadd -m Blind Temp 1
    blind.edit $hget(BlindEdits,%e)
    drawdot @Blind
  }
}
alias -l blind.chariot {
  if (($window(@Blind)) && ($hget(Blind,EditSel))) {
    var %i = $ifmatch, %e = $hget(BlindEdits,%i)
    if (!$isid) {
      .timerblind.edit -m 1 500 blind.chariot
      hinc -m Blind Temp
      var %o = $hget(Blind,Temp)
    }
    else var %o = $iif($hget(Blind,Temp),1,9)
    .blind.edit $hget(BlindEdits,$hget(Blind,EditSel))
    if (%o <= 1) {
      tokenize 32 %e
      var %b = $6-, %p = $pos(%b,$chr(124))
      if (%p) var %x = $calc($2 -1 + $width($left($replace(%b,$chr(165),$chr(32)),$calc(%p)),Tahoma,12))
      else var %x = $calc($2 +4)
      drawline -nr @Blind $iif($hget(BlindEF,%i),16777215,0) 1 %x $calc($3 + 3) %x $calc($3 + $5 -3)
    }
    else hadd -m Blind Temp 0
    drawdot @Blind
  }
  else {
    .timerblind.edit off
    hadd -m Blind Temp 0
  }
}
alias -l blind.disp {
  if (!$window(@Blind)) return
  if ($hget(Blind,Main) != blind.start) return
  drawcopy -n @Blind 51 121 503 168 @Blind 51 106
  drawrect -fnr @Blind 16777215 1 51 271 503 16
  drawtext -cpnr @Blind 0 Tahoma 12 53 272 501 20 $$1-
}
on *:MP3END:{
  if (($window(@Blind)) && ($hget(Blind,Titre))) {
    blind.disp Il s'agissait de $hget(Blind,Titre)
    .blind.score
    blind.start.test
  }
}

Conclusion :


Si vous avez des problèmes, envoyez un commentaire sur cette page
Cette PicWin fait partie du remote PicWins disponibles avec mon add-on (www.arkanis.eu)

Le système de pendu tient sur peu de lignes (vu l'utilisation de $regsubex), j'en ai fait un petit jeu rapide pour ceux que ça interesse : http://arkanisfr.free.fr/ArKanis/index.php?page=littlecode&id=19
Il fonctionne comme ceci : !pendu <#salon> <mot|phrase>
puis ensuite sur le #salon : !pendu <lettre|mots|phrase>

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.