/// <summary> /// Verifica que la posición no esté por fuera de la posición final del camino /// </summary> /// <param name="viajero"></param> /// <param name="pos"></param> /// <returns></returns> public bool MovimientoFueraDeRango(Viajero viajero, int pos) { if (pos > camino.Count - 1) { System.Console.WriteLine("No se puede ir más allá del destino"); return(true); } return(false); }
/// <summary> /// Verifica que el viajer no se mueva para atrás o a la posición que tiene actualmente /// </summary> /// <param name="viajero"></param> /// <param name="pos"></param> /// <returns></returns> public bool MovimientoHaciaAtras(Viajero viajero, int pos) { if (pos <= viajero.GetPosicionActual()[0]) { System.Console.WriteLine("No se puede ir a una posición anterior o igual a la que estás"); return(true); } return(false); }
/// <summary> /// Verifica que la disponibilidad del destino sea mayor a 0 /// </summary> /// <param name="viajero"></param> /// <param name="pos"></param> /// <returns></returns> public bool MovimientoADisponibilidadCero(Viajero viajero, int pos) { System.Console.WriteLine("Disponibilidad " + camino[pos].Disponibilidad); if (camino[pos].Disponibilidad == 0) { System.Console.WriteLine("No hay disponibilidad en la estación a la que quieres ir"); return(true); } return(false); }
/// <summary> /// Es un movimineto válido si no se quiere mover fuera del rango del camino /// moverse haci atrás o a una experiencia sin disponibilidad /// </summary> /// <param name="viajero"></param> /// <param name="pos"></param> /// <returns></returns> public bool MovimientoValido(Viajero viajero, int pos) { if (!MovimientoFueraDeRango(viajero, pos) && !MovimientoHaciaAtras(viajero, pos) && !MovimientoADisponibilidadCero(viajero, pos)) { System.Console.WriteLine("Movimiento válido"); return(true); } System.Console.WriteLine("Movimiento inválido"); return(false); }
public int CantidadDeEntradas(Viajero viajero) { if (entradas.ContainsKey(viajero.Id)) { int cantEntradas = entradas[viajero.Id] + 1; entradas[viajero.Id] = cantEntradas; } else { entradas.Add(viajero.Id, 1); } return(entradas[viajero.Id]); }
/// <summary> /// Si el viajero no terminó el juego, si es su turno y el movimiento es válido realiza el movimiento /// </summary> /// <param name="viajero"></param> /// <param name="posicion"></param> public void MoverViajero(Viajero viajero, int posicion) { if (viajero.EnJuego == false) { System.Console.WriteLine("Ya terminaste"); throw new MiExcepcion("Ya terminaste el juego no te puedes mover"); } else if (DeQuienEsElTurno().Id != viajero.Id) { System.Console.WriteLine("No es tu turno"); throw new MiExcepcion("No es tu turno, no te puedes mover"); } else if (MovimientoValido(viajero, posicion)) { camino[viajero.GetPosicionActual()[0]].Disponibilidad++; viajero.SetPosicionActual(posicion, camino[posicion].Disponibilidad); camino[posicion].Disponibilidad -= 1; if (posicion == camino.Count - 1) { viajero.EnJuego = false; } camino[posicion].Accion(viajero); } }
/// <summary> /// Verifica si es el último de los viajeros que es al que le corresponde jugar /// </summary> /// <returns></returns> public Viajero DeQuienEsElTurno() { if (viajeros.Count > 0) { Viajero viajeroEnMinimaPos = viajeros[0]; for (int i = 1; i < viajeros.Count; i++) { if (viajeros[i].GetPosicionActual()[0] < viajeroEnMinimaPos.GetPosicionActual()[0]) { viajeroEnMinimaPos = viajeros[i]; } else if (viajeros[i].GetPosicionActual()[0] == viajeroEnMinimaPos.GetPosicionActual()[0]) { if (viajeros[i].GetPosicionActual()[1] < viajeroEnMinimaPos.GetPosicionActual()[1]) { viajeroEnMinimaPos = viajeros[i]; } } } return(viajeroEnMinimaPos); } return(null); }
/// <summary> /// Aumenta los puntos en 2 en cada entrada del viajero /// </summary> /// <param name="viajero"></param> public override void Accion(Viajero viajero) { viajero.PuntosAcumulados += 2; }
/// <summary> /// Método para que cada experiencia implemente /// </summary> /// <param name="viajero"></param> public abstract void Accion(Viajero viajero);
/// <summary> /// Le pasa el viajero y la posición destino a Movimientos para que se encarge del movimiento /// Soporta [Polimorfismo] puede recir subtipos de Viajero /// </summary> /// <param name="viajero"></param> /// <param name="pos"></param> public void MoverViajero(Viajero viajero, int pos) { Movimiento movimiento = new Movimiento(Camino, Viajeros); movimiento.MoverViajero(viajero, pos); }
public override void Accion(Viajero viajero) { int cantidadDeEntradas = CantidadDeEntradas(viajero); viajero.PuntosAcumulados += (2 * cantidadDeEntradas - 1); }
public override void Accion(Viajero viajero) { viajero.MonedasAcumuladas = 0; viajero.PuntosAcumulados = 0; viajero.EnJuego = true; }
public override void Accion(Viajero viajero) { viajero.EnJuego = false; }
public override void Accion(Viajero viajero) { viajero.MonedasAcumuladas += 3; }