Advertisement
ElfikCo

Gra prawie RPG v0.001

Oct 25th, 2016
371
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<iostream>
  2. #include<fstream>
  3. #include<windows.h>
  4. #include<conio.h>
  5. #include<time.h>
  6.  
  7. /*
  8. -timer
  9. -kamera
  10. */
  11.  
  12. using namespace std;
  13.  
  14. //ZMIENNE GLOBALNE
  15. char znaki[] = {'X',2};
  16. int dane[2][3] = {0};
  17. char poziom1[30][100] = {0}; // pierwszy poziom
  18.  
  19. //DEKLARACJE FUNKCJI
  20. void czysc(string tryb = "all");
  21. short klawisz();
  22. void rysujRamka();
  23. void menuGlowne();
  24. void wczytajMape();
  25. void gra();
  26. void komunikat(string tekst);
  27. void Kursor(int, int);
  28. void zapis(int);
  29. void wyniki();
  30.  
  31. void opcje()
  32. {
  33.     CONSOLE_FONT_INFOEX cfi;
  34.     cfi.cbSize = sizeof cfi;
  35.     cfi.nFont = 0;
  36.     cfi.dwFontSize.X = 12;
  37.     cfi.dwFontSize.Y = 16;
  38.     cfi.FontFamily = FF_DONTCARE;
  39.     cfi.FontWeight = FW_NORMAL;
  40.     SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &cfi);
  41. }
  42.  
  43. int main()
  44. {
  45.     opcje();
  46.     rysujRamka();
  47.     wczytajMape();
  48.     menuGlowne();
  49.  
  50.     return 0;
  51. }
  52.  
  53. void czysc(string tryb)
  54. {
  55.     if( tryb == "menu")
  56.     {
  57.         for(int i=4; i<31 ;i++)
  58.         {
  59.             for(int z=80; z<99 ;z++)
  60.             {
  61.                 Kursor(z,i);
  62.                 cout << " ";
  63.             }
  64.         }
  65.         return;
  66.     }
  67.     else if(tryb == "chat")
  68.     {
  69.         for(int i=32; i<39 ;i++)
  70.         {
  71.             for(int z=1; z<79 ;z++)
  72.             {
  73.                 Kursor(z,i);
  74.                 cout << " ";
  75.             }
  76.         }
  77.         return;
  78.     }
  79.     else if(tryb == "gra")
  80.     {
  81.         for(int i=1; i<31 ;i++)
  82.         {
  83.             for(int z=1; z<79 ;z++)
  84.             {
  85.                 Kursor(z,i);
  86.                 cout << " ";
  87.             }
  88.         }
  89.         return;
  90.     }
  91.     else if(tryb == "bezramki")
  92.     {
  93.         for(int i=4; i<31 ;i++)
  94.         {
  95.             for(int z=80; z<99 ;z++)
  96.             {
  97.                 Kursor(z,i);
  98.                 cout << " ";
  99.             }
  100.         }
  101.         for(int i=32; i<39 ;i++)
  102.         {
  103.             for(int z=1; z<79 ;z++)
  104.             {
  105.                 Kursor(z,i);
  106.                 cout << " ";
  107.             }
  108.         }
  109.         for(int i=1; i<31 ;i++)
  110.         {
  111.             for(int z=1; z<79 ;z++)
  112.             {
  113.                 Kursor(z,i);
  114.                 cout << " ";
  115.             }
  116.         }
  117.         return;
  118.     }
  119.     else if("all")
  120.     {
  121.         system("cls");
  122.         return;
  123.     }
  124.     else
  125.     {
  126.         return;
  127.     }
  128. }
  129.  
  130. short klawisz()
  131. {
  132.     int k = getch();
  133.     k=static_cast<int>(k);
  134.  
  135.     if(k==224) //jeśli strzałki
  136.     {
  137.         k=getch();  //która strzałka? 80-w dol, 72-wgórę
  138.         k=static_cast<int>(k); // zamiana na typ int
  139.         return k;
  140.     }
  141.     return k;
  142. }
  143.  
  144. void rysujRamka()
  145. {
  146.     int dl_x = 100;
  147.     int dl_y = 40;
  148.  
  149.     for(int i=1; i <= dl_y ;i++)
  150.     {
  151.         for(int z=1; z <= dl_x ;z++)
  152.         {
  153.             if(i == 1 && z == 1) //lewy górny róg
  154.                 cout << (char)201;
  155.             else if(i == 1 && z == dl_x) //prawy dolny róg
  156.                 cout << (char)187;
  157.             else if(i == dl_y && z == 1) //lewy dolny róg
  158.                 cout << (char)200;
  159.             else if(i == dl_y && z == dl_x) //prawy dolny róg
  160.                 cout << (char)188;
  161.             else if(i == 32 && z == 1) // trójnik w lewo
  162.                 cout << (char)204;
  163.             else if(i == 32 && z == dl_x) // trójnik w prawo
  164.                 cout << (char)185;
  165.             else if(i == dl_y && z == 0.8*dl_x) //trójnik w górę
  166.                 cout << (char)202;
  167.             else if(i == 1 && z == 0.8*dl_x) //trójnik w dol
  168.                 cout << (char)203;
  169.             else if(i == 32 && z == 0.8*dl_x) //skrzyżowanie
  170.                 cout << (char)206;
  171.             else if(i == 1 || i == dl_y || i == 32) //znaki poziome
  172.                 cout << (char)205;
  173.             else if(z == 1 || z == dl_x || z == 0.8*dl_x) // znaki pionowe
  174.                 cout << (char)186;
  175.             else
  176.                 cout << " ";
  177.         }
  178.         cout<< endl;
  179.     }
  180.  
  181.     string okno[] = {"Autorzy:"," ", "Elfik & Karkrieg", " ","Kompilacja:"," "__DATE__};
  182.  
  183.     for(int i=0; i < 6 ;i++)
  184.     {
  185.         Kursor(81,32+i);
  186.         cout<< okno[i];
  187.     }
  188.  
  189.     return;
  190. }
  191.  
  192. void wczytajMape()
  193. {
  194.     fstream mapa;
  195.     mapa.open("poziom1.txt",ios::in );
  196.  
  197. //WPISYWANIE MAPY DO TABLICY ZNAKÓW
  198.     for(int j=0; j<30 ;j++)
  199.     {
  200.         for(int i=0; i<78 ;i++)
  201.         {
  202.             mapa >> poziom1[j][i]; //wpisywanie do tablicy
  203.  
  204.             if ((int)poziom1[j][i]==46)
  205.             {
  206.                 poziom1[j][i]=' ';
  207.             }
  208.         }
  209.     }
  210.     mapa.close();
  211. }
  212.  
  213. void Kursor(int x,int y)
  214. {
  215.     COORD pozycja = {x,y};
  216.     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pozycja);
  217.     return;
  218. }
  219.  
  220. void menuGlowne()
  221. {
  222.  
  223. while(1)
  224. {  
  225.  
  226. //ZMIENNE AUTOMATYCZNE
  227.     short wsk = 4;
  228.     short kier = 0;
  229.     short x = 80;
  230.    
  231.     string menu[] ={"  Gra prawie RPG",
  232.                     "===================",
  233.                     " ",
  234.                     "     NowaGra",
  235.                     "     Wyniki",
  236.                     "     Wyjscie",};
  237.    
  238. //PRZYGOTOWANIE
  239.     czysc("bezramki");
  240.  
  241. //WYPISANIE MENU GŁÓWNEGO
  242.         for(short i = 0; i < sizeof(menu)/8 ;i++)
  243.         {
  244.             Kursor(x,i+1);
  245.             cout << menu[i];
  246.         }
  247.  
  248. //REAKCJA NA KLAWISZ
  249.     while(true)
  250.     {
  251.         if(kier == 1)
  252.         {
  253.             Kursor(x,wsk);
  254.             cout << "    ";
  255.             wsk--;
  256.         }
  257.         else if(kier == 2)
  258.         {
  259.             Kursor(x,wsk);
  260.             cout << "    ";
  261.             wsk++;
  262.         }
  263.         Kursor(x,wsk);
  264.         cout << "  >>";
  265.        
  266.         short klik = klawisz(); //  oczekiwanie na klawisz
  267.  
  268.         if(klik == 72 && wsk > 4) // strzałka w górę
  269.         {
  270.             kier = 1;
  271.         }
  272.         else if(klik == 80 && wsk < 6) // strzałka w dol
  273.         {
  274.             kier = 2;
  275.         }
  276.         else
  277.         {
  278.             kier = 0;
  279.         }
  280.        
  281.         if(klik == 13) // Enter
  282.         {
  283.             if(wsk == 4)
  284.             {
  285.                 gra(); // parametry startu
  286.                 break;
  287.             }
  288.             else if(wsk == 5)
  289.             {
  290.                 wyniki();
  291.             }
  292.             else if(wsk == 6)
  293.             {
  294.                 return;
  295.             }
  296.             else
  297.             {
  298.                 return;
  299.             }
  300.         }
  301.        
  302.     }
  303. }
  304. }
  305.  
  306. void gra()
  307. {
  308. //ZMIENNE AUTOMATYCZNE
  309.     string menu[] ={" Lokacja: Poziom 1",
  310.                     " Kroki: ",
  311.                     " (W) Wyjscie ",
  312.                     " Punkty: ",
  313.                     " Klucze: "
  314.                     };
  315.     int punkty = 0;
  316.     int highscore = 0;
  317.     int kroki = 0;
  318.     short sytuacja = 0;
  319.                    
  320. //PRZYGOTOWANIE
  321.     czysc("gra");
  322.     czysc("menu");
  323.     czysc("chat");
  324.  
  325. //WYPISANIE MAPY
  326.     for(int w=0; w < 30 ;w++)
  327.     {
  328.         Kursor(1,w+1);
  329.  
  330.         for(int k=0; k < 78 ;k++)
  331.         {
  332.                 cout<< poziom1[w][k];
  333.         }
  334.         cout<< endl;
  335.     }
  336.  
  337. //WYPISANIE MENU
  338.     Kursor(80,4);
  339.         cout<< menu[0];
  340.     Kursor(80,30);
  341.         cout << menu[2];
  342.  
  343. //STEROWANIE
  344.     char znak[] = {' ','T','C','o','K'};
  345.     int poz_x = 1;
  346.     int poz_y = 21;
  347.     char pZnak;
  348.     bool gora,dol,lewo,prawo;
  349.     int klucz = 0;
  350.     bool chat = false;
  351.  
  352.     while(true)
  353.     {
  354. //RESETOWANIE MOŻLIWOŚĆI
  355.     gora = false;
  356.     dol = false;
  357.     lewo = false;
  358.     prawo = false;
  359.    
  360.     for(int i = 0; i < sizeof(znak) ;i++) // sprawdzenie przestrzeni dookoła naszego położenia
  361.     {
  362.         if(poziom1[poz_y-1][poz_x] == znak[i])
  363.             gora = true;   
  364.         if(poziom1[poz_y+1][poz_x] == znak[i])
  365.             dol = true;
  366.         if(poziom1[poz_y][poz_x-1] == znak[i])
  367.             lewo = true;
  368.         if(poziom1[poz_y][poz_x+1] == znak[i])
  369.             prawo = true;
  370.     }
  371.    
  372.     Kursor(poz_x+1,poz_y+1);
  373.         cout << znaki[1];
  374.    
  375. //LICZNIKI I EKWIPUNEK
  376.     Kursor(80,22);
  377.         cout << menu[1] << kroki;
  378.     Kursor(80,23);
  379.         cout << menu[3] << punkty << " * 100";
  380.    
  381.     if(klucz > 0)
  382.     {
  383.         Kursor(80,20);
  384.         cout << menu[4] << klucz;
  385.     }
  386.     else
  387.     {
  388.         Kursor(80,20);
  389.         cout << "          ";
  390.     }
  391.    
  392. //AKCJA
  393.     short klik = klawisz();
  394.    
  395.     if(chat == true)
  396.     {
  397.         czysc("chat");
  398.         chat = false;
  399.     }
  400.    
  401.     Kursor(poz_x+1,poz_y+1);
  402.     cout << pZnak;
  403.     pZnak = ' ';
  404.    
  405.     if(klik == 72 && gora == true)
  406.     {
  407.         poz_y--;
  408.         kroki++;
  409.     }
  410.     else if(klik == 80 && dol == true)
  411.     {  
  412.         poz_y++;
  413.         kroki++;
  414.     }
  415.     else if(klik == 75 && lewo == true)
  416.     {  
  417.         poz_x--;
  418.         kroki++;
  419.     }
  420.     else if(klik == 77 && prawo == true)
  421.     {  
  422.         poz_x++;
  423.         kroki++;
  424.     }
  425.     else if(klik == 119 || klik == 87)
  426.         return;
  427.        
  428.     if((poziom1[poz_y][poz_x+1] == '|')or(poziom1[poz_y][poz_x-1] == '|'))
  429.     {
  430.         if (klucz < 1)
  431.         {
  432.             komunikat("Drzwi - aby je otworzyc, znajdz klucz.");
  433.             chat = true;
  434.         }
  435.         else
  436.         {
  437.             if (poziom1[poz_y][poz_x+1] == '|')
  438.             {
  439.                 poziom1[poz_y][poz_x+1] = ' ';
  440.             }
  441.             else if(poziom1[poz_y][poz_x-1] == '|')
  442.             {
  443.                 poziom1[poz_y][poz_x-1] = ' ';
  444.             }
  445.             komunikat("Otwarles drzwi!");
  446.             klucz--;
  447.             chat = true;
  448.         }
  449.     }
  450.  
  451.     if(poziom1[poz_y][poz_x] == 'T')
  452.     {
  453.         komunikat("Teleport - chcesz z niego skorzystac? T/N");
  454.         char opcja = getch();
  455.        
  456.         if(opcja == 't' || opcja == 'T')
  457.         {
  458.             if(poz_x == 39 && poz_y == 12)
  459.             {
  460.                 poz_x = 62;
  461.                 poz_y = 27;
  462.             }
  463.             else if(poz_x == 62 && poz_y == 12)
  464.             {
  465.                 poz_x = 39;
  466.                 poz_y = 12;
  467.             }
  468.         }
  469.         pZnak = 'T';
  470.         chat = true;
  471.     }
  472.  
  473.     if(poziom1[poz_y][poz_x] == 'C')
  474.     {
  475.         komunikat("Znalazles klucz. Mozesz teraz otworzyc drzwi");
  476.         klucz++;
  477.         chat = true;
  478.         poziom1[poz_y][poz_x]=' ';
  479.     }
  480.    
  481.     if(poziom1[poz_y][poz_x] == 'o')
  482.     {
  483.         komunikat("Zebrales punkt!");
  484.         punkty += 1;
  485.         chat = true;
  486.         poziom1[poz_y][poz_x]=' ';
  487.     }
  488.    
  489.     if(poziom1[poz_y][poz_x] == 'K')
  490.     {
  491.         komunikat("KONIEC!");
  492.         Sleep(1000);
  493.         czysc("bezramki");
  494.        
  495.         highscore = punkty*100 - kroki;
  496.         if(highscore <= 0)
  497.         {
  498.             highscore = 0;
  499.         }
  500.        
  501.         zapis(highscore);
  502.         return;
  503.     }
  504.     } //koniec pętli 'while'  
  505. }
  506.  
  507. void zapis(int wynik)
  508. {
  509.     string nick;
  510.     czysc("bezramki");
  511.    
  512.     Kursor(2,2);
  513.         cout << "Twoj wynik: " << wynik;
  514.     Kursor(2,3);
  515.         cout << "Podaj nick: ";
  516.         cin >> nick;
  517.    
  518.     fstream save;
  519.     save.open("highscores.txt", ios::app);
  520.    
  521.     save << endl << nick << " " << wynik;
  522.    
  523.     Sleep(1000);
  524.     save.close();
  525. }
  526.  
  527. void wyniki()
  528. {
  529.     string nazwa[10] = {""};
  530.     int wynik[10] = {0};
  531.     int l;
  532.     string imie;
  533.     int liczba;
  534.  
  535.     czysc("gra");  
  536.     fstream plik;
  537.     plik.open("highscores.txt");
  538.    
  539.     for(l = 0; plik.is_open() ;l++)
  540.     {  
  541.         if(plik.eof())
  542.         {
  543.             plik.close();
  544.             break;
  545.         }
  546.        
  547.         plik >> imie >> liczba;
  548.        
  549.         nazwa[l] = imie;
  550.         wynik[l] = liczba;
  551.     }
  552.    
  553.    
  554.     for(int i = 0; i < l ;i++)
  555.     {
  556.         for(int z = 0; z < l ;z++)
  557.         {
  558.             if(wynik[z] < wynik[z+1])
  559.             {
  560.                 swap(wynik[z],wynik[z+1]);
  561.                 swap(nazwa[z],nazwa[z+1]);
  562.             }
  563.         }
  564.     }
  565.    
  566.     Kursor(2,2);
  567.     cout << "Najlepsze wyniki: ";
  568.    
  569.     for(int i = 0; i < 10 ;i++)
  570.     {
  571.    
  572.         Kursor(2,i+5);
  573.         if(wynik[i] == 0)
  574.         {
  575.             continue;
  576.         }
  577.         else
  578.         {
  579.             cout << i+1 << ". " << nazwa[i] << " - " << wynik[i];
  580.         }
  581.     }
  582.    
  583.     Kursor(2,30);
  584.     cout<< "(W)Wyjscie";
  585.        
  586.     while(1)
  587.     {
  588.         char w = getch();
  589.         if(w == 'w' || w == 'W')
  590.         {
  591.             czysc("gra");
  592.             return;
  593.         }
  594.     }
  595.    
  596. }
  597.  
  598. void komunikat(string tekst)
  599. {
  600.     Kursor(2,33);
  601.     cout << tekst;
  602.     return;
  603. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement