Algoritmos y Programaci´
on I (75.40)
Trabajo Pr´
actico N
o
4
Weiss-Fiuba-Schwarz o Juego de tematica ajustable
9 de junio de 2015
1.
Consigna
En este Trabajo Pr´actico se provee una implementaci´on incompleta de un juego de cartas, y se pide implementar algunas funcionalidades faltantes.
2.
Reglas del juego
El juego es una versi´on reducida del juego de cartas ”Weiss Schwarz”. Al igual que el original, este posee una tem´atica ajustable a gusto del usuario.
2.1.
Cartas
En el juego se encuentran 3 tipos diferentes de carta:
Personaje Son los que combaten en el campo frontal o dan soporte con sus efectos desde la retaguardia. Los efectos de estas cartas duran mientras est´en en el campo.
Evento Proporcionan soporte mediante sus efectos, los cuales duran hasta el final del turno que fueron jugados.
2.2.
Mazo
Cada mazo de Weiss Schwarz consta de exactamente 50 cartas. Cada jugador tiene su propio mazo1 formado por las cartas que quiera2 siempre que cumpla con las siguientes reglas:
1. El mazo tiene exactamente 50 cartas
2. El mazo tiene como m´aximo 4 copias de cada carta
3. El mazo tiene como m´aximo 8 cartas de tipo climax
2.3.
Desarrollo del juego
El juego se desarrolla por turnos. Al principio del juego, se sortea de for-ma aleatoria quien arranca, si el jugador del lado blanco (Weiss) o el jugador del lado negro (Schwarz). El jugador que tiene el primer turno arranca con 4 cartas en mano, y el segundo con 5. Cada turno del juego se desarrolla de la siguiente manera:
Turno:
1. Sacar una carta del mazo y agregarla a la mano
2. Aplicar efectos de cartas en el campo
3. Fase de clock: Aumentar clock?
a) (S´ı) Bajar una carta de la mano al ´area de clock, robar dos del mazo
4. Primer fase principal: Jugar cartas
a) (Si tienen efecto) Aplicar el efecto de las cartas jugadas
b) (Si son personajes) Elegir d´onde ponerlos
5. Fase de combate: Atacar
a) (Si ataca y tiene una carta enfrente) Combate entre cartas 1) (Si gana) Matar a la otra carta, infligir da˜no al oponente
1En el programa se cargan automaticamente los mazos
weiss.csvyschwarz.csvpara el jugador Weiss y el jugador Schwarz respectivamente.
2Como gu´ıa para crear un mazo se puede seguir la propuesta en:
a0 Se determina el da˜no que la carta inflige al oponente
b0 El oponente saca de su mazo un numero de cartas igual al da˜no que le inflige la carta y las coloca en la zona de clock
c0 (Si la zona de clock tiene 7 o mas cartas) El jugador au-menta su nivel
2) (Si pierde) Matar a la carta atacante 3) (Si empata) Matar a las 2 cartas
b) (Si ataca y no tiene una carta enfrente) Ataque directo 1) Se determina el da˜no que la carta inflige al oponente
2) El oponente saca de su mazo un numero de cartas igual al da˜no que le inflige la carta y las coloca en la zona de clock 3) (Si la zona de clock tiene 7 o mas cartas) El jugador aumenta
su nivel
6. Segunda fase principal: Idem a la primera fase principal
7. Fin de turno
a) Desaplicar efectos de cartas en el campo y cartas temporales
b) (Si se acabaron las cartas del mazo) Mover las cartas de la pila de descarte al mazo (dejando el descarte vac´ıo) y mezclar.
c) Pasar al turno siguiente
El juego termina cuando alguno de los dos jugadores alcanza el nivel m´aximo (que por defecto es 4). El que haya llegado a dicho nivel es el per-dedor.
3.
Especificaciones
El c´odigo a completar se encuentra dentro de los archivos tablero.py y mazo.py.
Se deben completar los metodos que se detallan a continuaci´on.
def i n i c i a r _ t u r n o ( s e l f ) : """
I n i c i a el t u r n o a p l i c a n d o las h a b i l i d a d e s que q u e d a r o n en el c a m p o d u r a n t e el t u r n o
a n t e r i o r
en el m i s m o o r d e n que f u e r o n a p l i c a d o en e s t e . : r e t u r n : No t i e n e v a l o r de r e t o r n o .
"""
r a i s e N o t I m p l e m e n t e d E r r o r
def t e r m i n a r _ t u r n o ( s e l f ) : """
T e r m i n a el t u r n o . R e v i e r t e t o d o s los e f e c t o s de las c a r t a s a p l i c a d a s en el c a m p o
en el o r d e n i n v e r s o en que f u e r o n a p l i c a d a s . Las h a b i l i d a d e s de t i p o E F E C T O _ C O N T I N U O d e b e n g u a r d a r s e
p a r a ser a p l i c a d a s en el p r o x i m o t u r n o ( en el m i s m o o r d e n en el que se a p l i c a r o n en e s t e t u r n o ) .
: r e t u r n : No t i e n e t i p o de r e t o r n o . """
r a i s e N o t I m p l e m e n t e d E r r o r
def a p l i c a r _ h a b i l i d a d e s _ e n _ c a r t a ( self , c a r d ) : """
A p l i c a las h a b i l i d a d e s a c t i v a s en el c a m p o a la c a r t a p a s a d a c o m o p a r a m e t r o . Se d e b e n
a p l i c a r en el o r d e n que se a p l i c a r o n o r i g i n a l m e n t e .
: p a r a m c a r t a : C a r t a s o b r e la que a p l i c a r las h a b i l i d a d e s .
: r e t u r n : No t i e n e v a l o r de r e t o r n o . """
r a i s e N o t I m p l e m e n t e d E r r o r
def a p l i c a r _ h a b i l i d a d _ s o b r e _ t a b l e r o ( self , jugador , h a b i l i d a d , c o n t i n u i d a d ) :
"""
c a m p o del j u g a d o r p a s a d o .
: p a r a m j u g a d o r : J u g a d o r en el que se a p l i c a la h a b i l i d a d .
: p a r a m h a b i l i d a d : R e f e r e n c i a a la h a b i l i d a d a a p l i c a r . D e b e ser un o b j e t o de una c l a s e que h e r e d e de H a b i l i d a d .
: p a r a m c o n t i n u i d a d : I n d i c a si es una h a b i l i d a d c o n t i n u a o que s o l o t i e n e e f e c t o por un t u r n o . D e b e ser una de
las c o n s t a n t e s
E F E C T O _ C O N T I N U O o E F E C T O _ T E M P O R A L . : r e t u r n : No t i e n e v a l o r de r e t o r n o . """
r a i s e N o t I m p l e m e n t e d E r r o r
def r e v e r t i r _ h a b i l i d a d e s _ s o b r e _ c a r t a ( self , c a r t a ) : """
R e v i e r t e los e f e c t o s s o b r e la c a r t a p a s a d a c o m o p a r a m t e r o en el o r d e n i n v e r s o en que f u e r o n a p l i c a d o s .
: p a r a m c a r t a : C a r t a a la que se le d e b e n r e v e r t i r las h a b i l i d a d e s
: r e t u r n : No t i e n e v a l o r de r e t o r n o . """
r a i s e N o t I m p l e m e n t e d E r r o r
def r e m o v e r _ h a b i l i d a d ( self , jugador , h a b i l i d a d ) : """
R e m u e v e la h a b i l i d a d p a s a d a por p a r a m e t r o ,
a p l i c a d a por el j u g a d o r pasado , de la p i l a de h a b i l i d a d e s a p l i c a d a s .
: p a r a m j u g a d o r : J u g a d o r que a p l i c o la h a b i l i d a d o r i g i n a l m e n t e . D e b e ser una de las c o n s t a n t e s
W E I S S o S C H W A R Z .
: p a r a m h a b i l i d a d : H a b i l i d a d a d e s h a c e r . D e b e ser un o b j e t o de una c l a s e que h e r e d e de
H a b i l i d a d .
: r e t u r n : No t i e n e v a l o r de r e t o r n o . """
3.2.
Habilidades
Se deber´a implementar al menos 3 de las habilidades de la siguiente lista:
A1 Saca del mazo todas las cartas del mismo color que la carta del tope, y las env´ıa a la zona de descarte.
A2 Ordena las primeras 5 cartas del mazo propio o enemigo.
A3 Env´ıa todas las cartas de la zona de clock, stock y personaje al mazo. El mazo luego se mezcla.
A4 Env´ıa todas las cartas de la zona de personajes a la pila de descarte.
A5 Aumenta en X el poder de todos los personajes con un subtipo espec´ıfi-co (Ej. +1100 a todos los magos).
A6 Lanza un dado; destruye un personaje en la zona frontal seg´un el n´ ume-ro que salga. 1, 2, 3 corresponden al campo pume-ropio; 4, 5, 6 al enemigo.
A7 Lanza una moneda; mientras que sea cara, saca una carta del mazo del enemigo y la env´ıa a su zona de descarte. Se detiene cuando sale cruz o el mazo enemigo est´a vac´ıo.
A8 Mientras pueda, remueve 2 cartas del ´area de coste. Si lo hace, remueve una carta del area de clock. Se termina al no poder sacar 2 cartas del ´
area de coste o no queden m´as cartas en la zona de clock.
A9 Reduce en uno el nivel, pero elimina todas las cartas de personajes.
AA Selecciona una carta de personaje en el campo propio o enemigo y la remueve.
AB Selecciona una carta en el campo y reduce su poder a 0.
AC Lanza una moneda; si es cara remueve del juego una carta del opo-nente, si es cruz una propia. (Las cartas removidas del juego se van permanentemente del tablero y la mano).
3.3.
Template
f r o m h a b i l i d a d e s . h a b i l i d a d i m p o r t H a b i l i d a d
N O M B R E _ H A B I L I D A D = " n o m b r e "
c l a s s T e m p l a t e H a b i l i d a d ( H a b i l i d a d ) :
def _ _ i n i t _ _ ( s e l f ) : p a s s
def a p l i c a r _ e n _ c a r t a ( self , c a r t a ) : r a i s e N o t I m p l e m e n t e d E r r o r
def a p l i c a r _ e n _ t a b l e r o ( self , tablero , j u g a d o r ) : r a i s e N o t I m p l e m e n t e d E r r o r
def r e v e r t i r _ e n _ c a r t a ( self , c a r t a ) : r a i s e N o t I m p l e m e n t e d E r r o r
def r e v e r t i r _ e n _ t a b l e r o ( self , tablero , j u g a d o r ) : r a i s e N o t I m p l e m e n t e d E r r o r
def r e s e t e a r _ h a b i l i d a d ( s e l f ) : p a s s
def o b t e n e r _ n o m b r e ( s e l f ) : r e t u r n N O M B R E _ H A B I L I D A D
def o b t e n e r _ t e x t o ( s e l f ) : r e t u r n " "
def o b t e n e r _ h a b i l i d a d () :
r e t u r n T e m p l a t e H a b i l i d a d ()
Para agregar una nueva habilidad programada al juego, se debe agregar una l´ınea como la siguiente en el archivo habilidades/__init__.py
_ _ a l l _ _ += [ " n o m b r e _ d e l _ m o d u l o " ]
4.
FAQ
4.1.
¿Qu´
e carta se puede jugar?
Durante cada turno se pueden jugar cartas de la mano durante la primer o segunda fase principal.
* Para jugar un personaje o un evento se debe cumplir:
- El jugador tenga un nivel mayor o igual a la carta jugada.
- El jugador tenga suficientes cartas en la zona de recursos para pagar la activaci´on de la carta.
- Hay al menos una carta con el mismo color en la zona de clock o en la de nivel (Las cartas de nivel 0 no requieren esto).
* Adem´as, para las cartas de personaje: Se pueden jugar en la zona frontal o la retaguardia, si hay un casillero vac´ıo en esa zona.
* Para jugar una carta de climax se debe cumplir:
- Hay al menos una carta con el mismo color en la zona de clock o en la de nivel.
- El ´area de climax del jugador est´a vac´ıa.
4.2.
¿C´
omo determinar el da˜
no que una carta inflige a
un jugador?
Si una carta ataca a otra y gana, o si efect´ua un golpe directo, se considera que el ataque fue exitoso. Para determinar el da˜no que se inflige al oponente, se siguen los siguientes pasos:
- Se saca una carta del mazo y se la coloca en la zona de recursos.
- Se suman los puntos de efecto extra de esa carta a los puntos de alma de la atacante.
4.3.
¿C´
omo consigo cartas para pagar costos?
Normalmente, la ´unica forma de poner cartas en la zona de recursos es realizando ataques exitosos. Como se explica en la pregunta anterior, una carta es movida a esa zona al determinar el da˜no efectuado. Adem´as, algunos efectos pueden manipular la zona de recursos, agregando o quitando cartas.
4.4.
¿Qu´
e significa da˜
no cancelado?
Al infligir da˜no a un oponente, ´este debe sacar de su mazo un n´umero de cartas igual al da˜no infligido y colocarla en el ´area de clock. Si al robar cartas del mazo saca una carta de climax, el da˜no se cancela y todas las cartas sacadas son enviadas a la pila de descarte en lugar de al ´area de clock.
4.5.
¿Qu´
e es el ´
area de clock y la etapa de clocking?
El ´area de clock contiene de 0 a 7 cartas, y cada una de ellas representa un da˜no infligo al jugador. Al llegar a 7, se elige una carta aleatoria del ´area de clock y se la env´ıa al ´area de nivel (esto es conocido como aumento de nivel); el resto de las cartas se env´ıan a la pila de descarte. Durante la fase de clocking, uno puede elegir recibir un da˜no (colocando una carta de la mano en el ´area de clock) y tomar 2 cartas del mazo.
Como comentario adicional, es importante recordar que las cartas de nivel superior a 0, y las de climax, requieren al menos una carta del mismo color en el ´area de nivel o en la de clock para poder ser jugadas. La etapa de clock es ´util para colocar una carta de un color que toadv´ıa no est´e en ese ´area, habilit´andonos a jugar cartas de dicho color.
4.6.
¿C´
omo creo una nueva carta?
Para crear una carta, primero se debe colocar una imagen a usar por la carta en la carpeta card_images, que se encuentra dentro de la carpeta resources. La misma debe ser en formato PNG y debe contener el mismo nombre que la carta a la cual se le asignara, pero con los espacios reempla-zados por ”_”. Por ejemplo: si quiero una carta llamada ”Toban Lajp”, debo tener una imagen con el nombre Toban_Lajp.png.
Climax :
TIPO_CARTA | NOMBRE_CARTA | COLOR | EFECTO_EXTRA | HABILIDAD | TEXTO_DECORATIVO
Evento :
TIPO_CARTA | NOMBRE_CARTA | COLOR | EFECTO_EXTRA | HABILIDAD | TEXTO_DECORATIVO | NIVEL | COSTE
Personaje :
TIPO_CARTA | NOMBRE_CARTA | COLOR | EFECTO_EXTRA | HABILIDAD | TEXTO_DECORATIVO | NIVEL | COSTE | PODER | PUNTOS_DE_ALMA | (subtipo1,subtipo2)
5.
Ejecucion del programa
Para ejecutar el programa, simplemente ingresepython ./weiss-schwarz.py en la consola. Requerimientos:
Pygame
6.
Criterios de aprobaci´
on
A continuaci´on describimos criterios y lineamientos que deben respetarse en el desarrollo del trabajo.
6.1.
Programa
El programa debe cumplir los siguientes requerimientos:
Debe estar adecuadamente estructurado y modularizado, utilizando funciones definidas en forma lo m´as gen´erica posible, sin caer en lo trivial.
El c´odigo debe ser claro y legible.
El c´odigo debe estar comentado y las funciones adecuadamente docu-mentadas.
Adem´as, claro, debe satisfacer la especificaci´on de la consigna.
7.
Entrega
Se debe entregar una versi´on digital de los archivos de c´odigo fuente, y una versi´on impresa que contenga ´unicamente los archivos de c´odigo fuente modificados y los nuevos.
La versi´on digital debe enviarse a la direcci´on electr´[email protected] con un mensaje que tenga como asuntoTP4 - Padron1 - Padron2. El plazo