Jeu de la devinette

Contenu du snippet

le but du jeu est de deviner un nombre mystere, il se joue seul (pour le moment car lidée d'implementer un mode deux joueurs vien de me prendre !)

il se lance par: /start.play
il se deroulle dans une @window pour éviter de pourir une fenetre de serveur ou de chan ou defile votre vie sociale, heu les converses ircéenes...

Source / Exemple :


on *:start:{
  if ($hget(wbs.devinete)) hfree wbs.devinete
}
alias -l wbs.devinete.show.version {
  aline $1 Script devinete version: 1.2 par Adamaru alias Chr0nos
  aline $1 Contact: #xiato@irc.dreams-fr.net
}
alias -l wcolor return $+($chr(3),04,$1-,$chr(15))
alias -l wbs.devinete.show.help {
  var %win = $1 , %table = $2
  aline %win Aide
  aline %win $wcolor(new) : Commencer une nouvelle partie
  aline %win $wcolor(stop) : Arreter la partie en cour
  aline %win $wcolor(clear) : Efface la fenetre en cour
  aline %win $wcolor(version) : Affiche la version du script
  aline %win $wcolor(setmax) : Vous permet de determiner le nombre max à deviner (1000000 par defaut) $iif($hget(%table,max),[Actuel: $ifmatch $+ $chr(93))
  aline %win $wcolor(solution) : Donne la solution mais met un terme à la partie en cours
  aline %win $wcolor(help) : Affiche l'aide
  aline %win $wcolor(quit) : fermer
  if ($hget(%table,partie)) aline %win Une partie est actuelement en cours
}
alias start.play {
  if ($hget(wbs.devinete)) hfree wbs.devinete
  hmake wbs.devinete
  var %win = @devinette
  if ($window(%win)) window -c %win
  window -e %win
  wbs.devinete.show.help %win wbs.devinete
}
on *:input:@:{
  if ($active == @devinette) {
    var %win = @devinette , %table = wbs.devinete
    aline %win $1- 
    if ($1 == new) {
      if (!$hget(%table,partie)) {
        var %max = $iif($hget(%table,max),$ifmatch,1000000)
        aline %win Nouvelle partie.
        aline %win Entrez un nombre entre 1 et %max
        hadd -m %table num $encode($rand(1,%max),m)
        hadd %table partie 1
        hadd %table ctime $ctime
      }
      else aline %win Une partie est deja en cours: demande rejetée, faites " $+ $wcolor(stop) $+ " pour arreter la partie
    }
    elseif ($1 == stop) {
      if ($hget(%table,partie)) {
        hadd %table partie 0
        hdel %table num
        aline %win Partie annulée.
        wbs.devinete.show.help %win %table
      }
      else aline %win Aucune partie en cours: demande rejetée
    }
    elseif ($1 == help) wbs.devinete.show.help %win %table
    elseif ($1 == version) wbs.devinete.show.version %win
    elseif ($1 == clear) {
      window -c %win
      window -e %win
      wbs.devinete.show.help %win %table
    }
    elseif ($1 == solution) {
      if ($hget(%table,partie)) {
        aline %win La solution était: $decode($hget(%table,num),m)
        aline %win Vous aviez tenté $hget(%table,try) éssai(s)
        hdel %table num
        hdel %table ctime
        hadd %table partie 0
        hadd %table try 0
        aline %win Fin de la partie, tappez ' $+ $wcolor(new) $+ ' pour une nouvelle partie ou ' $+ $wcolor(help) $+ ' pour afficher l'aide
      }
      else {
        aline %win Aucune partie en cours: demande rejetée
        aline %win tappez ' $+ $wcolor(help) $+ ' pour afficher l'aide
      }
    }
    elseif ($1 == setmax) {
      if (!$2) aline %win Parametre manquant: setmax x
      else {
        if ($2 isnum) {
          if ($hget(%table,max)) && ($hget(%table,max) == $2) {
            aline %win Le nombre demandé est le même que celui actuelement parametré: rien à faire.
            aline %win Demande rejetée.
            aline %win tappez ' $+ $wcolor(help) $+ ' pour afficher l'aide
            return
          }
          hadd -m %table max $2
          if ($hget(%table,partie)) {
            aline %win Anulation de la partie en cour
            aline %win Demarage d'une nouvelle partie
            hadd %table num $encode($rand(1,$2),m)
            hadd %table try 0
            hadd %table ctime $ctime
          }
          aline %win Changement OK
        }
        else aline %win Parametre invalide: setmax x (x doit etre un nombre entier positif)
      }
    }
    elseif ($1- isnum) {
      if ($hget(%table,partie)) {
        var %num = $decode($hget(%table,num),m) , %max = $iif($hget(%table,max),$ifmatch,1000000)
        if ($hget(%table,try)) hinc %table try
        else hadd -m %table try 1
        if ($1 > %max) aline %win Le nombre ne peut depasser %max
        if ($1 < %num) aline %win Plus grand
        elseif ($1 > %num) aline %win  Plus petit
        elseif ($1 == %num) {
          aline %win Bravo $1 était effectivement le bon nombre !
          aline %win tu l'a trouvé apres $hget(%table,try) éssai(s) !
          aline %win Il vous à falut $duration($calc($ctime - $hget(%table,ctime))) !
          hadd -m %table try 0
          hadd %table partie 0
          hdel %table num
          hdel %table ctime
          wbs.devinete.show.help %win %table
        }
      }
      else aline %win Aucune partie en cours, faites ' $+ $wcolor(new) $+ ' pour demarer une nouvelle partie
    }
    else aline %win Commande ' $+ $1 $+ ' inconue: tappez ' $+ $wcolor(help) $+ ' pour la liste des commandes disponibles
  }
}

on *:exit:{
  if ($hget(wbs.devinete)) hfree wbs.devinete
}

Conclusion :


voila postez vos avis :) et surtout des idées d'amélioration

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.