Tony041010

MineSweeper 2

Jun 10th, 2021 (edited)
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.03 KB | None | 0 0
  1. #include <conio.h>
  2. #include <iostream>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <time.h>
  6. #include <windows.h>
  7. #include <cstring>
  8.  
  9. int steps = 0;
  10. using namespace std;
  11. char k; int p=13;
  12. vector<string> map(144, "");
  13. vector<string> bign{"0","1","2","3","4","5","6","7","8"};
  14. vector<int>replay;
  15. void init() {
  16.     for( int i = 0 ; i < 144; i++ ){
  17.         if( i <=11 || i >=131 || i %12 ==0 || i %12 == 11 ){
  18.             map[i] = "W";
  19.         }
  20.     }
  21.     int x = 0;
  22.     while( x < 10 ){
  23.         int y = rand()%144;
  24.         if( map[y] != "W" && y != p ){
  25.             map[y] ="B";
  26.             x++;
  27.         }
  28.     }
  29. }
  30.  
  31. //□■B
  32. void draw() {
  33.     system( "cls" );
  34.     for( int i = 0 ; i < 144 ; i++ ){
  35.         if( map[i] == "W" ){
  36.             cout << "";
  37.         }
  38.        
  39.         else if( map[i] == "B" ){
  40.             cout << "B";
  41.         }
  42.         else if( map[i] == "M" || map[i] == "m" ){
  43.             cout << "M";
  44.         }
  45.         else if( map[i] >= bign[0] && map[i] <= bign[8]){
  46.             cout << map[i];
  47.         }
  48.         else if( i != p ){
  49.             cout << "■";
  50.         }
  51.         else{
  52.             cout << "□";
  53.         }
  54.         if(i % 12 == 11){
  55.             cout<<'\n';
  56.         }
  57.     }
  58. }
  59.  
  60. int counter( int p ){
  61.     int a = 0;
  62.     if( map[p-13] == "B" || map[p-13] == "m" ){
  63.         a++;
  64.     }
  65.     if( map[p-12] == "B" || map[p-12] == "m" ){
  66.         a++;
  67.     }
  68.     if( map[p-11] == "B" || map[p-11] == "m" ){
  69.         a++;
  70.     }
  71.     if( map[p-1] == "B" || map[p-1] == "m" ){
  72.         a++;
  73.     }
  74.     if( map[p+1] == "B" || map[p+1] == "m" ){
  75.         a++;
  76.     }
  77.     if( map[p+11] == "B" || map[p+11] == "m" ){
  78.         a++;
  79.     }
  80.     if( map[p+12] == "B" || map[p+12] == "m" ){
  81.         a++;
  82.     }
  83.     if( map[p+13] == "B" || map[p+13] == "m" ){
  84.         a++;
  85.     }
  86.    
  87.     map[p] = bign[a];
  88.     return a;
  89.                
  90. }
  91.  
  92. void dis( int p ){
  93.     int count[8] = { -13 , -12 , -11 , -1 , 1 , 11 , 12 , 13 };
  94.     if( counter( p ) == 0 ){
  95.         for(int i = 0 ; i < 8 ; i++ ){
  96.             if( map[p+count[i]] == "" ){
  97.                 if( counter( p+count[i] ) !=0 ){
  98.                     map[p+count[i]] = bign[counter(p+count[i])];
  99.                 }
  100.                 else{
  101.                     dis( p+count[i] );
  102.                 }
  103.             }
  104.         }
  105.     }
  106. }
  107.  
  108.  
  109. int main() {
  110.     string a,b;  //string資料型態可包含文數字組合
  111.    
  112.     srand( time(NULL) );
  113.     init();
  114.     while (1) {
  115.         if( kbhit() ){
  116.             k = _getch();
  117.             if( k == 'q' ){
  118.                 break;
  119.             }
  120.             else if( k == 'e' && map[p-12] != "W" ){
  121.                 p -= 12;
  122.             }
  123.             else if( k == 'd' && map[p+12] != "W" ){
  124.                 p += 12;
  125.             }
  126.             else if( k == 's' && map[p-1] != "W" ){
  127.                 p -= 1;
  128.             }
  129.             else if( k == 'f' && map[p+1] != "W" ){
  130.                 p +=1;
  131.             }
  132.             else if( k =='c' ){
  133.                 if( map[p] == "B" ){
  134.                     cout << "boom!!!\nGame Over!";
  135.                     break;
  136.                 }
  137.                 dis( p );
  138.                 replay.push_back(p);
  139.                 steps++;
  140.                 if( steps == 90 ){
  141.                     draw();
  142.                     cout << "congras, you win\n";
  143.                     break;
  144.                 }
  145.             }
  146.            
  147.             else if( k == 'm' ){
  148.                 if( map[p] == "M" ){
  149.                     map[p] = "";
  150.                 }
  151.                 else if( map[p] == "B" ){
  152.                     map[p] = "m";
  153.                 }
  154.                 else if( map[p] =="m" ){
  155.                     map[p] = "B";
  156.                 }
  157.                 else{
  158.                     map[p] = "M";
  159.                 }
  160.             }
  161.            
  162.             else if( k =='r' ){
  163.                 for( int i = 0 ; i < 144; i++ ){
  164.                     if( i <=11 || i >=131 || i %12 ==0 || i %12 == 11 ){
  165.                         map[i] = "W";
  166.                     }
  167.                     else if( map[i] >= bign[0] && map[i] <= bign[8]){
  168.                         map[i] = "";
  169.                     }
  170.                 }
  171.                 for(int i=0;i<144;i++){
  172.                     p = replay[i];
  173.                     if( map[p] == "B" ){
  174.                         cout << "boom!!!\nGame Over!";
  175.                         break;
  176.                     }
  177.                     int a = 0;
  178.                     if( map[p-13] == "B" || map[p-13] == "m" ){
  179.                         a++;
  180.                     }
  181.                     if( map[p-12] == "B" || map[p-12] == "m" ){
  182.                         a++;
  183.                     }
  184.                     if( map[p-11] == "B" || map[p-11] == "m" ){
  185.                         a++;
  186.                     }
  187.                     if( map[p-1] == "B" || map[p-1] == "m" ){
  188.                         a++;
  189.                     }
  190.                     if( map[p+1] == "B" || map[p+1] == "m" ){
  191.                         a++;
  192.                     }
  193.                     if( map[p+11] == "B" || map[p+11] == "m" ){
  194.                         a++;
  195.                     }
  196.                     if( map[p+12] == "B" || map[p+12] == "m" ){
  197.                         a++;
  198.                     }
  199.                     if( map[p+13] == "B" || map[p+13] == "m" ){
  200.                         a++;
  201.                     }
  202.                    
  203.                     map[p] = bign[a];
  204.                     //replay.push_back(p);
  205.                     if( steps == 90 ){
  206.                         draw();
  207.                         cout << "congras, you win\n";
  208.                         break;
  209.                     }
  210.                     draw();
  211.                     Sleep(1000);
  212.                 }
  213.             }
  214.         }
  215.         draw();
  216.         Sleep(300);
  217.     }
  218.  
  219.     return 0;
  220. }
Add Comment
Please, Sign In to add comment