Advertisement
Aveneid

minesweeper c++

Feb 21st, 2018
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.67 KB | None | 0 0
  1. /**
  2. * MINESWEEPER V1.0
  3. * AUTHOR: BARTEK FERENC
  4. *
  5. * MAP INFO:
  6. *
  7. * DATA IN ARRAY:
  8. * S - SAFE
  9. * M - MINE
  10. * D - MINE + FLAG
  11. * N - SAFE + FLAG
  12. *
  13. * USER SEES:
  14. * O - OPENED
  15. * X -UNOPENED
  16. * F - FLAG
  17. *
  18. * COPYRIGHT (C) 2018 by BARTEK FERENC
  19. * http://aveneid.esy.es
  20. **/
  21.  
  22.     #include <iostream>
  23.     #include <cstdlib>
  24.     #include <ctime>
  25.  
  26.     using namespace std;
  27.     int N;
  28.     char ** tab;
  29.     int findallclose(int x, int y,int dir);
  30.     int main()
  31.     {
  32.         int mines=0,x,y,f,c=0,r;
  33.         srand(time(NULL));
  34.         do{
  35.         cout<<"rozmiar planszy: ";
  36.         cin>>N;
  37.         cout<<endl;}while(N<4);
  38.  
  39.        tab = new char * [N];
  40.        for (int i = 0; i<N; i++)
  41.             tab[i] = new char [N];
  42.  
  43.         for(int i=0;i<N;i++)
  44.             for(int j=0;j<N;j++){r=rand()%100;
  45.                 if(r>34&&r<76){tab[i][j]='M'; mines++;}//generowanie
  46.  
  47.                 else
  48.                     tab[i][j]='S';}
  49.             for(int i=0;i<N;i++){ //wyswietlanie planszy
  50.                 for(int j=0;j<N;j++)cout<<tab[i][j]<<" ";cout<<endl;}
  51.                 cout<<endl<<endl;
  52.  
  53.  
  54.           do{
  55.               //system("cls");
  56.                /*             for(int i=0;i<N;i++){ //wyswietlanie planszy
  57.                 for(int j=0;j<N;j++)cout<<tab[i][j]<<" ";cout<<endl;}
  58.                 cout<<endl<<endl;
  59. */
  60.  
  61.             for(int i=0;i<N;i++){ //wyswietlanie planszy
  62.                 for(int j=0;j<N;j++){
  63.                     switch(tab[i][j]){
  64.                         case 'O': cout<<"."; break;
  65.                         case 'D':cout<<"F"; break;
  66.                         case 'N': cout<<"F"; break;
  67.                         default: cout<<"X"; break;
  68.                     }
  69.                     cout<<" ";}
  70.                 cout<<endl;
  71.                 }
  72.             cout<<"x: y: ";
  73.             cin>>y>>x; //podaj x y do odkrycia
  74.             cout<<"flag? (0/1)";
  75.             cin>>f;
  76.             x--;y--;
  77.             //zmiana planszy
  78.             if(f){
  79.                  if(tab[x][y]=='M') {tab[x][y]='D'; c++;}
  80.             else if(tab[x][y]=='S') tab[x][y]='N';
  81.             else if(tab[x][y]=='D') {tab[x][y]='M'; c--;}
  82.             else if(tab[x][y]=='N') tab[x][y]='S';
  83.             }
  84.             else if(tab[x][y]=='D') continue;
  85.             else if(tab[x][y]=='N') continue;
  86.             else{
  87.             if(tab[x][y]=='M'){ cout<<"BOOM!"; return 0;}
  88.             if(tab[x][y]=='S'){
  89.              tab[x][y]='O';
  90.              findallclose(x,y,0); //sprawdz miny od podanego pounktu
  91.             }}
  92.             if(c==mines) break;
  93.           }while(1);
  94.  
  95.         cout<<"WIN!";
  96.  
  97.  
  98.         delete tab;
  99.         return 0;
  100.     }
  101.  
  102.     int findallclose(int x, int y,int dir){
  103.  
  104.        //prawo spawdza miny w prawo od punktu
  105.        if(dir != 1)
  106.        for(int i=x;i<N;i++){
  107.             if(tab[i][y]=='S'){
  108.                 tab[i][y]='O';
  109.                 findallclose(i,y,1);}
  110.             else if(tab[i][y]=='X') break;}
  111.  
  112.         //lewo spawdza miny w lewo od punktu
  113.        if(dir != 2)
  114.         for(int i=x;i>0;i--){
  115.             if(tab[i][y]=='S'){
  116.                 tab[i][y]='O';
  117.                 findallclose(i,y,2);
  118.             }
  119.             else if(tab[i][y]=='X') break;}
  120.  
  121.        //gora spawdza miny do gory od punktu
  122.        if(dir != 3)
  123.         for(int j=y;j>0;j--){
  124.             if(tab[x][j]=='S'){
  125.                 tab[x][j]='O';
  126.                 findallclose(x,j,3);}
  127.             else if(tab[x][j]=='X') break;}
  128.         //dol spawdza miny do dolu od punktu
  129.         if(dir != 4)
  130.         for(int j=y;j<N;j++){
  131.             if(tab[x][j]=='S'){
  132.                 tab[x][j]='O';
  133.                 findallclose(x,j,4);}
  134.             else if(tab[x][j]=='X') break;}
  135.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement