public bool PuedeJugar(Ficha fichaPropuesta) { return Valor.A == fichaPropuesta.Valor.A || Valor.A == fichaPropuesta.Valor.B || Valor.B == fichaPropuesta.Valor.A || Valor.B == fichaPropuesta.Valor.B; }
public bool PoseeFicha(Ficha ficha) { return Fichas.Contains(ficha); }
private void ProcesarJugada(Jugador jugador, Ficha ficha, bool insertarEnExtremoIzq = false) { if (insertarEnExtremoIzq) { if (Fichas.First().Valor.A == ficha.Valor.A) ficha.Voltear(); Fichas.Insert(0, ficha); } else { if (Fichas.Last().Valor.B == ficha.Valor.B) ficha.Voltear(); Fichas.Add(ficha); } _numeroPases = 0; jugador.Fichas.Remove(ficha); ManejarSiguienteTurno(jugador.Fichas.Count == 0); }
public void JugarFicha(int numeroJugador, Ficha ficha, int? ladoPreferido = null) { if (numeroJugador >= 0 && numeroJugador < 4) JugarFicha(Jugadores[numeroJugador], ficha, ladoPreferido); }
public void JugarFicha(Jugador jugador, Ficha ficha, int? ladoPreferido = null) { if (_turnoActual == -1) throw new Exception("El partido ha terminado"); if (jugador != Jugadores[_turnoActual]) throw new Excepciones.JugadorIntentoJugarEnTurnoErroneoException(); if (!jugador.PoseeFicha(ficha)) throw new Excepciones.JugadorIntentoJugarFichaQueNoPoseeException(); if (Fichas.Count == 0) { //Quiere decir que nunca se ha jugado if (_cantidadPartidasJugadas == 0 && !ficha.Equals(new Ficha(6, 6))) throw new Excepciones.JuegoNoComenzoConDobleSeisException(); Fichas.Add(ficha); jugador.Fichas.Remove(ficha); ManejarSiguienteTurno(); } else { if (Fichas.Any(f => f.Valor.Equals(ficha.Valor))) { throw new FichaRepetidaException(); } //Se revisa si el jugador tiene intencion de un lado especifico if (ladoPreferido.HasValue) { if (ficha.Valor.A == ExtremoIzq && ficha.Valor.B == ExtremoDer || ficha.Valor.B == ExtremoIzq && ficha.Valor.A == ExtremoDer) { ProcesarJugada(jugador, ficha, ladoPreferido == ExtremoDer); return; } } //De lo contrario se intenta colocar la ficha en el tablero, comenzando por el lado izquierdo if (Fichas.First().PuedeJugarA(ficha)) { ProcesarJugada(jugador, ficha, true); } else if (Fichas.Last().PuedeJugarB(ficha)) { ProcesarJugada(jugador, ficha); } else { throw new JugadaInvalidaException(); } } }