Partage
  • Partager sur Facebook
  • Partager sur Twitter

Programmation jeu de UNO

problème mystère

15 mars 2018 à 17:57:34

Bonjour, je m'appelle Arnold,  dans le cadre de mon projet ISN en terminale S, je dois réaliser un projet python. J'ai choisi de programmer un jeu de carte, le UNO, voici programme pour l'instant, 

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from random import shuffle  
  
  
def initialisation(): 
    cartes=["+4","+4","invV","invV","+2V","+2V","9V","8V","8V","7V","7V","6V","4V","4V","3V","3V","2V","2V","4c","4c","invJ","invJ","+2J","+2J","9J","8J","8J","7J","7J","6J","4J","4J","3J","3J","2J","2J","stopV","stopV","9V","+4","+4","invB","6V","5V","5V","9B","8B","8B","1V","1V","0V","4B","4B","3B","stopJ","stopJ","9J","4c","4c","invR","6J","5J","5J","1J","1J","0J","9R","8R","8R","4R","4R","3R","invB","+2B","+2B","stopB","stopB","9B","7B","7B","6B","6B","5B","5B","3B","2B","2B","1B","1B","0B","invR","+2R","+2","stopR","stopR","9R","7R","7R","6R","6R","5R","5R","3R","2R","2R","1R","1R","0R"]   
    shuffle(cartes)  
    carte_joueur_1=[]  
    carte_joueur_2=[]  
    for i in range (7):   
        carte_joueur_1.append(cartes.pop())   
        carte_joueur_2.append(cartes.pop())    
    talon=[cartes.pop()]  
    return cartes,carte_joueur_1,carte_joueur_2,talon 
  
def carte_posable ():
    if carte_joueur_1[:][1]==talon[-1][1] or carte_joueur_1[:][0]==talon[-1][0]:
        carte_jouee = input("Que jouez-vous ?")
        coup_possible (carte_jouee)
        
    else:
        print("Pioche") 
        carte_joueur_1.append (cartes [-1] )
        cartes.remove(cartes [-1] )


def coup_possible (carte_jouee): 
    if carte_jouee[1]==talon[-1][1] or carte_jouee[0]==talon[-1][0]: 
        talon.append(carte_jouee) 
        carte_joueur_1.remove(carte_jouee)
       
         
        print("tu peux jouer cette carte") 
    else: 
        print("Joue une autre carte")  


     
# Distribution des cartes 
cartes,carte_joueur_1,carte_joueur_2,talon = initialisation() 
print(talon) 
print(carte_joueur_1) 

carte_posable ()

La fonction initialisation distribue les cartes aux 2 joueurs et choisit la première carte du jeu (talon) sur lequel va "s'empiler" les autres cartes. 
La fonction carte_posable cherche a vérifier avant que le joueur ne joue si il va pouvoir jouer une carte (si oui, la fonction coup_possible se lance, si non, le joueur n'a pas d'autre choix que de piocher). Cependant quand je teste ce programme la condition if de carte_posable n'est jamais vérifié et le joueur pioche systématiquement une carte, je ne vois pas mon erreur sur le if. Pourriez vous m'aider ? Merci 

  • Partager sur Facebook
  • Partager sur Twitter
15 mars 2018 à 23:07:54

Salut :)

Je ne me souviens plus exactement des règles du Uno, mais, c'est une histoire de valeur de la carte ou de sa couleur. Il y a un 5 vert, on joue du vert ou un 5 (j'omets volontairement les cartes joker et autres bonus).

Néanmoins, ton erreur est sémantique. En gros, ton algo n'est pas bon. Il te faut le rebosser sur papier.

De plus, les 2 paires de crochets servent généralement à récupérer la valeur d'une liste de listes :

liste = [[1], [2]]

liste[1][0] récupère la valeur 2.

Or, je ne vois pas de liste de listes dans ton programme.

Pour un peu t'aider, tu pourrais créer une liste de cartes possibles en fonction de celle sur le talon. Dans mon exemple du 5 vert, tu mets dans cette liste des possible tous les 5 et tous les verts.
Puis, si le joueur a une de ces cartes, il choisit, sinon il doit piocher.

  • Partager sur Facebook
  • Partager sur Twitter
16 mars 2018 à 14:42:22

Bonjour,

La condition if de carte posable est vérifié mais je sera jamais vrai. En effet, tu compares la première carte du joueur ("4V" par exemple) avec le chiffre de la carte posée sur le talon ("4" par exemple).

Si tu ne comprends pas pourquoi, je te conseille de regarder ce que te retourne cartes_joueurs_1[:]. Et pour résoudre ton problème, il faut que tu parcours (avec un for) toutes les cartes dans la main du joueur et que tu regardes si elles sont posables.

Sinon, c'est un bon début, quelques conseils cependant: fais attention aux cartes spéciales qui ne sont pas prises en compte, mes tes cartes dans un fichier à part (permet de modifier le jeux facilement si besoin), unifies ton code (pourquoi tu arrêtes d'utiliser pop() ?) et enfin si ça t'intéresse, tu peux t'orienter vers de la POO pour définir tes cartes comme des objets et pouvoir les comparer par exemple.

Bon courage et n'hésite pas si tu as des questions,

Tyrion78

  • Partager sur Facebook
  • Partager sur Twitter
12 avril 2024 à 3:57:41

Bonjour, j'ai un projet de programmer le jeu UNO en c# mais je suis deja bloqué qu début au niveau du diagramme. J'ai besoin de votre aide pour me donner une idee sur le diagramme de classe avec les differents attributs et methodes pour pouvoir commencer.

Merci

  • Partager sur Facebook
  • Partager sur Twitter
12 avril 2024 à 4:17:53

@MoribaTouré Bonjour, merci de ne pas squatter le sujet d'un autre, créer votre propre sujet dans le bon forum. Ici vous êtes dans le forum Python.

Décrivez votre problématique et fournissez à la communauté le code que vous avez écrit en utilisant le bouton code </> de la barre d'outil du forum.

Je ferme ici.

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Liens conseillés

  • Partager sur Facebook
  • Partager sur Twitter