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); }
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)); } }
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); }
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)); } }