-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHabitante.wlk
118 lines (85 loc) · 2.01 KB
/
Habitante.wlk
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
class Habitante {
const inteligencia
const valentia
method poder() {
return valentia + inteligencia
}
}
class Planeta {
const habitantes = []
method poder() = habitantes.sum{h=>h.poder()}
method poseeOrden() = self.habitantesMasPoderosos().sum{h=>h.poder()} > self.poder()/2
method habitantesMasPoderosos() =
habitantes.sortedBy({a, b => a.poder() > b.poder()}).take(3)
}
class Soldado inherits Habitante{
const armas = []
method agarrarArma(nueva){
armas.add(nueva)
}
override method poder() = super() + self.potenciaArmas()
method potenciaArmas() = armas.filter{a=>a.util()}.sum{a=>a.potencia()}
}
class Sable {
var property energia
}
class Maestro inherits Soldado{
var midiclorianos = 3000
var sable
var property lado
var property tiempo
var interior = 1
override method poder() = super() + midiclorianos/1000 + lado.potenciaDel(sable,tiempo)
method vivirSuceso(suceso){
tiempo += 1
lado.haceVivirSuceso(suceso,self)
}
method cambiarLado() {
tiempo = 0
lado = lado.opuesto()
armas.forEach({a=>a.reparar()})
}
method interior() = interior
method aumentarInterior(cant) {
interior += cant
}
method aumentarPorcentaje(porc){
interior = interior * (1 + porc/100)
}
}
object ladoLuz{
method potenciaDel(sable,tiempo) = sable.energia() * tiempo
method haceVivirSuceso(suceso,maestro){
maestro.aumentarInterior(suceso.cargaEmocional())
if(maestro.interior()<=0){
maestro.cambiarLado()
}
}
method opuesto() = ladoOscuro
}
object ladoOscuro{
method potenciaDel(sable,tiempo) = sable.energia() * 2 * tiempo
method haceVivirSuceso(suceso,maestro){
if( maestro.interior() < suceso.cargaEmocional()) {
maestro.cambiarLado()
}
else{
maestro.aumentarPorcentaje(10)
}
}
method opuesto() = ladoLuz
}
class Suceso{
var property cargaEmocional
}
class Arma{
const property potencia
var desgaste = false
method util() = not desgaste and potencia > 10
method usar() {
desgaste = true
}
method reparar(){
desgaste = false
}
}