Autor
|
Tema: Matriz Dinamica en c++. Como rellenarla en coordenadas especificas? (Leído 20,385 veces)
|
Yoel Alejandro
|
Hola María. Compatriota!!!, entiendo tu situación pues también soy de Vzla y es triste la situación que vivimos. Los poderosos explotando a los débiles , no importa el lado político en que se midan. Leo, lo que quiero decir más específicamente es que el totalitarismo de derecha (Pinochet, Franco, Mussolini) y el de izquierda (Stalin, Fidel, Chávez) son lo mismo; al final sólo pisotear y explotar al pueblo. Robar a manos llenas, porque TODOS sin importar su lado político se hacen ricos y amasan enormes fortunas en el exterior, mientras el pueblo pasa trabajo. Aunque seas un profesional, igual no te alcanza para vivir. En Venezuela estamos mal, mal, mal .... la GN reprime y maltrata a la gente, a algunos los han lesionado, quemado, golpeado, secuestrado, perdido un ojo, y otros han perdido la vida. No hay comida. No se puede salir del país porque no hay Aerolíneas (el gobierno les debe una fortuna y suspendieron el servicio) y es un problema para otorgar los dólares o euros. Así que ni soñar con visitar un días las Canarias. Por cierto, ¿cómo es la situación allá? Espero que mejor que aquí, y si pensabas venir algún día a Vzla no lo hagas en este momento porque al saber que eres extranjero capaz y te acusan de agente de la CIA y te llevan preso. Y agradezco la solidaridad de ustedes los Canarios, yo creo que la cultura Hispana, Canaria y Latinoamericana se parece mucho. Por cierto, ¿Canarios y Españoles peninsulares se llevan bien o mal entre sí? Respecto al buscaminas pareces adivinar porque justamente tuve que buscar en google ya que se me había olvidado como se jugaba, jaja. Corrí tu programa y perfecto!!!, ahora sólo hace falta la parte dónde se desarrolla el juego en sí, o sea, se van descubriendo las minas. Por eso le pregunté a María si se puede usar getch() ya que en ese caso el juego sería más interactivo y nos podemos ir desplazando por directamente por las casillas en lugar que estar preguntando coordenadas
|
|
|
En línea
|
Saludos, Yoel. P.D..- Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
|
|
|
xuhipoint
Desconectado
Mensajes: 13
|
hola yoe, querido compatriota, pues si la situación de Venezuela no esta facil, creo que estamos en el peor momento. Yo solo rezo porque todo termina bien y no sigan aumentando los números de muertos, que aunque no los conozca me duelen porque son mis hermanos. Y bueno referente al proyecto solo puedo utilizar iostream y string, tengo que crear una matriz dinamica, luego ingresar el numero de minas y las coordenadas donde estaran las mismas, cubrir mi matriz y luego destaparla segun la posicion del usuario, hasta el momento este es mi codigo pero no logro poner #include <iostream> using namespace std; void imprimir (char **Matriz,int dim); void colocar_minas (char **Matriz,int dim); int main(void) { int dim,n; char ch=35,sin_bomba=48; cout << "Introduzca la dimension de la matriz: "; cin >> dim; char **Matriz = new char *[dim]; for (int j = 0; j < dim; j++) Matriz[j] = new char [dim]; for (int i = 0; i < dim; i++) for (int j = 0; j < dim; j++) Matriz[i][j]=sin_bomba; colocar_minas (Matriz,dim); for (int i = 0; i < dim; i++) for (int j = 0; j < dim; j++){ n = 1 ; if (n<2 && Matriz[i][j]=='0') Matriz[i][j]=ch; else if (n==2 || n==3) Matriz[i][j]='*'; } } void imprimir (char **Matriz,int dim) { for (int i = 0; i < dim; i++) { cout << "\t\t" ; for (int j = 0; j < dim; j++){ cout << ' ' << Matriz[i][j] << ' ' ; } cout << "\n\n"; } cout << "\n\n"; } void colocar_minas (char **Matriz,int dim){ int **cont,bomba=42; cont = new int *[dim]; for (int j = 0; j < dim; j++) cont[j] = new int [dim]; for (int i = 0; i < dim; i++) for (int j = 0; j < dim; j++) cont[i][j]=0; int numero,fil,col,k,l,contador=0; cout << "minas:"; cin >> numero; for (int i = 0; i < numero; i++){ do{ cout << "Introduzca fila "; cin >> fil; }while(fil<1 || fil>dim); fil=fil-1; do{ cout << "Introduzca columna "; cin >> col; }while(col<1 || col>dim); col=col-1; Matriz[fil][col]=bomba; cout<<"\tM["<<fil+1<<","<<col+1<<"]="<<Matriz[fil][col]<< "\n\n"; } imprimir (Matriz,dim); for ( fil = 0 ;fil < dim; fil++) { for ( col = 0; col < dim; col++){ contador=0; for ( k = -1; k < 2; k++) { for ( l = -1; l < 2; l++){ if (fil+k < 0 || col+l < 0 || fil+k > dim-1 || col+l > dim-1) continue; else{ contador+=(Matriz[fil+k][col+l]-'0'); } } } cont[fil][col]=contador; } } }
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
........................................................... hasta el momento este es mi codigo pero no logro poner .................................................
¿Qué no logras poner?. Sabemos algo de C e incluso de C++ pero no somos pitonisos............. ¡¡¡¡ Saluditos! ..... !!!!
|
|
|
En línea
|
|
|
|
xuhipoint
Desconectado
Mensajes: 13
|
Ya he modificado un poco el codigo, pero donde esta colocada la mina en vez de salir unos a su alrededor siguen saliendo asteriscos. #include <iostream> using namespace std; void imprimir (char **Matriz,int dim); void colocar_minas (char **Matriz,int dim); int main(void) { int dim; char ch=35; cout << "Introduzca la dimension de la matriz: "; cin >> dim; char **Matriz = new char *[dim]; for (int j = 0; j < dim; j++) Matriz[j] = new char [dim]; for (int i = 0; i < dim; i++) for (int j = 0; j < dim; j++) Matriz[i][j]='0'; colocar_minas (Matriz,dim); imprimir (Matriz,dim); for (int i = 0; i < dim; i++) for (int j = 0; j < dim; j++){ if (Matriz[i][j]=='0') Matriz[i][j]=ch; if (Matriz[i][j]=='*' ) Matriz[i][j]=ch; } imprimir (Matriz,dim); } void imprimir (char **Matriz,int dim) { for (int i = 0; i < dim; i++) { cout << "\t\t" ; for (int j = 0; j < dim; j++){ cout << ' ' << Matriz[i][j] << ' ' ; } cout << "\n\n"; } cout << "\n\n"; } void colocar_minas (char **Matriz,int dim){ int **cont; cont = new int *[dim]; for (int j = 0; j < dim; j++) cont[j] = new int [dim]; for (int i = 0; i < dim; i++) for (int j = 0; j < dim; j++) cont[i][j]=0; int numero,fil,col,k,l,contador=0; cout << "Ingrese minas:"; cin >> numero; for (int i = 0; i < numero; i++){ do{ cout << "Introduzca fila: "; cin >> fil; }while(fil<1 || fil>dim); fil=fil-1; do{ cout << "Introduzca columna: "; cin >> col; }while(col<1 || col>dim); col=col-1; Matriz[fil][col]='*'; cout<<Matriz[fil][col]<< "\n\n"; } imprimir (Matriz,dim); for ( fil = 0 ;fil < dim; fil++) { for ( col = 0; col < dim; col++){ contador=0; for ( k = -1; k < 2; k++) { for ( l = -1; l < 2; l++){ if (fil+k < 0 || col+l < 0 || fil+k > dim-1 || col+l > dim-1) continue; else{ contador+=(Matriz[fil+k][col+l]-'0'); } } } cont[fil][col]=contador; } } for ( fil = 0 ;fil < dim; fil++) for ( col = 0; col < dim; col++) Matriz[fil][col]=cont[fil][col]+48; }
|
|
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
Matriz[fil][col]='*'; // ... for ( fil = 0 ;fil < dim; fil++) for ( col = 0; col < dim; col++) Matriz[fil][col]=cont[fil][col]+48;
Ese bucle borra, literalmente, la posición de las minas. Deberías comprobar, antes de machacar el valor de Matriz, que la posición no contiene una mina. cout << "\n\n";
Hay una constante definida en el espacio de nombres std que es endl. Tiene la ventaja de que es portable, ya que la STL en linux implementa su versión de endl y Windows hace lo propio. Es más portable usar lo siguiente: cout << endl << endl;
Más cosas... for ( fil = 0 ;fil < dim; fil++) { for ( col = 0; col < dim; col++){ contador=0; for ( k = -1; k < 2; k++) { for ( l = -1; l < 2; l++){ if (fil+k < 0 || col+l < 0 || fil+k > dim-1 || col+l > dim-1) continue; else{ contador+=(Matriz[fil+k][col+l]-'0'); } } } cont[fil][col]=contador; } }
contador += ¿¿que?? A ver, si en Matriz las minas se representan con asteriscos... por qué no buscas asteriscos para contarlos?? la transformación que estás haciendo ahí no tiene ningún sentido. Dicho de otra forma: ¿Te suena el caracter '#' si solo pones una mina? Ya sabes de dónde sale.
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Se te fue un gazapo en el código:do{ cout << "Introduzca columna: "; cin >> col; }while(col<1 || col>dim); col=col-1; Matriz[fil][col]='*'; /* <==AQUI */ /*ES ==> */Matriz[fil][col]='1'; cout<<Matriz[fil][col]<< "\n\n";
¡¡¡¡ Saluditos! ..... !!!!
|
|
« Última modificación: 10 Marzo 2014, 13:52 pm por leosansan »
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
Se te fue un gazapo en el código:do{ cout << "Introduzca columna: "; cin >> col; }while(col<1 || col>dim); col=col-1; Matriz[fil][col]='*'; /* <==AQUI */ /*ES ==> */Matriz[fil][col]='1'; cout<<Matriz[fil][col]<< "\n\n";
¡¡¡¡ Saluditos! ..... !!!! Pero ese cambio tiene un problema... que luego cuando vaya a contar... cómo identifica la posición original de la mina?? Pongamos el caso: Después de calcular las minas se tiene Eso es incorrecto porque lo lógico es que la salida fuese Si no marcas dónde están las minas mal vamos.
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Amigo eferion habrá que repasar el juego del buscaminas y, por favor, no tergiversar o copiar bien el código que cuelgo.
De acuerdo a mi código, un par de mensajes anteriores a este, una salida sería:Introduzca la dimension de la matriz: 3
Introduzca numero de minas (numero):2
Colocando la mina : 1 Introduzca fila (1-numero): 1 Introduzca columna (1-numero): 1 M[1,1]=1
Colocando la mina : 2 Introduzca fila (1-numero): 1 Introduzca columna (1-numero): 2 M[1,2]=1
1 1 0
0 0 0
0 0 0
2 2 1
2 2 1
0 0 0
2 * 1
2 2 *
█ * * *
Otro ejemplo:
1 0 0 0 0
1 0 0 0 0
0 0 0 0 1
0 0 0 0 0
0 0 0 0 0
2 2 0 0 0
2 2 0 1 1
1 1 0 1 1
0 0 0 1 1
0 0 0 0 0
2 2 █ █ █
* 2 * * *
* 1 █ 1 1
* * * * 1
* █ █ * █
En la matriz del juego cada casilla se obtiene sumando las minas que tiene alrededor.
La primera matriz anterior es donde están colocadas las minas, la segunda matriz es la que resulta de sumar a cada casilla las ocho, como máximo, que le rodean y la tercera fue una improvisación de ocultar algunas de las casillas. Como ves las matrices tienen toda su lógica con arreglo a las reglas del juego.¡¡¡¡ Saluditos! ..... !!!! REEDITADIDO:................................................................. contador += ¿¿que?? A ver, si en Matriz las minas se representan con asteriscos... por qué no buscas asteriscos para contarlos?? la transformación que estás haciendo ahí no tiene ningún sentido. Dicho de otra forma:
¿Te suena el caracter '#' si solo pones una mina? Ya sabes de dónde sale.[/size] * Los asteriscos no representan las minas sino los 1 de la matriz inicial. Los asteriscos son para ocultar información.
* El cuadrado que sale es porque en el juego parte del tablero no es seleccionable.
* contador+= él más los que tiene alrededor.
* '#' no es '*'-'0' sino el caracter '35' que xuhipoint estimó coger, no sé por qué diablos lo hizo.Observar la siguiente captura de un juego del buscaminas:Se ve que en ciertas casillas salen números, las minas totales de él y los que le rodean, otras casillas están levantadas y serían el equivalente a los ateriscos, hay que seleccionar y que no te estalle una mina y, por último, hay otras casillas que son planas, las que no intervienen en el juego, no se puede picar en ellas, o sí se puede pero no aportan nada.
|
|
« Última modificación: 10 Marzo 2014, 15:01 pm por leosansan »
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
Se ve que en ciertas casillas salen números, las minas totales de él y los que le rodean, ...
Dudo mucho que en el buscaminas puedas encontrar una casilla con el número 9 ( 8 que le rodean más la mina de la propia casilla )
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Dudo mucho que en el buscaminas puedas encontrar una casilla con el número 9 ( 8 que le rodean más la mina de la propia casilla )
Fíjate en los ejemplos, los números son más bien bajos.
Es un juego y si lo haces entrando a mano las minas "puede" darse el caso, aunque sería tonto ya que declaras a todas las que le rodean como minas. Por eso se eligen las minas más separadas, lo que da como resultado números bajos para crear mayor incertidumbre.¡¡¡¡ Saluditos! ..... !!!!
|
|
« Última modificación: 10 Marzo 2014, 16:26 pm por leosansan »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Duda con Clickear en coordenadas especificas VB6
Programación Visual Basic
|
revenge1252
|
1
|
3,776
|
10 Julio 2010, 20:08 pm
por BlackZeroX
|
|
|
Memoria dinamica matriz
Programación C/C++
|
programacion_c
|
1
|
3,021
|
25 Abril 2012, 00:23 am
por david_BS
|
|
|
[BATCH] ¿Cómo ubicar la ventana en coordenadas específicas?
Scripting
|
cyberalejo17
|
4
|
10,851
|
27 Abril 2014, 05:08 am
por cyberalejo17
|
|
|
Coordenadas de Matriz en Console C++
Programación C/C++
|
BrendiisFox
|
1
|
3,579
|
30 Julio 2015, 09:05 am
por joecarl
|
|
|
Como imprimir coordenadas de una matriz???
.NET (C#, VB.NET, ASP)
|
omar_tijoux
|
0
|
3,568
|
26 Octubre 2016, 03:12 am
por omar_tijoux
|
|