begin process at 2010 02 09 17:51:45
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Bots

 > CREATION, GESTION ET EXPLOITATION D'UN SYSTEME DE SCORES AVEC TOP 10 (COMMENTE)

CREATION, GESTION ET EXPLOITATION D'UN SYSTEME DE SCORES AVEC TOP 10 (COMMENTE)


 Information sur la source

Note :
7 / 10 - par 4 personnes
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Bots Niveau :Débutant Date de création :14/08/2004 Date de mise à jour :14/08/2004 19:56:44 Vu / téléchargé :3 223 / 85

Auteur : calopsfr

Ecrire un message privé
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

 Description

c'est surement le premier code utile et instructif que j'ai créé jusqu'alors. créé au début dans un but entierement didactif, ca m'a plus ou moins aidé dans ma progression. bien que ca ne soit plus complexe que mes codes créés jusque là, je n'ai aps jugé assez dur la programmation de ce code pour la mettre dans un autre niveau qu'intermédiaire.
Ce code permet d'élucider plusieurs techniques au niveau débutant, je me suis moi meme posé des questions à ce sujet étant moins expérimenté. mais je ne trouve pas souvent de code commenté, je susi donc obligé de comprendre les sources par moi meme et certaines me posent toujorus quelques problemes...

Source

  • ;#####CREATION, GESTION ET EXPLOITATION D'UN SYSTEME DE SCORES AVEC TOP 10#####
  • on $me:join:#: {
  • if (!$hget(scores)) reset_scores $chan
  • else hload scores. $+ $chan scores. $+ $chan $+ .txt
  • .timertop3 0 300 sayTop3 $chan $chan
  • .timertop10 0 1440 sayTop10 $chan $chan
  • }
  • ;;;quand j'arrive sur un salon {
  • ;;; si la table est inaccessible : j'effectue l'aliase qui permet d'initialiser les scores
  • ;;; sinon : je charge cette table , propre au channel, qui est dans le fichier .txt du même nom
  • ;;; j'engage le timer qui dira le top 3 toutes les 5 minutes
  • ;;; j'engage le timer qui dira le top 10 toutes les 24 minutes
  • ;;;}
  • on *:join:#: notice $nick Voici la liste de mes commandes, à taper après !scores : monscore, lescorede <pseudo>, top10, top3, liste.
  • on *:part:#: notice $nick J'espère que tu t'es bien amusé et te revoir bientôt sur $chan $+ !
  • ;;;quand quelqu'un arrive sur le salon: je lui dis en notice la liste des commandes
  • ;;;quand quelqu'un part du salon: je lui dit au revoir et l'encourage à revenir
  • on @:text:*!scores*:#: {
  • if (!$2) notice $nick Je n'ai aps saisi ce que tu veux de moi.
  • elseif ($2 == stop) .timertop* off
  • elseif ($2 == plus) && ($3) plus $chan $3
  • elseif ($2 == reset) reset_scores
  • else notice $nick Je ne connais pas cette commande.
  • }
  • ;;;quand un opérateur dit une phrase contenant !scores sur le salon {
  • ;;; s'il ne précise pas la commande : je lui dis en notice qu'il me manque des informations
  • ;;; sinon, si la commande est "stop" : je désactive tous les timers dont le nom contient "timertop"
  • ;;; sinon, si la commande est "plus" et si il y a une précision : j'effectue l'aliase plus qui permet d'augmenter un score
  • ;;; sinon, si la commande est "reset" : j'effectue l'aliase qui permet de réinitialiser les scores
  • ;;; sinon : je dis à l'opérateur que je ne connais aps cette commande
  • ;;;}
  • alias reset_scores {
  • hfree scores. $+ $1
  • hmake scores. $+ $1 100
  • hadd scores. $+ $1 top1 0
  • hadd scores. $+ $1 top2 0
  • hadd scores. $+ $1 top3 0
  • hadd scores. $+ $1 top4 0
  • hadd scores. $+ $1 top5 0
  • hadd scores. $+ $1 top6 0
  • hadd scores. $+ $1 top7 0
  • hadd scores. $+ $1 top8 0
  • hadd scores. $+ $1 top9 0
  • hadd scores. $+ $1 top10 0
  • hadd scores. $+ $1 top1.nick <personne>
  • hadd scores. $+ $1 top2.nick <personne>
  • hadd scores. $+ $1 top3.nick <personne>
  • hadd scores. $+ $1 top4.nick <personne>
  • hadd scores. $+ $1 top5.nick <personne>
  • hadd scores. $+ $1 top6.nick <personne>
  • hadd scores. $+ $1 top7.nick <personne>
  • hadd scores. $+ $1 top8.nick <personne>
  • hadd scores. $+ $1 top9.nick <personne>
  • hadd scores. $+ $1 top10.nick <personne>
  • hsave -o scores. $+ $1 scores. $+ $1 $+ .txt
  • msg $1 Les scores ont été remis à 0.
  • }
  • ;;;quand on effectue l'aliase reset_scores {
  • ;;; je détruits la table de scores du channel
  • ;;; je crée la table de scores du channel
  • ;;; j'ajoute dans la table l'item top1 qui contient le score 0
  • ;;; ...
  • ;;; j'ajoute dans la table l'item top10 qui contient le score 0
  • ;;; j'ajoute dans la table l'item top1.nick qui contient le nom <personne>
  • ;;; ...
  • ;;; j'ajoute dans la table l'item top10.nick qui contient le nom <personne>
  • ;;; je sauvegarde la table dans le fichier héponyme
  • ;;; j'annonce au channel que les scores sont remis à 0
  • ;;;}
  • alias top10 {
  • :boucle
  • inc %a
  • if ($2 > $hget(scores. $+ $3,top $+ %a)) {
  • if ($1 != $hget(scores. $+ $3,top $+ %a $+ .nick)) {
  • hadd scores. $+ $3 top $+ $calc(%a+1) $hget(scores. $+ $3,top $+ %a)
  • hadd scores. $+ $3 top $+ $calc(%a+1) $+ .nick $hget(scores. $+ $3,top $+ %a $+ .nick)
  • notice $1 Bravo, tu es maintenant %a $+ $iif(%a == 1,er(e)) $+ $iif(%a > 1,ème) au classement des 10 meilleurs!
  • }
  • hadd scores. $+ $3 top $+ %a $2
  • hadd scores. $+ $3 top $+ %a $+ .nick $1
  • hsave -o scores. $+ $3 scores. $+ $3 $+ .txt
  • goto fin
  • }
  • if (%a == 10) goto fin
  • else goto boucle
  • :fin
  • unset %a
  • }
  • ;##########PETITE INTERLUDE##########
  • ;Ici, une petite explication s'impose.
  • ;Afin de prendre le score d'une personne, la syntaxe est la suivante : $hget(scores. $+ <le channel>,top $+ <le classement>)
  • ;Afin de prendre le nom d'une personne classée: voici : $hget(scores. $+ <le channel>,top $+ <le classement> $+ .nick)
  • ;Ici, on utilise $3 car le channel est la troisieme info fournie, et %a car à chaque tour, le rang augmente.
  • ;Quand quelqu'un "double" un autre dans el classement, celui-ci est placé dans le rang en dessous, ce qui explique le $calc(%a+1)
  • ;Ensuite, on place le nouveau classé à sa place, ce qui est fait aussi quand le classé conserve tout de même sa place.
  • ;##########FIN DE L'INTERLUDE##########
  • ;;;quand quelqu'un effectue l'aliase top10 {
  • ;;; début de la boucle "boucle"
  • ;;; incrémentation de la variable %a
  • ;;; si l'info $2 est plus grande que le score du premier au classement {
  • ;;; si le nom à tester est le nom du top en cours {
  • ;;; je remplace le score de classement en dessous (précédemment occupé par le nouveau) par l'ancien classement testé
  • ;;; je remplace le nom du top en dessous de celui testé par celui du testé
  • ;;; j'annonce au nouveau qu'il a un nouveau classement
  • ;;; }
  • ;;; j'ajoute le score du gars à tester dans le classement à tester (symbolisé par %a)
  • ;;; j'ajoute le gars du score ci-dessus dans le classement à tester
  • ;;; je sauvegarde
  • ;;; je vais à la fin de la boucle
  • ;;; }
  • ;;; si %a est égal à 10 : je vais à la fin
  • ;;; sinon : je retourne en haut
  • ;;; je détruis la variable %a
  • ;;;}
  • on *:text:*!scores*:#: {
  • if (!$2) notice $nick Que veux tu? Je ne vois pas ta requete.
  • elseif ($2 == monscore) notice $nick Ton score est de $hget(scores. $+ $chan,score. $+ $nick) $+ $iif(!$hget(scores. $+ $chan,score. $+ $nick),0) point $+ $iif($hget(scores. $+ $chan,score. $+ $nick) > 1,s) $+ .
  • elseif ($2 == lescorede) && ($3) notice $nick Le score de $3 est de $hget(scores. $+ $chan,score. $+ $3) $+ $iif(!$hget(scores. $+ $chan,score. $+ $3),0) point $+ $iif($hget(scores. $+ $chan,score. $+ $3) > 1,s) $+ .
  • elseif ($2 == top10) top10 $nick $chan
  • elseif ($2 == top3) top3 $nick $chan
  • elseif ($2 == liste) notice $nick Voici la liste de mes commandes, à taper après !scores : monscore, lescorede <pseudo>, top10, top3, liste.
  • }
  • ;##########PETITE INTERLUDE##########
  • ;ici, vous me comprenez, pas d'explication nécessaire, c'est le même principe que pour les ops, en haut.
  • ;##########FIN DE L'INTERLUDE##########
  • alias sayTop10 {
  • msg $1 Voici le top 10 des $hget(scores. $+ $2,total) $+ $iif(!$hget(scores. $+ $2,total),0)) joueurs du salon $2 $+ .
  • msg $1 1) $hget(scores. $+ $2,top1) ( $+ $hget(scores. $+ $2,top1.nick) $+ points).
  • set %i 1
  • :loop
  • inc %i
  • msg $1 %i $+ ) $hget(scores. $+ $2,top $+ %i) ( $+ $hget(scores. $+ $2,top $+ %i $+ .nick) $+ points) $calc(%i+1) $+ ) $hget(scores. $+ $2,top $+ $calc(%i+1)) ( $+ $hget(scores. $+ $2,top $+ $calc(%i+1) $+ .nick) $+ points) $calc(%i+2) $+ ) $hget(scores. $+ $2,top $+ $calc(%i+2)) ( $+ $hget(scores. $+ $2,top $+ $calc(%i+2) $+ .nick) $+ points).
  • set %i $calc(%i+2)
  • if (%i == 10) goto end
  • else goto loop
  • :end
  • unset %i
  • }
  • ;##########PETITE INTERLUDE##########
  • ;Ici, même s'il n'est pas cécessaire d'utiliser une boucle, cela permet
  • ;d'approfondir notre entrainement sur les boucles, deux fois vallent mieux qu'une
  • ;##########FIN DE L'INTERLUDE##########
  • ;;;quand quelqu'un effectue l'aliase sayTop10 {
  • ;;; on annonce ce que l'on va dire...
  • ;;; je dis le nom et le score du premier
  • ;;; j'incrémente la variable %i, ce qui permet d'initialiser la boucle
  • ;;; début de la boucle "loop"
  • ;;; on incrémente %i, ce qui sera fait à chaque tour de boucle
  • ;;; on donne les infos du classement n°%i, puis du n°%i+1, puis celles du n°%i+2
  • ;;; on met la variable ou on s'en est arretes
  • ;;; si %i est égale à 10 : on va à la fin "end"
  • ;;; sinon : on retourne en haut
  • ;;; la find e la boucle
  • ;;; on défait la variable %i
  • ;;;}
  • alias sayTop3 msg $1 1) $hget(scores. $+ $2,top1) ( $+ $hget(scores. $+ $2,top1.nick) $+ points) 2) $hget(scores. $+ $2,top2) ( $+ $hget(scores. $+ $2,top2.nick) $+ points) 3) $hget(scores. $+ $2,top3) ( $+ $hget(scores. $+ $2,top3.nick) $+ points).
  • ;;;exactement comme plus haut, mais sans boucle et pour le top 3
  • alias plus {
  • hinc scores. $+ $1 $2
  • top10 $1 $hget(scores. $+ $2,$1) $2
  • hsave -o scores. $+ $2 scores. $+ $2 $+ .txt
  • }
  • ;;;quand quelqu'un effectue l'aliase plus {
  • ;;; j'augmente le score de la personne donnée ($2
  • ;#####EXEMPLE AVEC LE JEU DU NOMBRE#####
  • on *:text:!nombre:#: {
  • if (%jeux) notice $nick Un jeu est déjà en cours.
  • else {
  • set %jeux ok
  • set %nombre $rand(0,1000)
  • msg $chan Le jeu du nombre est lancé: tapez !nb <le nombre> pour trouver le nombre entre 0 et 1000.
  • }
  • }
  • on *:text:*!nb*: {
  • if (!%jeux) notice $nick Le jeu n'a pas été lancé. Tapez !nombre.
  • else {
  • if ($2 < %nombre) notice $nick Le nombre secret est plus grand que $2 $+ .
  • elseif ($2 > %nombre) notice $nick Le nombre secret est plus petit que $2 $+ .
  • elseif ($2 == %nombre) {
  • unset %jeux
  • plus $nick $chan
  • msg $chan Bravo, $nick $+ , tu as trouvé le nombre mystère quu était %nombre $+ !
  • }
  • }
  • }
  • ;;;Je pense que le jeu du nombre n'est plus à présenter, ainsi une seule explication: quand on a gagné, l'aliase plus est utilisée avec comme informations le nom et le channel...
;#####CREATION, GESTION ET EXPLOITATION D'UN SYSTEME DE SCORES AVEC TOP 10#####

on $me:join:#: {
  if (!$hget(scores)) reset_scores $chan
  else hload scores. $+ $chan scores. $+ $chan $+ .txt
  .timertop3 0 300 sayTop3 $chan $chan
  .timertop10 0 1440 sayTop10 $chan $chan
}

;;;quand j'arrive sur un salon {
;;;  si la table est inaccessible : j'effectue l'aliase qui permet d'initialiser les scores
;;;  sinon : je charge cette table , propre au channel, qui est dans le fichier .txt du même nom
;;;  j'engage le timer qui dira le top 3 toutes les 5 minutes
;;;  j'engage le timer qui dira le top 10 toutes les 24 minutes
;;;}

on *:join:#: notice $nick Voici la liste de mes commandes, à taper après !scores : monscore, lescorede <pseudo>, top10, top3, liste.
on *:part:#: notice $nick J'espère que tu t'es bien amusé et te revoir bientôt sur $chan $+ !

;;;quand quelqu'un arrive sur le salon: je lui dis en notice la liste des commandes
;;;quand quelqu'un part du salon: je lui dit au revoir et l'encourage à revenir

on @:text:*!scores*:#: {
  if (!$2) notice $nick Je n'ai aps saisi ce que tu veux de moi.
  elseif ($2 == stop) .timertop* off
  elseif ($2 == plus) && ($3) plus $chan $3
  elseif ($2 == reset) reset_scores
  else notice $nick Je ne connais pas cette commande.
}

;;;quand un opérateur dit une phrase contenant !scores sur le salon {
;;;  s'il ne précise pas la commande : je lui dis en notice qu'il me manque des informations
;;;  sinon, si la commande est "stop" : je désactive tous les timers dont le nom contient "timertop"
;;;  sinon, si la commande est "plus" et si il y a une précision : j'effectue l'aliase plus qui permet d'augmenter un score
;;;  sinon, si la commande est "reset" : j'effectue l'aliase qui permet de réinitialiser les scores
;;;  sinon : je dis à l'opérateur que je ne connais aps cette commande
;;;}

alias reset_scores {
  hfree scores. $+ $1
  hmake scores. $+ $1 100
  hadd scores. $+ $1 top1 0
  hadd scores. $+ $1 top2 0
  hadd scores. $+ $1 top3 0
  hadd scores. $+ $1 top4 0
  hadd scores. $+ $1 top5 0
  hadd scores. $+ $1 top6 0
  hadd scores. $+ $1 top7 0
  hadd scores. $+ $1 top8 0
  hadd scores. $+ $1 top9 0
  hadd scores. $+ $1 top10 0
  hadd scores. $+ $1 top1.nick <personne>
  hadd scores. $+ $1 top2.nick <personne>
  hadd scores. $+ $1 top3.nick <personne>
  hadd scores. $+ $1 top4.nick <personne>
  hadd scores. $+ $1 top5.nick <personne>
  hadd scores. $+ $1 top6.nick <personne>
  hadd scores. $+ $1 top7.nick <personne>
  hadd scores. $+ $1 top8.nick <personne>
  hadd scores. $+ $1 top9.nick <personne>
  hadd scores. $+ $1 top10.nick <personne>
  hsave -o scores. $+ $1 scores. $+ $1 $+ .txt
  msg $1 Les scores ont été remis à 0.
}

;;;quand on effectue l'aliase reset_scores {
;;;  je détruits la table de scores du channel
;;;  je crée la table de scores du channel
;;;  j'ajoute dans la table l'item top1 qui contient le score 0
;;;  ...
;;;  j'ajoute dans la table l'item top10 qui contient le score 0
;;;  j'ajoute dans la table l'item top1.nick qui contient le nom <personne>
;;;  ...
;;;  j'ajoute dans la table l'item top10.nick qui contient le nom <personne>
;;;  je sauvegarde la table dans le fichier héponyme
;;;  j'annonce au channel que les scores sont remis à 0
;;;}



alias top10 {
  :boucle
  inc %a
  if ($2 > $hget(scores. $+ $3,top $+ %a)) {
    if ($1 != $hget(scores. $+ $3,top $+ %a $+ .nick)) {
      hadd scores. $+ $3 top $+ $calc(%a+1) $hget(scores. $+ $3,top $+ %a)
      hadd scores. $+ $3 top $+ $calc(%a+1) $+ .nick $hget(scores. $+ $3,top $+ %a $+ .nick)
      notice $1 Bravo, tu es maintenant %a $+ $iif(%a == 1,er(e)) $+ $iif(%a > 1,ème) au classement des 10 meilleurs!
    }
    hadd scores. $+ $3 top $+ %a $2
    hadd scores. $+ $3 top $+ %a $+ .nick $1
    hsave -o scores. $+ $3 scores. $+ $3 $+ .txt
    goto fin
  }
  if (%a == 10) goto fin
  else goto boucle
  :fin
  unset %a
}

;##########PETITE INTERLUDE##########
;Ici, une petite explication s'impose.
;Afin de prendre le score d'une personne, la syntaxe est la suivante : $hget(scores. $+ <le channel>,top $+ <le classement>)
;Afin de prendre le nom d'une personne classée: voici : $hget(scores. $+ <le channel>,top $+ <le classement> $+ .nick)
;Ici, on utilise $3 car le channel est la troisieme info fournie, et %a car à chaque tour, le rang augmente.
;Quand quelqu'un "double" un autre dans el classement, celui-ci est placé dans le rang en dessous, ce qui explique le $calc(%a+1)
;Ensuite, on place le nouveau classé à sa place, ce qui est fait aussi quand le classé conserve tout de même sa place.
;##########FIN DE L'INTERLUDE##########



;;;quand quelqu'un effectue l'aliase top10 {
;;;  début de la boucle "boucle"
;;;  incrémentation de la variable %a
;;;  si l'info $2 est plus grande que le score du premier au classement {
;;;    si le nom à tester est le nom du top en cours {
;;;      je remplace le score de classement en dessous (précédemment occupé par le nouveau) par l'ancien classement testé
;;;      je remplace le nom du top en dessous de celui testé par celui du testé
;;;      j'annonce au nouveau qu'il a un nouveau classement
;;;    }
;;;    j'ajoute le score du gars à tester dans le classement à tester (symbolisé par %a)
;;;    j'ajoute le gars du score ci-dessus dans le classement à tester
;;;    je sauvegarde
;;;    je vais à la fin de la boucle
;;;  }
;;;  si %a est égal à 10 : je vais à la fin
;;;  sinon : je retourne en haut
;;;  je détruis la variable %a
;;;}

on *:text:*!scores*:#: {
  if (!$2) notice $nick Que veux tu? Je ne vois pas ta requete.
  elseif ($2 == monscore) notice $nick Ton score est de $hget(scores. $+ $chan,score. $+ $nick) $+ $iif(!$hget(scores. $+ $chan,score. $+ $nick),0) point $+ $iif($hget(scores. $+ $chan,score. $+ $nick) > 1,s) $+ .
  elseif ($2 == lescorede) && ($3) notice $nick Le score de $3 est de $hget(scores. $+ $chan,score. $+ $3) $+ $iif(!$hget(scores. $+ $chan,score. $+ $3),0) point $+ $iif($hget(scores. $+ $chan,score. $+ $3) > 1,s) $+ .
  elseif ($2 == top10) top10 $nick $chan
  elseif ($2 == top3) top3 $nick $chan
  elseif ($2 == liste) notice $nick Voici la liste de mes commandes, à taper après !scores : monscore, lescorede <pseudo>, top10, top3, liste.
}

;##########PETITE INTERLUDE##########
;ici, vous me comprenez, pas d'explication nécessaire, c'est le même principe que pour les ops, en haut.
;##########FIN DE L'INTERLUDE##########

alias sayTop10 {
  msg $1 Voici le top 10 des $hget(scores. $+ $2,total) $+ $iif(!$hget(scores. $+ $2,total),0)) joueurs du salon $2 $+ .
  msg $1 1) $hget(scores. $+ $2,top1) ( $+ $hget(scores. $+ $2,top1.nick) $+ points).
  set %i 1
  :loop
  inc %i
  msg $1 %i $+ ) $hget(scores. $+ $2,top $+ %i) ( $+ $hget(scores. $+ $2,top $+ %i $+ .nick) $+ points) $calc(%i+1) $+ ) $hget(scores. $+ $2,top $+ $calc(%i+1)) ( $+ $hget(scores. $+ $2,top $+ $calc(%i+1) $+ .nick) $+ points) $calc(%i+2) $+ ) $hget(scores. $+ $2,top $+ $calc(%i+2)) ( $+ $hget(scores. $+ $2,top $+ $calc(%i+2) $+ .nick) $+ points).
  set %i $calc(%i+2)
  if (%i == 10) goto end
  else goto loop
  :end
  unset %i
}

;##########PETITE INTERLUDE##########
;Ici, même s'il n'est pas cécessaire d'utiliser une boucle, cela permet
;d'approfondir notre entrainement sur les boucles, deux fois vallent mieux qu'une
;##########FIN DE L'INTERLUDE##########

;;;quand quelqu'un effectue l'aliase sayTop10 {
;;;  on annonce ce que l'on va dire...
;;;  je dis le nom et le score du premier
;;;  j'incrémente la variable %i, ce qui permet d'initialiser la boucle
;;;  début de la boucle "loop"
;;;  on incrémente %i, ce qui sera fait à chaque tour de boucle
;;;  on donne les infos du classement n°%i, puis du n°%i+1, puis celles du n°%i+2
;;;  on met la variable ou on s'en est arretes
;;;  si %i est égale à 10 : on va à la fin "end"
;;;  sinon : on retourne en haut
;;;  la find e la boucle
;;;  on défait la variable %i
;;;}

alias sayTop3 msg $1 1) $hget(scores. $+ $2,top1) ( $+ $hget(scores. $+ $2,top1.nick) $+ points) 2) $hget(scores. $+ $2,top2) ( $+ $hget(scores. $+ $2,top2.nick) $+ points) 3) $hget(scores. $+ $2,top3) ( $+ $hget(scores. $+ $2,top3.nick) $+ points).

;;;exactement comme plus haut, mais sans boucle et pour le top 3

alias plus {
  hinc scores. $+ $1 $2
  top10 $1 $hget(scores. $+ $2,$1) $2
  hsave -o scores. $+ $2 scores. $+ $2 $+ .txt
}

;;;quand quelqu'un effectue l'aliase plus {
;;;  j'augmente le score de la personne donnée ($2

;#####EXEMPLE AVEC LE JEU DU NOMBRE#####

on *:text:!nombre:#: {
  if (%jeux) notice $nick Un jeu est déjà en cours.
  else {
    set %jeux ok
    set %nombre $rand(0,1000)
    msg $chan Le jeu du nombre est lancé: tapez !nb <le nombre> pour trouver le nombre entre 0 et 1000.
  }
}

on *:text:*!nb*: {
  if (!%jeux) notice $nick Le jeu n'a pas été lancé. Tapez !nombre.
  else {
    if ($2 < %nombre) notice $nick Le nombre secret est plus grand que $2 $+ .
    elseif ($2 > %nombre) notice $nick Le nombre secret est plus petit que $2 $+ .
    elseif ($2 == %nombre) {
      unset %jeux
      plus $nick $chan
      msg $chan Bravo, $nick $+ , tu as trouvé le nombre mystère quu était %nombre $+ !
    }
  }
}

;;;Je pense que le jeu du nombre n'est plus à présenter, ainsi une seule explication: quand on a gagné, l'aliase plus est utilisée avec comme informations le nom et le channel...

 Conclusion

bien, je vais maitnenant expliquer le mécanisme, le moteur du top10, la chose la plus intéressante dans ce code, l'aliase top10.
lorsqu'on utilise cette aliase, on met en route la boucle "boucle", qui incrémente la variable %a à chaque tour, jusqu'à que %a ait la valeur 10, ou la boucle ne recommence plus. a chaque tour, %a correspond à un classement
on commence par un. si le score fournit en meme temps que l'execution que l'aliase est supérieur à celui du premier actuel, on passe à la suite. la suite: si le premier actuel n'est autre que la personne testée, on ne fait que réactualiser son score. mais si elle était avant au grade en dessous, on place la personne qui vient de se faire "doubler" à la place en dessous, en l'occurence ici, la deuxieme, à l'aide de la commande $calc(%a+1). puis, on va à la fin pour eviter que la personne ne soit dans tout le top10. mais si rien ne s'est passé, on continue plus bas, en incrémentant la variable, en remontant en haut, puis en testant la deuxieme place. et on continue jusqu'à la place n°10... et si vous etes attentifs, vous aurez remarqué qu'on a meme un top11, puisque quand le 10eme se fait doubler, il va à la place 10+1... mais ce n'est pas genant puisque personne ne le voit.

pour utiliser ce core, avec un ou plusieurs jeux, il faut que ces jeux soient construits sur la meme base que le jeu du nombre... quand la variable %jeux est inactive, c'est ok, sinon, on démarre pas... et quand quelqu'un gagne, ne pas oublier : /plus $chan $nick

dans le zip: le code seul, puis le code commenté

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

14 août 2004 19:56:44 :
j'ai rajouté un ptit truc sur la fin que 'javais oublié dans l'explication finale

 Sources du même auteur

Source avec une capture EXPLOITATION D'UN DIALOG, EXEMPLE : RECHERCHER AVEC GOOGLE
LIVRE D'OR EN HASHTABLES, MES PREMIERES
SONDAGE: NOMBRE DE RÉPONSES ILLIMITÉ!
POUR BOTS: SONDAGE COMPLET AVEC CHOIX DU NOMBRE DE QUESTIONS
MA SECONDE SOURCE: JEU POUR BOT: DEVINEZ L'ANIMAL!!

 Sources de la même categorie

ANIMATION POUR BOT par michounou
RECORD AFFLUENCE MULTI-SALON par extarsik
Source avec Zip Source avec une capture LOGCHAN BY DIIMS :: POUR BOT :: TOTALEMENT CONFIGURABLE par sodims
SALON TRADUCTION par CsDarkman
BOT DE SUPPORT (HELPSERV) par Maxou1012

Commentaires et avis

Commentaire de BigBrain le 14/08/2004 20:05:26

Bvo ce code source très utile jamais rien n'est paru de tel ici ! félicitations !

Commentaire de babass le 14/08/2004 20:11:15

Alors, ne codant plus en mirc depuis un petit temps, je ne me permettrais pas trop de faire des remarques sur le code, bien qu'il m'a l'air pas mal du tt.

Par contre, je voudrais dire bravo pour tous ces commentaires et pour le fait de plus en plus rare que tu t'exprimes très bien (pas de style sms) et sans fautes d'orthographe dans chaque mot. Rien que pour ca :

BRAVO

Commentaire de Raziell le 14/08/2004 20:25:57

Il y a des fautes au niveau codage :
1°) on $me:join:#:
2°) on *:join:#:
3°)on *:part:#:
Qui devienent :

1°) On *:join:#:{
if $nick == $me { commandes }
else { commandes }
}

2°) Le même que le n°1 (Ce qui peut racourcir le code)

3°) On *:part:#:{
If $nick == $me { commandes }
else { commandes }

Pour l'ecriture je ne critique pas car je n'ecrit pas trés bien :)
Je ne note pas.

¤Raziell¤

Commentaire de calopsfr le 14/08/2004 22:11:39

ben voulant détailler étape par étape, j'ai préféré mettre l'initialisation dans un seul on join, puis rajouter une ligne pour le message de bienvenue (c'est pas énorme)... quant au part, je vois aps de raccourcis à faire, étant donné que si c'est $me qui part, y'a rien de spécial à déclencher... de plus que si je suis parti du salon, je risque pas de dire au revoir apres...

Commentaire de Huitre le 15/08/2004 04:50:46

les while sont plus judicieux que les goto, lgoto ne sert qu a creer un presudo #x on #x off, voila toutes les remarques que je peux fiare vu l etat d alcolemie dans lequel je me trouve. ah si , ton alias rest score peut extre optilmisé par 2 boucles  while et aussi les %x $+ machin $+ truc $+ bidule c un pezu lourd, essaye $eval ou $+(%x,machin,truc,bidule)
voila bonne continuation !

Commentaire de calopsfr le 15/08/2004 10:36:41

ben comme je 'lai dit je me sers des sources que j'ai deja vues pour progresser...or, je ne connais pas encore les boucles whiles (pas en mirc en tt cas), et j'ignorais la présence de $eval et $+()... tu peux me dire coment fonctionnent les boucles while ainsi que $eval?

ps: j'ai remarqué que je pouvais raccourcir dans le reset mais j'ai eu la grosse flemme de changer ca, étant donné que ca fait assez longtemps que je 'lai fait

Commentaire de calopsfr le 15/08/2004 10:46:13

ah non c'est on j'ai compris le systeme de while... c'est bien while (%truc <= %machin), non?

Commentaire de ReMi34 le 15/08/2004 11:13:06

Je suis exactement du même avis que babass, bravo pour les fautes d'orthographe.

Sinon, niveau codage, c'est assez bien, en effet, utilise des while(s) plutôt que des goto(s).

Tu utilises un if comme ça :
if (condition) { commande }
alors que c'est la formule la plus lente. Voici l'ordre du plus rapide au plus lent :
if (condition) commande
if condition {commande }
if (condition) { commande }

Sinon, ça me parait pas super utile, sauf pour les quizz bien sur.

Voilà :)

Commentaire de Raziell le 15/08/2004 11:25:05

Oui, les while s'utilise de la façon " while (%machin <= %truc) " Comme cela :

alias bidule {
Var %x 1
Var %y $nick($active,0)
while (%x <= %y) {
Msg $active Debout $nick($active,%x)
Inc %x
}
}
Surtout ne jamais oublier le inc dans la boucle, sinon mIRC gêle :D

Ps: le code ci-dessus peux faire partir en eccess flood , kicker, bannir, car il prononce chaque pseudo de la fenêtre active un par un :x

Commentaire de COOLMAN002 le 16/08/2004 02:40:34

quand mIRC gele a cause d'une while, Ctrl+Pause

Commentaire de calopsfr le 20/08/2004 18:24:10

escusez moi j''étais aprti en vacances... donc merci pour tous ces renseignements, je me mets de suite à un truc plus élaboré et mieux codé.

 Ajouter un commentaire




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 : 0,608 sec (4)

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