Documentos de Académico
Documentos de Profesional
Documentos de Cultura
#include<iomanip>: librería que nos permite afectar el estado de los objetos en un programa
#include<cstdlib>: librería con utilidades, nos habilita el uso de rand y srand para hacer las minas
aleatorias
#include<ctime>: librería que nos habilita opciones con respecto al tiempo del sistema
void project();
int main()
start:
system("cls");
char displayboard[10][10];
char realboard[10][10];
int xaxis,yaxis;
bool y=true;
int win=10;
int lost=0;
int score=0;
int size=40;
char name[size];
project();
system("cls");
playerinfo(name,size);
system("cls");
initdisplayboard(displayboard);
initrealboard(realboard);
minegenerator(realboard);
while(y)
system("cls");
lost=lostcondition(realboard,displayboard);
flagcounter(displayboard,realboard);
printanyboard(displayboard);
player_input(xaxis,yaxis,realboard,displayboard,score);
lost=lostcondition(realboard,displayboard);
if(win==wincondition(realboard,displayboard)||lost==2)
y=false;
Esta parte del codigo es la responsable del juego, se puede apreciar el hecho de que se declaran las
variables las condiciones de victoria y derrota, y tambien se puede apreciar que se convocan unas
funciones que veremos mas adelante. Se puede ver que llama lo que nosotros llamamos al tablero,
uno que el usuario ve y el otro que esta escondido, como seria un buscaminas, ademas podemos ver
el system(“cls”) que se utiliza para limpiar la consola.
if(win==wincondition(realboard,displayboard))
char choice;
cin>>choice;
switch(choice)
case 'S':
goto start;
case'N':
exit(0);
default:
cout<<"Intente denuevo"<<endl;
break;
Aquí se puede apreciar el final de la funcion principal main, en la cual tenemos el final de la condicion
de victoria, una condicion if que demuestra tu puntaje al final del juego y tambien un switch que nos
habilita la opcion de si el jugador quiere jugar denuevo.
char initrealboard(char y[][10])
for(int i=0;i<=9;i++)
for(int j=0;j<=9;j++)
y[i][j]='0';
for(int i=0;i<=9;i++)
for(int j=0;j<=9;j++)
t[i][j]='B';
cout<<endl;
for(int i=0;i<1;i++)
cout<<setw(34);
for(int j=0;j<10;j++)
{
cout<<j<<" ";
cout<<endl;
cout<<setw(34);
for(int i=0;i<30;i++)
cout<<"__";
cout<<endl<<endl;
for(int i=0;i<=9;i++)
cout<<setw(30)<<i<<" | ";
for(int j=0;j<=9;j++)
cout<<"("<<y[i][j]<<")"<<" ";
cout<<"| "<<endl<<endl;
En esta parte del codigo se puede ver las funciones que crean el tablero, nuestro tablero es 10x10 y
esto se puede apreciar por los ciclos for.
void minegenerator(char t[][10])
int counter=0;
int a,b,y=0;
int p=0;
int arr[20];
for(int i=0;i<20;i++)
arr[i]=19;
srand(time(0));
while(counter<=9&&y<20)
strt:
a=rand()%10;
b=rand()%10;
if(p>0)
for(int i=0;i<20;i+=2)
if(a==arr[i]&&b==arr[i+1])
goto strt;
arr[y]=a;
arr[y+1]=b;
t[a][b]='X';
hints(a,b+1,t);
hints(a,b-1,t);
hints(a-1,b,t);
hints(a-1,b+1,t);
hints(a-1,b-1,t);
hints(a+1,b,t);
hints(a+1,b+1,t);
hints(a+1,b-1,t);
counter++;
y+=2;
p++;
Aquí podemos ver que se crea lo que son las minas en el buscaminas, usa una funcion exclusiva a la
librería stdlib la cual es rand, que nos permite hacer que las minas aparescan aleatoriamente ,
tambien tenemos un for que chequea que si las coordinadas se repiten, y si se repiten lo que hace es
que agarra otra coordenada para que la misma coordenada no tenga mas de una mina por juego.
if(rea[x][y]!='X'&&disp[x][y]=='B'&&x>=0&&y>=0&&x<=9&&y<=9)
disp[x][y]=rea[x][y];
if(rea[x][y]=='0')
disp[x][y]='-';
revealwhen0(x,y+1,rea,disp);
revealwhen0(x,y-1,rea,disp);
revealwhen0(x-1,y+1,rea,disp);
revealwhen0(x-1,y,rea,disp);
revealwhen0(x-1,y-1,rea,disp);
revealwhen0(x+1,y,rea,disp);
revealwhen0(x+1,y+1,rea,disp);
revealwhen0(x+1,y-1,rea,disp);
str:
cin>>x;
cin>>y;
if(rea[x][y]!='0'&&disp[x][y]!='F'&&rea[x][y]!='X'&&disp[x][y]=='B'&&x>=0&&y>=0&&x<=9&&y<
=9)
disp[x][y]=rea[x][y];
else{
if(rea[x][y]=='0'&&disp[x][y]=='B'&&x>=0&&y>=0&&x<=9&&y<=9)
revealwhen0(x,y,rea,disp);
}else{
if(rea[x][y]=='X'&&disp[x][y]=='B'&&x>=0&&y>=0&&x<=9&&y<=9)
scorecalc(score,rea,disp);
revealmine(disp,rea);
lostcondition(rea,disp);
else{
if(disp[x][y]!='B'&&disp[x][y]!='F'&&x>=0&&y>=0&&x<=9&&y<=9)
goto str;
}else{
if(x<0||y<0||x>9||y>9)
goto str;
else{
if(disp[x][y]=='F'&&x>=0&&y>=0&&x<=9&&y<=9)
goto str;
}
Estas son las funciones que hacen el juego como son, Revealwhen0 hace que cuando el jugador
ingrese la coordenada de una casilla, esta misma sea revelada cuando openbox sea ejecutado, que es
la funcion que abre la casilla, entre otras tambien esta revealmine que se activa cuando el jugador
ingresa una mina y tambien las diferentes condiciones de lo que pasaria con las casillas por diferentes
tipos de ifs, tambien tenemos el contador del puntaje y la condicion de perdida.
str:
cin>>x;
cin>>y;
if(disp[x][y]=='B'&&x>=0&&y>=0&&x<=9&&y<=9)
disp[x][y]='F';
}else{
if(disp[x][y]=='F'&&x>=0&&y>=0&&x<=9&&y<=9)
goto str;
}else{
if(x<0||y<0||x>9||y>9)
goto str;
}else{
if(disp[x][y]!='F'&&disp[x][y]!='B'&&x>=0&&y>=0&&x<=9&&y<=9)
{
cout<<"La casilla ya esta abierta"<<endl;
goto str;
st:
cin>>x;
cin>>y;
if(disp[x][y]=='F'&&x>=0&&y>=0&&x<=9&&y<=9)
disp[x][y]='B';
}else{
if(disp[x][y]!='F'&&x>=0&&y>=0&&x<=9&&y<=9)
goto st;
}else{
if(x<0||y<0||x>9||y>9)
goto st;
}
}
Esta parte del codigo es la encargada acerca de lo que tiene que ver con las banderas, ya sea si estan
en una casilla o si la casilla escojida no existe.
str:
cout<<endl<<"Presiona 1 para abrir casilla, 2 para plantar una bandera y 3 para quitar la
bandera"<<endl;
char choice;
cin>>choice;
switch(choice)
case '1':
openbox(x,y,rea,disp,scr);
break;
case '2':
flagbox(x,y,rea,disp);
break;
case '3':
unflagthebox(x,y,rea,disp);
break;
default:
cout<<"Opcion invalida"<<endl;
goto str;
}
Esta es la parte del codigo que se encarga de lo que tiene que ver con lo que el jugador ingresa en el
programa, se puede apreciar un switch para las diferentes 4 diferentes imputs, 1 para abrir casilla, 2
para plantar bandera, 3 para quitar una bandera y el ultimo es para cuando se ingresa un numero
diferente de estos 3, que nos manda una opcion invalida.
int flag=0;
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
if(rea[i][j]=='X')
flag++;
int flgrem=0;
flgrem=flag;
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
if(disp[i][j]=='F')
flgrem--;
}
}
Esta parte del codigo nos muestra contadores que definen el numero total de banderas y minas, asi
como el numero restante de banderas y minas respectivamente.
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
if(rea[i][j]=='X')
disp[i][j]=rea[i][j];
printanyboard(disp);
int counter=0;
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
{
if(disp[i][j]=='F'&&rea[i][j]=='X')
counter++;
if(counter==10);
return counter;
int y;
for(int i=0;i<=9;i++)
for(int j=0;j<=9;j++)
if( dis[i][j]=='X')
return 2;
else{
y=1;
}
El principio de esta parte del codigo nos emula lo que pasaria cuando ingresas coordenadas y caes en
una mina, esto hace que el tablero enseñe la mina. Posteriormente estan las condiciones de victoria y
derrota.
void project()
cout<<endl;
system("PAUSE");
cin.getline(t,size-1);
x=0;
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
if(rea[i][j]=='X'&&disp[i][j]=='X')
x+=10;
}
}
return x;
Por ultimo en la parte final del codigo esta la parte incial del software, como la presentacion del
proyecto y toda la informacion del jugador, tambien esta el contador que calcula el puntaje final del
juego.