begin process at 2010 02 09 22:53:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > PENDU EN @WINDOW

PENDU EN @WINDOW


 Information sur la source

Note :
Aucune note
Catégorie :Divers Classé sous :pendu, jeu, window, hashtable Niveau :Débutant Date de création :06/11/2006 Date de mise à jour :09/11/2006 12:50:02 Vu :3 985

Auteur : hisoka2501

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note


 Description

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

  • 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
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


 Historique

09 novembre 2006 12:40:17 :
Correction de petits bugs Ajout d'une fonction d'édition du fichier de mots aléatoirs depuis le script Optimisation du code
09 novembre 2006 12:50:02 :
correction dune faute de frape

 Sources du même auteur

SERVEUR FTP
TELECHARGEMENT DE FICHIER PAR PROTOCOLE HTTP 1.0 VIA SOCKET
ALIASES POUR FASCILITER L'USAGE DE MDX (FRAMEWORK)
Source avec Zip Source avec une capture MTOOLS : L'OUTIL DE MENCODER/MPLAYER
JEU DE LA DEVINETTE

 Sources de la même categorie

COMMANDES FANTAISIES ( OP DEOP , VOICE DEVOICE ) ORIGINALES par Orona
Source avec Zip Source avec une capture CORRECTEUR par Orona
Source avec Zip Source avec une capture [DLL] DESSINER COMME LES PICWINS SUR UNE DIALOGBOX (BONUS: J... par uaip
Source avec Zip Source avec une capture [DLL] AJOUT D'UN CONTRÔLE RICHEDIT SCINTILLA SUR LES DIALOG... par uaip
Source avec Zip Source avec une capture WORLDDMT - GESTION DE CAISSE V 1.0 par WorldDMT

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture LAZER (JEU EN PICWIN) par Zova
Source avec Zip Source avec une capture PACMAN ONLINE - 4 JOUEURS par wims
Source avec Zip Source avec une capture BELOTE (MULTIJOUEURS) EN PICWIN par RCA ArKanis
Source avec Zip Source avec une capture BLIND TEST (JEU EN PICWIN) + PENDU par RCA ArKanis
UN PENDU SUR IRC POUR JOUER À PLUSIEUR ! par Barsy

Commentaires et avis

Commentaire de KiNdErMaXi le 07/11/2006 22:02:05

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 ;)

Commentaire de hisoka2501 le 08/11/2006 00:14:10

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

Commentaire de wims le 08/11/2006 19:35:53

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 ?

Commentaire de hisoka2501 le 09/11/2006 12:09:28

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

Commentaire de wims le 09/11/2006 18:43:09

et les tables que tu n'utilises pas ?

Commentaire de RCA ArKanis le 10/11/2006 20:23:47

"les fautes d'orthographe font méchament mal :("
En effet, il y en a beaucoup trop :(
Par exemple "en cour" => "en cours", démarrer (il y en a beaucoup d'autres)

Ton alias pendu.eval ne sert à rien, copie l'interieur de l'alias directement dans le ON INPUT, non ?

J'avais fait un pendu en regex qui permet de rentrer des expressions, plutôt qu'uniquement des lettres. C'est un pendu pour bot.
Il remplace toutes les lettres par des _, laisse les nombres et les accents, ...
Regarde le code ici si tu veux :
www.arkanis.eu/?page=littlecode&id=19
Il compte le nombre de _ successifs et affiche (par exemple) ___(4)é___(3) _____(5) _____(6), je trouve ça pratique :)
Le tien remplace même les espaces, c'est pas terrible non ? A moins qu'il ne fonctionne qu'avec des mots, j'ai pas regardé

Commentaire de hisoka2501 le 11/11/2006 18:32:02

Ton alias pendu.eval ne sert à rien, copie l'interieur de l'alias directement dans le ON INPUT, non ? <<< chuis pas daccord :)
elle sers pour les modifications, example une persone veu adapter le code pour metre sur un channel, c'est utile

il fonctione aussis avec des phrases mais le vrais jeu du pendu ne se joue qu'avec des mots si ma mémoire est bonne

pour les espaces rien de compliqué je peu corriger ca :) mais la je  devrais passer par une regex :p
/[A-Z][a-z][0-9]/ devrais suffire :)

Commentaire de hisoka2501 le 11/11/2006 18:39:57

et les tables que tu n'utilises pas ? <<< je les ai retiré, elle servais au debut mais j'ai abandoné lidée, a present elles servent toutes

pour les fautes désolé mais je suis juste mauvais en aurtographe, pour ca faudra attendre que ma copine passe chez moi corriger mes fautes ( oui oui je sais, chuis grave)

Commentaire de wims le 15/11/2006 20:47:47

J'pense que la table avec le ctime servais a faire un crono et j'pense aussi que ne pas avoir continué l'idée est un tort

Commentaire de hisoka2501 le 17/11/2006 16:55:16

regarde la ligne 38 ;)
je vais l'utiliser a la place d'une table suplémentaire
au debut j'utilisai 0 et 1 pour faire mes comparaison mais la je fais: 0/$null ou $ctime ce qui évite de faire une table en plus
pour le chrono je ne sais pas encore su je vais l'integrer au debut je voulais metre un truc pour dire "vous avez mis tant de temp" genre $duration($calc($ctime - $pget(partie))) mais apres réflexion l'utilitée était bien faible...

Commentaire de IceTempest le 23/11/2006 20:29:52

Note : 1
Remote useless, manque d'imagination ...

Commentaire de hisoka2501 le 24/11/2006 15:15:19

Remote useless <<< en francais ?

pour le manque d'imagination sache que je ne pretents pas réinventer le jeu du pendu, juste que j'en ai fais ma version, je la partage ici en tant que present plutot que de la garder pour moi seul, si elle ne te conviens pas libre a toi de ne pas la prendre, cepdendent je te serais reconaisan de faire des commentaires plus constructifs a l'avenir, meme remarque pour l'autre source
d'avance merci

Commentaire de Arkayus le 11/12/2006 18:21:25

Voilà, pour ceux que ça interresse , j'ai mis une liste de mot que j'ai trouvé et non pas faite, en téléchargement direct sur :

http://perso.wanadoo.fr/Zen-Garden/download/dico.pour.pendu.zip

Good Game Giova'06

ps : Je cherche un dictionnaire en txt, ou si kelk1 sait comment remplir ma liste, de définitions sans ce taper des heures de copier coller sur un dico en ligne, je suis preneur.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Une aide pour un tablo [ par HatMan ] On *:open:*:{ /msg $nick 15,0[14,0Répondeur15,0]1,0 $1- /tst aline @pvmsg 4 $+ $left($nick,1) $+ 14 $+ $right($nick,$calc($len($nick)-1)) Que dois je faire dites moi? [ par VirusA ] Premierement bonjour, je vient a peine de decouvrir se site et j'avoue que non seulement j'en suis fort heureux mais que je le trouve tres co @window; dlick [ par wbr ] Salut, je voudrais savoir comme je peux faire pour que, si dans une @window je click 2 fois sur la même ligne, elle s'éfface.a+ les notices [ par HatMan ] jaimerai ke les notice dune personne aille dans une window et ke dans la windowje pensai aon *:notice:*:{ halt window @notice aline @notice $ Les @window [ par Cron0s ] Bha voila jaimerais savoir si on peut configurzer les @window genre mettre une image de fond la taille kon veut et tout et tout merci code débutant [ par rattlehead ] Bonjour,j'ai écrit ce code dans la partie remote mais ca ne fonctionne pas, quelqu'un peut-il m'éclairer?on *:TEXT:*:*:{ ;si le texte me concerne jeu pour bot ? maillon faible ? [ par MeF ] voilou j'ai déjà eu l'occasion de jouer sur irc au maillon faible.Yavait des sons qui accompagnaient le jeu, c'étaient bien sympathique, avec de nombr Recherche, qu'en pensez-vous ? [ par ScreaM ] Voici une p'tite idée que je viens d'avoir. Le but serait de reproduire le jeu du maillon faible mais sur un canal irc qui pourrait s'appeller #maillo @window dans dialog ? [ par Epsi76 ] Alors voilà:Je voudrais savoir si c possible d'incorporer une @window dans un dialog. Si oui, comment svp ?Thx d'avance :) Les draw dans la window [ par Tirane ] Bonjour, je voudrais un cours sur les draw pour la windowMerci d'avance !Tirane


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 6,614 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales