Advertisement
PIBogdanov

level

Feb 10th, 2023
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.10 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <Windows.h>
  5. #include <conio.h>
  6. #include <chrono>
  7. #include <thread>
  8. #include <random>
  9.  
  10. using namespace std;
  11.  
  12. string player = "O";
  13.  
  14. int playerX = 1;
  15.  
  16. int playerY = 0;
  17.  
  18. void characterMove(string** labyrinth, int& x, int& y, int dx, int dy)
  19. {
  20.     if (labyrinth[x + dx][y + dy] == " " || labyrinth[x + dx][y + dy] == "E")
  21.     {
  22.         x += dx;
  23.         y += dy;
  24.     }
  25. }
  26.  
  27.  
  28. void playerMove(string** labyrinth)
  29. {
  30.     char key = _getch();
  31.  
  32.     if (key == 72) // The ASCII CODE FOR THE UP ARROW KEY
  33.     {
  34.         characterMove(labyrinth, playerX, playerY, -1, 0);
  35.     }
  36.  
  37.     else if (key == 75) // The ASCII CODE FOR THE LEFT ARROW KEY
  38.     {
  39.         characterMove(labyrinth, playerX, playerY, 0, -1);
  40.     }
  41.  
  42.     else if (key == 80) // The ASCII CODE FOR THE DOWN ARROW KEY
  43.     {
  44.         characterMove(labyrinth, playerX, playerY, 1, 0);
  45.     }
  46.  
  47.     else if (key == 77) // The ASCII CODE FOR THE RIGHT ARROW KEY
  48.     {
  49.         characterMove(labyrinth, playerX, playerY, 0, 1);
  50.     }
  51. }
  52.  
  53. void openFile(string fileName, string**& labyrinth, int& rowsCount, int& columnsCount, int& startAt, int& endAt)
  54. {
  55.     ifstream myfile;
  56.     myfile.open(fileName);
  57.  
  58.     if (myfile.is_open())
  59.     {
  60.         char mychar;
  61.  
  62.         while (myfile)
  63.         {
  64.             mychar = myfile.get();
  65.  
  66.             if (mychar == '\n')
  67.             {
  68.                 rowsCount++;
  69.             }
  70.  
  71.             else if ( (mychar != '\n') && (rowsCount == 1) )
  72.             {
  73.                 columnsCount++;
  74.             }
  75.  
  76.             else if (mychar == 'S')
  77.             {
  78.                 startAt = rowsCount - 1;
  79.             }
  80.  
  81.             else if (mychar == 'E')
  82.             {
  83.                 endAt = rowsCount - 1;
  84.             }
  85.         }
  86.     }
  87.  
  88.     else
  89.     {
  90.         cout << "Error: Unable to open file " << fileName << "." << "\n";
  91.     }
  92.  
  93.     myfile.close();
  94.  
  95.     // Dynamically allocating row space in the heap
  96.     labyrinth = new string * [rowsCount];
  97.  
  98.     // Dynamically allocating column space in the heap
  99.     for (int i = 0; i < rowsCount; i++)
  100.     {
  101.         labyrinth[i] = new string[columnsCount];
  102.     }
  103.  
  104.     int currentRow = 0;
  105.  
  106.     int currentColumn = 0;
  107.  
  108.     myfile.open(fileName);
  109.  
  110.     if (myfile.is_open())
  111.     {
  112.         char mychar;
  113.  
  114.         while (myfile.get(mychar))
  115.         {
  116.             if ( (currentRow < rowsCount) && (currentColumn < columnsCount) )
  117.             {
  118.                 labyrinth[currentRow][currentColumn] = mychar;
  119.             }
  120.  
  121.             if (mychar == '\n')
  122.             {
  123.                 currentRow++;
  124.  
  125.                 currentColumn = 0;
  126.             }
  127.  
  128.             else
  129.             {
  130.                 currentColumn++;
  131.             }
  132.         }
  133.     }
  134.  
  135.     myfile.close();
  136. }
  137.  
  138. // Function to display the labyrinth
  139. void display(string** labyrinth, int rowsCount, int columnsCount)
  140. {
  141.     bool breakAfterRender = false;
  142.  
  143.     while (true)
  144.     {
  145.         system("cls");
  146.  
  147.         int colour = rand() % 15 + 1;
  148.  
  149.         for (int i = 0; i < rowsCount; i++)
  150.         {
  151.             for (int j = 0; j < columnsCount; j++)
  152.             {
  153.                 if (i == playerX && j == playerY)
  154.                 {
  155.                     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), colour);
  156.  
  157.                     cout << player;
  158.  
  159.                     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
  160.                 }
  161.  
  162.                 else
  163.                 {
  164.                     cout << labyrinth[i][j];
  165.                 }
  166.             }
  167.  
  168.             cout << "\n";
  169.         }
  170.  
  171.         if (breakAfterRender)
  172.         {
  173.             cout << "\n";
  174.  
  175.             cout << "Congratulations! You have reached the end of the labyrinth!" << "\n";
  176.  
  177.             cin.get();
  178.  
  179.             break;
  180.         }
  181.  
  182.         labyrinth[playerX][playerY] = " ";
  183.  
  184.         playerMove(labyrinth);
  185.  
  186.         if (labyrinth[playerX][playerY] == "E")
  187.         {
  188.             breakAfterRender = true;
  189.         }
  190.  
  191.         labyrinth[playerX][playerY] = player;
  192.  
  193.         this_thread::sleep_for(chrono::milliseconds(10));
  194.     }
  195. }
  196.  
  197. void levels()
  198. {
  199.     int level = 1;
  200.  
  201.     while (level < 11)
  202.     {
  203.         if (level == 1)
  204.         {
  205.             string** labyrinth;
  206.  
  207.             string fileName = "maps/map_0_s.txt";
  208.  
  209.             int rowsCount = 1;
  210.  
  211.             int columnsCount = 0;
  212.  
  213.             int startAt = 0;
  214.  
  215.             int endAt = 0;
  216.  
  217.             // Opening the text file
  218.             openFile(fileName, labyrinth, rowsCount, columnsCount, startAt, endAt);
  219.  
  220.             // Displaying the labyrinth
  221.             display(labyrinth, rowsCount, columnsCount);
  222.  
  223.             // Free up the space after the use of the array
  224.             for (int i = 0; i < rowsCount; i++)
  225.             {
  226.                 delete[] labyrinth[i];
  227.             }
  228.  
  229.             delete[] labyrinth;
  230.  
  231.             level++;
  232.         }
  233.     }
  234. }
  235.  
  236. int main()
  237. {
  238.     ShowWindow(GetConsoleWindow(), SW_MAXIMIZE);
  239.  
  240.     SendMessage(GetConsoleWindow(), WM_SYSKEYDOWN, VK_RETURN, 0x2000000);
  241.  
  242.     levels();
  243.  
  244.     return 0;
  245. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement