Advertisement
PIBogdanov

play

Feb 10th, 2023
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.84 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. // Function to display the labyrinth
  54. void display(string** labyrinth, int rowsCount, int columnsCount)
  55. {
  56.     bool breakAfterRender = false;
  57.  
  58.     while (true)
  59.     {
  60.         system("cls");
  61.  
  62.         int colour = rand() % 15 + 1;
  63.  
  64.         for (int i = 0; i < rowsCount; i++)
  65.         {
  66.             for (int j = 0; j < columnsCount; j++)
  67.             {
  68.                 if (i == playerX && j == playerY)
  69.                 {
  70.                     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), colour);
  71.  
  72.                     cout << player;
  73.  
  74.                     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
  75.                 }
  76.  
  77.                 else
  78.                 {
  79.                     cout << labyrinth[i][j];
  80.                 }
  81.             }
  82.  
  83.             cout << "\n";
  84.         }
  85.  
  86.         if (breakAfterRender)
  87.         {
  88.             cout << "\n";
  89.  
  90.             cout << "Congratulations! You have reached the end of the level!" << "\n";
  91.  
  92.             cin.get();
  93.  
  94.             break;
  95.         }
  96.  
  97.         labyrinth[playerX][playerY] = " ";
  98.  
  99.         playerMove(labyrinth);
  100.  
  101.         if (labyrinth[playerX][playerY] == "E")
  102.         {
  103.             breakAfterRender = true;
  104.         }
  105.  
  106.         labyrinth[playerX][playerY] = player;
  107.  
  108.         this_thread::sleep_for(chrono::milliseconds(10));
  109.     }
  110. }
  111.  
  112. void openFile(string fileName)
  113. {
  114.     int rowsCount = 1;
  115.  
  116.     int columnsCount = 0;
  117.  
  118.     int startAt = 0;
  119.  
  120.     int endAt = 0;
  121.  
  122.     ifstream myfile;
  123.     myfile.open(fileName);
  124.  
  125.     if (myfile.is_open())
  126.     {
  127.         char mychar;
  128.  
  129.         while (myfile)
  130.         {
  131.             mychar = myfile.get();
  132.  
  133.             if (mychar == '\n')
  134.             {
  135.                 rowsCount++;
  136.             }
  137.  
  138.             else if ( (mychar != '\n') && (rowsCount == 1) )
  139.             {
  140.                 columnsCount++;
  141.             }
  142.  
  143.             else if (mychar == 'S')
  144.             {
  145.                 startAt = rowsCount - 1;
  146.             }
  147.  
  148.             else if (mychar == 'E')
  149.             {
  150.                 endAt = rowsCount - 1;
  151.             }
  152.         }
  153.     }
  154.  
  155.     else
  156.     {
  157.         cout << "Error: Unable to open file " << fileName << "." << "\n";
  158.     }
  159.  
  160.     myfile.close();
  161.  
  162.     // Dynamically allocating row space in the heap
  163.     string** labyrinth = new string * [rowsCount];
  164.  
  165.     // Dynamically allocating column space in the heap
  166.     for (int i = 0; i < rowsCount; i++)
  167.     {
  168.         labyrinth[i] = new string[columnsCount];
  169.     }
  170.  
  171.     int currentRow = 0;
  172.  
  173.     int currentColumn = 0;
  174.  
  175.     myfile.open(fileName);
  176.  
  177.     if (myfile.is_open())
  178.     {
  179.         char mychar;
  180.  
  181.         while (myfile.get(mychar))
  182.         {
  183.             if ( (currentRow < rowsCount) && (currentColumn < columnsCount) )
  184.             {
  185.                 labyrinth[currentRow][currentColumn] = mychar;
  186.             }
  187.  
  188.             if (mychar == '\n')
  189.             {
  190.                 currentRow++;
  191.  
  192.                 currentColumn = 0;
  193.             }
  194.  
  195.             else
  196.             {
  197.                 currentColumn++;
  198.             }
  199.         }
  200.     }
  201.  
  202.     myfile.close();
  203.  
  204.     // Displaying the labyrinth
  205.     display(labyrinth, rowsCount, columnsCount);
  206.  
  207.     // Free up the space after the use of the array
  208.     for (int i = 0; i < rowsCount; i++)
  209.     {
  210.         delete[] labyrinth[i];
  211.     }
  212.  
  213.     delete[] labyrinth;
  214. }
  215.  
  216. void levels()
  217. {
  218.     int level = 1;
  219.  
  220.     while (level < 11)
  221.     {
  222.         if (level == 1)
  223.         {
  224.             string fileName = "maps/map_0_s.txt";
  225.  
  226.             // Opening the text file
  227.             openFile(fileName);
  228.  
  229.             level++;
  230.         }
  231.     }
  232. }
  233.  
  234. int main()
  235. {
  236.     ShowWindow(GetConsoleWindow(), SW_MAXIMIZE);
  237.  
  238.     SendMessage(GetConsoleWindow(), WM_SYSKEYDOWN, VK_RETURN, 0x2000000);
  239.  
  240.     levels();
  241.  
  242.     return 0;
  243. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement