Hola a todos,
seguro muchos conoceran este juego, es siempre el mismo escenario, solo que cada nivel va saliendo 1 bola más.
la idea del juego es ir encerrando dichas bolas y lo que encierres que no tenga bolas se eliminara como si el escenario se comiera o desapareciera. subo lo que llevo para que el que no lo conozca lo ensaye y me pueda ayudar
lo que necesito es:
¿Con que algoritmo o en que orden logico debo eliminar pedazos del escenario que esten encerrados que no tengan bolas?
así como lo tengo no funciona al 100% bien, le he cacharreado y no funciona como debe ser
agradezco mucho su ayuda/opinion, eh aquí los controles para la prueba
controles:
click izquierdo crea 2 lineas que al tocar el borde encierran el escenario
click derecho cambia el cursor horizontal/vertical
Responderte es difícil sin saber cómo organizas la información sobre cada área. Partiendo de cero, lo que yo haría sería lo siguiente:
1-Guardar en un array las coordenadas de la esquina superior izquierda y la esquina inferior derecha de cada área donde existe al menos una bola. El array tendrá 4 columnas y tantas filas como áreas con bolas existan. Al comienzo del juego habrá, obviamente, una sola fila. Guardar en una variable el número de filas del array para saber en todo momento cuántas áreas existen.
2-Al crear un intento de pared, identificar la fila del array asociada al área donde se hizo click. Esto se puede lograr comparando las coordenadas del mouse con las coordenadas de las esquinas de cada área guardadas en el array, mediante un bucle.
3-Cuando el jugador logre exitosamente la construcción de una pared, identificar las coordenadas de los extremos de ésta. Ya que la pared tiene un grosor dado, esas coordenadas serán las de los 4 vértices de la pared. Con esas coordenadas, determinar los límites de las 2 áreas nuevas generadas en las que se ha transformado el área original.
4-Para cada una de esas 2 áreas, determinar si al menos una bola está dentro de esa área. Eso se puede lograr usando la función collision_rectangle. Si en ambas áreas hay bolas, se necesita actualizar las coordenadas del área original para que cubran sólo la primera área y además crear una nueva fila para el array, con los datos de la segunda área; esto hará que el número de áreas aumente en 1. Si en sólo una de las dos áreas existen bolas, sólo se requiere actualizar en el array las coordenadas del área original para que cubra esa nueva área más pequeña; en este caso el número de áreas no aumenta.
5-Para el área del paso 4 que quedó sin bolas (si la hubo), crear una instancia de un objeto que se encargue de "ocultarla" de la vista, dibujando un rectángulo negro sobre ella.
gracias por responder.
me parece un poco complicado la forma de usar arrays para estar evaluando las distintas divisiones que se forman por que habra momentos en los que tendras 15, 16, 17 bolas en juego y se encerraran poco a poco generando muchas areas.
yo lo hice así:
cuando una área es dividida, cada bloque blanco (los del fondo) por medio de bucles determina los pixeles en las direcciones arriba, abajo, izquierda y derecha hasta colisionar con un muro o bloque negro.
luego hace una verificacion en un área un poquito más grande para confirmar que el área esta totalmente cerrada y luego genera 1 solo objeto con las dimensiones del área ya revisada.
en teoria me deberia funcionar sin error, pero veo que a veces genera un bugs y no lo hace como debe, esto pasa en niveles avanzados donde ya hay 5, 6 o mas bolas en juego