Advertisement
PIBogdanov

The Labyrinth

Jan 23rd, 2023
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 24.23 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <stdlib.h>
  4. #include <Windows.h>
  5. #include <windows.h>
  6. #include <stdio.h>
  7. #include <ctype.h>
  8. #include <random>
  9. #include <chrono>
  10. #include <thread>
  11.  
  12. using namespace std;
  13.  
  14. #define rowsCount 5
  15. #define colsCount 7
  16.  
  17. string boardSquareCurrentState[rowsCount][colsCount] =
  18. {
  19.     {  "1",  "2",  "3",  "4",  "5",  "6",  "7" },
  20.     {  "8",  "9", "10", "11", "12", "13", "14" },
  21.     { "15", "16", "17", "18", "19", "20", "21" },
  22.     { "22", "23", "24", "25", "26", "27", "28" },
  23.     { "29", "30", "31", "32", "33", "34", "35" }
  24. };
  25.  
  26. string boardSquareInitialState[rowsCount][colsCount] =
  27. {
  28.     {  "1",  "2",  "3",  "4",  "5",  "6",  "7" },
  29.     {  "8",  "9", "10", "11", "12", "13", "14" },
  30.     { "15", "16", "17", "18", "19", "20", "21" },
  31.     { "22", "23", "24", "25", "26", "27", "28" },
  32.     { "29", "30", "31", "32", "33", "34", "35" }
  33. };
  34.  
  35. string wallsArray[] =
  36. {
  37.        "1",  "2",  "3",  "4",  "5",  "6",  "7",
  38.        "8",  "9", "10", "11", "12", "13", "14",
  39.       "15", "16", "17", "18", "19", "20", "21",
  40.       "22", "23", "24", "25", "26", "27", "28",
  41.       "29", "30", "31", "32", "33", "34", "35"
  42. };
  43.  
  44. //string a[10][rowsCount][colsCount] =
  45. //{
  46. //    {
  47. //        {  "1",  "2",  "3",  "4",  "5",  "6",  "7" },
  48. //        {  "8",  "9", "10", "11", "12", "13", "14" },
  49. //        { "15", "16", "17", "18", "19", "20", "21" },
  50. //        { "22", "23", "24", "25", "26", "27", "28" },
  51. //        { "29", "30", "31", "32", "33", "34", "35" }
  52. //    },
  53. //
  54. //    {
  55. //        {  "1",  "2",  "3",  "4",  "5",  "6",  "7" },
  56. //        {  "8",  "9", "10", "11", "12", "13", "14" },
  57. //        { "15", "16", "17", "18", "19", "20", "21" },
  58. //        { "22", "23", "24", "25", "26", "27", "28" },
  59. //        { "29", "30", "31", "32", "33", "34", "35" }
  60. //    },
  61. //
  62. //    {
  63. //        {  "1",  "2",  "3",  "4",  "5",  "6",  "7" },
  64. //        {  "8",  "9", "10", "11", "12", "13", "14" },
  65. //        { "15", "16", "17", "18", "19", "20", "21" },
  66. //        { "22", "23", "24", "25", "26", "27", "28" },
  67. //        { "29", "30", "31", "32", "33", "34", "35" }
  68. //    }
  69. //};
  70.  
  71. int numberOfWalls, x, y, lastx, lasty;
  72.  
  73. char movingObject;
  74.  
  75. int mainFunction();
  76.  
  77. int difficulty();
  78.  
  79. void easyDifficulty();
  80.  
  81. void normalDifficulty();
  82.  
  83. void hardDifficulty();
  84.  
  85. void gameStart();
  86.  
  87. void customGame();
  88.  
  89. void gameControls();
  90.  
  91. void gameCredits();
  92.  
  93. void exitProgram();
  94.  
  95. void backToMenu();
  96.  
  97. void board(string input[rowsCount][colsCount], string output[rowsCount][colsCount]);
  98.  
  99. void drawColums();
  100.  
  101. void startPoint();
  102. string startingPoint;
  103.  
  104. void endPoint();
  105. string endingPoint;
  106.  
  107. void typeOfWalls();
  108.  
  109. int typeNumberOfWalls();
  110.  
  111. void generateWalls();
  112.  
  113. void generateWallsWithRandomNumberOfWalls();
  114.  
  115. void generateWallsWithRandomSetWalls();
  116.  
  117. void wallReset();
  118.  
  119. int randomShuffle();
  120.  
  121. int isInputValid(string currentInput, string lastInput);
  122.  
  123. int isDigitValid();
  124.  
  125. void ShowConsoleCursor(bool showFlag);
  126.  
  127. void gotoxy(int, int);
  128.  
  129. void setValueAtPosition(string input, string symbols);
  130.  
  131. typedef void(*menuOption)();
  132.  
  133. menuOption menuOptions[] = { gameStart, customGame, gameControls, gameCredits, exitProgram };
  134.  
  135. int main()
  136. {
  137.     system("color 04");
  138.  
  139.     ShowWindow(GetConsoleWindow(), SW_MAXIMIZE);
  140.  
  141.     SendMessage(GetConsoleWindow(), WM_SYSKEYDOWN, VK_RETURN, 0x2000000);
  142.  
  143.     ShowConsoleCursor(false);
  144.  
  145.     string menu[5] = { "Start Game", "Create a Custom Game", "Controls", "Credits", "Exit" };
  146.  
  147.     int pointer = 0;
  148.  
  149.     bool lastUpKeyState = false;
  150.  
  151.     bool lastDownKeyState = false;
  152.  
  153.     bool lastReturnKeyState = false;
  154.  
  155.     while (true)
  156.     {
  157.         system("cls");
  158.  
  159.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
  160.  
  161.         cout << "The Labyrinth" << "\n" << "\n";
  162.  
  163.         cout << "Main Menu" << "\n" << "\n";
  164.  
  165.         for (int i = 0; i < 5; i++)
  166.         {
  167.             if (i == pointer)
  168.             {
  169.                 cout << "-> ";
  170.  
  171.                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
  172.  
  173.                 cout << menu[i] << endl;
  174.             }
  175.  
  176.             else
  177.             {
  178.                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
  179.  
  180.                 cout << menu[i] << endl;
  181.             }
  182.         }
  183.  
  184.         bool upKeyState = GetAsyncKeyState(VK_UP);
  185.  
  186.         if (upKeyState && !lastUpKeyState)
  187.         {
  188.             pointer -= 1;
  189.  
  190.             if (pointer == -1)
  191.             {
  192.                 pointer = 4;
  193.             }
  194.         }
  195.  
  196.         lastUpKeyState = upKeyState;
  197.  
  198.         bool downKeyState = GetAsyncKeyState(VK_DOWN);
  199.  
  200.         if (downKeyState && !lastDownKeyState)
  201.         {
  202.             pointer += 1;
  203.  
  204.             if (pointer == 5)
  205.             {
  206.                 pointer = 0;
  207.             }
  208.         }
  209.  
  210.         lastDownKeyState = downKeyState;
  211.  
  212.         bool returnKeyState = GetAsyncKeyState(VK_RETURN);
  213.  
  214.         if (returnKeyState && !lastReturnKeyState)
  215.         {
  216.             menuOptions[pointer]();
  217.         }
  218.  
  219.         lastReturnKeyState = returnKeyState;
  220.  
  221.         this_thread::sleep_for(chrono::milliseconds(200));
  222.     }
  223.  
  224.     return 0;
  225. }
  226.  
  227. int mainFunction()
  228. {
  229.     int isValid = -1;
  230.     int i = 0;
  231.  
  232.     string choice = "Start";
  233.  
  234.     string lastInput = "";
  235.  
  236.     cout << endl << endl;
  237.  
  238.     do
  239.     {
  240.         board(boardSquareInitialState, boardSquareCurrentState);
  241.  
  242.         cout << "\n" << "\n";
  243.  
  244.         cout << "The used blocks will be marked with XX" << endl << endl;
  245.  
  246.         cout << "Enter an integer number between 1 and 35, excluding the numbers, that were chosen for walls!" << "\n" << "\n";
  247.  
  248.         cout << "REPEATING IS FORBIDDEN!" << "\n" << "\n";
  249.  
  250.         cout << "Restart buttons:" << "\n";
  251.         cout << "Restart / restart / R / r" << "\n" << "\n";
  252.  
  253.         cout << "Quit buttons:" << "\n";
  254.         cout << "Quit / quit / Q / q" << "\n" << "\n";
  255.  
  256.         cout << "Your starting point is " << startingPoint << ". You need to enter the labyrinth from there." << "\n";
  257.         cout << "Your ending point is " << endingPoint << ". You need to exit the labyrinth from there." << "\n" << "\n";
  258.  
  259.  
  260.         cout << "Chosen number by You: ";
  261.  
  262.         cin >> choice;
  263.  
  264.         for (int i = 0; i < choice.length(); i++)
  265.         {
  266.             choice[i] = tolower(choice[i]);
  267.         }
  268.  
  269.         if (choice == "restart" || choice == "r")
  270.         {
  271.             wallReset();
  272.             lastInput = "";
  273.             continue;
  274.         }
  275.  
  276.         if (GetAsyncKeyState('R'))
  277.         {
  278.             wallReset();
  279.             lastInput = "";
  280.             continue;
  281.         }
  282.  
  283.         if (choice == "quit" || choice == "q")
  284.         {
  285.             return 1; //NOTE TO BE FIXED!: back to setting start and the rest
  286.         }
  287.  
  288.         if (GetAsyncKeyState('Q'))
  289.         {
  290.             return 1;
  291.         }
  292.  
  293.         /*
  294.         if (stoi(choice) < 10)
  295.         {
  296.             choice = "0" + choice;
  297.         }
  298.         */
  299.  
  300.         isValid = isInputValid(choice, lastInput);
  301.  
  302.         if (isValid == -1)
  303.         {
  304.             i = -1;
  305.         }
  306.  
  307.         else if (isValid == 0)
  308.         {
  309.             i = 0;
  310.         }
  311.  
  312.         else
  313.         {
  314.             setValueAtPosition(choice, "XX");
  315.  
  316.             if (choice == endingPoint)
  317.             {
  318.                 i = 1;
  319.             }
  320.  
  321.             else
  322.             {
  323.                 i = -1;
  324.                 lastInput = choice;
  325.             }
  326.         }
  327.  
  328.     } while (i == -1);
  329.  
  330.     if (i != 0)
  331.     {
  332.         board(boardSquareInitialState, boardSquareCurrentState);
  333.     }
  334.  
  335.     if (i == 1)
  336.     {
  337.         cout << endl << endl;
  338.         cout << "Good job! You found the way out!" << endl;
  339.  
  340.         cin.ignore();
  341.  
  342.         cin.get();
  343.  
  344.         gameCredits();
  345.     }
  346. }
  347.  
  348. using menuOption = void(*)();
  349.  
  350. menuOption menuDifficulties[] = { easyDifficulty, normalDifficulty, hardDifficulty };
  351.  
  352. int difficulty()
  353. {
  354.     string difficulty[3] = { "Easy", "Normal", "Hard" };
  355.  
  356.     int pointer = 0;
  357.  
  358.     bool lastUpKeyState = false;
  359.  
  360.     bool lastDownKeyState = false;
  361.  
  362.     bool lastReturnKeyState = false;
  363.  
  364.     while (true)
  365.     {
  366.         system("cls");
  367.  
  368.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
  369.  
  370.         cout << "Choose difficulty" << "\n" << "\n";
  371.  
  372.         for (int i = 0; i < 3; i++)
  373.         {
  374.             if (i == pointer)
  375.             {
  376.                 cout << "-> ";
  377.  
  378.                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
  379.  
  380.                 cout << difficulty[i] << endl;
  381.             }
  382.  
  383.             else
  384.             {
  385.                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
  386.  
  387.                 cout << difficulty[i] << endl;
  388.             }
  389.         }
  390.  
  391.         bool upKeyState = GetAsyncKeyState(VK_UP);
  392.  
  393.         if (upKeyState && !lastUpKeyState)
  394.         {
  395.             pointer -= 1;
  396.  
  397.             if (pointer == -1)
  398.             {
  399.                 pointer = 2;
  400.             }
  401.         }
  402.  
  403.         lastUpKeyState = upKeyState;
  404.  
  405.         bool downKeyState = GetAsyncKeyState(VK_DOWN);
  406.  
  407.         if (downKeyState && !lastDownKeyState)
  408.         {
  409.             pointer += 1;
  410.  
  411.             if (pointer == 3)
  412.             {
  413.                 pointer = 0;
  414.             }
  415.         }
  416.  
  417.         lastDownKeyState = downKeyState;
  418.  
  419.         bool returnKeyState = GetAsyncKeyState(VK_RETURN);
  420.  
  421.         if (returnKeyState && !lastReturnKeyState)
  422.         {
  423.             menuDifficulties[pointer]();
  424.         }
  425.  
  426.         backToMenu();
  427.  
  428.         lastReturnKeyState = returnKeyState;
  429.  
  430.         this_thread::sleep_for(chrono::milliseconds(200));
  431.     }
  432. }
  433.  
  434. void easyDifficulty()
  435. {
  436.     string levelOneEasy[rowsCount][colsCount] =
  437.     {
  438.         {  "1",  "2",  "3", "##",  "5",  "6",  "7" },
  439.         { "##", "##", "10", "##", "12", "##", "14" },
  440.         { "15", "16", "17", "18", "19", "20", "21" },
  441.         { "22", "##", "##", "##", "##", "##", "28" },
  442.         { "29", "30", "31", "32", "33", "34", "35" }
  443.     };
  444.  
  445.     this_thread::sleep_for(chrono::milliseconds(1));
  446. }
  447.  
  448. void normalDifficulty()
  449. {
  450.  
  451.     this_thread::sleep_for(chrono::milliseconds(1));
  452. }
  453.  
  454. void hardDifficulty()
  455. {
  456.  
  457.     this_thread::sleep_for(chrono::milliseconds(1));
  458. }
  459.  
  460. void gameStart()
  461. {
  462.     difficulty();
  463.  
  464.     this_thread::sleep_for(chrono::seconds(1));
  465. }
  466.  
  467. void customGame()
  468. {
  469.     system("cls");
  470.  
  471.     startPoint();
  472.  
  473.     endPoint();
  474.  
  475.     typeOfWalls();
  476.  
  477.     this_thread::sleep_for(chrono::seconds(1));
  478. }
  479.  
  480. void gameControls()
  481. {
  482.     system("cls");
  483.  
  484.     cout << "\n";
  485.  
  486.     cout << "  --------------CONTROLS---------------" << "\n";
  487.     cout << "  |                                   |" << "\n";
  488.     cout << "  |                                   |" << "\n";
  489.     cout << "  |   ^ --> Up Arrow to move up       |" << "\n";
  490.     cout << "  |   < --> Left Arrow to move left   |" << "\n";
  491.     cout << "  |   > --> Right Arrow to move right |" << "\n";
  492.     cout << "  |   v --> Down Arrow to move down   |" << "\n";
  493.     cout << "  |                                   |" << "\n";
  494.     cout << "  |   Enter  --> Enter                |" << "\n";
  495.     cout << "  |   Escape --> Back                 |" << "\n";
  496.     cout << "  |                                   |" << "\n";
  497.     cout << "  |                                   |" << "\n";
  498.     cout << "  -------------------------------------" << "\n";
  499.  
  500.     while (true)
  501.     {
  502.         backToMenu();
  503.     }
  504.  
  505.     this_thread::sleep_for(chrono::seconds(1));
  506. }
  507.  
  508. void gameCredits()
  509. {
  510.     system("cls");
  511.  
  512.     cout << "Thanks for playing!" << "\n";
  513.  
  514.     cout << "\n";
  515.  
  516.     cout << "Creator: Petar Bogdanov" << "\n";
  517.  
  518.     cout << "The people who helped me with this project: eng. Stoyan Filipov and eng. Monika Gencheva" << "\n";
  519.  
  520.     while (true)
  521.     {
  522.         backToMenu();
  523.     }
  524.  
  525.     this_thread::sleep_for(chrono::seconds(1));
  526. }
  527.  
  528. void exitProgram()
  529. {
  530.     exit(0);
  531. }
  532.  
  533. void backToMenu()
  534. {
  535.     if (GetAsyncKeyState(VK_ESCAPE))
  536.     {
  537.         main();
  538.     }
  539. }
  540.  
  541. void board(string input[rowsCount][colsCount], string output[rowsCount][colsCount])
  542. {
  543.     string singleLine = "";
  544.  
  545.     system("cls"); //making it only 1 board on the console, which updates itself after every input
  546.  
  547.     cout << endl;
  548.  
  549.     drawColums();
  550.  
  551.     for (int i = 0; i < rowsCount; i++)
  552.     {
  553.  
  554.         singleLine = "";
  555.  
  556.         for (int j = 0; j < colsCount; j++)
  557.         {
  558.             if (j == 0)
  559.             {
  560.                 singleLine += "   ";
  561.             }
  562.  
  563.             else if (j == 1)
  564.             {
  565.                 singleLine += "     |    ";
  566.             }
  567.  
  568.             else if (j < colsCount)
  569.             {
  570.                 singleLine += "    |    ";
  571.             }
  572.  
  573.             if
  574.                 (
  575.                     output[i][j] != "XX" && output[i][j] != "##"
  576.                     && output[i][j] != "SP" && output[i][j] != "EP"
  577.                     && stoi(output[i][j]) < 10
  578.                 )
  579.             {
  580.                 singleLine += " " + output[i][j];
  581.             }
  582.  
  583.             else
  584.             {
  585.                 singleLine += output[i][j];
  586.             }
  587.         }
  588.  
  589.         cout << singleLine << endl;
  590.  
  591.         if (i < (rowsCount - 1))
  592.         {
  593.  
  594.             cout << "__________|__________|__________|__________|__________|__________|__________" << endl;
  595.             cout << "          |          |          |          |          |          |          " << endl;
  596.         }
  597.  
  598.         drawColums();
  599.     }
  600. }
  601.  
  602. void drawColums()
  603. {
  604.  
  605.     //  cout << "          |          |          |          |          |          |    " << endl;
  606.  
  607.     string singleLine;
  608.  
  609.     singleLine = "";
  610.  
  611.     for (int j = 0; j < colsCount; j++)
  612.     {
  613.  
  614.         if (j == colsCount - 1)
  615.         {
  616.             singleLine += "    ";
  617.         }
  618.  
  619.         else
  620.         {
  621.             singleLine += "          |";
  622.         }
  623.     }
  624.  
  625.     cout << singleLine << endl;
  626.  
  627.     //  cout << "          |          |          |          |          |          |    " << endl;
  628.  
  629. }
  630.  
  631. void startPoint()
  632. {
  633.     cout << endl << endl;
  634.     cout << "Where do You want the start of the Labyrinth to be?" << "\n";
  635.     cout << "Number of the start: ";
  636.     cin >> startingPoint;
  637.  
  638.     /*
  639.     if (stoi(startingPoint) < 10)
  640.     {
  641.        startingPoint = "0" + startingPoint;
  642.     }
  643.     */
  644.  
  645.     setValueAtPosition(startingPoint, "SP");
  646.  
  647.     cout << "Your starting point is " << startingPoint << ". You need to enter the labyrinth from there.";
  648. }
  649.  
  650. void endPoint()
  651. {
  652.     cout << endl << endl;
  653.     cout << "Where do You want the end of the Labyrinth to be?" << "\n";
  654.     cout << "Number of the end: ";
  655.     cin >> endingPoint;
  656.  
  657.     /*
  658.     if (stoi(endingPoint) < 10)
  659.     {
  660.        endingPoint = "0" + endingPoint;
  661.     }
  662.     */
  663.  
  664.     setValueAtPosition(endingPoint, "EP");
  665.  
  666.     cout << "Your ending point is " << endingPoint << ". You need to exit the labyrinth from there." << "\n";
  667. }
  668.  
  669. void typeOfWalls()
  670. {
  671.     cout << endl << endl;
  672.     cout << "Do You want random generated walls or You want to placed them yourself?" << "\n";
  673.     cout << "If You want random generated walls type:" << "\n";
  674.     cout << "Random / random" << "\n";
  675.  
  676.     cout << endl;
  677.  
  678.     cout << "If You want to place them yourself type:" << "\n";
  679.     cout << "Myself / myself" << "\n" << "\n";
  680.  
  681.     cout << "Your answer is: ";
  682.  
  683.     string answer;
  684.     cin >> answer;
  685.  
  686.     for (int i = 0; i < answer.length(); i++)
  687.     {
  688.         answer[i] = tolower(answer[i]);
  689.     }
  690.  
  691.     if (answer == "random")
  692.     {
  693.         cout << endl;
  694.         cout << "Do You want random number of walls? If not you can place them yourself." << "\n";
  695.         cout << "If You want random number of walls type:" << "\n";
  696.         cout << "Random / random" << "\n";
  697.  
  698.         cout << endl;
  699.  
  700.         cout << "If You want to place them yourself type:" << "\n";
  701.         cout << "Myself / myself" << "\n" << "\n";
  702.  
  703.         cout << "Your answer is: ";
  704.  
  705.         string answer2;
  706.         cin >> answer2;
  707.  
  708.         for (int i = 0; i < answer2.length(); i++)
  709.         {
  710.             answer2[i] = tolower(answer2[i]);
  711.         }
  712.  
  713.         if (answer2 == "random")
  714.         {
  715.             generateWallsWithRandomNumberOfWalls();
  716.         }
  717.  
  718.         else if (answer2 == "myself")
  719.         {
  720.             generateWallsWithRandomSetWalls();
  721.         }
  722.     }
  723.  
  724.     else if (answer == "myself")
  725.     {
  726.         generateWalls();
  727.     }
  728. }
  729.  
  730. int typeNumberOfWalls()
  731. {
  732.     cout << endl << endl;
  733.  
  734.     cout << "How many walls do You want the Labyrinth to have?" << "\n";
  735.     cout << "Number of walls: ";
  736.  
  737.     cin >> numberOfWalls;
  738.  
  739.     return numberOfWalls;
  740. }
  741.  
  742. void generateWalls()
  743. {
  744.     typeNumberOfWalls();
  745.  
  746.     cout << "\n";
  747.  
  748.     for (int i = 0; i < numberOfWalls; i++)
  749.     {
  750.         cout << "Which number do You want it to be a wall?" << "\n";
  751.         cout << "Number: ";
  752.  
  753.         int wall = isDigitValid();
  754.  
  755.         cout << "\n";
  756.  
  757.         /*
  758.         if (stoi(wall) < 10)
  759.         {
  760.             wall = "0" + wall;
  761.         }
  762.         */
  763.  
  764.         if (wall != stoi(startingPoint) && wall != stoi(endingPoint))
  765.         {
  766.             setValueAtPosition(to_string(wall), "##");
  767.         }
  768.  
  769.         else
  770.         {
  771.             cout << "You can't place a wall here!" << "\n";
  772.  
  773.             i--;
  774.  
  775.             system("pause > 0");
  776.         }
  777.     }
  778. }
  779.  
  780. void generateWallsWithRandomNumberOfWalls()
  781. {
  782.     srand(time(NULL));
  783.     int min = 8;
  784.     int max = 12;
  785.     int range = max - min + 1;
  786.     int numberOfWalls = rand() % range + min;
  787.  
  788.     for (int i = 0; i < numberOfWalls; i++)
  789.     {
  790.         int randomIndex = randomShuffle();
  791.  
  792.         if (randomIndex != (stoi(startingPoint) - 1) && randomIndex != (stoi(endingPoint) - 1))
  793.         {
  794.             to_string(randomIndex);
  795.             setValueAtPosition(wallsArray[randomIndex], "##");
  796.         }
  797.  
  798.         else
  799.         {
  800.             i--;
  801.         }
  802.     }
  803. }
  804.  
  805. void generateWallsWithRandomSetWalls()
  806. {
  807.     typeNumberOfWalls();
  808.  
  809.     for (int i = 0; i < numberOfWalls; i++)
  810.     {
  811.         int randomIndex = randomShuffle();
  812.  
  813.         if (randomIndex != (stoi(startingPoint) - 1) && randomIndex != (stoi(endingPoint) - 1))
  814.         {
  815.             to_string(randomIndex);
  816.             setValueAtPosition(wallsArray[randomIndex], "##");
  817.         }
  818.  
  819.         else
  820.         {
  821.             i--;
  822.         }
  823.     }
  824. }
  825.  
  826. void wallReset()
  827. {
  828.     for (int i = 0; i < rowsCount; i++)
  829.     {
  830.         for (int j = 0; j < colsCount; j++)
  831.         {
  832.             if (boardSquareCurrentState[i][j] == "XX")
  833.             {
  834.                 boardSquareCurrentState[i][j] = boardSquareInitialState[i][j];
  835.             }
  836.         }
  837.     }
  838. }
  839.  
  840. int randomShuffle()
  841. {
  842.     int min = 2;
  843.     int max = 34;
  844.     int range = max - min + 1;
  845.     return rand() % range + min;
  846. }
  847.  
  848. int isInputValid(string currentInput, string lastInputLocal)
  849. {
  850.     int foundRowIndex = 0;
  851.     int foundColIndex = 0;
  852.  
  853.     if (lastInputLocal == "" && currentInput != startingPoint)
  854.     {
  855.         cout << endl << endl;
  856.  
  857.         cout << "You need to start from position " << startingPoint << "!" << endl;
  858.  
  859.         system("pause > 0");
  860.  
  861.         return -1;
  862.     }
  863.  
  864.     else if (lastInputLocal == "" && currentInput == startingPoint)
  865.     {
  866.         return 1;
  867.     }
  868.  
  869.     for (int i = 0; i < rowsCount; i++)
  870.     {
  871.  
  872.         for (int j = 0; j < colsCount; j++)
  873.         {
  874.  
  875.             if (boardSquareInitialState[i][j] == currentInput)
  876.             {
  877.                 foundRowIndex = i;
  878.                 foundColIndex = j;
  879.             }
  880.         }
  881.     }
  882.  
  883.     if (boardSquareInitialState[foundRowIndex][foundColIndex] == "##")
  884.     {
  885.  
  886.         cout << endl << endl;
  887.         cout << "Invalid move! That's a wall!" << "\n";
  888.  
  889.         system("pause > 0");
  890.  
  891.         return -1;
  892.     }
  893.  
  894.     if (boardSquareCurrentState[foundRowIndex][foundColIndex] == "XX")
  895.     {
  896.  
  897.         cout << endl << endl;
  898.         cout << "Invalid move! You have been here! Don't repeat!" << "\n";
  899.  
  900.         system("pause > 0");
  901.  
  902.         return 1;
  903.     }
  904.  
  905.     if ((foundRowIndex - 1) >= 0)
  906.     {
  907.  
  908.         //NOTE: I have a neighbor above me - last row wasn't outside
  909.         if (boardSquareInitialState[foundRowIndex - 1][foundColIndex] == lastInputLocal)
  910.         {
  911.             return 1;
  912.         }
  913.     }
  914.  
  915.     if ((foundRowIndex + 1) <= rowsCount)
  916.     {
  917.  
  918.         //NOTE: I have a neighbor under me - next one isn't outside of the board
  919.         if (boardSquareInitialState[foundRowIndex + 1][foundColIndex] == lastInputLocal)
  920.         {
  921.             return 1;
  922.         }
  923.     }
  924.  
  925.     if ((foundColIndex - 1) >= 0)
  926.     {
  927.  
  928.         //NOTE: I have a neighbor on my left - last column wasn't outside
  929.         if (boardSquareInitialState[foundRowIndex][foundColIndex - 1] == lastInputLocal)
  930.         {
  931.             return 1;
  932.         }
  933.     }
  934.  
  935.     if ((foundColIndex + 1) <= colsCount)
  936.     {
  937.  
  938.         //NOTE: I have a neighbor on my left - next column isn't outside
  939.         if (boardSquareInitialState[foundRowIndex][foundColIndex + 1] == lastInputLocal)
  940.         {
  941.             return 1;
  942.         }
  943.     }
  944.  
  945.     cout << "Invalid move! You can choose only numbers, that are near each other!" << endl;
  946.  
  947.     system("pause > 0");
  948.  
  949.     return -1;
  950. }
  951.  
  952. int isDigitValid()
  953. {
  954.     string wall;
  955.     cin >> wall;
  956.  
  957.     if (isdigit(wall[0]))
  958.     {
  959.         return stoi(wall);
  960.     }
  961.  
  962.     else
  963.     {
  964.         return isDigitValid();
  965.     }
  966. }
  967.  
  968. void ShowConsoleCursor(bool showFlag)
  969. {
  970.     HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
  971.  
  972.     CONSOLE_CURSOR_INFO     cursorInfo;
  973.  
  974.     GetConsoleCursorInfo(out, &cursorInfo);
  975.     cursorInfo.bVisible = showFlag; // set the cursor visibility
  976.     SetConsoleCursorInfo(out, &cursorInfo);
  977. }
  978.  
  979. void gotoxy(int eex, int eey)
  980. {
  981.     COORD coord;
  982.     coord.X = eex;
  983.     coord.Y = eey;
  984.     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
  985. }
  986.  
  987. void setValueAtPosition(string input, string symbols)
  988. {
  989.     for (int z = 0; z < rowsCount; z++)
  990.     {
  991.         for (int j = 0; j < colsCount; j++)
  992.         {
  993.             if (boardSquareInitialState[z][j] == input)
  994.             {
  995.                 boardSquareCurrentState[z][j] = symbols;
  996.             }
  997.         }
  998.     }
  999. }
  1000.  
  1001. /*
  1002.  
  1003.     system("cls");
  1004.     cout << endl << endl;
  1005.  
  1006.     cout << "                     Labyrinth with 3 possible way outs!" << endl << endl;
  1007.     cout << endl;
  1008.     cout << "  Start" << "\n";
  1009.     cout << "          |          |          |          |          |          |    " << endl;
  1010.     cout << "   " << square[1] << "     |    " << square[2] << "    |    " << square[3] << "    |    " << "##" << "    |    " << square[5] << "    |    " << square[6] << "    |    " << square[7] << endl;
  1011.  
  1012.     cout << "__________|__________|__________|__________|__________|__________|__________" << endl;
  1013.     cout << "          |          |          |          |          |          |     " << endl;
  1014.  
  1015.     cout << "  " << " ##" << "     |   " << " ##" << "    |    " << square[10] << "    |    " << "##" << "    |    " << square[12] << "    |    " << "##" << "    |    " << square[14] << endl;
  1016.  
  1017.     cout << "__________|__________|__________|__________|__________|__________|__________" << endl;
  1018.     cout << "          |          |          |          |          |          |     " << endl;
  1019.  
  1020.     cout << "   " << square[15] << "     |    " << square[16] << "    |    " << square[17] << "    |    " << square[18] << "    |    " << square[19] << "    |    " << square[20] << "    |    " << square[21] << endl;
  1021.  
  1022.     cout << "__________|__________|__________|__________|__________|__________|__________" << endl;
  1023.     cout << "          |          |          |          |          |          |     " << endl;
  1024.  
  1025.     cout << "   " << square[22] << "     |   " << " ##" << "    |    " << "##" << "    |    " << "##" << "    |    " << "##" << "    |    " << "##" << "    |    " << square[28] << endl;
  1026.  
  1027.     cout << "__________|__________|__________|__________|__________|__________|__________" << endl;
  1028.     cout << "          |          |          |          |          |          |     " << endl;
  1029.  
  1030.     cout << "   " << square[29] << "     |    " << square[30] << "    |    " << square[31] << "    |    " << square[32] << "    |    " << square[33] << "    |    " << square[34] << "    |    " << square[35] << "     End" << endl;
  1031.  
  1032.     cout << "          |          |          |          |          |          |    " << endl;
  1033.  
  1034. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement