188 lines
4.4 KiB
Python
188 lines
4.4 KiB
Python
"""
|
||
Projet jeu de Blackjack
|
||
=======================
|
||
|
||
But du jeu : Après avoir reçu deux cartes, le joueur tire des cartes pour s’approcher 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)
|