Advertisement
PIBogdanov

ReadFileAndMove

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