elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Funciones eficientes, cómo.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Funciones eficientes, cómo.  (Leído 74 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.636


Hackentifiko!


Ver Perfil
Funciones eficientes, cómo.
« en: Ayer a las 23:48 »

Tengo cartas que causan diversos efectos.

La carta Donkey Kong hace daño al rival.

Milk da 1 punto de vida a su usuario.

Popeye hace daño al rival y da 1 punto de vida al usuario.

Y quiero seguir agregando, pero resolver esto 1ero.

Parecen simplemente 2 efectos, pero es más complejo.

Cuando la carta se usa, marco quién la usó (User) y contra quién (Rival, es obvio pero evita un if).

Donkey Kong parece que puede usar esto:
Código
  1. function TipicoAtaque () {
  2. if (Objetivo == "IA") {
  3. IAHP = IAHP-Ataque;
  4. Mensaje = "¡"+ShowerDeCartas[NroDeCartaDeHumano]+" dañó al rival!";
  5. if (IAHP > 0) {
  6. TerminandoTurnoHumano();
  7. } else {
  8. HumanoGana();
  9. }
  10. } else {
  11. HumanoHP = HumanoHP-Ataque;
  12. Mensaje = Mensaje+"\n¡"+ShowerDeCartas[NroDeCartaDeIA]+" rival te dañó!";
  13. if (HumanoHP > 0) {
  14. TerminandoTurnoDeIA();
  15. } else {
  16. HumanoPierde();
  17. }
  18. }
  19. }

Milk parece que puede usar esto:
Código
  1. function HPUp (HP) {
  2. if (User == "Humano") {
  3. HumanoHP = HumanoHP+HP;
  4. Mensaje = "¡"+ShowerDeCartas[NroDeCartaDeHumano]+" te dió "+HP+"HP!";
  5. TerminandoTurnoHumano();
  6. } else {
  7. IAHP = IAHP+HP;
  8. Mensaje = Mensaje+"\n¡"+ShowerDeCartas[NroDeCartaDeIA]+" rival le dió "+HP+"HP!";
  9. TerminandoTurnoDeIA();
  10. }
  11. }

Popeye sería 1ero HPUp y luego TipicoAtaque, pero HPUp termina el turno. Parece que debo crear una función independiente que termine el turno, pero se debe indicar el turno de quién, y para eso la función tendría que tener otro if chequeando lo que ya se chequeó, o tendrían que ser 2 funciones, o más, me mareo.

Donkey Kong:
Atacar al objetivo, poner mensajes informativos.
Si el objetivo no sobrevivió, se informa y el juego termina.
sino, puede que el usuario reciba daño de veneno (si está envenenado) u otras cosas, hay que aplicarlas, informar, ver si el usuario sobrevive, en tal caso iniciar el turno del rival y sino terminar el juego. Informar.

Milk:
Dar HP al usuario, informar.
Fase "terminando el turno", lo que mencioné del veneno, etc.

Popeye:
Dar HP al usuario, informar.
Atacar al objetivo, poner mensajes informativos.
Fase "terminando el turno", lo que mencioné del veneno, etc.

Parece simple, pero está el tema de los ifs.

Si fuese así, 3 funciones, lo veo así:

Milk:
HPUp:
(Si el usuario es humano, aumentar 1HP al humano.
sino, al rival).
TerminandoTurno:
(Si el usuario es humano, ver si recibe daño de veneno. Si sobrevive, iniciar turno del otro, sino terminar juego.
sino, ver si la IA recibe daño por veneno. Si sobrevive... etc).

Donkey Kong:
AtaqueTipico:
(Si el usuario es humano, reducir el HP de la IA. Si sobrevivió, TerminandoTurno, sino informar victoria y fin.
sino, del humano. Si sobrevivió, TerminandoTurno, sino informar derrota y fin.).

Popeye:
HPUp.
AtaqueTipico.
TerminandoTurno.

¿Ven que en Milk y Donkey Kong haría 2 veces el mismo if, y en Popeye lo haría 3? No creo que sea bueno repetir el if.

Veo que en estos casos no es necesario considerar el objetivo, es obvio.

Tengan en cuenta además que hay cartas que harían daño a su usuario, siguiendo la lógica sería:
Autodaño:
(Si el usuario es humano, reducir su HP.
sino, de la IA).
AtaqueTipico.
EvaluarSupervivencias:
Código:
Si el usuario quedó sin HP
   Si el rival quedó sin HP
      Empate
   sino
      Usuario pierde.
sino si el rival quedó sin HP
   Usuario gana
sino
   TerminandoTurno
...o sea, la evaluación de la supervivencia de 1, que se hacía en AtaqueTipico, habría que hacerla por separado, acá se hace de los 2 a las vez porque hubo daño a ambos. Otra opción sería no usar ataque típico acá sino algo como AmbosDañados...


¿Uds cómo harían esto?


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como hacer busquedas mas eficientes en eclipse???
Java
marvic 1 3,127 Último mensaje 29 Enero 2009, 21:49 pm
por marvic
Los superordenadores de IBM son los más eficientes del mundo
Noticias
wolfbcn 1 1,917 Último mensaje 6 Julio 2010, 17:47 pm
por PFLOPS
¿Son más eficientes los chips de ARM que los x86 de Intel?
Noticias
wolfbcn 0 1,871 Último mensaje 16 Junio 2012, 01:45 am
por wolfbcn
DDR4, las nuevas memorias RAM más potentes y eficientes
Noticias
wolfbcn 0 1,580 Último mensaje 24 Junio 2014, 23:00 pm
por wolfbcn
¿Son eficientes los típicos tornillos anti vibración? ...de goma.
Hardware
Eleкtro 3 6,043 Último mensaje 4 Febrero 2016, 20:46 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines