Pendu en @window

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 913 fois - Téléchargée 25 fois

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

Ajouter un commentaire

Commentaires

cs_KiNdErMaXi
Messages postés
1052
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
30 novembre 2009
2 -
Simpliste mais fonctionnel,

Faut faire gaffe pour le $decode (6.2 bloque d'origine, pensez à le débloquer)

Ca serai sympa que tu mette une liste de mots avec ;)
hisoka2501
Messages postés
266
Date d'inscription
lundi 19 mai 2003
Statut
Membre
Dernière intervention
7 juillet 2009
-
oui je sais pour le decode mais en fait c'était surtout pour éviter que les gens fasse: //echo -a $hget(wbs.pendu,mot)
meme si la c'est: //echo -a $decode($hget(wbs.pendu,mot),m)
c'est moin évident deja :)
pour la liste de mots je vais essayer d'en trouver une mais ca cour pas les rues apparement la
cs_wims
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1 -
Dommage que si l'on veuille jouer directement sans configuré nos propre mot, il nous affiché :
new
Une nouvelle partie vien d'etre lancée:
Il faudrait pas que ce sois a nous de crée le fichier, sinon ca n'a pas trop d'interet puisqu'on connais les mots ( ou limite permettre d'en ajouté dans le fichié directement a partir de la win )

"aline %win $wcolor(help) : Affiche cette aide"
elseif ($1 == regles) {

Sympatique, les règles ne sont pas spécifié dans l'aide, faut fouinné pour savoir que l'on peux tappé règles :/

if ($pget(try)) aline %wil Vous avez fait $pget(try) erreure(s) en le cherchant !

%wil ?

il reste un / inutile sur le on exit et les fautes d'orthographe font méchament mal :(

Sinon c'est bien, quoique tu fait souvent des /hdel enchainé, pourquoi ne pas le mettre dans un alias ?
A quoi serve les tables $hget(wbs.pendu,times) et ctime ?
hisoka2501
Messages postés
266
Date d'inscription
lundi 19 mai 2003
Statut
Membre
Dernière intervention
7 juillet 2009
-
j'y ai songé a l'alias, je pensse que je vais opter pour elle
pour "regle" c'est juste un oubli et %wil une mechante faute de frape, je corrige le script tout a leurs (je me leve la)

je vais aussis ajouoter une fonction pour editer la liste des mots, pour la liste "fournie" je ne pourais le faire que si j'en trouve une valable ce qui pour le moment n'est pas mon cas

hiers soir j'ai pas trop eu le temp de coder sur ce script car un pote m'a demandé de loader un script codé avec les pieds sur mon mirc... telement crasseu que j'ai craqué et édité le tout :s
cs_wims
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1 -
et les tables que tu n'utilises pas ?

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.