Está en la página 1de 17

#include<iostream>: librería estandar de c++

#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

using namespace std;

void project();

char initdisplayboard(char t[][10]);

char printanyboard(char y[][10]);

char initrealboard(char y[][10]);

void minegenerator(char t[][10]);

void player_input(int x,int y,char rea[][10],char disp[][10],int scr);

void revealwhen0(int x,int y,char rea[][10],char disp[][10]);

void flagbox(int x,int y,char rea[][10],char disp[][10]);

void unflagthebox(int x,int y,char rea[][10],char disp[][10]);

void flagcounter(char disp[][10],char rea[][10]);

char revealmine(char dis[][10],char rea[][10]);

int wincondition(char rea[][10],char disp[][10]);

int lostcondition(char rea[][10],char disp[][10]);

void playerinfo(char t[],int size);

int scorecalc(int x,char rea[][10],char disp[][10]);

int main()

Declarando variables, tambien se puede apreciar la funcion principal del codigo.

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))

cout<<"Tu "<<name<<" ganaste el juego felicidades!"<<endl;

cout<<"Tu puntaje: "<<scorecalc(score,realboard,displayboard)<<endl;

cout<<"Quieres jugar denuevo?"<<endl;

cout<<"S para si, N para no (S/N):"<<endl;

char choice;

cin>>choice;

switch(choice)

case 'S':

goto start;

case'N':

cout<<"Gracias por jugar!"<<endl;

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';

char initdisplayboard(char t[][10])

for(int i=0;i<=9;i++)

for(int j=0;j<=9;j++)

t[i][j]='B';

char printanyboard(char y[][10])

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.

void revealwhen0(int x,int y,char rea[][10],char disp[][10])

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);

void openbox(int x,int y,char rea[][10],char disp[][10],int score)

str:

cout<<"Ingrese el numero de la fila : ";

cin>>x;

cout<<"Ingrese el numero de la columna : ";

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);

cout<<endl<<"Le pegaste a una mina!"<<endl;

cout<<"Tu puntaje : "<<score<<endl;

lostcondition(rea,disp);

else{

if(disp[x][y]!='B'&&disp[x][y]!='F'&&x>=0&&y>=0&&x<=9&&y<=9)

cout<<"Esa casilla ya esta abierta!"<<endl;

goto str;

}else{

if(x<0||y<0||x>9||y>9)

cout<<"la casilla que escojiste no existe !"<<endl;

goto str;

else{

if(disp[x][y]=='F'&&x>=0&&y>=0&&x<=9&&y<=9)

cout<<"Esta casilla tiene una bandera asi que no


puede abrirse"<<endl;

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.

void flagbox(int x,int y,char rea[][10],char disp[][10])

str:

cout<<"Ingrese el numero de la fila : ";

cin>>x;

cout<<"Ingrese el numero de la columna : ";

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)

cout<<"Esta casilla ya tiene una bandera"<<endl;

goto str;

}else{

if(x<0||y<0||x>9||y>9)

cout<<"La casilla que escojiste no existe!"<<endl;

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;

void unflagthebox(int x,int y,char rea[][10],char disp[][10])

st:

cout<<"Ingrese el numero de la fila : ";

cin>>x;

cout<<"Ingrese el numero de la columna : ";

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)

cout<<"Lo siento esta casilla no tiene bandera"<<endl;

goto st;

}else{

if(x<0||y<0||x>9||y>9)

cout<<"La casilla que escojiste no existe "<<endl;

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.

void player_input(int x,int y,char rea[][10],char disp[][10],int scr)

str:

cout<<endl<<"Presiona 1 para abrir casilla, 2 para plantar una bandera y 3 para quitar la
bandera"<<endl;

char choice;

cout<<"Tu decision : ";

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.

void flagcounter(char disp[][10],char rea[][10])

int flag=0;

for(int i=0;i<10;i++)

for(int j=0;j<10;j++)

if(rea[i][j]=='X')

flag++;

cout<<"Numero total de banderas : "<<flag<<endl;

cout<<"Numero total de minas : "<<flag<<endl;

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--;

}
}

cout<<"Numero de banderas faltantes : "<<flgrem<<endl;

cout<<"Numero de minas faltantes : "<<flgrem<<endl;

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.

char revealmine(char disp[][10],char rea[][10])

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 wincondition(char rea[][10],char disp[][10])

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 lostcondition(char rea[][10], char dis[][10])

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<<"Bienvenidos al Buscaminas de Lionel Henriquez y Kirsten Chong" <<endl;

cout<<endl;

system("PAUSE");

void playerinfo(char t[],int size)

cout<<setw(30)<<"Informacion del jugador "<<endl;

cout<<setw(25)<<"Ingrese su nombre: ";

cin.getline(t,size-1);

int scorecalc(int x,char rea[][10],char disp[][10])

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.

También podría gustarte