Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Error subclass: #ErrorInstanciaInvalida
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Ahorcado'!
- Error subclass: #JuegoTerminado
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Ahorcado'!
- Object subclass: #Palabra
- instanceVariableNames: 'palabra dicPalabra acertijo'
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Ahorcado'!
- !Palabra methodsFor: 'as yet unclassified' stamp: 'Lucia 4/17/2012 00:41'!
- agregarADic: letra ConPos: posicion
- "Agrega la posicion a la letra en el
- diccionario de la clase. "
- | letraAux |
- (letra = nil) ifTrue: [ ErrorEntradaInvalida new signal. ].
- (dicPalabra = nil) ifTrue: [ ErrorInstanciaInvalida new signal. ].
- letraAux := letra asLowercase .
- "Si la letra no pertenecia al diccionario, se inicializa con una lista vacia"
- dicPalabra at: letraAux ifAbsent: [ dicPalabra at: letraAux put: LinkedList new ].
- (dicPalabra at: letra) add: posicion.
- ! !
- !Palabra methodsFor: 'as yet unclassified' stamp: 'Lucia 4/16/2012 14:28'!
- crearDicc
- "Crea el diccionario de la palabra de la clase
- con las letras de la palabra como claves, y sus
- posiciones dentro de ella como los valores."
- | contPosicion |
- ( palabra = nil ) ifTrue: [ ErrorInstanciaInvalida new signal. ].
- dicPalabra := Dictionary new.
- contPosicion := 1 .
- palabra do: [ : letra |
- ( letra ~= Character space ) ifTrue: [
- self agregarADic: letra ConPos: contPosicion.
- ].
- contPosicion := contPosicion + 1 .
- ].
- ! !
- !Palabra methodsFor: 'as yet unclassified' stamp: 'Lucia 4/18/2012 14:37'!
- inicializarAcertijo
- "Crea un acertijo con el mismo tamaño que palabra
- donde sus letras fueron reemplazadas por otro caracter."
- | acertijoAux letraOcultaAux |
- acertijoAux := ''.
- letraOcultaAux := '-'.
- (palabra = nil ) ifTrue: [ ErrorInstanciaInvalida new signal. ].
- palabra do: [ : letra |
- (letra = Character space) ifTrue: [
- acertijoAux := acertijoAux , ' '.
- ].
- (letra ~= Character space) ifTrue: [
- acertijoAux := acertijoAux , letraOcultaAux.
- ].
- ].
- ^ acertijoAux.! !
- !Palabra methodsFor: 'as yet unclassified' stamp: 'Lucia 4/18/2012 17:51'!
- inicializarPalabra: palabraAux
- "inicializador de palabra
- Pre: la palabra ingresada no tiene espacios al principio
- ni al final de la misma. Ni espacios intermedios de
- mas en caso de ser frase.
- Post: se asigno a Palabra el argumento y se creo el
- diccionario correspondiente a la palabra. "
- (palabraAux = nil) ifTrue: [ ErrorEntradaInvalida new signal. ].
- palabra := ((palabraAux asString) asLowercase) .
- self crearDicc .
- acertijo := self inicializarAcertijo.! !
- !Palabra methodsFor: 'as yet unclassified' stamp: 'Lucia 4/18/2012 16:00'!
- modificarAcertijoenPosiciones: posiciones
- "Modifica el acertijo de la clase con el caracter en
- las posiciones pedidas."
- (posiciones = nil) ifTrue: [ ErrorEntradaInvalida new signal. ].
- (palabra = nil) ifTrue: [ ErrorInstanciaInvalida new signal. ].
- posiciones do: [ : posicion |
- acertijo at: posicion put: (palabra at: posicion).
- ].! !
- !Palabra methodsFor: 'as yet unclassified' stamp: 'Lucia 4/16/2012 15:52'!
- posicionesEnPalabraDeLetra: caracter
- "Busca el caracter en el diccionario de la palabra.
- En caso de pertenecer el caracter al diccionario,
- devuelve la lista con posiciones de este en la palabra.
- Sino devuelve una lista.
- Post: Devuelve una lista. "
- |caracterAux|
- (caracter = nil) ifTrue: [ ErrorEntradaInvalida new signal. ].
- (dicPalabra = nil) ifTrue: [ ErrorInstanciaInvalida new signal. ].
- caracterAux := caracter asLowercase.
- ^ (dicPalabra at: caracterAux ifAbsent: LinkedList new).! !
- !Palabra methodsFor: 'as yet unclassified' stamp: 'Lucia 4/16/2012 10:19'!
- verDicc
- "Devuelve el diccionario de la palabra."
- ^dicPalabra.! !
- !Palabra methodsFor: 'as yet unclassified' stamp: 'Lucia 4/16/2012 10:19'!
- verPalabra
- "Devuelve la palabra de la clase."
- ^ palabra .! !
- !Palabra methodsFor: 'as yet unclassified' stamp: 'Lucia 4/18/2012 14:45'!
- verPalabraAcertijo
- "comment stating purpose of message"
- ^ acertijo.! !
- Object subclass: #Juego
- instanceVariableNames: 'palabra vidas letrasArriesgadas'
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Ahorcado'!
- !Juego methodsFor: 'as yet unclassified' stamp: 'Lucia 4/19/2012 00:31'!
- arriesgarLetra: caracter
- "Se evalua si el caracter pertenece a la palabra en juego.
- De ser asi, se modifica el acertijo de manera correspondiente
- al tipo estrategia de la palabra.
- Si el caracter no pertenecia, se modifican las vidas y las
- letras arriesgadas en el juego."
- | caracterAux listaPosicionesEnPalabra |
- ( self juegoTerminado ) ifTrue: [ JuegoTerminado new signal. ].
- (palabra = nil) ifTrue: [ ErrorInstanciaInvalida new signal. ].
- (caracter = nil) ifTrue: [ ErrorEntradaInvalida new signal. ].
- caracterAux := ((caracter asCharacter) asLowercase).
- listaPosicionesEnPalabra := ( palabra posicionesEnPalabraDeLetra: caracterAux ).
- "Si la lista esta vacia, no hay posiciones en la palabra donde se encuentre el caracter."
- (listaPosicionesEnPalabra isEmpty) ifTrue: [
- self restarVida.
- letrasArriesgadas add: caracterAux.
- ].
- (listaPosicionesEnPalabra isEmpty) ifFalse: [
- palabra modificarAcertijoenPosiciones: listaPosicionesEnPalabra .
- ].
- ! !
- !Juego methodsFor: 'as yet unclassified' stamp: 'Lucia 4/18/2012 19:34'!
- evaluarVidas
- "Devuelve la cantidad de vidas que le corresponden a la palabra en juego.
- Si la palabra es solo una, seran 6 vidas, si es una frase, seran 8 vidas.
- Si la palabra no es valida, devuelve 0."
- | vidasPalabra vidasFrase palabraAux|
- vidasPalabra := 6.
- vidasFrase := 8.
- (palabra = nil) ifTrue: [ ErrorInstanciaInvalida new signal. ].
- palabraAux := palabra verPalabra.
- palabraAux do: [: letra |
- "Si palabras tienen espacios son para separarse palabras, entonces son frases."
- (letra = Character space ) ifTrue: [ ^ vidasFrase. ].
- ].
- ^ vidasPalabra .
- ! !
- !Juego methodsFor: 'as yet unclassified' stamp: 'Lucia 4/18/2012 16:17'!
- informacionJuego
- " Devuelve en forma de cadena toda la informacion
- publica del juego."
- | info |
- info := 'Adivinando: ', palabra verPalabraAcertijo, '. Vidas: ', self verVidas,
- '. Letras Arriesgadas: ', self verLetrasArriesgadas.
- ^ info.
- ! !
- !Juego methodsFor: 'as yet unclassified' stamp: 'Lucia 4/17/2012 00:39'!
- iniciarJuegoCon: palabraAux
- "Constructor del Juego.
- Inicia el juego con la palabra recibida,
- asigna la cantidad de vidas para el juego,
- inicia la lista de letras arriesgadas."
- (palabraAux = nil) ifTrue: [ ErrorEntradaInvalida new signal. ].
- (palabraAux verPalabra = nil) ifTrue: [ ErrorEntradaInvalida new signal. ].
- palabra := palabraAux.
- vidas := self evaluarVidas.
- letrasArriesgadas := LinkedList new.
- ! !
- !Juego methodsFor: 'as yet unclassified' stamp: 'Lucia 4/18/2012 16:50'!
- juegoGanado
- "Devuelve true en caso de haber ganado el juego."
- ( self verPalabraAcertijo = palabra verPalabra) ifTrue: [
- ^ true.
- ].
- ^ false.! !
- !Juego methodsFor: 'as yet unclassified' stamp: 'Lucia 4/18/2012 16:23'!
- juegoPerdido
- "Devuelve true en caso de haber perdido, false en caso contrario."
- ( self verVidas = 0) ifTrue: [
- ^ true.
- ].
- ^ false.! !
- !Juego methodsFor: 'as yet unclassified' stamp: 'Lucia 4/18/2012 16:25'!
- juegoTerminado
- "Devuelve true en caso de haber terminado el juego."
- ( self juegoGanado | self juegoPerdido ) ifTrue: [
- ^ true.
- ].
- ^ false.! !
- !Juego methodsFor: 'as yet unclassified' stamp: 'Lucia 4/17/2012 00:39'!
- restarVida
- "Cada vez que es llamado este metodo,
- resta una vida al juego."
- (vidas = nil) ifTrue: [ ErrorInstanciaInvalida new signal. ].
- vidas := vidas - 1 .! !
- !Juego methodsFor: 'as yet unclassified' stamp: 'Lucia 4/18/2012 16:12'!
- verLetrasArriesgadas
- "Devuelve en forma de cadena las letras
- arriesgadas durante el juego."
- | letrasMostrar |
- letrasMostrar := ' '.
- (letrasArriesgadas = nil) ifTrue: [ ErrorInstanciaInvalida new signal. ].
- letrasArriesgadas do: [ : letra |
- letrasMostrar := letrasMostrar , (letra asString) .
- ].
- ^ letrasMostrar.! !
- !Juego methodsFor: 'as yet unclassified' stamp: 'Lucia 4/16/2012 14:39'!
- verPalabraAcertijo
- "Devuelve el acertijo perteneciente
- a la palabra en juego."
- (palabra = nil) ifTrue: [ErrorInstanciaInvalida new signal.].
- ^ (palabra verPalabraAcertijo).! !
- !Juego methodsFor: 'as yet unclassified' stamp: 'Lucia 4/16/2012 03:55'!
- verVidas
- "Devuelve un valor entero que representa
- la cantidad de vidas que hay en juego."
- ^ vidas .! !
- Palabra subclass: #Proximidad
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Ahorcado'!
- !Proximidad methodsFor: 'as yet unclassified' stamp: 'Lucia 4/18/2012 16:10'!
- inicializarProximidad: palabraAux
- "Constructor de palabra Proximidad.
- Asigna la palabra a la clase e inicia
- el acertijo correspondiente."
- self inicializarPalabra: palabraAux.
- ! !
- !Proximidad methodsFor: 'as yet unclassified' stamp: 'Lucia 4/18/2012 16:02'!
- modificarAcertijoenPosiciones: posiciones
- "Modifica el acertijo de la clase con el caracter en
- las posiciones pedidas y en las letras vecinas a estas."
- | posSiguiente posAnterior inicioPalabra finPalabra |
- (palabra = nil) ifTrue: [ ErrorInstanciaInvalida new signal. ].
- posSiguiente := 1. "posSiguiente será un valor mas al que se esta evaluando"
- posAnterior := -1. "posAnterior será un valor menos al que se esta evaluando"
- inicioPalabra := 1.
- finPalabra := palabra size.
- (posiciones = nil) ifTrue: [ ErrorEntradaInvalida new signal. ].
- posiciones do: [ : posicion |
- acertijo at: posicion put: (palabra at: posicion) .
- self modificarCaracterAcertijoDesde: posicion En: posSiguiente Evaluando: finPalabra.
- self modificarCaracterAcertijoDesde: posicion En: posAnterior Evaluando: inicioPalabra.
- ].! !
- !Proximidad methodsFor: 'as yet unclassified' stamp: 'Lucia 4/18/2012 15:40'!
- modificarCaracterAcertijoDesde: posicion En: sigOanterior Evaluando: extremo
- "Si la posicion no es el caso evaluado, se modifica el acertijo
- con el caracter de la palabra, siguiente o anterior, a la posicion ."
- | posAux letra |
- ( posicion = extremo) ifTrue: [ ^ nil .].
- posAux := posicion + sigOanterior.
- letra := (palabra at: posAux).
- (letra = Character space) ifTrue: [
- self modificarCaracterAcertijoDesde: posAux En: sigOanterior Evaluando: extremo.
- ].
- acertijo at: posAux put: letra.! !
- Palabra subclass: #Inculto
- instanceVariableNames: 'dicLetrasEquivalentes'
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Ahorcado'!
- !Inculto methodsFor: 'as yet unclassified' stamp: 'Lucia 4/18/2012 14:12'!
- asignarEquivalencias: equivalencias
- "comment stating purpose of message"
- (equivalencias = nil) ifTrue: [ ErrorEquivalenciasNoAsignadas new signal].
- dicLetrasEquivalentes := equivalencias.! !
- !Inculto methodsFor: 'as yet unclassified' stamp: 'Lucia 4/18/2012 15:48'!
- generarPalabraParaEquivalencia: string Con: letra En: posicion
- "Genera una palabra a partir de la posicion, tomando las letras
- necesarias para tener el mismo largo del string para comprarlos."
- | auxString auxPos |
- auxString := letra asString. "auxiliar para juntar las letras"
- auxPos := posicion.
- "concadeno la siguiente letra de la palabra hasta conseguir la cantidad de letras que
- se necesita para comparar con el string equivalencia"
- [((auxString size) < (string size)) & ((auxPos < palabra size))] whileTrue: [
- auxString := auxString , (palabra at: (auxPos+1))asString .
- auxPos := auxPos + 1.
- ].
- ^ auxString.
- ! !
- !Inculto methodsFor: 'as yet unclassified' stamp: 'Lucia 4/18/2012 22:45'!
- inicializarEquivalencias
- "comment stating purpose of message"
- | contPosiciones listaPosEquiv auxString auxPos|
- contPosiciones := 1.
- ( palabra = nil ) ifTrue: [ ErrorInstanciaInvalida new signal ] .
- ( dicLetrasEquivalentes = nil ) ifTrue: [ ErrorEquivalenciasNoAsignadas new signal ].
- palabra do: [ : letra |
- dicLetrasEquivalentes keysDo: [ : clave |
- (clave verEquivalentes) do: [ : equivalencia |
- "si es mas que un char"
- (equivalencia size > 1) ifTrue: [
- auxString := self generarPalabraParaEquivalencia: equivalencia Con: letra En: contPosiciones.
- " evaluo si la cadena auxString (parte de la palabra) pertenece a la equivalencia"
- (equivalencia = auxString) ifTrue: [
- ( contPosiciones to: (contPosiciones + equivalencia size - 1)) do: [ : pos |
- (dicLetrasEquivalentes at: clave) add: pos .
- ].
- ].
- ].
- ].
- ( clave contieneA: (letra asString) ) ifTrue: [
- (dicLetrasEquivalentes at: clave) add: contPosiciones .
- ].
- ].
- contPosiciones := contPosiciones + 1.
- ].
- ! !
- !Inculto methodsFor: 'as yet unclassified' stamp: 'Lucia 4/18/2012 14:47'!
- inicializarInculto: palabraAux
- "Contructor de la clase.
- Asigna la palabra e inicializa las
- equivalencias y el acertijo de la misma."
- (palabraAux = nil) ifTrue: [ ErrorEntradaInvalida new signal ].
- self inicializarPalabra: palabraAux.
- self inicializarEquivalencias.
- ! !
- !Inculto methodsFor: 'as yet unclassified' stamp: 'Lucia 4/18/2012 22:45'!
- posicionesEnPalabraDeLetra: caracter
- "Busca el caracter o sus equivalentes en la palabra.
- En caso de encontrarse, devuelve la lista con
- posiciones de este en la palabra.
- Sino devuelve una lista vacia.
- Post: Devuelve una lista. "
- | caracterAux listaAux |
- ( dicLetrasEquivalentes = nil) ifTrue: [ ErrorEquivalenciasNoAsignadas new signal ].
- caracterAux := caracter asLowercase .
- listaAux := LinkedList new.
- "se evaluan sus equivalentes"
- dicLetrasEquivalentes keysDo: [ : clave |
- "Si se encuenta una equivalencia del caracter devuelve su lista de posiciones"
- ( clave contieneA: (caracterAux asString) ) ifTrue: [
- listaAux := (dicLetrasEquivalentes at: clave).
- ].
- ].
- "Si la lista esta vacia, el caracter no tiene equivalentes,
- busco solo las posiciones del caracter."
- (listaAux isEmpty) ifTrue: [
- listaAux := super posicionesEnPalabraDeLetra: caracterAux.
- ].
- ^ listaAux.! !
- Object subclass: #Equivalencia
- instanceVariableNames: 'equivalentes'
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Ahorcado'!
- !Equivalencia methodsFor: 'as yet unclassified' stamp: 'Lucia 4/17/2012 00:20'!
- = unaEquivalencia
- "Compara si una equivalencia es igual a otra,
- devuelve true en caso afirmativo, false en caso contrario."
- (equivalentes = nil) ifTrue: [ ErrorInstanciaInvalida new signal. ].
- ^ (self esIdenticoA: unaEquivalencia).! !
- !Equivalencia methodsFor: 'as yet unclassified' stamp: 'Lucia 4/17/2012 00:21'!
- asignarEquivalenteA: otroValor
- "Se asigna a la equivalencia el valor.
- Pasa a ser parte de la equivalencia."
- (equivalentes = nil) ifTrue: [ ErrorInstanciaInvalida new signal. ].
- equivalentes add: (otroValor asString).! !
- !Equivalencia methodsFor: 'as yet unclassified' stamp: 'Lucia 4/18/2012 22:46'!
- contieneA: valor
- "Devuelve true si el string pertenece a
- la equivalencia. False en caso contrario."
- equivalentes do: [ : cadenaEquiv |
- (cadenaEquiv = (valor asString) ) ifTrue: [
- ^ true.
- ].
- ].
- ^ false.! !
- !Equivalencia methodsFor: 'as yet unclassified' stamp: 'Lucia 4/17/2012 00:27'!
- esIdenticoA: unaEstrategia
- "Comparador entre dos objetos de la clase Estrategia.
- Devuelve true si son la misma estrategia, false en caso
- contrario,"
- (equivalentes = nil) ifTrue: [ ErrorInstanciaInvalida new signal. ].
- (unaEstrategia = nil) ifTrue: [ ^ false ].
- (equivalentes size = (unaEstrategia verEquivalentes) size) ifFalse: [ ^ false. ].
- equivalentes do: [ : equiv1 |
- ( (unaEstrategia verEquivalentes) includes: equiv1 ) ifFalse: [ ^ false. ].
- ].
- ^ true.! !
- !Equivalencia methodsFor: 'as yet unclassified' stamp: 'Lucia 4/17/2012 00:23'!
- initialize
- equivalentes := LinkedList new.! !
- !Equivalencia methodsFor: 'as yet unclassified' stamp: 'Lucia 4/17/2012 00:24'!
- verEquivalentes
- ^ equivalentes.! !
- Error subclass: #ErrorEntradaInvalida
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Ahorcado'!
- Error subclass: #ErrorEquivalenciasNoAsignadas
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Ahorcado'!
Add Comment
Please, Sign In to add comment