C/Visual C - Pasando el BUSCAMINAS a c++

 
Vista:
sin imagen de perfil

Pasando el BUSCAMINAS a c++

Publicado por Fran (1 intervención) el 17/06/2017 21:34:12
Buenas!


Os comento, he intentado recrear el juego del buscaminas en Dev-c++. Ya, se que no se puede interactuar como en java, pero pensé en poner las coordenadas de un array bidimensional con el que se puede interaccionar. El problema está en la comprobación de cuando hay una mina, ya que la lógica del juego está en que cada componente del array, que no es una mina, tiene un número que es igual al nº de bombas que estén circundando ese componente. Así que en la matriz, mediante bucles for anidados, compruebo cada uno de los componentes que circundan al componente a "analizar" , además un contador suma +1 por cada bomba. Entonces como se trata de un array de tipo char (porque llamo a las minas ' X ') luego con el código ASCII lo convierto en el número de bombas. También intenté comprobar cada bomba y sumar +1 al contador de los componentes circundantes, aún así no recoge bien el número de bombas.

Aquí el segundo intento que hice (parte donde tengo problemas) :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
for(i = 1; i < 4; i++)
{
 
for(j = 1; j <4; j++)
{
 
if(m[i][j]=='X')				//comprobacion del numero de bombas
	{
	cont=0;
	for(x=-1; x<1; x++)
	{
	for(y=-1;y<1;y++)
		{
			m[x][y]=cont++;
			m[x][y]=(char)(cont+48);
		}
	}
	}
	else if (m[i][j]!='X') {	m[i][j]=(char)(cont+48); }
 
cout<<endl;
 
}
 
}


La primera que intenté sería comprobar cada componente que rodea al principal. Por ejemplo:
1
2
3
4
5
6
7
8
9
if( m[i++][j--]='X')
cont++;
if( m[i--][j--]='X')
cont++;
if( m[i--][j]='X')
cont++;
.
.
.
Así hasta rodear los 8 componentes que rodean al m[i][j]

PD: Soy un estudiante que ha terminado 2ºBachillerato y, por tanto, tengo unos conocimientos muy rudimentarios de la programación en C++ y sobretodo en C ya que solo he trabajado en el primero.

Gracias de antemano!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Pasando el BUSCAMINAS a c++

Publicado por agustin (272 intervenciones) el 18/06/2017 20:14:59
Se me ocurre algo asi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include  <stdio.h>
#define NFILAS 20
#define NCOLUMNAS 20
#define VALOR_MINA '*'
 
int GetNMines(int posFila, int posCol, char array [NFILAS][NCOLUMNAS]){
    int contador=0,i,j;
 
    for (i=-1; i<2;i++)
        for (j=-1;j<2;j++)
            if (!(i==0 && j==0)
                if ((posFila+i<NFILAS && posCol+j<NCOLUMNAS)&&(posFila+i>0 && posCol+j>=0)&&array[posFila+i][posCol+j]==VALOR_MINA)
                    contador++;
    return contador;
}
 
int main (){
    int i, j;
 
    //aquí colocas tus minas
    ...
    ...
 
    //aquí colocas los numeros
    for (i=0;i<NFILAS;i++)
        for (j=0;j <NCOLUMNAS;j++)
            array [i][j]=0x30+GetNMines (i, j, array);
    return 0;
}
No lo he probado así que puede tener errores.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Pasando el BUSCAMINAS a c++

Publicado por agustin (272 intervenciones) el 18/06/2017 21:29:51
Lo he probado y corregido:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <stdio.h>
#include <time.h>
 
#define NFILAS 20
#define NCOLUMNAS 20
#define NMINAS 10
#define VALOR_MINA '*'
 
void SetNMines (char array [NFILAS][NCOLUMNAS]){
	int i,j;
 
	for (i=0;i<NFILAS;i++){
        for (j=0;j <NCOLUMNAS;j++){
        	if (array [i][j] != VALOR_MINA){
        		array [i][j]=0x30+GetNMines (i, j, array);
        	}
        }
    }
}
 
int GetNMines(int posFila, int posCol, char array [NFILAS][NCOLUMNAS]){
    int contador=0,i,j;
 
    for (i=-1; i<2;i++){
        for (j=-1;j<2;j++){
            if (!(i==0 && j==0)){
                if (posFila+i<NFILAS && posCol+j<NCOLUMNAS && posFila+i>=0 && posCol+j>=0 && array[posFila+i][posCol+j]==VALOR_MINA){
                    contador++;
                }
            }
        }
    }
 
    return contador;
}
 
void InitArray(char array[NFILAS][NCOLUMNAS]){
	int i,j;
 
    for (i=0;i<NFILAS;i++){
    	for (j=0;j<NCOLUMNAS;j++){
    		array[i][j]=0;
    	}
    }
}
 
void SetMines (char array[NFILAS][NCOLUMNAS],int n){
	int i,j,contador=0;
 
	srand (time (NULL));
 
	do {
    	i=rand()%(NFILAS-1);
    	j=rand()%(NCOLUMNAS-1);
    	if (array[i][j]!=VALOR_MINA){
    		array[i][j]=VALOR_MINA;
    		contador++;
    	}
    }while (contador < n);
}
 
void PrintArray (char array[NFILAS][NCOLUMNAS]){
	int i,j;
 
	for (i=0;i<NFILAS;i++){
    	for (j=0;j<NCOLUMNAS;j++){
    		printf ("%c ", array[i][j]);
    	}
    	printf ("\n");
    }
}
 
int main (){
    int i, j;
    char array [NFILAS][NCOLUMNAS];
    int contador=0;
 
    //inicializo el array
    InitArray (array);
 
    //aquí colocas tus minas
    SetMines (array,NMINAS);
 
    //aquí colocas los numeros
    SetNMines (array);
 
    //muestro el resultado
    PrintArray (array);
    return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar