Пример #1
0
        public Tablero XReadXML(HttpPostedFileBase archivo)
        {
            string result = "";

            using (BinaryReader b = new BinaryReader(archivo.InputStream))   // FUENTE: https://stackoverflow.com/questions/16030034/asp-net-mvc-read-file-from-httppostedfilebase-without-save/16030326
            {
                byte[] binData = b.ReadBytes(archivo.ContentLength);
                result = System.Text.Encoding.UTF8.GetString(binData);
            }

            XmlDocument doc = new XmlDocument();

            doc.LoadXml(result);

            int    filas     = Int32.Parse(doc.SelectNodes("partida")[0].SelectNodes("filas")[0].InnerText);
            int    columnas  = Int32.Parse(doc.SelectNodes("partida")[0].SelectNodes("columnas")[0].InnerText);
            string modalidad = doc.SelectNodes("partida")[0].SelectNodes("Modalidad")[0].InnerText;


            Tablero tablero_cargado = new Tablero(filas, columnas, "", "", modalidad);

            foreach (XmlNode nodo in doc.SelectNodes("partida")[0].SelectNodes("tablero")[0].SelectNodes("ficha"))
            {
                int    pos = -1;
                string color_temp = nodo.ChildNodes[0].InnerText;
                string fila = nodo.ChildNodes[2].InnerText, columna = nodo.ChildNodes[1].InnerText;

                switch (fila)
                {
                case "1":
                    pos = columnas * 0;
                    break;

                case "2":
                    pos = columnas * 1;
                    break;

                case "3":
                    pos = columnas * 2;
                    break;

                case "4":
                    pos = columnas * 3;
                    break;

                case "5":
                    pos = columnas * 4;
                    break;

                case "6":
                    pos = columnas * 5;
                    break;

                case "7":
                    pos = columnas * 6;
                    break;

                case "8":
                    pos = columnas * 7;
                    break;

                case "9":
                    pos = columnas * 8;
                    break;

                case "10":
                    pos = columnas * 9;
                    break;

                case "11":
                    pos = columnas * 10;
                    break;

                case "12":
                    pos = columnas * 11;
                    break;

                case "13":
                    pos = columnas * 12;
                    break;

                case "14":
                    pos = columnas * 13;
                    break;

                case "15":
                    pos = columnas * 14;
                    break;

                case "16":
                    pos = columnas * 15;
                    break;

                case "17":
                    pos = columnas * 16;
                    break;

                case "18":
                    pos = columnas * 17;
                    break;

                case "19":
                    pos = columnas * 18;
                    break;

                case "20":
                    pos = columnas * 19;
                    break;
                }

                switch (columna)
                {
                case "A":
                    break;

                case "B":
                    pos += 1;
                    break;

                case "C":
                    pos += 2;
                    break;

                case "D":
                    pos += 3;
                    break;

                case "E":
                    pos += 4;
                    break;

                case "F":
                    pos += 5;
                    break;

                case "G":
                    pos += 6;
                    break;

                case "H":
                    pos += 7;
                    break;

                case "I":
                    pos += 8;
                    break;

                case "J":
                    pos += 9;
                    break;

                case "K":
                    pos += 10;
                    break;

                case "L":
                    pos += 11;
                    break;

                case "M":
                    pos += 12;
                    break;

                case "N":
                    pos += 13;
                    break;

                case "O":
                    pos += 14;
                    break;

                case "P":
                    pos += 15;
                    break;

                case "Q":
                    pos += 16;
                    break;

                case "R":
                    pos += 17;
                    break;

                case "S":
                    pos += 18;
                    break;

                case "T":
                    pos += 19;
                    break;
                }

                try
                {
                    if (tablero_cargado.fichas[pos].color == null)
                    {
                        Juego.Reemplazar(tablero_cargado, pos, color_temp);
                    }
                }
                catch { }
            }

            int count = 0;

            foreach (Ficha ficha in tablero_cargado.fichas)
            {
                if (ficha.color != null)
                {
                    count++;
                }
            }

            List <string> colores = new List <string>(), colores2 = new List <string>();

            foreach (XmlNode nodo in doc.SelectNodes("partida")[0].SelectNodes("Jugador1")[0].SelectNodes("color"))
            {
                colores.Add(nodo.InnerText);
            }

            foreach (XmlNode nodo in doc.SelectNodes("partida")[0].SelectNodes("Jugador2")[0].SelectNodes("color"))
            {
                colores2.Add(nodo.InnerText);
            }
            tablero_cargado.colores          = colores;
            tablero_cargado.colores_oponente = colores2;

            string color = doc.SelectNodes("partida")[0].SelectNodes("tablero")[0].SelectNodes("siguienteTiro")[0].InnerText;

            tablero_cargado.Actualizar(color, Globals.usuario_activo, count / 2 - 2, count / 2 - 2);

            return(tablero_cargado);
        }
Пример #2
0
        public ActionResult Juego(Partida partida)
        {
            Tablero tablero = partida.tablero;
            string  usuario = tablero.usuario, usuario_opuesto = "";

            if (usuario == partida.Jugador1)
            {
                usuario_opuesto = partida.Jugador2;
            }
            else
            {
                usuario_opuesto = partida.Jugador1;
            }

            string color = tablero.color, color_opuesto = "";

            if (color == "blanco")
            {
                color_opuesto = "negro";
            }
            else
            {
                color_opuesto = "blanco";
            }


            int index = Game.Ficha_seleccionada(tablero);

            /*APERTURA PERSONALIZADA
             * if (tablero.apertura_personalizada == "true")
             * {
             *  if (tablero.Apertura(index))
             *  {
             *      Game.Reemplazar(tablero, index, color);
             *      tablero.Actualizar(color_opuesto, usuario_opuesto, 0, 0);
             *
             *      if (Game.Celdas_ocupadas(tablero).Count == 4)
             *      {
             *          ViewBag.MessageType = "success-message";
             *          ViewBag.Message = "¡Apertura personalizada finalizada!";
             *          tablero.apertura_personalizada = "false";
             *      }
             *      else
             *      {
             *          ViewBag.MessageType = "neutral-message";
             *          ViewBag.Message = "Apertura personalizada en progreso, faltan " + (4 - Game.Celdas_ocupadas(tablero).Count) + " fichas para finalizar";
             *      }
             *
             *      return View(partida);
             *  }
             *  else
             *  {
             *      ViewBag.MessageType = "error-message";
             *      ViewBag.Message = "¡Posición de apertura no válida!";
             *      Game.Reemplazar(tablero, index, "");
             *
             *      return View(partida);
             *  }
             * }
             */

            List <int> lista = Game.Flanquear(tablero, index, color, color_opuesto);

            if (lista.Count > 0)
            {
                Game.Reemplazar_lista(tablero, lista, color);

                List <int> celdas_validas = Game.Celdas_validas(tablero, color_opuesto, color);

                if (celdas_validas.Count > 0)
                {
                    if (usuario == partida.Jugador1)
                    {
                        tablero.Actualizar(color_opuesto, partida.Jugador2, tablero.movimientos + 1, tablero.movimientos_oponente);
                    }
                    else
                    {
                        tablero.Actualizar(color_opuesto, partida.Jugador1, tablero.movimientos, tablero.movimientos_oponente + 1);
                    }

                    return(View(partida));
                }
                else
                {
                    celdas_validas = Game.Celdas_validas(tablero, color, color_opuesto);

                    if (celdas_validas.Count > 0)
                    {
                        ViewBag.Message     = usuario_opuesto + " no tiene movimientos válidos";
                        ViewBag.MessageType = "error-message";

                        return(View(partida));
                    }
                    else
                    {
                        //JUEGO TERMINADO
                        ViewBag.MessageType = "success-message";
                        ViewBag.Message     = Game.TJuego_terminado(partida, color_opuesto);

                        return(View(partida));
                    }
                }
            }
            else
            {
                Game.Reemplazar(tablero, index, "");
                return(View(partida));
            }
        }
Пример #3
0
        public Tablero ReadXML(HttpPostedFileBase archivo)
        {
            string result = "";

            using (BinaryReader b = new BinaryReader(archivo.InputStream))   // FUENTE: https://stackoverflow.com/questions/16030034/asp-net-mvc-read-file-from-httppostedfilebase-without-save/16030326
            {
                byte[] binData = b.ReadBytes(archivo.ContentLength);
                result = System.Text.Encoding.UTF8.GetString(binData);
            }

            XmlDocument doc = new XmlDocument();

            doc.LoadXml(result);

            Tablero tablero_cargado = new Tablero(8, 8, "", "", "Normal");
            int     lado            = 8;

            foreach (XmlNode nodo in doc.SelectNodes("tablero")[0].SelectNodes("ficha"))
            {
                int    pos = -1;
                string color_temp = nodo.ChildNodes[0].InnerText;
                string fila = nodo.ChildNodes[2].InnerText, columna = nodo.ChildNodes[1].InnerText;

                switch (fila)
                {
                case "1":
                    pos = lado * 0;
                    break;

                case "2":
                    pos = lado * 1;
                    break;

                case "3":
                    pos = lado * 2;
                    break;

                case "4":
                    pos = lado * 3;
                    break;

                case "5":
                    pos = lado * 4;
                    break;

                case "6":
                    pos = lado * 5;
                    break;

                case "7":
                    pos = lado * 6;
                    break;

                case "8":
                    pos = lado * 7;
                    break;
                }

                switch (columna)
                {
                case "A":
                    break;

                case "B":
                    pos += 1;
                    break;

                case "C":
                    pos += 2;
                    break;

                case "D":
                    pos += 3;
                    break;

                case "E":
                    pos += 4;
                    break;

                case "F":
                    pos += 5;
                    break;

                case "G":
                    pos += 6;
                    break;

                case "H":
                    pos += 7;
                    break;
                }

                try
                {
                    if (tablero_cargado.fichas[pos].color == null)
                    {
                        Juego.Reemplazar(tablero_cargado, pos, color_temp);
                    }
                }
                catch { }
            }

            int count = 0;

            foreach (Ficha ficha in tablero_cargado.fichas)
            {
                if (ficha.color != null)
                {
                    count++;
                }
            }

            string color = doc.SelectNodes("tablero")[0].SelectNodes("siguienteTiro")[0].InnerText;

            tablero_cargado.Actualizar(color, Globals.usuario_activo, count / 2 - 2, count / 2 - 2);


            return(tablero_cargado);
        }
Пример #4
0
        public ActionResult Versus(Tablero tablero)
        {
            string usuario = tablero.usuario, usuario_opuesto = "";

            if (usuario == Globals.usuario_activo)
            {
                usuario_opuesto = "Oponente";
            }
            else
            {
                usuario_opuesto = Globals.usuario_activo;
            }


            string color = tablero.color, color_opuesto = "";

            if (color == "blanco")
            {
                color_opuesto = "negro";
            }
            else
            {
                color_opuesto = "blanco";
            }


            int index = Juego.Ficha_seleccionada(tablero);

            //APERTURA PERSONALIZADA
            if (tablero.apertura_personalizada == "true")
            {
                if (tablero.Apertura(index))
                {
                    Juego.Reemplazar(tablero, index, color);
                    tablero.Actualizar(color_opuesto, usuario_opuesto, 0, 0);

                    if (Juego.Celdas_ocupadas(tablero).Count == 4)
                    {
                        ViewBag.MessageType            = "success-message";
                        ViewBag.Message                = "¡Apertura personalizada finalizada!";
                        tablero.apertura_personalizada = "false";
                    }
                    else
                    {
                        ViewBag.MessageType = "neutral-message";
                        ViewBag.Message     = "Apertura personalizada en progreso, faltan " + (4 - Juego.Celdas_ocupadas(tablero).Count) + " fichas para finalizar";
                    }

                    return(View(tablero));
                }
                else
                {
                    ViewBag.MessageType = "error-message";
                    ViewBag.Message     = "¡Posición de apertura no válida!";
                    Juego.Reemplazar(tablero, index, "");

                    return(View(tablero));
                }
            }

            List <int> lista = Juego.Flanquear(tablero, index, color, color_opuesto);

            if (lista.Count > 0)
            {
                Juego.Reemplazar_lista(tablero, lista, color);

                List <int> celdas_validas = Juego.Celdas_validas(tablero, color_opuesto, color);

                if (celdas_validas.Count > 0)
                {
                    if (usuario == "Oponente")
                    {
                        tablero.Actualizar(color_opuesto, Globals.usuario_activo, tablero.movimientos, tablero.movimientos_oponente + 1);
                    }
                    else
                    {
                        tablero.Actualizar(color_opuesto, "Oponente", tablero.movimientos + 1, tablero.movimientos_oponente);
                    }

                    return(View(tablero));
                }
                else
                {
                    celdas_validas = Juego.Celdas_validas(tablero, color, color_opuesto);

                    if (celdas_validas.Count > 0)
                    {
                        ViewBag.Message     = usuario_opuesto + " no tiene movimientos válidos";
                        ViewBag.MessageType = "error-message";

                        return(View(tablero));
                    }
                    else
                    {
                        //JUEGO TERMINADO
                        ViewBag.MessageType = "success-message";
                        ViewBag.Message     = Juego.Juego_terminado(tablero, color_opuesto);
                        return(View(tablero));
                    }
                }
            }
            else
            {
                Juego.Reemplazar(tablero, index, "");
                return(View(tablero));
            }
        }