-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathP5-Combate.st
327 lines (252 loc) · 8.98 KB
/
P5-Combate.st
1
Object subclass: #JuegoCombate instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Combate-Practica5'!!JuegoCombate methodsFor: 'as yet unclassified' stamp: 'ema 4/7/2018 18:35'!determinarGanadorEntreJugador: j1 y: j2 | turno ganador | turno := 1. [ j1 vida > 0 & (j2 vida > 0) & (turno < 10) ] whileTrue: [ (j1 jugadaParaTurno: turno) recibir: (j2 jugadaParaTurno: turno). turno := turno + 1 ]. ((j1 vida <= 0 and: j2 vida <= 0) or: (j1 vida = j2 vida)) ifTrue: [ ganador := 'Empate' ] ifFalse: [ j1 vida > j2 vida ifTrue: [ ganador := j1 nombre ] ifFalse: [ ganador := j2 nombre ] ]. Transcript show: 'El ganador es.. ' , ganador. ^ ganador! !Object subclass: #JugadorCombate instanceVariableNames: 'jugadas vida nombre tactica' classVariableNames: '' poolDictionaries: '' category: 'Combate-Practica5'!!JugadorCombate methodsFor: 'as yet unclassified' stamp: 'ema 4/7/2018 16:57'!reducir: unaCantidad vida := vida - unaCantidad ! !!JugadorCombate methodsFor: 'initialization' stamp: 'ema 4/7/2018 17:55'!initialize super initialize. jugadas := Array new. vida := 100. nombre := 'Sin nombre'! !!JugadorCombate methodsFor: 'accessing' stamp: 'ema 5/4/2018 17:36'!tactica ^ tactica! !!JugadorCombate methodsFor: 'accessing' stamp: 'ema 4/7/2018 16:58'!nombre ^ nombre! !!JugadorCombate methodsFor: 'accessing' stamp: 'ema 5/4/2018 21:30'!jugadaParaTurno: numero " la practica 1 devolvia esto, pero la practica 4 se lo envia a su estrategia" "^ jugadas at: numero" ^ (tactica jugadaParaTurno: numero) jugador: self; yourself! !!JugadorCombate methodsFor: 'accessing' stamp: 'ema 4/7/2018 17:10'!jugadas ^ jugadas! !!JugadorCombate methodsFor: 'accessing' stamp: 'ema 5/4/2018 17:36'!tactica: unaTactica tactica := unaTactica ! !!JugadorCombate methodsFor: 'accessing' stamp: 'ema 4/7/2018 16:58'!nombre: unString nombre := unString! !!JugadorCombate methodsFor: 'accessing' stamp: 'ema 4/7/2018 17:26'!vida ^ vida! !!JugadorCombate methodsFor: 'accessing' stamp: 'ema 4/7/2018 18:05'!jugadas: unArrayDeBinarios "Recibe un array de 1 y 0 y lo convierte en un array de movimientos" | jugada | jugadas := OrderedCollection new. unArrayDeBinarios do: [ :binario | binario = 0 ifTrue: [ jugada := Bloqueo new ] ifFalse: [ jugada := Golpe new ]. jugada jugador: self. jugadas add: jugada ]! !Object subclass: #Movimiento instanceVariableNames: 'jugador' classVariableNames: '' poolDictionaries: '' category: 'Combate-Practica5'!!Movimiento methodsFor: 'accessing' stamp: 'ema 4/7/2018 16:12'!jugador: unJugador jugador := unJugador! !!Movimiento methodsFor: 'accessing' stamp: 'ema 4/7/2018 16:13'!jugador ^ jugador! !!Movimiento methodsFor: 'accessing' stamp: 'ema 4/7/2018 16:15'!quitar: vida self jugador reducir: vida! !!Movimiento methodsFor: 'as yet unclassified' stamp: 'ema 4/7/2018 16:53'!recibir: unMovimiento ShouldBeImplemented! !Movimiento subclass: #Bloqueo instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Combate-Practica5'!!Bloqueo methodsFor: 'as yet unclassified' stamp: 'ema 4/7/2018 18:45'!recibirGolpe: unGolpe "El jugador que golpea a uno que está bloqueando resta 10 " unGolpe jugador reducir: 10! !!Bloqueo methodsFor: 'as yet unclassified' stamp: 'ema 4/7/2018 16:44'!recibirBloqueo: BloqueoDeA "Ambos jugadores bloquean: en este caso la energía de ambos se mantiene igual"! !!Bloqueo methodsFor: 'as yet unclassified' stamp: 'ema 4/7/2018 16:30'!recibir: unMovimiento unMovimiento recibirBloqueo: self.! !Movimiento subclass: #Golpe instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Combate-Practica5'!!Golpe methodsFor: 'as yet unclassified' stamp: 'ema 4/7/2018 16:48'!recibirGolpe: unGolpe "Ambos golpean: el jugador A resta de su energia el 20% de la energía que tiene B, yel jugador B resta el 20% de la energía que tiene A" | dmgParaA dmgParaB | dmgParaA := 1 / 5 * self jugador vida. dmgParaB := 1 / 5 * unGolpe jugador vida. unGolpe jugador reducir: dmgParaA. self jugador reducir: dmgParaB! !!Golpe methodsFor: 'as yet unclassified' stamp: 'ema 4/7/2018 16:51'!recibirBloqueo: BloqueoDeA "El jugador A bloquea y el jugador B golpea en este caso el que golpea (B) pierde 10puntos de energía" self jugador reducir: 10.! !!Golpe methodsFor: 'as yet unclassified' stamp: 'ema 4/7/2018 16:52'!recibir: unMovimiento unMovimiento recibirGolpe: self! !Object subclass: #Tactica instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Combate-Practica5'!Tactica subclass: #TacticaAgresiva instanceVariableNames: 'jugadas random' classVariableNames: '' poolDictionaries: '' category: 'Combate-Practica5'!!TacticaAgresiva methodsFor: 'accessing' stamp: 'ema 5/8/2018 21:38'!jugadaParaTurno: unTurno | jugada | jugada := jugadas atRandom. jugadas remove: jugada. jugada = 1 ifTrue: [ ^ Golpe new ] ifFalse: [ ^ Bloqueo new ].! !!TacticaAgresiva methodsFor: 'initialization' stamp: 'ema 5/4/2018 16:42'!initialize super initialize. random := Random new. jugadas := #(0 0 0 1 1 1 1 1 1 1) asBag! !Tactica subclass: #TacticaDefensiva instanceVariableNames: 'jugadas random' classVariableNames: '' poolDictionaries: '' category: 'Combate-Practica5'!!TacticaDefensiva methodsFor: 'accessing' stamp: 'ema 5/8/2018 21:38'!jugadaParaTurno: unTurno | jugada | jugada := jugadas atRandom. jugadas remove: jugada. jugada = 1 ifTrue: [ ^ Golpe new ] ifFalse: [ ^ Bloqueo new ]! !!TacticaDefensiva methodsFor: 'initialization' stamp: 'ema 5/4/2018 16:42'!initialize super initialize. random := Random new. jugadas := #(1 1 1 0 0 0 0 0 0 0) asBag! !Tactica subclass: #TacticaGolpeBloqueo instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Combate-Practica5'!!TacticaGolpeBloqueo methodsFor: 'accessing' stamp: 'ema 5/4/2018 21:15'!jugadaParaTurno: unTurno "Devuelve 1 (golpe) para los turnos impares y 0 (bloqueo) para los turnos pares" ((unTurno rem: 2) = 1) ifTrue: [ ^ Golpe new ] ifFalse: [ ^ Bloqueo new ]! !Tactica subclass: #TacticaRandom instanceVariableNames: 'random' classVariableNames: '' poolDictionaries: '' category: 'Combate-Practica5'!!TacticaRandom methodsFor: 'accessing' stamp: 'ema 5/4/2018 21:53'!jugadaParaTurno: unTurno "Devuelve aleatoriamente 0 o 1 (bloquear o golpear)" ((random nextInt: 2) = 1) ifTrue: [ ^ Golpe new ] ifFalse: [ ^ Bloqueo new ]! !!TacticaRandom methodsFor: 'initialization' stamp: 'ema 5/4/2018 15:44'!initialize super initialize. random := Random new! !TestCase subclass: #TestCombateObsoleto instanceVariableNames: 'J1 J2 juego' classVariableNames: '' poolDictionaries: '' category: 'Combate-Practica5'!!TestCombateObsoleto methodsFor: 'initialization' stamp: 'ema 5/4/2018 17:38'!setUp J1 := JugadorCombate new. J2 := JugadorCombate new. juego := JuegoCombate new. J1 tactica: TacticaAgresiva new. J2 tactica: TacticaDefensiva new.! !!TestCombateObsoleto methodsFor: 'tests' stamp: 'ema 5/4/2018 21:59'!testGana1PorDefault"Pertenece a la practica 1" J1 jugadas: #(0 0 0 0 0 0 0 0 0 0). J2 jugadas: #(0 0 0 0 0 0 1 0 1 0). self assert: (juego determinarGanadorEntreJugador: J1 y: J2) = J1 nombre! !!TestCombateObsoleto methodsFor: 'tests' stamp: 'ema 5/4/2018 21:59'!testGana2PorKO"Pertenece a la practica 1" J1 jugadas: #(1 1 1 1 1 1 1 1 1 1). J2 jugadas: #(0 0 0 0 0 0 0 0 0 0). self assert: (juego determinarGanadorEntreJugador: J1 y: J2) = J2 nombre! !!TestCombateObsoleto methodsFor: 'tests' stamp: 'ema 5/4/2018 21:43'!testEmpate"El test es de la practica 1" J1 jugadas: #(1 0 1 0 1 0 1 0 1 0). J2 jugadas: #(1 0 1 0 1 0 1 0 1 0). self assert: (juego determinarGanadorEntreJugador: J1 y: J2) = 'Empate'! !TestCase subclass: #TestCombatePractica5 instanceVariableNames: 'J1 J2 juego' classVariableNames: '' poolDictionaries: '' category: 'Combate-Practica5'!!TestCombatePractica5 methodsFor: 'initialization' stamp: 'ema 5/8/2018 21:48'!setUp J1 := JugadorCombate new. J2 := JugadorCombate new. juego := JuegoCombate new.! !!TestCombatePractica5 methodsFor: 'tests' stamp: 'ema 5/8/2018 21:55'!testDefensivoVsRandom "Gano defensivo" 100 timesRepeat: [ J1 tactica: TacticaDefensiva new. J1 nombre: 'Defensivo'. J2 tactica: TacticaRandom new. J2 nombre: 'Random'. juego determinarGanadorEntreJugador: J1 y: J2 ]! !!TestCombatePractica5 methodsFor: 'tests' stamp: 'ema 5/8/2018 21:57'!testGolpePorGolpeVsRandom "Gano random" 100 timesRepeat: [ J1 tactica: TacticaGolpeBloqueo new. J1 nombre: 'GolpeBloqueo'. J2 tactica: TacticaRandom new. J2 nombre: 'Random'. juego determinarGanadorEntreJugador: J1 y: J2 ]! !!TestCombatePractica5 methodsFor: 'tests' stamp: 'ema 5/8/2018 21:54'!testAgresivoVsRandom"Gano random" 100 timesRepeat: [ J1 tactica: TacticaAgresiva new. J1 nombre: 'Agresivo'. J2 tactica: TacticaRandom new. J2 nombre: 'Random'. juego determinarGanadorEntreJugador: J1 y: J2 ]! !