[ Dudas sobre el curso de programación de juegos ]

Quiero eliminar numeros de un archivo

22-Oct-2020 09:38
Rodolfo Cifuentes Kamann
6 Respuestas

Saludos , tengo un programa del juego snake, con la diferencia que todas las
pelotas que se tiene que comer la serpiente ya estan en el juego, mostrandose en
la pantalla

XXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXX
X    6                7 X
X                       X
X   0           3       X
X                       X
X                       X
X                       X
X                       X
X                      9X
X                      8X
X    2                  X
X                       X
X            1          X
X                       X
X                 4     X
X    5                  X
XXXXXXXXXXXXXXXXXXXXXXXXX

en es txt las 'X' son murallas y los numeros son comidas enumeradas

por ahora quiero que se eliminen, y no logro hacerlos
for(COMIDA_Y=0;COMIDA_Y<LARGO;COMIDA_Y++)
   {
       for(COMIDA_X=0;COMIDA_X<ANCHO;COMIDA_X++)
       {
               if(esdigito(mapa1[COMIDA_Y][COMIDA_X])==1)
               {
                   valor=convierte(mapa1[COMIDA_Y][COMIDA_X]);
                   masked_blit(comidas,buffer,0,0+40*valor,COMIDA_X*40,COMIDA_Y*40,40,40);
                   if(cuerpo[0].x==COMIDA_X && cuerpo[0].y==COMIDA_Y)
                   {
                       mapa1[COMIDA_Y][COMIDA_X]=' ';
                       PUNTOS=PUNTOS+10;
                       TAM++;
                       cuerpo[TAM]=cuerpo[TAM-1];
                   }
               }
       }
   }

en esta funcion logro hacer que el tamaño y los puntos aumenten pero
no logro hacer que desaparezca la comida

Desde ya muchas gracias


22-Oct-2020 09:43
Nacho Cabanes (+84)

Imagino que lo quieres eliminar del array en memoria, no de un archivo, como dice el título de tu pregunta.

Por cierto, la pregunta está duplicada, borro la anterior.

Debería bastarte con cambiar esa posición del array que contiene un dígito, poniendo un espacio en su lugar:

mapa1[COMIDA_Y][COMIDA_X]) = ' ';


22-Oct-2020 10:02
Rodolfo Cifuentes Kamann

Disculpa , hubo un error al subir la pregunta anterior , así que pensé que no se subió, disculpa por lo sucedido.

De hecho , eso estaba tratando de eliminar con el espacio , pero al pasar por encima de ellos , se suman los puntos , se aumenta el tamaño , pero el numero sigue estando mostrado en pantalla , de hecho , puedo pasar mas de 1 vez encima de ese mismo numero y sigue aumentándome los puntos y aumentando el tamaño pero no desaparece


22-Oct-2020 10:18
Nacho Cabanes (+84)

Lo siento, pero es que no acabo de entender la lógica que estás aplicando. Imagino que el "masked_blit" será para dibujar algo en pantalla (creo recordar que Allegro tenía una función así), pero si lo aplicas sólo cuando el valor es numérico, no podrás dibujar paredes interiores, y la exteriores las tendrás que tratar como un caso especial.

A nivel estilístico, no deberías usar mayúsculas para variables como COMIDA_Y o TAM, sino sólo para constantes.

Y ese fragmento que te he comentado, el de reemplazar por espacio, debería funcionar (aunque no sé qué hace tu función "esdigito" ni para qué la necesitas, cuando hay una incorporada en el sistema, y el error podría estar ahí).

Pero como ya has dibujado antes, no desaparecerá hasta que recojas la siguiente comida (deberías dibujar tras comprobar si debes borrarla, no antes).

Pero insisto: no debería estar sumándote puntos más de una vez, porque en la siguiente pasada, el "if(esdigito(mapa1[COMIDA_Y][COMIDA_X])==1)" no debería darte un valor numérico si ya lo has cambiado por espacio.


22-Oct-2020 10:57
Rodolfo Cifuentes Kamann

Lo siento por no haberlo explicado

int esdigito(char dato)
{
   if(dato>='0'  && dato<='9')
   {
       return 1;
   }
   return 0;
}

mas que nada es que tengo una imagen bmp de (40,400), de la misma imagen con la comida que tiene que comer la snake , enumeradas , esa parte ya me funciona si , esa función fue un paso previo que hice para hacer la separación y el valor=convierte...... donde valor es un int

int convierte(char dato)
{
   return dato-'0';
}


Volviendo al  caso ,  el tema es que me el if donde estaba la condición de if(esdigito(mapa1[COMIDA_Y][COMIDA_X]==1)) , entra , hace la operación de sumar los puntos , aumenta el tamaño , pero no puedo hacer que se vuelva 0 , intente como tu dices ocupar el mapa1[COMIDA_Y][COMIDA_X]=' '; pero no desaparece en ningún momento.


22-Oct-2020 11:01
Rodolfo Cifuentes Kamann

A con respecto a las paredes , tengo otra función separada que es para las paredes , que funcionan como muros , donde esta listo , y si colisiona la serpiente con ellas pierde


23-Oct-2020 10:26
Nacho Cabanes (+84)

No sé donde haces ese "convierte", pero puede ser parte del problema, porque ' ' es menor que '0'.

En cualquier caso, depura paso a paso en ese punto. Pon un punto de interrupción, comprueba que pasa por todas las instrucciones y comprueba los cambios que se producen en los valores de las variables.

Pero insisto, deberías dibujar cuando ya has actualizado el nivel, no antes.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)