1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
| using Base, Test, Random
#=
♠ "\spadessuit" "pique"
♢ "\diamondsuit" "carreau"
♡ "\heartsuit" "coeur"
♣ "\clubsuit" "trèfle"
=#
const noms_couleurs = ["♣", "♦", "♥", "♠"]
const noms_rangs = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "V", "D", "R"]
abstract type Ensemble_de_cartes end
"""
Une carte à jouer.
couleur : la couleur de la carte (pique, carreau, coeur, trèfle)
rang, de 1 à 13 : ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "V", "D", "R"]
"""
struct Carte
couleur::Int64
rang::Int64
function Carte(couleur::Int64, rang::Int64)
@assert(1 ≤ couleur ≤ 4, "la couleur n'est pas entre 1 et 4")
@assert(1 ≤ rang ≤ 13, "le rang n'est pas entre 1 et 13")
new(couleur, rang)
end
end
"""
Un paquet de cartes à jouer contenant 52 Carte.
"""
struct Paquet <: Ensemble_de_cartes
cartes::Vector{Carte}
function Paquet()
paquet = new(Carte[])
for couleur in 1:4
for rang in 1:13
push!(paquet.cartes, Carte(couleur, rang))
end
end
paquet
end
end
"""
Une main vide de Carte.
"""
struct Une_main <: Ensemble_de_cartes
cartes::Vector{Carte}
label::String
function Une_main(label::String="")
new(Carte[], label)
end
end
Base.show(io::IO, carte::Carte) = print(io, noms_rangs[carte.rang], noms_couleurs[carte.couleur])
Base.isless(c1::Carte, c2::Carte) = (c1.couleur, c1.rang) < (c2.couleur, c2.rang)
Base.show(io::IO, jeu::Ensemble_de_cartes) = begin
for carte in jeu.cartes
print(io, " $carte")
end
println(io)
end
Base.pop!(jeu::Ensemble_de_cartes) = pop!(jeu.cartes)
Base.push!(jeu::Ensemble_de_cartes, carte::Carte) = push!(jeu.cartes, carte)
Random.shuffle!(jeu::Ensemble_de_cartes) = shuffle!(jeu.cartes)
Base.sort!(jeu::Ensemble_de_cartes) = sort!(jeu.cartes)
"""
n le nb de carte dans une main.
"""
donne!(jeu::Ensemble_de_cartes, main::Une_main, n::Int64) = begin
@assert 1 ≤ n ≤ length(jeu.cartes)
shuffle!(jeu)
for k in 1:1:n
carte = pop!(jeu)
push!(main, carte)
end
sort!(main)
end
"""
m le nb de main.
n le nb de carte dans une main.
retourne un array de mains, chacune contenant n cartes.
"""
deal!(jeu::Ensemble_de_cartes; m::Int64=4, n::Int64=5) = begin
nb_cartes = length(jeu.cartes)
@assert div(nb_cartes, m * n) ≥ 1
@assert 1 ≤ n ≤ nb_cartes
mains = Vector{Une_main}()
for k in 1:1:m # nb de main
push!(mains, Une_main("main_$(k)"))
end
for main in mains
donne!(jeu, main, n)
end
mains
end
function main()
valet_coeur = Carte(3, 11)
valet_coeur |> println
dame_pique = Carte(4, 12)
dame_pique |> println
isless(valet_coeur, dame_pique) |> println
@test Carte(1, 3) < Carte(2, 2)
if valet_coeur < dame_pique
println("OK")
end
jeu = Paquet()
roi_pique = pop!(jeu)
jeu |> println
push!(jeu, roi_pique)
jeu |> println
shuffle!(jeu)
jeu |> println
sort!(jeu)
jeu |> println
ma_main = Une_main("main_dvjh")
donne!(jeu, ma_main, 5)
ma_main |> println
jeu |> println
nouveau_jeu = Paquet()
mains = deal!(nouveau_jeu, m=6, n=5)
for main in mains
println("$(main.label) : $main")
end
nouveau_jeu |> println
return
end
#=
V♥
D♠
true
OK
A♣ 2♣ 3♣ 4♣ 5♣ 6♣ 7♣ 8♣ 9♣ 10♣ V♣ D♣ R♣ A♦ 2♦ 3♦ 4♦ 5♦ 6♦ 7♦ 8♦ 9♦ 10♦ V♦ D♦ R♦ A♥ 2♥ 3♥ 4♥ 5♥ 6♥ 7♥ 8♥ 9♥ 10♥ V♥ D♥ R♥ A♠ 2♠ 3♠ 4♠ 5♠ 6♠ 7♠ 8♠ 9♠ 10♠ V♠ D♠
A♣ 2♣ 3♣ 4♣ 5♣ 6♣ 7♣ 8♣ 9♣ 10♣ V♣ D♣ R♣ A♦ 2♦ 3♦ 4♦ 5♦ 6♦ 7♦ 8♦ 9♦ 10♦ V♦ D♦ R♦ A♥ 2♥ 3♥ 4♥ 5♥ 6♥ 7♥ 8♥ 9♥ 10♥ V♥ D♥ R♥ A♠ 2♠ 3♠ 4♠ 5♠ 6♠ 7♠ 8♠ 9♠ 10♠ V♠ D♠ R♠
A♣ R♥ 7♠ A♥ V♠ 5♦ 10♣ 6♦ 8♣ D♠ R♠ A♠ V♦ 6♠ 4♣ 3♣ 4♦ D♦ 10♠ 3♥ 9♦ 8♦ 7♦ D♥ 10♦ 10♥ D♣
5♥ 8♥ A♦ 5♣ 8♠ 9♠ 4♠ V♥ 7♥ 3♦ 2♠ 2♣ 9♣ 2♥ 3♠ 5♠ 7♣ V♣ 9♥ 6♥ 6♣ 2♦ R♣ R♦ 4♥
A♣ 2♣ 3♣ 4♣ 5♣ 6♣ 7♣ 8♣ 9♣ 10♣ V♣ D♣ R♣ A♦ 2♦ 3♦ 4♦ 5♦ 6♦ 7♦ 8♦ 9♦ 10♦ V♦ D♦ R♦ A♥ 2♥ 3♥ 4♥ 5♥ 6♥ 7♥ 8♥ 9♥ 10♥ V♥ D♥ R♥ A♠ 2♠ 3♠ 4♠ 5♠ 6♠ 7♠ 8♠ 9♠ 10♠ V♠ D♠ R♠
A♣ 2♣ 5♣ 4♦ 3♥
4♠ 6♣ 10♣ D♥ 7♥ 10♥ 8♣ 7♠ 4♥ 5♦ V♠ 8♥ A♦ V♦ D♣ 7♦ 10♠ 7♣ A♥ V♣ 4♣ R♥ 6♠ R♦ 8♠ D♠ R♠ 8♦ 5♥ 9♠ 2♥ 9♦ 2♦ 3♠ D♦ 9♣ R♣ 6♦ 3♦ 2♠ 9♥ 5♠ 3♣ 10♦ A♠ 6♥ V♥
main_1 : 10♣ 6♦ D♦ 2♥ A♠
main_2 : 3♣ A♦ 5♦ 9♥ 9♠
main_3 : A♣ 9♦ 8♥ 5♠ D♠
main_4 : 4♣ 9♣ 7♦ 8♦ 5♥
main_5 : 2♣ 5♣ R♣ 6♥ R♥
main_6 : 10♦ V♦ 7♥ 10♥ 2♠
8♣ A♥ V♥ D♣ 7♣ V♣ D♥ 6♣ 2♦ 3♠ 7♠ 3♦ 4♦ 4♥ 4♠ 10♠ V♠ R♦ 8♠ 3♥ R♠ 6♠
0.007767 seconds (2.05 k allocations: 91.844 KiB)
=#
@time main()
@time main() |