-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.hs
159 lines (140 loc) · 8.48 KB
/
main.hs
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
import Butihask
type LlistaCartes = [[Carta]]
type Partida = [Carta]
cartes1::LlistaCartes
cartes1 = [
[Carta Manilla Bastos, Carta Vuit Bastos, Carta Tres Espases, Carta As Copes, Carta Quatre Bastos, Carta Cavall Espases, Carta Set Copes, Carta As Oros, Carta Cinc Bastos, Carta Sota Copes, Carta Quatre Espases, Carta Set Bastos],
[Carta Sota Bastos, Carta Cavall Bastos, Carta Manilla Espases, Carta Vuit Copes, Carta Cinc Oros, Carta Vuit Espases, Carta Manilla Copes, Carta Sis Oros, Carta Sota Oros, Carta Cinc Copes, Carta Set Oros, Carta Quatre Copes],
[Carta As Bastos, Carta Dos Oros, Carta Rei Espases, Carta Cavall Copes, Carta Vuit Oros, Carta As Espases, Carta Rei Copes, Carta Rei Oros, Carta Tres Copes, Carta Sis Copes, Carta Sis Espases, Carta Cinc Espases],
[Carta Dos Bastos, Carta Tres Bastos, Carta Dos Espases, Carta Dos Copes, Carta Sis Bastos, Carta Set Espases, Carta Tres Oros, Carta Quatre Oros, Carta Rei Bastos, Carta Cavall Oros, Carta Manilla Oros, Carta Sota Espases]
]
partida1::Partida
partida1 = [
Carta Manilla Bastos, Carta Sota Bastos, Carta As Bastos, Carta Dos Bastos,
Carta Vuit Bastos, Carta Cavall Bastos, Carta Dos Oros, Carta Tres Bastos,
Carta Rei Espases, Carta Dos Espases, Carta Tres Espases, Carta Manilla Espases,
Carta Vuit Copes, Carta Cavall Copes, Carta Dos Copes, Carta As Copes,
Carta Quatre Bastos, Carta Cinc Oros, Carta Vuit Oros, Carta Sis Bastos,
Carta As Espases, Carta Set Espases, Carta Cavall Espases, Carta Vuit Espases,
Carta Rei Copes, Carta Tres Oros, Carta Set Copes, Carta Manilla Copes,
Carta Quatre Oros, Carta As Oros, Carta Sis Oros, Carta Rei Oros,
Carta Cinc Bastos, Carta Sota Oros, Carta Tres Copes, Carta Rei Bastos,
Carta Cinc Copes, Carta Sis Copes, Carta Cavall Oros, Carta Sota Copes,
Carta Manilla Oros, Carta Quatre Espases, Carta Set Oros, Carta Sis Espases,
Carta Sota Espases, Carta Set Bastos, Carta Quatre Copes, Carta Cinc Espases
]
cartes2::LlistaCartes
cartes2 = cartes1
partida2::Partida
partida2 = [
Carta Manilla Bastos, Carta Sota Bastos, Carta As Bastos, Carta Dos Bastos,
Carta Vuit Bastos, Carta Cavall Bastos, Carta Dos Oros, Carta Tres Bastos,
Carta Rei Espases, Carta Dos Espases, Carta Tres Espases, Carta Manilla Espases,
Carta Vuit Copes, Carta Cavall Copes, Carta Dos Copes, Carta As Copes,
Carta Quatre Bastos, Carta Cinc Oros, Carta Vuit Oros, Carta Sis Bastos,
Carta As Espases, Carta Set Espases, Carta Cavall Espases, Carta Vuit Espases,
Carta Rei Copes, Carta Tres Oros, Carta Set Copes, Carta Manilla Copes,
Carta Quatre Oros, Carta As Oros, Carta Sis Oros, Carta Rei Oros,
Carta Cinc Bastos, Carta Sota Oros, Carta Tres Copes, Carta Rei Bastos,
Carta Cinc Copes, Carta Sis Copes, Carta Cavall Oros, Carta Sota Copes,
Carta Manilla Oros, Carta Quatre Espases, Carta Set Oros, Carta Sis Espases,
Carta Sota Espases, Carta Set Bastos, Carta Quatre Copes, Carta As Bastos
]
cartes3::LlistaCartes
cartes3 = [
[Carta Manilla Bastos, Carta Vuit Bastos, Carta Tres Espases, Carta As Copes, Carta Quatre Bastos, Carta Cavall Espases, Carta Set Copes, Carta As Oros, Carta Cinc Bastos, Carta Sota Copes, Carta Quatre Espases, Carta Set Bastos],
[Carta Sota Bastos, Carta Cavall Bastos, Carta Manilla Espases, Carta Vuit Copes, Carta Cinc Oros, Carta Vuit Espases, Carta Manilla Copes, Carta Sis Oros, Carta Sota Oros, Carta Cinc Copes, Carta Set Oros, Carta Quatre Copes],
[Carta As Bastos, Carta Dos Oros, Carta Rei Espases, Carta Cavall Copes, Carta Vuit Oros, Carta As Espases, Carta Rei Copes, Carta Rei Oros, Carta Tres Copes, Carta Sis Copes, Carta Sis Espases, Carta Cinc Espases],
[Carta Dos Bastos, Carta Tres Bastos, Carta Dos Espases, Carta Dos Copes, Carta Sis Bastos, Carta Set Espases, Carta Tres Oros, Carta Quatre Oros, Carta Rei Bastos, Carta Cavall Oros, Carta Manilla Oros, Carta Sota Espases]
]
partida3::Partida
partida3 = [
Carta Manilla Bastos, Carta Sota Bastos, Carta Cinc Espases, Carta Dos Bastos,
Carta Vuit Bastos, Carta Cavall Bastos, Carta Dos Oros, Carta Tres Bastos,
Carta Rei Espases, Carta Dos Espases, Carta Tres Espases, Carta Manilla Espases,
Carta Vuit Copes, Carta Cavall Copes, Carta Dos Copes, Carta As Copes,
Carta Quatre Bastos, Carta Cinc Oros, Carta Vuit Oros, Carta Sis Bastos,
Carta As Espases, Carta Set Espases, Carta Cavall Espases, Carta Vuit Espases,
Carta Rei Copes, Carta Tres Oros, Carta Set Copes, Carta Manilla Copes,
Carta Quatre Oros, Carta As Oros, Carta Sis Oros, Carta Rei Oros,
Carta Cinc Bastos, Carta Sota Oros, Carta Tres Copes, Carta Rei Bastos,
Carta Cinc Copes, Carta Sis Copes, Carta Cavall Oros, Carta Sota Copes,
Carta Manilla Oros, Carta Quatre Espases, Carta Set Oros, Carta Sis Espases,
Carta Sota Espases, Carta Set Bastos, Carta Quatre Copes, Carta Cinc Espases
]
cartes4::LlistaCartes
cartes4 = [
[Carta Manilla Bastos, Carta Vuit Bastos, Carta Tres Espases, Carta As Copes, Carta Quatre Bastos, Carta Cavall Espases, Carta Set Copes, Carta As Oros, Carta Cinc Bastos, Carta Sota Copes, Carta Quatre Espases, Carta Set Bastos],
[Carta Sota Bastos, Carta Cavall Bastos, Carta Manilla Espases, Carta Vuit Copes, Carta Cinc Oros, Carta Vuit Espases, Carta Manilla Copes, Carta Sis Oros, Carta Sota Oros, Carta Cinc Copes, Carta Set Oros, Carta Quatre Copes],
[Carta As Bastos, Carta Dos Oros, Carta Rei Espases, Carta Cavall Copes, Carta Vuit Oros, Carta As Espases, Carta Rei Copes, Carta Rei Oros, Carta Tres Copes, Carta Sis Copes, Carta Sis Espases, Carta Cinc Espases],
[Carta Dos Bastos, Carta Tres Bastos, Carta Dos Espases, Carta Dos Copes, Carta Sis Bastos, Carta Set Espases, Carta Tres Oros, Carta Quatre Oros, Carta Rei Bastos, Carta Cavall Oros, Carta Manilla Oros, Carta Sota Espases]
]
partida4::Partida
partida4 = [
Carta Manilla Bastos, Carta Sota Bastos, Carta As Bastos, Carta Dos Bastos,
Carta Vuit Bastos, Carta Cavall Bastos, Carta Dos Oros, Carta Tres Bastos,
Carta Rei Espases, Carta Dos Espases, Carta Tres Espases, Carta Vuit Espases,
Carta Vuit Copes, Carta Cavall Copes, Carta Dos Copes, Carta As Copes,
Carta Quatre Bastos, Carta Cinc Oros, Carta Vuit Oros, Carta Sis Bastos,
Carta As Espases, Carta Set Espases, Carta Cavall Espases, Carta Vuit Espases,
Carta Rei Copes, Carta Tres Oros, Carta Set Copes, Carta Manilla Copes,
Carta Quatre Oros, Carta As Oros, Carta Sis Oros, Carta Rei Oros,
Carta Cinc Bastos, Carta Sota Oros, Carta Tres Copes, Carta Rei Bastos,
Carta Cinc Copes, Carta Sis Copes, Carta Cavall Oros, Carta Sota Copes,
Carta Manilla Oros, Carta Quatre Espases, Carta Set Oros, Carta Sis Espases,
Carta Sota Espases, Carta Set Bastos, Carta Quatre Copes, Carta Cinc Espases
]
cartes5::LlistaCartes
cartes5 = cartes1
partida5 :: Partida
partida5 = partida1
partides :: [(LlistaCartes, Partida, Trumfu, String)]
partides = [
(cartes1, partida1, Trumfu Oros, "Partida correcte d'exemple (resultat 37 35)"),
(cartes2, partida2, Trumfu Oros, "Jugador tira una carta que ja havia tirat"),
(cartes3, partida3, Trumfu Oros, "Jugador té cartes del pal de sortida però tira un altre pal"),
(cartes4, partida4, Trumfu Oros, "Jugador pot matar la carta que guanya (rivals) amb pal de sortida i no ho fa"),
(cartes5, partida5, Butifarra, "Jugador tira en un ordre incorrecte")
]
size :: Int
size = length partides
mostraPartides :: Int -> IO ()
mostraPartides n
| n >= size = return ()
| otherwise = do
putStrLn (" [" ++ show n ++ "] " ++ desc)
mostraPartides (n + 1)
where (_, _, _, desc) = partides !! n
main :: IO ()
main = do
putStrLn ("Hi ha un total de " ++ show size ++ " partides per escollir:")
mostraPartides 0
putStrLn ("Escull-ne una [0-" ++ show (size - 1) ++ "]")
num <- getLine
let n = (read num :: Int)
if n < 0 || n >= size then do
putStrLn "Número invàlid. Torna-ho a provar..."
main
else do
let (cj, tir, trum, _) = partides !! read num
let resTrampa = trampa cj trum tir 1
case resTrampa of
Nothing ->
putStrLn "No hi ha hagut trampa!"
Just (basa, numBasa, numJugador) -> do
putStrLn "S'ha detectat trampa:"
putStrLn (" * Basa: " ++ show basa ++ " (num " ++ show numBasa ++ ")")
putStrLn (" * Jugador: " ++ show numJugador)
let resPuntuacio = puntsParelles cj trum tir 1
case resPuntuacio of
Nothing -> return ()
Just (p1, p2) -> do
putStrLn "La puntuació de les parelles és:"
putStrLn (" * Parella 1: " ++ show p1)
putStrLn (" * Parella 2: " ++ show p2)
putStrLn "Vols tornar a executar? [si/no]"
opcio <- getLine
if opcio == "si" then do
main
else
putStrLn ":)"