FAOD-DUI4/blackjack_correction.py

188 lines
4.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Projet jeu de Blackjack
=======================
But du jeu : Après avoir reçu deux cartes, le joueur tire des cartes pour sapprocher de la valeur 21 sans la dépasser. Le but du joueur est de battre le croupier en obtenant un total de points supérieur à celui-ci ou en voyant ce dernier dépasser 21. Chaque joueur joue contre le croupier, qui représente la banque, ou le casino, et non contre les autres joueurs.
Une carte sera un tuple (valeur, couleur).
Le croupier sera représenter par un deck de carte c'est à dire une Pile de cartes.
Chaque joueur sera représenter par une main de carte c'est à dire une liste (au sens de Python) de carte.
L'ensemble des joueurs sera une file de mains. On ne fera pas de différence entre un jour et le croupier.
"""
import random
from .pile import Pile
from .file import File
values = {
2: 2,
3: 3,
4: 4,
5: 5,
6: 6,
7: 7,
8: 8,
9: 9,
"Valet": 10,
"Dame": 10,
"Roi": 10,
"As": 11, # dans la vrai version du BlackJack, l'As peut valoir 1 ou 11 au choix du joueur.
}
colors = ["Pique", "Coeur", "Trefle", "Carreau"]
def build_deck():
"""Construit une pile de 54 cartes mélangés
Pour mélanger les cartes de façon aléatoire, vous pouvez utiliser la bibliothèque random.
:return: Une pile de 54 cartes différentes mélangées
:example:
>>> deck = build_deck()
>>> deck.is_empty()
False
>>> for i in range(54):
deck.pop()
>>> deck.is_empty()
True
"""
deck = Pile()
cards = zip(values, colors)
random.shuffle(cards)
for card in cards:
deck.append(card)
return deck
def build_players(nbr):
"""Construit une file de joueurs avec des mains vides
:param nbr: nombre de joueurs (on se limitera à 4 joueurs)
:return: file de mains vides
:example:
>>> players = build_players(3)
>>> players.is_empty()
False
>>> for _ in range(3):
print(players.pop())
[]
[]
[]
>>> players.is_empty()
True
"""
players = File()
# -----------------------
# -----------------------
return players
def compute_score(hand):
"""Calculer le score d'une main
:param hand: liste de cartes
:return: le score associé
:example:
>>> hand = [(2, "Pique"), ("As", "Coeur"), (8, "Carreau")]
>>> compute_score(hand)
11
>>> compute_score([])
0
"""
pass
def can_play(player):
"""détermine si un joueur peu encore jouer
:param player: une joueur
:return: True if his score is lower than 21
:example:
>>>
"""
pass
def first_draw(players, deck):
"""Distribue 2 cartes à chaque joueur
:param players: pile de joueur avec des mains vides
:param deck: pile avec toutes les cartes
:return: (players, deck) où les joueurs ont deux cartes et où le deck a été mis à jour.
:example:
>>> players = build_players(3)
>>> deck = build_deck()
>>> players, deck = fist_draw(players, deck)
>>> for i in range(3):
print(len(players.pop()))
2
2
2
"""
pass
def draw(players, deck):
"""Distribue 1 carte à chaque joueur
:param players: pile de joueur avec des mains non vides
:param deck: pile avec toutes les cartes
:return: (players, deck) où les joueurs ont plus de deux cartes et où le deck a été mis à jour.
:example:
>>> players = build_players(3)
>>> deck = build_deck()
>>> players, deck = fist_draw(players, deck)
>>> players, deck = draw(players, deck)
>>> for i in range(3):
print(len(players.pop()))
3
3
3
"""
pass
def play_backjack(nbr_players):
"""Simule une partie de blackjack entre "nbr_players"
:param nbr_players: nombre de joueurs
:return: File de tuples (joueur, score, tour élimination) dans l'ordre d'élimination
:example:
>>>
"""
result = File()
# -----------------------
# -----------------------
return result
if __name__ == "__main__":
# Test : Distribution de toutes les cartes
j = DeckOfCards()
while not j.is_empty():
print(j.depile())
# Test : Calcul de mains de blackjack
j = DeckOfCards()
while not j.is_empty():
mjoueurain_bjack(j)