Jump to content
  • Buscar en
    • Más opciones...
    Encontrar resultados que contengan...
    Encontrar resultados en...

Archivado

Este tema ahora está archivado y cerrado a otras respuestas.

noghri

Búsqueda de elementos en una matriz (Problema matemático)

Publicaciones recomendadas

noghri PANDORA

Publicado
vida restante: 100%

Hola, estoy intentando programar un juego de tablero en C (nada de entorno gráfico de momento :P ). Ahora mismo estoy implementando el movimiento a través de los cursores, y me gustaría que al pulsar cualquiera de las flechas direccionales, el puntero fuese a la siguiente posición 'elegible'. Esto es, una matriz de 8x8, inicializada a 0 y con valores de 1 para blancas y 2 para negras.


 


Obviamente puedo hacer un barrido a lo bruto y encontrar esa posición, pero llevo un rato devanándome los sesos para encontrar una función que si por ejemplo pulsan la tecla hacia arriba, busque primero en las posiciones inmediatamente superiores, luego en la columna de la izquierda, si no encuentra nada en la derecha, si no 2 columnas más a la izquierda, si no 2 columnas más a la derecha... ¿Me podéis echar un cable? Muchas gracias.



--
KwKcDtI.gif
Disce patis, si vincere voles

Compartir este mensaje


Enlace al mensaje
Compartir en otros sitios web

Btc Diosas de Oro

Publicado
vida restante: 100%

A ver, si yo te entiendo bien. Supongamos que # significa pared, y _ significa vacio. Tu mapa:


 


#########


#______##


###__#__#


###__o__#


#########



Y la o es donde está tu "personaje", cursor o lo que quieras. Bien, tu tendras tu posicion del "o" guardada, por lo que si pulsas "arriba", deberas comprobar (si x,y es la posicion de tu personaje), que (x, y+1) sea pared (o y-1, segun el sentido que tenga tu matriz).


 


Si esta libre, pones ahi el cursor. Si no, comparas y+2 (no vayas a poner un if con y+2, haz y+variable, y vas incrementando variable), y lo mismo, asi hasta que encuentres uno vacio, y siempre que se siga cumpliendo que sea mayor o igual que cero, que es el limite de la matriz.


 


En sentido opuesto hacia abajo, sera igual pero con el limite en el rango de tu matriz menos uno, en lugar de cero.


 


Y analogo para los lados.


 


Un saludo ;)



Todos deseamos lo que no podemos alcanzar

 

76561197991656952.png

Compartir este mensaje


Enlace al mensaje
Compartir en otros sitios web

noghri PANDORA

Publicado
vida restante: 100%
case 1: for (l = 0; l<7;l++)
...{ 
......for (j = y; j >= 0; j--)
.........{
............if (matriz[i][j] == square)
...............{
..................x = i;
..................y = j;
..................break;
..................printf("Esto no deberia salir por pantalla");
..................system("CLS");
..................getch();
...............}
.........}
.........if (i >= x)  //Buscar a derecha en el siguiente paso por for
............{
...............i=i-k;
...............k++;
............}
.........else
............{
...............i = i+k;
...............k++;
............}
...}
 
Ese aspecto lo tengo ya solucionado, pero el maldito no sale del bucle cuando encuentra esa posición, aunque tampoco aparece el printf que he puesto como comprobación. ¿Es problema de esta estructura de datos, o se debe a algo más? ¿Sería mejor usar un return en vez de un break? Muchas gracias de nuevo. 

--
KwKcDtI.gif
Disce patis, si vincere voles

Compartir este mensaje


Enlace al mensaje
Compartir en otros sitios web

Btc Diosas de Oro

Publicado
vida restante: 100%

Nunca emplees goto o break si puedes evitarlo. Lo que debes hacer es crear un variable blandera, que valga 0 por ejemplo mientras no encuentres la posición. Entonces, cuando la encuentres la pasas a 1. Entonces, como habras cambiado el condicional del bucle de:



l<7

a



(l<7) && (bandera==0)

Pues una vez pones la bandera a 1, la posición ha sido encontrada, esa parte devuelve false, y como && es el operador AND, y ese no se cumple, se acaba el bucle ;)


Todos deseamos lo que no podemos alcanzar

 

76561197991656952.png

Compartir este mensaje


Enlace al mensaje
Compartir en otros sitios web

  • Explorando recientemente

    No hay usuarios registrados viendo esta página.

  • Crear nuevo...