-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtpMonopoly.hs
More file actions
87 lines (67 loc) · 3.06 KB
/
tpMonopoly.hs
File metadata and controls
87 lines (67 loc) · 3.06 KB
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
import Text.Show.Functions
main :: IO ()
main = return ()
type Propiedad = (String, Int)
type Accion = Participante -> Participante
data Participante = Participante {
nombre::String,
dinero::Int,
tactica::String,
propiedades::[ Propiedad ],
acciones::[ Accion ]
} deriving Show
sumarDinero monto participante = participante { dinero = (dinero participante) + monto }
pasarPorElBanco :: Participante -> Participante
pasarPorElBanco (Participante nombre dinero tactica propiedades acciones) = Participante nombre (dinero + 40) "Comprador compulsivo" propiedades acciones
enojarse :: Participante -> Participante
enojarse (Participante nombre dinero tactica propiedades acciones) = Participante nombre (dinero + 50) tactica propiedades (acciones ++ [gritar])
gritar :: Participante -> Participante
gritar participante = participante {
nombre = ("AHHHH" ++ nombre participante)
}
esTacticaGanadora :: String -> Bool
esTacticaGanadora "Oferente singular" = True
esTacticaGanadora "Accionista" = True
esTacticaGanadora _ = False
adquirirPropiedad :: Propiedad -> Accion
adquirirPropiedad propiedad persona
= persona {
propiedades = (propiedad : propiedades persona),
dinero = (dinero persona - snd propiedad)
}
subastar :: Propiedad -> Accion
subastar propiedad persona
| esTacticaGanadora . tactica $ persona = adquirirPropiedad propiedad persona
| otherwise=persona
esBarata :: Propiedad -> Bool
esBarata (_, precio) = precio < 150
calcularValorPropiedad :: Propiedad -> Int
calcularValorPropiedad propiedad
| esBarata propiedad = 10
| otherwise = 20
sumarAlquileresPropiedades :: [Propiedad]->Int
sumarAlquileresPropiedades propiedades = sum (map calcularValorPropiedad propiedades)
sumarAlquileres :: Participante -> Int
sumarAlquileres participante = sumarAlquileresPropiedades (propiedades participante)
cobrarAlquileres :: Participante -> Participante
cobrarAlquileres participante = sumarDinero (sumarAlquileres participante) participante
pagarAAccionistas :: Participante -> Participante
pagarAAccionistas participante
| tactica participante == "Accionista" = sumarDinero 200 participante
| otherwise = sumarDinero (-100) participante
hacerBerrinchePor :: Propiedad -> Accion
hacerBerrinchePor propiedad participante
| snd propiedad <= dinero participante = adquirirPropiedad propiedad participante
| otherwise = hacerBerrinchePor propiedad (gritar (sumarDinero 10 participante))
ultimaRonda :: Participante -> Participante
ultimaRonda participante
= foldl (\p fn -> fn p) participante (acciones participante)
juegoFinal :: Participante -> Participante -> Participante
juegoFinal participante1 participante2
| dinero (ultimaRonda participante1) > dinero (ultimaRonda participante2) = ultimaRonda participante1
| otherwise = ultimaRonda participante2
-- Modelar a Carolina y Manuel
carolina :: Participante
manuel :: Participante
carolina = Participante "Carolina" 500 "Accionista" [] [pasarPorElBanco, pagarAAccionistas]
manuel = Participante "Manuel" 500 "Oferente singular" [] [pasarPorElBanco, enojarse]