Advertisement
PIBogdanov

The Labyrinth

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