public void ImprimirFiguras() { int cont = 0; while (ListaFiguras[cont] != null) { Figura f = ListaFiguras[cont]; string tipoFigura = f.GetTipo(); Ubicacion[] ubicaciones = f.GetLista(); Console.WriteLine("Figura:" + tipoFigura); int cont2 = 0; while (cont2 < ubicaciones.Length) { Ubicacion ubi = ubicaciones[cont2]; string str1 = ubi.GetX().ToString(); string str2 = ubi.GetY().ToString(); Console.WriteLine("Ubicaciones: " + "[" + str1 + "," + str2 + "]"); cont2++; } cont++; } }
public bool Resolver(int [,] tablero) { Ubicacion ubi = NextEmpty(tablero); if (ubi.GetX() == -1 && ubi.GetY() == -1) //resuelto { return(true); } int parX = ubi.GetX(); int parY = ubi.GetY(); for (int i = 1; i <= N; i++) { if (VerificarFilasYColumnas(tablero, i, parX, parY) && VerificarFigura(tablero, i, parX, parY) && VerificarOperacion(tablero, i, parX, parY)) { Tablero[parX, parY] = i; ModificarFigura(parX, parY, i, 1); //Console.WriteLine("-------------------------------------------------------------------------"); //Print(tablero); if (Resolver(tablero)) { return(true); } //Console.WriteLine("**************************************************************************"); int actual = tablero[parX, parY]; tablero[parX, parY] = 0; ModificarFigura(parX, parY, actual, 2); //Print(tablero); //Console.WriteLine("**************************************************************************"); } } return(false); }
public bool ComprobarEspacio(int[,] matrizFiguras, string figura, int orientacion, int pivoteX, int pivoteY) //pivote es par de donde empieza la figura { int ubi1 = 0; int ubi2 = 0; int ubi3 = 0; int ubi4 = 0; if (figura == "cuadrado") { if (pivoteY + 1 < N && pivoteX + 1 < N) //Que no se salga de los limites { ubi1 = matrizFiguras[pivoteX, pivoteY]; ubi2 = matrizFiguras[pivoteX, pivoteY + 1]; ubi3 = matrizFiguras[pivoteX + 1, pivoteY]; ubi4 = matrizFiguras[pivoteX + 1, pivoteY + 1]; if ((ubi1 == 0) && (ubi2 == 0) && (ubi3 == 0) && (ubi4 == 0)) //Que no haya casillas ocupadas { FigurasArray[pivoteX, pivoteY] = NumFigura; FigurasArray[pivoteX, pivoteY + 1] = NumFigura; FigurasArray[pivoteX + 1, pivoteY] = NumFigura; FigurasArray[pivoteX + 1, pivoteY + 1] = NumFigura; Ubicacion u1 = new Ubicacion(pivoteX, pivoteY); Ubicacion u2 = new Ubicacion(pivoteX, pivoteY + 1); Ubicacion u3 = new Ubicacion(pivoteX + 1, pivoteY); Ubicacion u4 = new Ubicacion(pivoteX + 1, pivoteY + 1); Ubicacion[] list = new Ubicacion[4]; list[0] = u1; list[1] = u2; list[2] = u3; list[3] = u4; int nOper = GenerarNumeroOperacion(1); Figura fig = new Figura(list, "cuadrado", nOper, 1, 0, 0); SetListaFiguras(fig); NumFigura++; return(true); } else { return(false); } } else { return(false); } } if (figura == "ele") { if (orientacion == 1 || orientacion == 2 || orientacion == 3 || orientacion == 4) { if (orientacion == 1) { if (pivoteX + 2 < N && pivoteY + 1 < N) { ubi1 = matrizFiguras[pivoteX, pivoteY]; ubi2 = matrizFiguras[pivoteX + 1, pivoteY]; ubi3 = matrizFiguras[pivoteX + 2, pivoteY]; ubi4 = matrizFiguras[pivoteX + 2, pivoteY + 1]; if ((ubi1 == 0) && (ubi2 == 0) && (ubi3 == 0) && (ubi4 == 0)) //Que no haya casillas ocupadas { FigurasArray[pivoteX, pivoteY] = NumFigura; FigurasArray[pivoteX + 1, pivoteY] = NumFigura; FigurasArray[pivoteX + 2, pivoteY] = NumFigura; FigurasArray[pivoteX + 2, pivoteY + 1] = NumFigura; Ubicacion u1 = new Ubicacion(pivoteX, pivoteY); Ubicacion u2 = new Ubicacion(pivoteX + 1, pivoteY); Ubicacion u3 = new Ubicacion(pivoteX + 2, pivoteY); Ubicacion u4 = new Ubicacion(pivoteX + 2, pivoteY + 1); Ubicacion[] list = new Ubicacion[4]; list[0] = u1; list[1] = u2; list[2] = u3; list[3] = u4; int nOper = GenerarNumeroOperacion(1); Figura fig = new Figura(list, "ele", nOper, 1, 0, 0); SetListaFiguras(fig); NumFigura++; return(true); } else { return(false); } } else { return(false); } } if (orientacion == 2) { if (pivoteX + 2 < N && pivoteY - 1 > 0) { ubi1 = matrizFiguras[pivoteX, pivoteY]; ubi2 = matrizFiguras[pivoteX + 1, pivoteY]; ubi3 = matrizFiguras[pivoteX + 2, pivoteY]; ubi4 = matrizFiguras[pivoteX + 2, pivoteY - 1]; if ((ubi1 == 0) && (ubi2 == 0) && (ubi3 == 0) && (ubi4 == 0)) //Que no haya casillas ocupadas { FigurasArray[pivoteX, pivoteY] = NumFigura; FigurasArray[pivoteX + 1, pivoteY] = NumFigura; FigurasArray[pivoteX + 2, pivoteY] = NumFigura; FigurasArray[pivoteX + 2, pivoteY - 1] = NumFigura; Ubicacion u1 = new Ubicacion(pivoteX, pivoteY); Ubicacion u2 = new Ubicacion(pivoteX + 1, pivoteY); Ubicacion u3 = new Ubicacion(pivoteX + 2, pivoteY); Ubicacion u4 = new Ubicacion(pivoteX + 2, pivoteY - 1); Ubicacion[] list = new Ubicacion[4]; list[0] = u1; list[1] = u2; list[2] = u3; list[3] = u4; int nOper = GenerarNumeroOperacion(1); Figura fig = new Figura(list, "ele", nOper, 1, 0, 0); SetListaFiguras(fig); NumFigura++; return(true); } else { return(false); } } else { return(false); } } if (orientacion == 3 || orientacion == 4) //ver si en realidad mata dos pajaros de un tiro { if (pivoteX + 2 < N && pivoteY + 1 < N) { if (orientacion == 3) { ubi1 = matrizFiguras[pivoteX, pivoteY]; ubi2 = matrizFiguras[pivoteX, pivoteY + 1]; ubi3 = matrizFiguras[pivoteX + 1, pivoteY + 1]; ubi4 = matrizFiguras[pivoteX + 2, pivoteY + 1]; if ((ubi1 == 0) && (ubi2 == 0) && (ubi3 == 0) && (ubi4 == 0)) //Que no haya casillas ocupadas { FigurasArray[pivoteX, pivoteY] = NumFigura; FigurasArray[pivoteX, pivoteY + 1] = NumFigura; FigurasArray[pivoteX + 1, pivoteY + 1] = NumFigura; FigurasArray[pivoteX + 2, pivoteY + 1] = NumFigura; Ubicacion u1 = new Ubicacion(pivoteX, pivoteY); Ubicacion u2 = new Ubicacion(pivoteX, pivoteY + 1); Ubicacion u3 = new Ubicacion(pivoteX + 1, pivoteY + 1); Ubicacion u4 = new Ubicacion(pivoteX + 2, pivoteY + 1); Ubicacion[] list = new Ubicacion[4]; list[0] = u1; list[1] = u2; list[2] = u3; list[3] = u4; int nOper = GenerarNumeroOperacion(1); Figura fig = new Figura(list, "ele", nOper, 1, 0, 0); SetListaFiguras(fig); NumFigura++; return(true); } else { return(false); } } if (orientacion == 4) { ubi1 = matrizFiguras[pivoteX, pivoteY]; ubi2 = matrizFiguras[pivoteX, pivoteY + 1]; ubi3 = matrizFiguras[pivoteX + 1, pivoteY]; ubi4 = matrizFiguras[pivoteX + 2, pivoteY]; if ((ubi1 == 0) && (ubi2 == 0) && (ubi3 == 0) && (ubi4 == 0)) //Que no haya casillas ocupadas { FigurasArray[pivoteX, pivoteY] = NumFigura; FigurasArray[pivoteX, pivoteY + 1] = NumFigura; FigurasArray[pivoteX + 1, pivoteY] = NumFigura; FigurasArray[pivoteX + 2, pivoteY] = NumFigura; Ubicacion u1 = new Ubicacion(pivoteX, pivoteY); Ubicacion u2 = new Ubicacion(pivoteX, pivoteY + 1); Ubicacion u3 = new Ubicacion(pivoteX + 1, pivoteY); Ubicacion u4 = new Ubicacion(pivoteX + 2, pivoteY); Ubicacion[] list = new Ubicacion[4]; list[0] = u1; list[1] = u2; list[2] = u3; list[3] = u4; int nOper = GenerarNumeroOperacion(1); Figura fig = new Figura(list, "ele", nOper, 1, 0, 0); SetListaFiguras(fig); NumFigura++; return(true); } else { return(false); } } } else { return(false); } } } else { return(false); } } if (figura == "linea") { if (orientacion == 1) //vertical { if (pivoteX + 3 < N) { ubi1 = matrizFiguras[pivoteX, pivoteY]; ubi2 = matrizFiguras[pivoteX + 1, pivoteY]; ubi3 = matrizFiguras[pivoteX + 2, pivoteY]; ubi4 = matrizFiguras[pivoteX + 3, pivoteY]; if ((ubi1 == 0) && (ubi2 == 0) && (ubi3 == 0) && (ubi4 == 0)) //Que no haya casillas ocupadas { FigurasArray[pivoteX, pivoteY] = NumFigura; FigurasArray[pivoteX + 1, pivoteY] = NumFigura; FigurasArray[pivoteX + 2, pivoteY] = NumFigura; FigurasArray[pivoteX + 3, pivoteY] = NumFigura; Ubicacion u1 = new Ubicacion(pivoteX, pivoteY); Ubicacion u2 = new Ubicacion(pivoteX + 1, pivoteY); Ubicacion u3 = new Ubicacion(pivoteX + 2, pivoteY); Ubicacion u4 = new Ubicacion(pivoteX + 3, pivoteY); Ubicacion[] list = new Ubicacion[4]; list[0] = u1; list[1] = u2; list[2] = u3; list[3] = u4; int nOper = GenerarNumeroOperacion(1); Figura fig = new Figura(list, "linea", nOper, 1, 0, 0); SetListaFiguras(fig); NumFigura++; return(true); } else { return(false); } } else { return(false); } } if (orientacion == 2) //horizontal { if (pivoteY + 3 < N) { ubi1 = matrizFiguras[pivoteX, pivoteY]; ubi2 = matrizFiguras[pivoteX, pivoteY + 1]; ubi3 = matrizFiguras[pivoteX, pivoteY + 2]; ubi4 = matrizFiguras[pivoteX, pivoteY + 3]; if ((ubi1 == 0) && (ubi2 == 0) && (ubi3 == 0) && (ubi4 == 0)) //Que no haya casillas ocupadas { FigurasArray[pivoteX, pivoteY] = NumFigura; FigurasArray[pivoteX, pivoteY + 1] = NumFigura; FigurasArray[pivoteX, pivoteY + 2] = NumFigura; FigurasArray[pivoteX, pivoteY + 3] = NumFigura; Ubicacion u1 = new Ubicacion(pivoteX, pivoteY); Ubicacion u2 = new Ubicacion(pivoteX, pivoteY + 1); Ubicacion u3 = new Ubicacion(pivoteX, pivoteY + 2); Ubicacion u4 = new Ubicacion(pivoteX, pivoteY + 3); Ubicacion[] list = new Ubicacion[4]; list[0] = u1; list[1] = u2; list[2] = u3; list[3] = u4; int nOper = GenerarNumeroOperacion(1); Figura fig = new Figura(list, "linea", nOper, 1, 0, 0); SetListaFiguras(fig); NumFigura++; return(true); } else { return(false); } } else { return(false); } } } if (figura == "te") { if (orientacion == 1) { if (pivoteY - 1 >= 0 && pivoteY + 1 < N && pivoteX + 1 < N) { ubi1 = matrizFiguras[pivoteX, pivoteY]; ubi2 = matrizFiguras[pivoteX + 1, pivoteY]; ubi3 = matrizFiguras[pivoteX + 1, pivoteY - 1]; ubi4 = matrizFiguras[pivoteX + 1, pivoteY + 1]; if ((ubi1 == 0) && (ubi2 == 0) && (ubi3 == 0) && (ubi4 == 0)) //Que no haya casillas ocupadas { FigurasArray[pivoteX, pivoteY] = NumFigura; FigurasArray[pivoteX + 1, pivoteY] = NumFigura; FigurasArray[pivoteX + 1, pivoteY - 1] = NumFigura; FigurasArray[pivoteX + 1, pivoteY + 1] = NumFigura; Ubicacion u1 = new Ubicacion(pivoteX, pivoteY); Ubicacion u2 = new Ubicacion(pivoteX + 1, pivoteY); Ubicacion u3 = new Ubicacion(pivoteX + 1, pivoteY - 1); Ubicacion u4 = new Ubicacion(pivoteX + 1, pivoteY + 1); Ubicacion[] list = new Ubicacion[4]; list[0] = u1; list[1] = u2; list[2] = u3; list[3] = u4; int nOper = GenerarNumeroOperacion(1); Figura fig = new Figura(list, "te", nOper, 1, 0, 0); SetListaFiguras(fig); NumFigura++; return(true); } else { return(false); } } } if (orientacion == 2) { if (pivoteY + 2 < N && pivoteX + 1 < N) { ubi1 = matrizFiguras[pivoteX, pivoteY]; ubi2 = matrizFiguras[pivoteX, pivoteY + 1]; ubi3 = matrizFiguras[pivoteX, pivoteY + 2]; ubi4 = matrizFiguras[pivoteX + 1, pivoteY + 1]; if ((ubi1 == 0) && (ubi2 == 0) && (ubi3 == 0) && (ubi4 == 0)) //Que no haya casillas ocupadas { FigurasArray[pivoteX, pivoteY] = NumFigura; FigurasArray[pivoteX, pivoteY + 1] = NumFigura; FigurasArray[pivoteX, pivoteY + 2] = NumFigura; FigurasArray[pivoteX + 1, pivoteY + 1] = NumFigura; Ubicacion u1 = new Ubicacion(pivoteX, pivoteY); Ubicacion u2 = new Ubicacion(pivoteX, pivoteY + 1); Ubicacion u3 = new Ubicacion(pivoteX, pivoteY + 2); Ubicacion u4 = new Ubicacion(pivoteX + 1, pivoteY + 1); Ubicacion[] list = new Ubicacion[4]; list[0] = u1; list[1] = u2; list[2] = u3; list[3] = u4; int nOper = GenerarNumeroOperacion(1); Figura fig = new Figura(list, "te", nOper, 1, 0, 0); SetListaFiguras(fig); NumFigura++; return(true); } else { return(false); } } } else { return(false); } } if (figura == "snake") //la figura que parece una serpiente { if (orientacion == 1) //horizontal { if (pivoteY - 1 >= 0 && pivoteY + 1 < N && pivoteX + 1 < N) { ubi1 = matrizFiguras[pivoteX, pivoteY]; ubi2 = matrizFiguras[pivoteX + 1, pivoteY]; ubi3 = matrizFiguras[pivoteX + 1, pivoteY - 1]; ubi4 = matrizFiguras[pivoteX, pivoteY + 1]; if ((ubi1 == 0) && (ubi2 == 0) && (ubi3 == 0) && (ubi4 == 0)) //Que no haya casillas ocupadas { FigurasArray[pivoteX, pivoteY] = NumFigura; FigurasArray[pivoteX + 1, pivoteY] = NumFigura; FigurasArray[pivoteX + 1, pivoteY - 1] = NumFigura; FigurasArray[pivoteX, pivoteY + 1] = NumFigura; Ubicacion u1 = new Ubicacion(pivoteX, pivoteY); Ubicacion u2 = new Ubicacion(pivoteX + 1, pivoteY); Ubicacion u3 = new Ubicacion(pivoteX + 1, pivoteY - 1); Ubicacion u4 = new Ubicacion(pivoteX, pivoteY + 1); Ubicacion[] list = new Ubicacion[4]; list[0] = u1; list[1] = u2; list[2] = u3; list[3] = u4; int nOper = GenerarNumeroOperacion(1); Figura fig = new Figura(list, "snake", nOper, 1, 0, 0); int index = ListaFiguras.Length; SetListaFiguras(fig); NumFigura++; return(true); } else { return(false); } } } if (orientacion == 2) //vertical { if (pivoteY + 1 < N && pivoteX + 2 < N) { ubi1 = matrizFiguras[pivoteX, pivoteY]; ubi2 = matrizFiguras[pivoteX + 1, pivoteY]; ubi3 = matrizFiguras[pivoteX + 1, pivoteY + 1]; ubi4 = matrizFiguras[pivoteX + 2, pivoteY + 1]; if ((ubi1 == 0) && (ubi2 == 0) && (ubi3 == 0) && (ubi4 == 0)) //Que no haya casillas ocupadas { FigurasArray[pivoteX, pivoteY] = NumFigura; FigurasArray[pivoteX + 1, pivoteY] = NumFigura; FigurasArray[pivoteX + 1, pivoteY + 1] = NumFigura; FigurasArray[pivoteX + 2, pivoteY + 1] = NumFigura; Ubicacion u1 = new Ubicacion(pivoteX, pivoteY); Ubicacion u2 = new Ubicacion(pivoteX + 1, pivoteY); Ubicacion u3 = new Ubicacion(pivoteX + 1, pivoteY + 1); Ubicacion u4 = new Ubicacion(pivoteX + 2, pivoteY + 1); Ubicacion[] list = new Ubicacion[4]; list[0] = u1; list[1] = u2; list[2] = u3; list[3] = u4; int nOper = GenerarNumeroOperacion(1); Figura fig = new Figura(list, "snake", nOper, 1, 0, 0); int index = ListaFiguras.Length; SetListaFiguras(fig); NumFigura++; return(true); } else { return(false); } } } } if (figura == "solo") { ubi1 = matrizFiguras[pivoteX, pivoteY]; if (ubi1 == 0) { FigurasArray[pivoteX, pivoteY] = NumFigura; Ubicacion u1 = new Ubicacion(pivoteX, pivoteY); Ubicacion[] list = new Ubicacion[1]; list[0] = u1; Figura fig = new Figura(list, "solo", 0, 1, 0, 0); int index = ListaFiguras.Length; SetListaFiguras(fig); NumFigura++; return(true); } else { return(false); } } if (figura == "dos") { if (orientacion == 1) //vertical { if (pivoteX + 1 < N) { ubi1 = matrizFiguras[pivoteX, pivoteY]; ubi2 = matrizFiguras[pivoteX + 1, pivoteY]; if (ubi1 == 0 && ubi2 == 0) { FigurasArray[pivoteX, pivoteY] = NumFigura; FigurasArray[pivoteX + 1, pivoteY] = NumFigura; Ubicacion u1 = new Ubicacion(pivoteX, pivoteY); Ubicacion u2 = new Ubicacion(pivoteX + 1, pivoteY); Ubicacion[] list = new Ubicacion[2]; list[0] = u1; list[1] = u2; int nOper = GenerarNumeroOperacion(2); Figura fig = new Figura(list, "dos", nOper, 2, 1, 0); int index = ListaFiguras.Length; SetListaFiguras(fig); NumFigura++; return(true); } else { return(false); } } else { return(false); } } if (orientacion == 2) //horizontal { if (pivoteY + 1 < N) { ubi1 = matrizFiguras[pivoteX, pivoteY]; ubi2 = matrizFiguras[pivoteX, pivoteY + 1]; if (ubi1 == 0 && ubi2 == 0) { FigurasArray[pivoteX, pivoteY] = NumFigura; FigurasArray[pivoteX, pivoteY + 1] = NumFigura; Ubicacion u1 = new Ubicacion(pivoteX, pivoteY); Ubicacion u2 = new Ubicacion(pivoteX, pivoteY + 1); Ubicacion[] list = new Ubicacion[2]; list[0] = u1; list[1] = u2; int nOper = GenerarNumeroOperacion(2); Figura fig = new Figura(list, "dos", nOper, 2, 1, 0); int index = ListaFiguras.Length; SetListaFiguras(fig); NumFigura++; return(true); } else { return(false); } } else { return(false); } } } return(false); }