Пример #1
0
 public static void ProbarRuta(Color _c, Ficha ficha, ref LinkedListNode<Casilla> f)
 {
     ficha.MoverA(f.Value);
     f = f.Next;
 }
Пример #2
0
        internal bool MoverFicha(Ficha f, int pasos)
        {
            var ruta = Tablero.RutaDesde(f);
            var sig = ruta.Next;
            if (f.Casilla.Tipo == TipoCasilla.Carcel)
            {
                if (pasos == 6) return true;
                if (pasos != 5) return false;//no puede salir sin cinco pasos
                var fichasMiasEnSalida = (from q in sig.Value.Fichas where q.Color == f.Color select f).Count();
                if (fichasMiasEnSalida == 2) return false;//No puede salir si tiene dos afuera
                var FichaAjena = (from q in sig.Value.Fichas where q.Color != f.Color select q).LastOrDefault();
                if (FichaAjena != null)
                {
                    JugadorActual.AgregarMovimientos(20);
                    FichaAjena.MoverA(Tablero.Ruta(FichaAjena.Color).First.Value);
                }
                f.MoverA(sig.Value);
                return true;
            }

            for (int i = 1; i < pasos; i++)//condicion de bloqueo y no revisar despues del ultimo
            {
                sig = sig.Next;
                if (sig.Value.Tipo!=TipoCasilla.Meta && sig.Value.Fichas.Count == 2)
                    return false;
                if (sig.Next.Value.Tipo == TipoCasilla.Meta && i < pasos)
                    return false;
            }

            switch (sig.Value.Tipo)
            {
                case TipoCasilla.Normal:
                    switch (sig.Value.Fichas.Count)
                    {
                        case 0:
                            f.MoverA(sig.Value);
                            return true;
                        case 1:
                            if (sig.Value.Fichas[0].Color != f.Color)
                            {
                                JugadorActual.AgregarMovimientos(20);
                                sig.Value.Fichas[0].MoverA( Tablero.Ruta(sig.Value.Fichas[0].Color).First.Value);
                            }
                            f.MoverA(sig.Value);
                            return true;
                        case 2:
                            return false;
                        default:
                            return false;
                    }
                case TipoCasilla.Salida:
                case TipoCasilla.Segura:
                    switch (sig.Value.Fichas.Count)
                    {
                        case 0:
                            f.MoverA(sig.Value);
                            return true;
                        case 1:
                            if (sig.Value.Fichas[0].Color != f.Color)
                                return false;

                            f.MoverA(sig.Value);
                            return true;
                        case 2:
                            return false;
                        default:
                            return false;
                    }
                case TipoCasilla.Pasillo:
                    switch (sig.Value.Fichas.Count)
                    {
                        case 0:
                        case 1:
                            f.MoverA(sig.Value);
                            return true;
                        case 2:
                            return false;
                        default:
                            return false;
                    }
                case TipoCasilla.Meta:
                    f.MoverA(sig.Value);
                    JugadorActual.AgregarMovimientos(10);
                    if (sig.Value.Fichas.Count == 4)
                        Ganador = JugadorActual;
                    break;
                default:
                    break;
            }

            return true;
        }