Ayuda para hacer turnos en C#

cerverus94

Tengo la clase jugador

La jugador:

spoiler

Y lo que quiero es hacer un juego con dos jugadores y que haya turnos (En plan pokemon)

Este es el main que tengo ahora mismo

Como lo hago?

Sergeon

Necesitas un método que compruebe si el juego ha terminado o no. Para simplificar, asumo que el juego termina cuando un jugador tiene 0 o menos pv:

public Boolean juegoTerminado(){
		return   jugador1.getPv() < 1 || jugador2.pv() < 1;
	}

Ahora en Main (o, mejor, en una clase rollo "ControladorTurnos" que utilices en Main), tendrías un

while( ! controladorTurnos.juegoTerminado() ){ 

jugador1.accion();

if (controladorTurnos.comprobarGanador() )
  return controladorTurnos.getGanador(); //si el jugador1 mata al otro en medio del bucle tienes que salir

jugador2.accion();

if (controladorTrunos.comprobarGanador() )
  return controladorTurnos.getGanador();
 }

Donde accion() supongo que pediría al usuario información por teclado (o no si ese jugador es un bot) y comprobarGanador() comprueba si hay un ganador y tal.

Vamos, es una idea, el código como tal no te lo tomes muy en serio. En general todos los juegos consisten en un bucle que va leyendo inputs y calculando estados en función de esos inputs. Cuando detecta que el juego termina rompe el bucle y hace lo que tenga que hacer.

Algunas cosas sobre tu código:

Tu método ataque() y ataquePorTipo() lo que hace es quitar pvs del jugador que lo invoca y devolver la vida. Eso es un poco random; en todo caso sería un método como "recibirAtaque()".
creo que lo suyo para un método "atacar()" sería algo como:

public void atacar(Jugador objetivo){

objetivo.quitarPv(5); //lógicamente tendrías que hacer un método quitarPv, claro.  

}


public void ataquePorTipo(Jugador objetivo){
	
objetivo.quitarPv(10);
}

Y, en realidad, seria mucho mejor tener un campo int dañoAtaqueNormal, o un metodo getAtaqueNormalDaño() que te fijen esa cantidad, en vez de poner 5 o 10 al aire, de tal forma que
hagas objetivo.quitarPV(this.dañoAtaqueNormal). De ese modo por ejemplo si quieres que tu ataque especial haga el doble de daño, en vez de cambiar los dos numeros si luego cambias el daño
base, quitas el daño base * 2.

Otro tema es que sería mejor usar herencia para los tipos de jugador que crear un campo tipoEleccion.

De todas formas por tu código supongo que estás empezando con esto y tampoco quiero agobiarte. El punto básico es que para el tema de los turnos lo más cómodo es usar un while() que vaya
comprobando si algún jugador ha ganado y vaya pidiendo acciones de los jugadores si no.

Espero que te sea útil y sea el tipo de respuesta que andabas buscando. Un saludo!

2

Usuarios habituales

  • Sergeon
  • cerverus94