示例#1
0
        public static Ficha GetNew(Color _c)
        {
            int numero = (from f in Fichas where f.Color == _c select 1).Count()+1;

            if (numero > 4) throw new Exception("Limite de Fichas Excedido");

            Ficha Fi = new Ficha(_c,numero);
            Fi.SetBoton(new Button());
            Fichas.Add(Fi);
            Fi.Casilla = Tablero.Ruta(_c).First();

            return Fi;
        }
示例#2
0
 public static LinkedListNode<Casilla> RutaDesde(Ficha _f)
 {
     if (!Cargado) throw new FileLoadException("No se ha cargado el tablero");
     var r = Ruta(_f.Color);
     var a = r.Find(_f.Casilla);
     return a;
 }
示例#3
0
 public static void ProbarRuta(Color _c, Ficha ficha, ref LinkedListNode<Casilla> f)
 {
     ficha.MoverA(f.Value);
     f = f.Next;
 }
示例#4
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;
        }
示例#5
0
        private void Form1_Load(object sender, EventArgs e)
        {
            #if !DEBUG
            serializarCasillasToolStripMenuItem.Visible = false;
            rutasToolStripMenuItem.Visible = false;
            #endif
            pasarTurnoToolStripMenuItem.Visible = false;
            Tablero.Cargar();

             fsdds = Ficha.GetNew(Color.Amarillo);
            cddsd = Tablero.Ruta(Color.Amarillo).First;
            fsdds.Casilla = cddsd.Value;
            cddsd.Value.Fichas.Add(fsdds);
            panel1.Controls.Add(fsdds.Boton);
            CenterToScreen();
        }
示例#6
0
 public bool PonerFicha(Ficha _f)
 {
     throw new NotImplementedException();
 }