Voici une version du jeu du Pendu pour IRC. Le jeu se joue a 2 joueurs, un joueur propose un mot et l'autre tente de le trouver ^^
Source / Exemple :
alias pendu_start {
if $hget(pendu) { hfree pendu }
hmake pendu
if $sock(pendu) { echo -a 2*/pendu_start : Jeu déjà activé ! }
else {
if $2 { sockopen pendu $1 6667 | hadd pendu chan $2 }
else { echo -a 2*/pendu_start : Paramètres incomplets. }
}
}
on *:SOCKOPEN:pendu:{
if ($sockerr) { echo -a 2[Pendu] : Erreur de connection. | hfree pendu }
else {
pswr USER Pendu Pendu Pendu Pendu
pswr NICK Pendu
pswr PRIVMSG NickServ :Identify MOT-DE-PASSE
pswr PRIVMSG ChanServ :Identify $hget(pendu,chan) MOT-DE-PASSE
pswr PRIVMSG ChanServ :set $pch entrymsg Bienvenue sur $pch ! Pour lancer le jeu du pendu, tapes !jouer . Bonne chance !
pswr JOIN $pch
pswr NAMES $pch
pswr PRIVMSG $pch :[Jeu] Le jeu du pendu est initialisé ! Pour le lancer tapez !jouer
pswr PRIVMSG ChanServ :set $pch topiclock off
.timer 1 1 pswr TOPIC $pch :12,1Bienvenue sur le jeu du 8,1P4-7E4-4N4-7D4-8U4 <-->12 Etat : (3Dispo12) (4Jeu arrêté12)
.timer 1 2 pswr PRIVMSG :ChanServ set $pch topiclock on
}
}
on *:SOCKREAD:pendu:{
sockread %varpendu
tokenize 58 %varpendu
if ($gettok(%varpendu,1,32) == PING) { pswr PING $gettok(%varpendu,2,32) }
if ($gettok(%varpendu,2,32) == PRIVMSG) {
if ($gettok(%varpendu,3,32) == $pch) {
if ($2 == !jouer) {
if ($gettok($hget(pendu,etat),1,32) == on) { pswr PRIVMSG $pch :[Erreur] Un jeu est déjà en cours ! }
else {
pswr PRIVMSG ChanServ :set $pch topiclock off
pendu_delmodes
.timer 1 1 pswr TOPIC $pch :12,1Bienvenue sur le jeu du 8,1P4-7E4-4N4-7D4-8U4 <-->12 Etat : (3Dispo12) (3Jeu en cours12)
.timer 1 2 pswr PRIVMSG ChanServ :set $pch topiclock on
pswr PRIVMSG $pch :[Jeu] Le jeu vient d'être lancé par $+(,$mid($gettok(%varpendu,1,33),2,$calc($len($gettok(%varpendu,1,33)) - 1)))
hadd $sockname etat on choix
hadd $sockname joueur1 $mid($gettok(%varpendu,1,33),2,$calc($len($gettok(%varpendu,1,33)) - 1))
pswr PRIVMSG $pch :[Joueur] $hget(pendu,joueur1) : Vous devez choisir votre joueur. Pour celà, tapez !choix joueur . Vous avez une minute.
.timerchoix 1 60 pendu_arreter_jeu
}
}
if ($gettok($2,1,32) == !choix && $hget(pendu,etat) == on choix) {
if ($istok($hget(pendu,names),$gettok($2,2,32),32) && $gettok($2,2,32) != $hget(pendu,joueur1) && $gettok($2,2,32) != Pendu) {
pswr PRIVMSG $pch :[Joueur] Vous avez choisi $+(,$gettok($2,2,32))
hadd $sockname joueur2 $gettok($2,2,32)
hadd $sockname etat on choixmot
pswr PRIVMSG $pch :[Mot] $hget(pendu,joueur1) : Vous devez maintenant choisir votre mot. Pour cela, tapez /msg Pendu !mot mot . Vous avez 2 minutes.
.timermot 1 120 pendu_arreter_jeu
.timerchoix off
}
else { pswr PRIVMSG $pch :[Joueur] Ce joueur ne peut pas participer au jeu. }
}
if ($gettok($2,1,32) == !rep && $hget(pendu,etat) == on jeu && $mid($gettok(%varpendu,1,33),2,$calc($len($gettok(%varpendu,1,33)) - 1)) == $hget(pendu,joueur2)) {
if ($gettok($2,2,32) == $hget(pendu,mot)) { pswr PRIVMSG $pch :[Réponse] Bravo $hget(pendu,joueur2) vous avez gagné ! | pendu_arreter_jeu }
else {
pswr PRIVMSG $pch :[Proposition] Ce n'est pas la bonne réponse !
hdec pendu essais
if ($hget(pendu,essais) == 0) { pswr PRIVMSG $pch :[Résultat] $hget(pendu,joueur2) vous avez perdu ! Le mot était $hget(pendu,mot) | pendu_arreter_jeu }
pswr PRIVMSG $pch :[Essais] Il vous reste $hget(pendu,essais) essais.
pswr PRIVMSG $pch :[Etat] Etat actuel : $hget(pendu,decouvert)
}
}
if ($gettok($2,1,32) == !lettre && $hget(pendu,etat) == on jeu && $mid($gettok(%varpendu,1,33),2,$calc($len($gettok(%varpendu,1,33)) - 1)) == $hget(pendu,joueur2)) {
if ($len($gettok($2,2,32)) == 1) {
if ($gettok($2,2,32) isin $hget(pendu,dejadit)) {
pswr PRIVMSG $pch :[Lettre] Vous avez déjà proposé cette lettre.
hdec pendu essais
if ($hget(pendu,essais) == 0) { pswr PRIVMSG $pch :[Résultat] $hget(pendu,joueur2) vous avez perdu ! | pendu_arreter_jeu }
pswr PRIVMSG $pch :[Essais] Il vous reste $hget(pendu,essais) essais.
pswr PRIVMSG $pch :[Etat] Etat actuel : $hget(pendu,decouvert)
}
else {
if ($gettok($2,2,32) isin $hget(pendu,mot)) {
pswr PRIVMSG $pch :[Lettre] Bien joué $hget(penu,joueur2) la lettre $+(,$gettok($2,2,32),) est bien dans le mot.
var %a 1
while (%a <= $len($hget(pendu,mot))) {
if ($mid($hget(pendu,mot),%a,1) == $gettok($2,2,32)) { hadd pendu decouvert2 $+($hget(pendu,decouvert2),$gettok($2,2,32)) }
else { hadd pendu decouvert2 $+($hget(pendu,decouvert2),$mid($hget(pendu,decouvert),%a,1)) }
inc %a
}
hadd pendu decouvert $hget(pendu,decouvert2)
hdel pendu decouvert2
if ($hget(pendu,decouvert) == $hget(pendu,mot)) {
pswr PRIVMSG $pch :[Résultat] Félicitations $hget(pendu,joueur2) vous avez gagné !
pendu_arreter_jeu
}
else {
pswr PRIVMSG $pch :[Essais] Il vous reste $hget(pendu,essais) essais.
pswr PRIVMSG $pch :[Etat] Etat actuel : $hget(pendu,decouvert)
}
}
else {
pswr PRIVMSG $pch :[Lettre] La lettre $+(,$gettok($2,2,32),) n'est pas dans le mot.
hdec pendu essais
if ($hget(pendu,essais) == 0) { pswr PRIVMSG $pch :[Résultat] $hget(pendu,joueur2) vous avez perdu ! | pendu_arreter_jeu }
pswr PRIVMSG $pch :[Essais] Il vous reste $hget(pendu,essais) essais.
pswr PRIVMSG $pch :[Etat] Etat actuel : $hget(pendu,decouvert)
}
hadd pendu dejadit $+($hget(pendu,dejadit),$gettok($2,2,32))
}
}
else { pswr PRIVMSG $pch :[Lettre] Vous devez proposer une lettre. }
}
}
elseif ($gettok(%varpendu,3,32) == Pendu) {
if ($gettok($2,1,32) == !mot && $hget(pendu,etat) == on choixmot && $mid($gettok(%varpendu,1,33),2,$calc($len($gettok(%varpendu,1,33)) - 1)) == $hget(pendu,joueur1)) {
if ($verifymot($gettok($2,2,32))) {
pswr NOTICE $hget(pendu,joueur1) :Le mot $gettok($2,2,32) a été choisi.
hadd pendu mot $gettok($2,2,32)
hadd pendu etat on jeu
.timermot off
pswr MODE $pch +vv $hget(pendu,joueur1) $hget(pendu,joueur2)
pswr MODE $pch +mT
hadd pendu essais 8
hadd pendu decouvert $str(*,$len($hget(pendu,mot)))
hadd pendu dejadit
pswr PRIVMSG $pch :[Jeu] Le jeu commence ! Il vous reste $hget(pendu,essais) essais.
pswr PRIVMSG $pch :[Règles] Pour proposer un mot, tapez !rep mot et pour proposer une lettre tapez !lettre lettre
pswr PRIVMSG $pch :[Etat] Etat actuel : $hget(pendu,decouvert)
}
else { pswr NOTICE $hget(pendu,joueur1) :Le mot $gettok($2,2,32) n'existe pas, veuillez changer de mot. (attention aux accents) }
}
}
}
if ($istok(JOIN|PART|QUIT|KICK|NICK,$gettok(%varpendu,2,32),124)) { pswr NAMES $pch }
if ($gettok(%varpendu,2,32) == 353) { hadd $sockname names $remove($remove($remove($remove($remove($gettok(%varpendu,2,58),+),$chr(37)),@),&),~) }
}
on *:INPUT:#:{
if ($1 == !pendu) {
if ($2- == start) { pendu_start $server $chan }
elseif ($2- == stop) { pendu_arreter_jeu }
elseif ($2- == quit) {
pswr PRIVMSG ChanServ :set $pch entrymsg Bienvenue sur $pch ! Le jeu n'est pas dispo en ce moment...
pswr PRIVMSG ChanServ :set $pch topiclock off
.timer 1 1 pswr TOPIC $pch :12,1Bienvenue sur le jeu du 8,1P4-7E4-4N4-7D4-8U4 <-->12 Etat : (4Non - Dispo12)
.timer 1 2 pswr PRIVMSG ChanServ :set $pch topiclock on
.timer 1 3 sockclose pendu
.timer 1 3 hfree pendu
}
}
}
alias -l pendu_arreter_jeu {
pswr PRIVMSG ChanServ set $pch topiclock off
pendu_delmodes
pswr MODE $pch -mT
.timer 1 1 pswr TOPIC $pch :12,1Bienvenue sur le jeu du 8,1P4-7E4-4N4-7D4-8U4 <-->12 Etat : (3Dispo12) (4Jeu arrêté12)
.timer 1 2 pswr PRIVMSG ChanServ :set $pch topiclock on
pswr PRIVMSG $pch :[Jeu] Le jeu vient d'être stoppé. Pour le relancer tapez !jouer
.timerchoix off
.timermot off
hdel pendu joueur1
hdel pendu joueur2
hdel pendu mot
hdel pendu essais
hdel pendu decouvert
hdel pendu dejadit
hadd pendu etat off
}
alias -l verifymot return $iif($read(francais.txt,w,$+(*,$1,*)),$true,$false)
alias -l pch return $hget(pendu,chan)
alias -l pswr sockwrite -tn pendu $1-
alias -l pendu_delmodes {
var %a 1
while (%a <= $numtok($hget(pendu,names),32)) {
if ($gettok($hget(pendu,names),%a,32) == Pendu) { inc %a }
if ($remove($nick($pch,$gettok($hget(pendu,names),%a,32)).pnick,$gettok($hget(pendu,names),%a,32))) { pswr MODE $pch $+(-,$replace($ifmatch,~,q,&,a,@,o,$chr(37),h,+,v)) $str($+($gettok($hget(pendu,names),%a,32),$chr(32)),$len($ifmatch)) }
inc %a
}
}
Conclusion :
Le jeu fonctionne a partir d'une base de données de mots. Cette base de donnée doit etre appelée "francais.txt" J'en fournis une dans un zip mais vous pouvez en prendre une autre, c'est pas genant ^_^
J'ai inséré quelques commandes ChanServ dans le code. Vous devez indiquer le mot de passe du nick (Pendu) et eventuellement du chan. Notez que certaines commandes comme la modification du entrymsg ne pourront pas etre effectué si le bot n'as pas d'access sur le chan.
Commandes pour le propriétaire du bot :
!pendu start : amène le bot sur le channel actif
!pendu stop : arrète le jeu si un jeu est en cours
!pendu quit : déconnecte le bot
Tous les utilisateurs peuvent lancer le jeu en tapant !jouer
Voila ;)
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.