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; }
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; }
public static void ProbarRuta(Color _c, Ficha ficha, ref LinkedListNode<Casilla> f) { ficha.MoverA(f.Value); f = f.Next; }
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; }
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(); }
public bool PonerFicha(Ficha _f) { throw new NotImplementedException(); }