Pendu pour xchat

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 005 fois - Téléchargée 27 fois

Contenu du snippet

Ce code gère un jeu de Pendu pour Xchat (installé avec le module Python).

Tout le monde peut participer, il y a une gestion simple des scores (parties gagnées, perdues).
On tire au hasard un mot dans une liste qui en contient plus de 100 et après, vous devez connaître le principe du pendu ^^
On a 10 coups à jouer. On peut aussi mettre le mot en entier au lieu de faire lettre par lettre.

Source / Exemple :


# -*- coding: cp1252 -*- 
__module_name__ = "pendu"
__module_version__ = "1.0"
__module_description__ = "Pendu"
__module_author__ = "Pmol"

# Cree par Pmol en mars 2006 pour Xchat. Merci de laisser ma trace si vous utilisez ce script ;-)

# Modules :
import xchat
import random   

# Cherche la lettre et cree une liste: 
def cherche(le, position,mot):
    global modif # Indique si l'on a trouve une lettre du mot cache 
    x = 0
    modif = 0
    while x < len(mot):
        if position[x] == '*':
            if mot[x] == le:
                position[x] = le
                modif += 1
        x += 1
    return position

# Affiche seulement ce que l'on a decouvert :
def affiche(position,mot): # Prend la liste des lettres decouvertes et le mot
    temp = ''
    for i in position:
        temp += i
    return temp

# Verfie si on a perdu 
def perdu(compte_coups, mot, coups_restants):
    global lance, nb_perdu
    if coups_restants <= 0: # Si on a vraiment perdu
        xchat.command("me " + 'Vous avez perdu ! C\'etait pourtant simple ! C\'etait ' + mot) # On lui dit qu'il a perdu
        xchat.command("me " + 'Vous avez joue %s coups'%(compte_coups)) # On lui donne le nombre de coups joues
        lance = 0 # On defini le pendu comme 'Arrete'
        nb_perdu += 1 # On incremente le nombre de parties perdues
        xchat.command("me " + 'Vous avez gagne %s parties et en avez perdu %s !'%(nb_gagne, nb_perdu)) # Affichage du nb de parties joues et perdues
        xchat.command("me " + 'Rejouez en tapant !pendu')
        return 0
    else: # Si on a pas perdu, on continue
        return 1

# Verfie si on a gagne 
def gagne(compte_coups, mot, mot_affiche):
    global lance, nb_gagne
    if mot_affiche == mot: # Si on a gagne :
        xchat.command("me " + 'Vous avez gagne ! Le mot cache est bien ' + mot) # On lui dit qu'il a gagne
        xchat.command("me " + 'Vous avez joue %s coups !'%(compte_coups)) # On lui donne le nombre de coups joues
        lance = 0 # On defini le pendu comme 'Arrete'
        nb_gagne += 1 # On incremente le nombre de parties gagnees
        xchat.command("me " + 'Vous avez gagne %s parties et en avez perdu %s !'%(nb_gagne, nb_perdu)) # Affichage du nb de parties joues et perdues
        return 0
    else: # Si on a pas gagne, on continue
        return 1

# Augmente les compteurs
def compteurs():
    global compte_coups, coups_restants
    if modif == 0: #Si on a pas fait de modification au mot cache :
        compte_coups += 1
        coups_restants -= 1
    else: # Si on a modifie des trucs :
        compte_coups += 1         

# Verifie si le mot entier donne et le meme que le mot cache, si oui, on gagne, sinon, on perd 2 essais
def verifie_mot_entier(mot, mot_donne):
    global compte_coups, coups_restants
    if mot_donne == mot: # Si le mot entier est le mot cache :
        if coups_restants > 0: # Si on peut jouer :
            gagne(compte_coups, mot, mot_donne)
            compte_coups += 1
        else: # Si on a perdu :
            perdu(compte_coups, mot, coups_restants)
        return 0
    else: # Si le mot donne n'est pas le mot cache :
        compte_coups += 1
        coups_restants -= 2 # On enleve 2 coups au nombre de coups restants
        xchat.command("me " + 'Il vous reste %s coups a jouer'%(coups_restants)) # On dit combien de coups il reste a jouer
        return 1

# Analyse ce que l'on ecrit, et appelle la fonction correspondante :
def analyse(word, word_eol, userdata):
    global nb_gagne, nb_perdu, liste_mots, compte_coups, coups_restants, mot, position, modif, lance
    if word[1] == '!pendu': # Si on veut lancer le pendu :
        xchat.command("me " +'Bienvenue dans le jeu du Pendu. Chaque lettre doit etre donnee en majuscule. Tapez !pendu pour rejouer, !fin pour quitter et !remise pour remettre les scores a zero. Chaque essai manque vous enleve une chance de gagner. Vous avez 10 essais. Si vous pensez avoir trouve le mot, vous pouvez marquer le mot entier, mais, si vous vous trompez, cela comptera comme 2 essais. Vous pouvez chatter en jouant.') # Phrase de depart
        xchat.command("me " +'Vous avez gagne %s parties et en avez perdu %s.'%(nb_gagne,nb_perdu))
        mot = liste_mots[random.randrange(0,len(liste_mots))] # On tire un nouveau mot au hasard
        position = ['*']*len(mot)
        xchat.command("me " + '*'*len(mot)) # On affiche que des *, vu que c'est le debut du jeu
        coups_restants, compte_coups = 10, 0 # Il nous reste 10 coups a jouer, on a pas encore joue
        lance = 1 # On definit le pendu comme 'Lance'
    elif len(word[1]) == 1 and lance == 1 : # Si on ecrit juste une lettre, et que le pendu est lance
        cherche(word[1], position,mot) # On cherche
        mot_affiche = affiche(position,mot) # On affiche
        compteurs() # On incremente les compteurs
        g = gagne(compte_coups, mot, mot_affiche) # On verifie si on a pas gagne
        p = perdu(compte_coups, mot, coups_restants) # On verifie si on a pas perdu
        if g == 1 and p == 1: # Si on a pas perdu ni gagne :
            xchat.command("me " + affiche(position,mot))
            xchat.command("me " + 'Il vous reste %s coups a jouer'%(coups_restants)) # On dit combien de coups il reste a jouer
    elif word[1] == '!fin': # Si on decide d'arreter
        xchat.command("me " + 'Cette partie est arretee. Tapez !pendu pour rejouer')
        lance = 0 # On definit le pendu comme 'Arrete'
        return
    elif len(word[1]) == len(mot) and lance == 1: # Si on ecrit quelque chose de la meme longueur que celle du mot cache :
        u = verifie_mot_entier(mot, word[1])
        if u == 1:
            mot_affiche = affiche(position,mot)
            xchat.command("me " +  mot_affiche)
            p = perdu(compte_coups, mot, coups_restants) # On verifie si on a pas perdu
    elif word[1] == '!remise': # Si on veut remettre a zero les scores :
        nb_gagne,nb_perdu = 0,0
        xchat.command("me " + 'Les scores ont ete remis a zero') 

# Affiche les commandes du jeu :
def commandes(word, word_eol, userdata):
    xchat.command("me " + 'Tapez !pendu pour jouer au pendu')

# Liste des mots :
liste_mots = ['MAISON', 'PAPIER', 'CISEAUX', 'FEUILLE', 'FLUTE', 'PIANO', 'ORDINATEUR', 'CERVEAU', 'POMME', 'PATATE', 'FRUIT', 'COUSSIN', 'OREILLER', 'LIT', 'LAMPE', 'FENETRE', 'VERRE', 'GOBELET', 'CRAYON', 'STYLO', 'PANIER', 'OEUF', 'CHOCOLAT', 'PLACARD', 'CUISINE', 'CUISINIERE', 'TAPIS', 'FRIGO', 'CARREAUX', 'CARRELAGE', 'MOQUETTE', 'MONTRE', 'HORLOGE', 'RESSORT', 'STUDIO', 'CINEMA', 'ENTREPRISE', 'JEU', 'TELECOMMANDE', 'CARTON', 'PORTE', 'LOQUET', 'SERRURE', 'PORTAIL', 'HERBE', 'ARBRE', 'LIVRE', 'DICTIONNAIRE', 'PENDU', 'TELEVISION', 'CHIEN', 'VILLAGE', 'VILLE', 'PLANETE', 'TERRE', 'GOUTIERRE', 'ROUTE', 'VOITURE', 'ANTENNE', 'COLLEGE', 'ECOLE', 'LYCEE', 'LION', 'GIRAFE', 'CHIEN', 'PINSON', 'BERGERONNETTE', 'ALLEMAND', 'FRANCAIS', 'ANGLAIS', 'FLEUVE', 'TOUR', 'RIVIERE', 'MOULIN', 'IMPRIMANTE', 'GOLF', 'CLUB', 'DICTIONNNAIRE', 'MAGASIN', 'AGRAFEUSE', 'CALLIGRAPHIE', 'NUMERO', 'ART', 'BOITE', 'MAGAZINE', 'HAMSTER', 'ABONNEMENT', 'TELEPHONE', 'COLLECTION', 'BALLE', 'REDUCTION', 'OPERATION', 'LEGENDE', 'PUBLICITE', 'TOMATE', 'SALADE', 'HAMBURGER', 'LIMITE', 'LOGEMENT', 'MARMELADE', 'MUR', 'PALISSADE', 'FONTAINE', 'AMPOULE', 'CRI', 'TRANSPARENT', 'LOUTRE', 'LIONNE', 'BUDGET', 'GROUPE','TUILE', 'ESSENCE', 'MARTEAU', 'BURIN', 'MOUCHOIR', 'PEINTURE', 'LIVRE', 'ANTICONSTITUTIONNEL', 'ANTICONSTITUTIONNELEMENT', 'LETTRE', 'FRUIT', 'MAGAZINE', 'CANAPE', 'CHAMPIGNON', 'ARBORICOLE', 'PLAGE', 'PLAGIER', 'CONSTITUTION']
nb_gagne, nb_perdu, lance, modif, mot = 0, 0, 0, '', ''

# Des que l'on poste un message : 
event = ("Channel Message", 1)
event2 = ("Join", 1)
xchat.hook_print(event[0], analyse, event)
xchat.hook_print(event2[0], commandes, event2)
print 'Pendu lance'

Conclusion :


S'il y a des bugs => Directions les commentaires :-)

A voir également

Ajouter un commentaire Commentaires
Messages postés
39
Date d'inscription
samedi 2 septembre 2006
Statut
Membre
Dernière intervention
16 octobre 2007

et le zip alors ??!!
Messages postés
7
Date d'inscription
mercredi 15 mars 2006
Statut
Membre
Dernière intervention
2 mai 2019

Finalement c'est bon ca marche nikel. Ca se lancé 2 fois a cause d'une mauvaise manip.
Par contre on peut y jouer que en écrivant en noir ... les remote doivent etre off.
Et domage qui a pas de points pour les joueur au lieu d'un score général ...

Sinon je laisse tourné et il est assez apprécié ^^
Messages postés
7
Date d'inscription
mercredi 15 mars 2006
Statut
Membre
Dernière intervention
2 mai 2019

Quand je tape !pendu j'ai tout qui s'affiche 2 fois ...
Les longue phrase d'explication du bot + 2 mots à trouver.

J'ai donc tout en double comme si je joué pour 2 personnes ...

Sinon je trouve ce pendu pas mal du tout (pas de connaissande en prog donc ...)
Messages postés
28
Date d'inscription
lundi 22 mars 2004
Statut
Membre
Dernière intervention
19 mai 2006

Dans la liste des mots, dictionnaire avec trois N ? :)

Sinon, pas testé mais ça a l'air bien sympa ^^

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.