Advertisement
MeehoweCK

Untitled

May 4th, 2023
595
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.97 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. #include <conio.h>
  5. #include <vector>
  6. #include <fstream>
  7.  
  8.  
  9. using namespace std;
  10.  
  11. const short ROZMIAR = 30;
  12. const short W = 10;
  13.  
  14. enum class Pole
  15. {
  16.     pustka, mur, poszukiwacz, wrog, skarb
  17. };
  18.  
  19. enum class StanGry
  20. {
  21.     otwarta, zwyciestwo, porazka
  22. };
  23.  
  24. StanGry STAN = StanGry::otwarta;
  25.  
  26. Pole tablica[ROZMIAR][ROZMIAR];
  27.  
  28. void start_informacje_programu()
  29. {
  30.     cout << "Witaj, \nw grze ''Poszukiwacz'', niżej sa zasady gry ,jesli jestes gotowy na gre nacisnij 'ENTER'."  << endl;
  31.     cout << endl;
  32.     cout << endl;
  33.     cout << endl;
  34.     cout << "1.Gra odbywa sie na planszy o wymiarach 30x30 \n"<< "2.Na planszy znajduja sie: poszukiwacz, skarb, 10 wrogow i mury. \n" <<
  35.          "3.Poszukiwacz moze poruszac sie o jedno pole w gore, w dol, w lewo lub w prawo. Po ruchu poszukiwacz zostawia za soba mur.\n" <<"4.Gra konczy sie jesli poszukiwacz dojdzie do skarbu (zwyciestwo), jesli wrog wejdzie na pole z poszukiwaczem (porazka) lub jesli poszukiwacz zostanie zablokowany i nie bedzie mogl wykonac prawidlowego ruchu (porazka).";
  36.     char komenda;
  37.  
  38.     do
  39.     {
  40.         komenda = _getch();
  41.         komenda = toupper(komenda);
  42.     }
  43.     while(static_cast<int>(komenda) != 13);
  44. }
  45.  
  46.  
  47. void wypisz_pole(Pole pole)
  48. {
  49.     switch(pole)
  50.     {
  51.     case Pole::pustka:
  52.         cout << ' ';
  53.         break;
  54.     case Pole::mur:
  55.         cout << '#';
  56.         break;
  57.     case Pole::poszukiwacz:
  58.         cout << 'O';
  59.         break;
  60.     case Pole::wrog:
  61.         cout << '@';
  62.         break;
  63.     case Pole::skarb:
  64.         cout << '!';
  65.     }
  66. }
  67.  
  68. struct Wspolrzedne
  69. {
  70.     short x;
  71.     short y;
  72. };
  73.  
  74. Wspolrzedne poszukiwacz;
  75. Wspolrzedne skarb;
  76. Wspolrzedne wrogowie[W];
  77.  
  78. void wypelnienie_tablic()
  79. {
  80.  
  81.  
  82.     for(short i = 0; i < ROZMIAR; ++i)
  83.     {
  84.         for(short j = 0; j < ROZMIAR; ++j)
  85.         {
  86.             if(i== 0 || i==ROZMIAR-1 || j==0 || j==ROZMIAR-1)
  87.                 tablica[i][j] = Pole::mur;
  88.             else
  89.                 tablica[i][j] = Pole::pustka;
  90.  
  91.         }
  92.  
  93.     }
  94.     while(true)
  95.     {
  96.         poszukiwacz.x = (rand() % 27) + 1;
  97.         poszukiwacz.y = (rand() % 27) + 1;
  98.         if(tablica[poszukiwacz.x][poszukiwacz.y] == Pole::pustka)
  99.         {
  100.             tablica[poszukiwacz.x][poszukiwacz.y] = Pole::poszukiwacz;
  101.             break;
  102.         }
  103.     }
  104.  
  105.     while(true)
  106.     {
  107.         skarb.x = (rand() % 27) + 1;
  108.         skarb.y = (rand() % 27) + 1;
  109.         if(tablica[skarb.x][skarb.y] == Pole::pustka && (skarb.x != poszukiwacz.x || skarb.y != poszukiwacz.y))
  110.         {
  111.             tablica[skarb.x][skarb.y] = Pole::skarb;
  112.             break;
  113.         }
  114.     }
  115.  
  116.     for(short i = 0; i < W; ++i )
  117.     {
  118.         while(true)
  119.         {
  120.             wrogowie[i].x = (rand() % 27) + 1;
  121.             wrogowie[i].y = (rand() % 27) + 1;
  122.             if(tablica[wrogowie[i].x][wrogowie[i].y] == Pole::pustka)
  123.             {
  124.                 tablica[wrogowie[i].x][wrogowie[i].y] = Pole::wrog;
  125.                 break;
  126.             }
  127.         }
  128.  
  129.     }
  130.  
  131. }
  132.  
  133.  
  134. void wypisywanie_planszy_na_ekran()
  135. {
  136.     for(short i = 0; i < ROZMIAR; ++i)
  137.     {
  138.         for(short j = 0; j < ROZMIAR; ++j)
  139.         {
  140.             wypisz_pole(tablica[i][j]);
  141.         }
  142.         cout << endl;
  143.     }
  144.  
  145.  
  146. }
  147.  
  148. bool operator==(Wspolrzedne A, Wspolrzedne B)
  149. {
  150.     if(A.x == B.x && A.y == B.y)
  151.         return true;
  152.     return false;
  153. }
  154.  
  155. void zapisywanie_postepu_gry()
  156. {
  157.     cout << "Trwa zapis do pliku\n";
  158.     ofstream plik;
  159.     plik.open("plik.txt");
  160.  
  161.     // zapisanie planszy
  162.     for(short i = 0; i < ROZMIAR; ++i)
  163.     {
  164.         for(short j = 0; j < ROZMIAR; ++j)
  165.         {
  166.             plik << static_cast<short>(tablica[i][j]) << ' ';
  167.         }
  168.     }
  169.     // zapisanie wspolrzednych poszukiwacza
  170.     // zapisanie wspolrzednych skarbu
  171.     // zapisanie wspolrzednych wrogow
  172.     plik.close();
  173.     cout << "Udalo sie zapisac do pliku\n";
  174. }
  175.  
  176. void poruszanie_sie_po_planszy()
  177. {
  178.     if(tablica[poszukiwacz.x - 1][poszukiwacz.y] == Pole::mur || tablica[poszukiwacz.x - 1][poszukiwacz.y] == Pole::wrog)
  179.         if(tablica[poszukiwacz.x + 1][poszukiwacz.y] == Pole::mur || tablica[poszukiwacz.x + 1][poszukiwacz.y] == Pole::wrog)
  180.             if(tablica[poszukiwacz.x][poszukiwacz.y - 1] == Pole::mur || tablica[poszukiwacz.x][poszukiwacz.y - 1] == Pole::wrog)
  181.                 if(tablica[poszukiwacz.x][poszukiwacz.y + 1] == Pole::mur || tablica[poszukiwacz.x][poszukiwacz.y + 1] == Pole::wrog)
  182.                 {
  183.                     STAN = StanGry::porazka;
  184.                     return;
  185.                 }
  186.  
  187.     char klawisz;
  188.     bool flaga = true;
  189.  
  190.     while(flaga)
  191.     {
  192.         do
  193.         {
  194.             klawisz = _getch();
  195.             klawisz = toupper(klawisz);
  196.         }
  197.         while(klawisz != 'W' && klawisz != 'A' && klawisz != 'S'&& klawisz != 'D' && klawisz != 'Z');
  198.  
  199.         switch(klawisz)
  200.         {
  201.         case 'W':       // poruszanie się w górę
  202.             if(tablica[poszukiwacz.x - 1][poszukiwacz.y] == Pole::pustka || tablica[poszukiwacz.x - 1][poszukiwacz.y] == Pole::skarb)
  203.             {
  204.                 tablica[poszukiwacz.x][poszukiwacz.y] = Pole::mur;
  205.                 poszukiwacz.x--;
  206.                 tablica[poszukiwacz.x][poszukiwacz.y] = Pole::poszukiwacz;
  207.                 flaga = false;
  208.             }
  209.             break;
  210.         case 'A':
  211.             if(tablica[poszukiwacz.x ][poszukiwacz.y - 1] == Pole::pustka || tablica[poszukiwacz.x][poszukiwacz.y - 1] == Pole::skarb)
  212.             {
  213.                 tablica[poszukiwacz.x][poszukiwacz.y] = Pole::mur;
  214.                 poszukiwacz.y--;
  215.                 tablica[poszukiwacz.x][poszukiwacz.y] = Pole::poszukiwacz;
  216.                 flaga = false;
  217.             }
  218.             break;
  219.         case 'S':
  220.             if(tablica[poszukiwacz.x + 1 ][poszukiwacz.y] == Pole::pustka || tablica[poszukiwacz.x + 1][poszukiwacz.y] == Pole::skarb)
  221.             {
  222.                 tablica[poszukiwacz.x][poszukiwacz.y] = Pole::mur;
  223.                 poszukiwacz.x++;
  224.                 tablica[poszukiwacz.x][poszukiwacz.y] = Pole::poszukiwacz;
  225.                 flaga = false;
  226.             }
  227.             break;
  228.         case 'D':
  229.             if(tablica[poszukiwacz.x][poszukiwacz.y + 1] == Pole::pustka || tablica[poszukiwacz.x][poszukiwacz.y + 1] == Pole::skarb)
  230.             {
  231.                 tablica[poszukiwacz.x][poszukiwacz.y] = Pole::mur;
  232.                 poszukiwacz.y++;
  233.                 tablica[poszukiwacz.x][poszukiwacz.y] = Pole::poszukiwacz;
  234.                 flaga = false;
  235.             }
  236.             break;
  237.         case 'Z':
  238.             zapisywanie_postepu_gry();
  239.         }
  240.     }
  241.  
  242.     if(poszukiwacz == skarb)
  243.         STAN = StanGry::zwyciestwo;
  244.  
  245. }
  246.  
  247.  
  248.  
  249. void poruszanie_sie_jednym_wrogiem(int i)
  250. {
  251.     vector<Wspolrzedne> wolne_pola;
  252.     Wspolrzedne nowe_pole;
  253.  
  254.     nowe_pole.x = wrogowie[i].x - 1;
  255.     nowe_pole.y = wrogowie[i].y;
  256.     if(nowe_pole == poszukiwacz)
  257.     {
  258.         STAN = StanGry::porazka;
  259.         tablica[wrogowie[i].x][wrogowie[i].y] = Pole::pustka;
  260.         wrogowie[i] = nowe_pole;
  261.         return;
  262.     }
  263.     if(tablica[nowe_pole.x][nowe_pole.y] == Pole::pustka)
  264.         wolne_pola.push_back(nowe_pole);
  265.  
  266.     nowe_pole.x = wrogowie[i].x + 1;
  267.     nowe_pole.y = wrogowie[i].y;
  268.     if(nowe_pole == poszukiwacz)
  269.     {
  270.         STAN = StanGry::porazka;
  271.         tablica[wrogowie[i].x][wrogowie[i].y] = Pole::pustka;
  272.         wrogowie[i] = nowe_pole;
  273.         return;
  274.     }
  275.     if(tablica[nowe_pole.x][nowe_pole.y] == Pole::pustka)
  276.         wolne_pola.push_back(nowe_pole);
  277.  
  278.     nowe_pole.x = wrogowie[i].x;
  279.     nowe_pole.y = wrogowie[i].y + 1;
  280.     if(nowe_pole == poszukiwacz)
  281.     {
  282.         STAN = StanGry::porazka;
  283.         tablica[wrogowie[i].x][wrogowie[i].y] = Pole::pustka;
  284.         wrogowie[i] = nowe_pole;
  285.         return;
  286.     }
  287.     if(tablica[nowe_pole.x][nowe_pole.y] == Pole::pustka)
  288.         wolne_pola.push_back(nowe_pole);
  289.  
  290.     nowe_pole.x = wrogowie[i].x;
  291.     nowe_pole.y = wrogowie[i].y - 1;
  292.     if(nowe_pole == poszukiwacz)
  293.     {
  294.         STAN = StanGry::porazka;
  295.         tablica[wrogowie[i].x][wrogowie[i].y] = Pole::pustka;
  296.         wrogowie[i] = nowe_pole;
  297.         return;
  298.     }
  299.     if(tablica[nowe_pole.x][nowe_pole.y] == Pole::pustka)
  300.         wolne_pola.push_back(nowe_pole);
  301.  
  302.     nowe_pole.x = wrogowie[i].x - 1;
  303.     nowe_pole.y = wrogowie[i].y - 1;
  304.     if(nowe_pole == poszukiwacz)
  305.     {
  306.         STAN = StanGry::porazka;
  307.         tablica[wrogowie[i].x][wrogowie[i].y] = Pole::pustka;
  308.         wrogowie[i] = nowe_pole;
  309.         return;
  310.     }
  311.     if(tablica[nowe_pole.x][nowe_pole.y] == Pole::pustka)
  312.         wolne_pola.push_back(nowe_pole);
  313.  
  314.     nowe_pole.x = wrogowie[i].x + 1;
  315.     nowe_pole.y = wrogowie[i].y - 1;
  316.     if(nowe_pole == poszukiwacz)
  317.     {
  318.         STAN = StanGry::porazka;
  319.         tablica[wrogowie[i].x][wrogowie[i].y] = Pole::pustka;
  320.         wrogowie[i] = nowe_pole;
  321.         return;
  322.     }
  323.     if(tablica[nowe_pole.x][nowe_pole.y] == Pole::pustka)
  324.         wolne_pola.push_back(nowe_pole);
  325.  
  326.     nowe_pole.x = wrogowie[i].x - 1;
  327.     nowe_pole.y = wrogowie[i].y - 1;
  328.     if(nowe_pole == poszukiwacz)
  329.     {
  330.         STAN = StanGry::porazka;
  331.         tablica[wrogowie[i].x][wrogowie[i].y] = Pole::pustka;
  332.         wrogowie[i] = nowe_pole;
  333.         return;
  334.     }
  335.     if(tablica[nowe_pole.x][nowe_pole.y] == Pole::pustka)
  336.         wolne_pola.push_back(nowe_pole);
  337.  
  338.     nowe_pole.x = wrogowie[i].x - 1;
  339.     nowe_pole.y = wrogowie[i].y + 1;
  340.     if(nowe_pole == poszukiwacz)
  341.     {
  342.         STAN = StanGry::porazka;
  343.         tablica[wrogowie[i].x][wrogowie[i].y] = Pole::pustka;
  344.         wrogowie[i] = nowe_pole;
  345.         return;
  346.     }
  347.     if(tablica[nowe_pole.x][nowe_pole.y] == Pole::pustka)
  348.         wolne_pola.push_back(nowe_pole);
  349.  
  350.  
  351.     unsigned size = wolne_pola.size();
  352.     if(size > 0)
  353.     {
  354.         nowe_pole = wolne_pola[rand() % size];
  355.         tablica[wrogowie[i].x][wrogowie[i].y] = Pole::pustka;
  356.         wrogowie[i] = nowe_pole;
  357.         tablica[wrogowie[i].x][wrogowie[i].y] = Pole::wrog;
  358.     }
  359. }
  360.  
  361.  
  362.  
  363. void poruszanie_sie_wrogow()
  364. {
  365.     for(int j = 0; j<W; j++)
  366.         poruszanie_sie_jednym_wrogiem(j);
  367. }
  368.  
  369.  
  370.  
  371. int main()
  372. {
  373.     srand(time(nullptr));
  374.     int ilosc_ruchow;
  375.     wypelnienie_tablic();
  376.     start_informacje_programu();
  377.     system("cls");
  378.  
  379.     time_t poczatek, koniec;
  380.  
  381.     time(&poczatek);
  382.     while(STAN == StanGry::otwarta)
  383.     {
  384.  
  385.         wypisywanie_planszy_na_ekran();
  386.         poruszanie_sie_po_planszy();
  387.         poruszanie_sie_wrogow();
  388.         ilosc_ruchow = ilosc_ruchow + 1;
  389.         system("cls");
  390.     }
  391.     time(&koniec);
  392.     wypisywanie_planszy_na_ekran();
  393.  
  394.     time_t uplynelo = koniec - poczatek;
  395.     if(STAN == StanGry::porazka)
  396.     {
  397.         cout << "PRZEGRALES!" << endl;
  398.         cout << "Przegrales gre w " << ilosc_ruchow << " ruchach";
  399.     }
  400.     else
  401.     {
  402.         cout << "WYGRALES!" << endl;
  403.         cout << "Wygrales gre w " << ilosc_ruchow << " ruchach";
  404.     }
  405.     cout << "(" << uplynelo << " sekund).\n";
  406.  
  407.  
  408.  
  409.     return 0;
  410. }
  411.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement