Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * MINESWEEPER V1.0
- * AUTHOR: BARTEK FERENC
- *
- * MAP INFO:
- *
- * DATA IN ARRAY:
- * S - SAFE
- * M - MINE
- * D - MINE + FLAG
- * N - SAFE + FLAG
- *
- * USER SEES:
- * O - OPENED
- * X -UNOPENED
- * F - FLAG
- *
- * COPYRIGHT (C) 2018 by BARTEK FERENC
- * http://aveneid.esy.es
- **/
- #include <iostream>
- #include <cstdlib>
- #include <ctime>
- using namespace std;
- int N;
- char ** tab;
- int findallclose(int x, int y,int dir);
- int main()
- {
- int mines=0,x,y,f,c=0,r;
- srand(time(NULL));
- do{
- cout<<"rozmiar planszy: ";
- cin>>N;
- cout<<endl;}while(N<4);
- tab = new char * [N];
- for (int i = 0; i<N; i++)
- tab[i] = new char [N];
- for(int i=0;i<N;i++)
- for(int j=0;j<N;j++){r=rand()%100;
- if(r>34&&r<76){tab[i][j]='M'; mines++;}//generowanie
- else
- tab[i][j]='S';}
- for(int i=0;i<N;i++){ //wyswietlanie planszy
- for(int j=0;j<N;j++)cout<<tab[i][j]<<" ";cout<<endl;}
- cout<<endl<<endl;
- do{
- //system("cls");
- /* for(int i=0;i<N;i++){ //wyswietlanie planszy
- for(int j=0;j<N;j++)cout<<tab[i][j]<<" ";cout<<endl;}
- cout<<endl<<endl;
- */
- for(int i=0;i<N;i++){ //wyswietlanie planszy
- for(int j=0;j<N;j++){
- switch(tab[i][j]){
- case 'O': cout<<"."; break;
- case 'D':cout<<"F"; break;
- case 'N': cout<<"F"; break;
- default: cout<<"X"; break;
- }
- cout<<" ";}
- cout<<endl;
- }
- cout<<"x: y: ";
- cin>>y>>x; //podaj x y do odkrycia
- cout<<"flag? (0/1)";
- cin>>f;
- x--;y--;
- //zmiana planszy
- if(f){
- if(tab[x][y]=='M') {tab[x][y]='D'; c++;}
- else if(tab[x][y]=='S') tab[x][y]='N';
- else if(tab[x][y]=='D') {tab[x][y]='M'; c--;}
- else if(tab[x][y]=='N') tab[x][y]='S';
- }
- else if(tab[x][y]=='D') continue;
- else if(tab[x][y]=='N') continue;
- else{
- if(tab[x][y]=='M'){ cout<<"BOOM!"; return 0;}
- if(tab[x][y]=='S'){
- tab[x][y]='O';
- findallclose(x,y,0); //sprawdz miny od podanego pounktu
- }}
- if(c==mines) break;
- }while(1);
- cout<<"WIN!";
- delete tab;
- return 0;
- }
- int findallclose(int x, int y,int dir){
- //prawo spawdza miny w prawo od punktu
- if(dir != 1)
- for(int i=x;i<N;i++){
- if(tab[i][y]=='S'){
- tab[i][y]='O';
- findallclose(i,y,1);}
- else if(tab[i][y]=='X') break;}
- //lewo spawdza miny w lewo od punktu
- if(dir != 2)
- for(int i=x;i>0;i--){
- if(tab[i][y]=='S'){
- tab[i][y]='O';
- findallclose(i,y,2);
- }
- else if(tab[i][y]=='X') break;}
- //gora spawdza miny do gory od punktu
- if(dir != 3)
- for(int j=y;j>0;j--){
- if(tab[x][j]=='S'){
- tab[x][j]='O';
- findallclose(x,j,3);}
- else if(tab[x][j]=='X') break;}
- //dol spawdza miny do dolu od punktu
- if(dir != 4)
- for(int j=y;j<N;j++){
- if(tab[x][j]=='S'){
- tab[x][j]='O';
- findallclose(x,j,4);}
- else if(tab[x][j]=='X') break;}
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement