UNO : Une adaptation numérique du jeu de cartes classique
UNO est une version numérique du célèbre jeu de cartes, où l'utilisateur affronte l'ordinateur dans des parties stratégiques et captivantes.
Points Clés du Code
1. Gestion des Cartes
- Classe
Card: Représente chaque carte avec ses propriétés (couleur, type, effet). - Classe
Deck: Initialise le paquet de cartes, avec la duplication des cartes standard et un mélange aléatoire avant la distribution. - Classe
Hand: Gère les cartes détenues par chaque joueur (ajout, retrait, comptage).
class Card:
def __init__(self, color, rank):
self.rank = rank
self.color = color if ctype[rank] != 'action_nocolor' else None
self.cardtype = ctype[rank]
2. Logique de Jeu
Vérification des Cartes Jouables
Une fonction détermine si une carte peut être jouée en comparant :
- La couleur de la carte actuelle avec celle du dessus.
- Le rang de la carte actuelle avec celui du dessus.
- Le type de la carte (Wild ou Draw4).
def single_card_check(top_card, card):
return (
card.color == top_card.color or
card.rank == top_card.rank or
card.cardtype == 'action_nocolor'
)
Effets des Cartes Action :
Implémentation des effets spéciaux comme Skip, Reverse, Draw2, Draw4, et Wild.
3. Interface Graphique
- Affichage des Cartes
Utilisation de Tkinter pour afficher les cartes sous forme de boutons interactifs, avec des images chargées via Pillow.
- Mises à Jour Dynamiques
Les éléments de l'interface (cartes, scores, statut de l'ordinateur) sont actualisés en temps réel.
def update_top_card():
card_image = ImageTk.PhotoImage(Image.open(top_card.get_image_path()).resize((100, 150)))
top_card_label.config(image=card_image)
top_card_label.image = card_image
4. Intelligence Artificielle Basique
- Choix Automatique des Cartes Jouables :
L'ordinateur cherche une carte valide dans sa main, ou pioche si aucune n'est jouable.
playable_card = next((card for card in pc_hand.cards if single_card_check(top_card, card)), None)
5. Flux de Jeu
- Gestion des Tours :
Alterne entre le joueur et l’ordinateur en appliquant les règles et en gérant les interactions.
- Conditions de Fin de Jeu :
Le jeu se termine lorsque l'un des joueurs n'a plus de cartes.
if player_hand.no_of_cards() == 0:
messagebox.showinfo("UNO", "You Win!")
root.quit()