Pendu en @window

Contenu du snippet

Voila il s'agis du célebre du pendu version mirc script :)
pour le lancer:
/pendu

pour le fermer: /pendu close
ou alors: quit dans la fenetre du pendu

configuration:
creez un fichier texte a la racine de mirc ( //echo -a $mircdir si vous ignorez ou c'est )
nomez le: pendu.dico.txt

fonctionement:
Une ligne dans le fichier = 1 mot
le script choisis une ligne au hazzard dans le fichier texte
vous pouvez changer le chemin du fichier texte en éditant la variable %file = pendu.dico.txt
example: %file = c:\dico\dictionaire.txt

pour lancer une partie:
/pendu (ouvre la fenetre de jeu)
new

par defaut le nombre de tentatives infructueuses pour un mot est de 8, pour le changer éditez la variable %max

Source / Exemple :


alias pendu {
  var %win @pendu , %table = wbs.pendu
  if ($hget(%table)) hfree %table
  if ($window(%win)) window -c %win
  if ($1 != close) {
    window -e %win
    hmake %table
    pendu.help %win
  }
}
alias -l repchar return $+($iif($calc($2 -1) > 0,$mid($1,1,$calc($2 -1))),$3,$mid($1,$calc($2 +1)))
alias -l xadd hadd $1-
alias -l pget return $hget(wbs.pendu,$1-)
alias -l wcolor return $+($chr(3),04,$1-,$chr(15))
alias -l pendu.help {
  var %win = $1
  aline %win $wcolor(new) : Commence une nouvelle partie
  aline %win $wcolor(stop) : Arrete la partie en cour
  aline %win $wcolor(word) : Affiche le mot courant (celui que vous avez devoilé)
  aline %win $wcolor(clear) : Efface le contenu de la fenetre (termine aussis la partie)
  aline %win $wcolor(quit) : Ferme la fenetre
  aline %win $wcolor(help) : Affiche cette aide
  aline %win $wcolor(regles) : Affiche les regles du jeu
}
alias -l pclean {
  var %table = $1
  hdel %table partie
  hdel %table word
  hdel %table try
  hdel %table mot
}
alias -l pendu.eval {
  if ($left($1,1) == /) return
  var %win = @pendu , %table = wbs.pendu , %max = 8 , %file = pendu.dico.txt
  aline %win $+($chr(3),09,$1-,$chr(15))
  if ($1 == new) {
    if (!$pget(partie)) {
      xadd -m %table partie $ctime
      xadd %table mot $encode($read(%file),m)
      var %word = $str($chr(42),$len($decode($pget(mot),m)))
      xadd %table try 0
      xadd %table word %word
      aline %win Une nouvelle partie vien d'etre lancée: %word
    }
    else aline %win Erreur: Une partie est deja en cours, impossible d'en demarer une nouvelle, faites $wcolor(stop) pour arreter la partie en cour puis recomencez. 
  }
  elseif ($1 == stop) {
    if ($pget(partie)) {
      pclean %table
      aline %win Partie annulée.
    }
    else aline %win Erreur: Aucune partie en cours.
  }
  elseif ($1 == regles) {
    aline %win les regles sonts les suivantes:
    aline %win - Une seulle letre à la fois
    aline %win - Au bout de %max éssais vous êtes disqualifiées
    aline %win - Pour soumetre une letre il vous suffit de la tapper pendent une partie
  }
  elseif ($1 == word) {
    if ($pget(partie)) aline %win Mot: $pget(word)
    else aline %win Erreur: Aucune partie en cour.
  }
  elseif ($1 == clear) pendu
  elseif ($1 == quit) pendu close
  elseif ($1 == help) pendu.help %win
  elseif ($1 == liste) {
    if (!$2) {
      aline %win La commande list vous permet d'éditer la liste des mots du pendu les options disponibles sonts les suivantes:
      aline %win - read : vous permet de consulter la liste des mots (cela peu etre long sur de grandes listes)
      aline %win - add : Ajoute un mot fournis en parametre
      aline %win - edit : edite la liste avec le programe associé pour le type .txt
      aline %win - del : supprime le mot fournis en parametre de la liste
      aline %win syntaxe: $1 option parametre
      return
    }
    if ($2 == read) {
      .fopen pendu %file
      while ($fread(pendu)) aline %win $ifmatch
      .fclose pendu
    }
    elseif ($2 == edit) {
      if (!$exists(%file)) {
        aline %win Erreur: le fichier %file est introuvable
        return
      }
      aline %win Runing %file
      run %file
    }
    elseif ($2 == del) {
      if (!$3) aline %win Erreur: Vous devez spécifier un mot à supprimer: $1-2 mot
      elseif ($4) aline %%win Erreur: vous ne pouvez pas spécifier plus d'un mot, pour supprimez une phrase utilisez: $1-2 edit
      else {
        write -ds [ $+ [ $3 ] ] %file
        aline %win Le mot $3 à bien été supprimé.
      }
    }
    elseif ($2 == add) {
      if (!$3) aline %win Erreur: il manque un parametre: $1-2 mot
      else {
        write %file $3-
        aline %win le mot $3- à bien été ajouté
      }
    }
  }  
  elseif ($len($1-) == 1) {
    if ($pget(partie)) {
      if ($1 !isin $decode($pget(mot),m)) {
        hinc %table try
        if ($pget(try) == %max) {
          aline %win Vous avez échoué !
          aline %win La solution était: $decode($pget(mot),m)
          pclean %table
          return
        }
        aline %win La lettre $+(",$1,") N'est pas dans le mot mystere.
        aline %win Essais: $pget(try)
        aline %win Restants: $calc(%max - $pget(try))
      }
      else {
        hinc %table times
        aline %win La letre $+(",$1,") est dans le mot mystere:
        var %word = $pget(word) , %real = $decode($pget(mot),m) , %n = $count(%real,$1)
        aline %win Il y à %n $1 dans le mot
        while (%n > 0) {
          var %word = $repchar(%word,$pos(%real,$1,%n),$1)
          dec %n
        }
        xadd %table word %word
        aline %win Mot: %word
        if (%word == %real) {
          aline %win Félicitation vous avez trouvé le mot !!!
          aline %win Il s'agissai bien de %real
          if ($pget(try)) aline %win Vous avez fait $pget(try) erreure(s) en le cherchant !
          else aline %win Vous n'avez meme pas fait d'erreur en voulant le trouver !!! auriez vous triché ? ....
          pclean %table
          aline %win Faites $wcolor(new) pour demarer une nouvelle partie.
        }
      }
    }
    else aline %win Aucune partie en cour, tappez $wcolor(help) pour plus de rensseignements
  }
  else aline %win Erreur: Commande inconue
}

on *:input:@pendu:{
  pendu.eval $1-
}

on *:exit:/if ($hget(wbs.pendu)) hfree wbs.pendu

Conclusion :


voila je sais que je ne réinvente pas l'eau chaude la mais on me l'avais demandé :) et je voulais voir comment j'aurais fais ca :p

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.