-
Notifications
You must be signed in to change notification settings - Fork 0
/
RatonMorph-estrategia.st
60 lines (44 loc) · 2.34 KB
/
RatonMorph-estrategia.st
1
'From Squeak2.7 of 5 January 2000 [latest update: #1782] on 27 December 2000 at 10:49:31 pm'!!RatonMorph methodsFor: 'accion' stamp: 'pa 12/27/2000 22:48'!estrategia "Devuelve el nodo al que le conviene ir segun una estrategia" | vec puntajes habitantes valor elegidos | "Evaluar‡ cada nodo vecino y le asignar‡ puntajes a cada uno segœn dist’ntos criterios" puntajes _ RunArray new. ( ( vec _ (self dondeEstoyVecinos)asArray)isEmpty ) "obtiene los vecinos y los guarda en un array" ifTrue: [self error: 'Un nodo est‡ aislado'] "si no hay vecinos env’a un error" ifFalse: [ ((self dondeEstoy)class == PuertaMorph) ifTrue: [ ^(self dondeEstoy) ] "Si est‡ en una puerta la elige" ifFalse: [ "sino..." 1 to: (vec size) do: [:nodo| "para cada vecino evalœa:" valor _ 10. "valor inicial del nodo" "si un vecino es una salida, resta un valor" ((vec at:nodo)class == PuertaMorph ) ifTrue: [ valor _ (valor - 10)]. habitantes _ ((vec at:nodo)habitan)asArray. "los habitantes del nodo vecino" "por cada gato que hay en el nodo vecino suma un valor" 1 to: (habitantes size) do: [:alguien| ((habitantes at:alguien)class == GatoMorph) ifTrue: [ valor _ (valor + 10)] ]. "Asigna valores segœn los rastros" ( ((vec at:nodo)olor: #bicho)class == GatoMorph ) ifTrue: [ ( ((vec at:nodo)olor: #olor) = 'caliente' ) ifTrue: [valor _ (valor + 8)]. ( ((vec at:nodo)olor: #olor) = 'tibio' ) ifTrue: [valor _ (valor + 5)]. ( ((vec at:nodo)olor: #olor) = 'frio' ) ifTrue: [valor _ (valor + 3)]. ]. ( ((vec at:nodo)olor: #bicho)class == RatonMorph ) ifTrue: [ ( ((vec at:nodo)olor: #olor) = 'caliente' ) ifTrue: [valor _ (valor + 7)]. ( ((vec at:nodo)olor: #olor) = 'tibio' ) ifTrue: [valor _ (valor + 4)]. ( ((vec at:nodo)olor: #olor) = 'frio' ) ifTrue: [valor _ (valor + 2)]. ]. "arma el arreglo 'puntajes' con los valores asignados a cada nodo" puntajes addLast:valor. Transcript show: (puntajes asString). ]. "Arma un array con los nodos de puntaje minimo y elige uno al azar" elegidos _ RunArray new. 1 to:(puntajes size) do: [:nodo| ((puntajes minimo) == (puntajes at:nodo)) ifTrue: [elegidos addLast:(vec at:nodo)] ]. ^(elegidos atRandom). ]. ]! !