Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Can someone explain what is happening in the C++ bolded/italicized code. #includ

ID: 3721464 • Letter: C

Question

Can someone explain what is happening in the C++ bolded/italicized code.

#include <fstream>

#include <iomanip>

#include <iostream>

using namespace std;

const int ROWS = 8;

const int COLS = 8;

//Character map for user moves

const char UP = 'w';

const char LEFT = 'a';

const char DOWN = 's';

const char RIGHT = 'd';

//Character map for tile types

const char START = 'S';

const char FINISH = 'F';

const char SPACE = ' ';

const char WARP_LEFT = '<';

const char WARP_RIGHT = '>';

const char WARP_UP = '^';

const char WARP_DOWN = 'v';

const char BOX = 'X';

const char CHOICE = 'C';

const char TRACK = 'o';

//Character map for tile types

const char PLAYER = 'A';

//-----------------------------------------------------------------------------------

// Name: init

// Purpose: This function opens a file, reads the dimensions of the map, and loads a map into the 2D array

//           It prints an error message to cerr if the file cannot be opened.

//           Any '.' in the map file are converted to spaces in the array.

// Parameters: filename, const string, the file holding the map

//              map, 2D array of characters, the map filled in from the file

//              path, 2D array of characters, sets the path to the start location

//              playerRow, int, the player row location (updated by fn)

//              playerCol, int, the player col location (updated by fn)

// Returns: void

//-----------------------------------------------------------------------------------

void init(const string filename, char map[ROWS][COLS], char path[ROWS][COLS], int &playerRow, int &playerCol)

{

    //Open the file

    ifstream din(filename.c_str());

    if (!din)

       cerr << "Could not open " << filename << " .";

    else

    {

       //Set the player location

       playerRow = ROWS - 1;

       playerCol = 0;

       //Iterate over the rows and the columns

       for(int row = 0; row < ROWS; row++)

           for(int col = 0; col < COLS; col++)

           {

               //Read the data into the map

               din >> map[row][col];

               if (map[row][col] == '.')

                  map[row][col] = SPACE; //convert from the . in the file to SPACE in the array

               //Init the path with the START and FINISH locations

               //Fill the rest of the path with spaces

               if (map[row][col] == START || map[row][col] == FINISH)

                   path[row][col] = map[row][col];

               else

                   path[row][col] = SPACE;

           }

       //Close the file

       din.close();

   }

}

//-----------------------------------------------------------------------------------

// Name: print

// Purpose: This function prints the map to the screen

// Parameters: map, const 2D array of characters, stores the map

//              path, const 2D array of characters, stores the player path

//              playerRow, const int, the player row location

//              playerCol, const int, the player col location

// Returns: void

//-----------------------------------------------------------------------------------

void print(const char map[ROWS][COLS], const char path[ROWS][COLS], const int playerRow, const int playerCol)

{

cout << "Here is the map and path. The legend is: "

     << "   S - start, F - finish "

     << "   < - warp left, > - warp right, ^ - warp up, v - warp down "

     << "   X - box, C - choice "

     << "   A - your location, o - your track ";

    // print the map top border

    cout << " MAP: PATH: -";

    for(int col = 0; col < COLS; col++)

        cout << "----";

    cout << " -";

    // print the path top border

    for(int col = 0; col < COLS; col++)

        cout << "----";

    cout << " ";

    // print the map contents and the path

    // replace any . stored in the array with spaces on screen to look nicer

    for(int row= 0; row < ROWS; row++)

    {

        // print the map

        cout << "|";

        for(int col = 0; col < COLS; col++)

        {

            if (playerRow == row && playerCol == col)

                cout << setw(2) << PLAYER << setw(2) << " |";

            else

                cout << setw(2) << map[row][col] << setw(2) << " |";

        }

        // print the path

        cout << " ";

        cout << "|";

        for(int col = 0; col < COLS; col++)

        {

            if (playerRow == row && playerCol == col)

                cout << setw(2) << PLAYER << setw(2) << " |";

            else

                cout << setw(2) << path[row][col] << setw(2) << " |";

        }

        // print the map bottom border

        cout << " -";

        for(int col = 0; col < COLS; col++)

            cout << "----";

        // print the path bottom border

        cout << " -";

        for(int col = 0; col < COLS; col++)

            cout << "----";

        cout << " ";

    }

    cout << " ";

}

//-----------------------------------------------------------------------------------

// Name: gameOver

// Purpose: This function checks to see if the game is over, i.e., the player

//           has reached the FINISH tile.

// Parameters: ???

// Returns: true if the player has reached the FINISH tile; false otherwise

//-----------------------------------------------------------------------------------

// ??? gameOver(???)

bool gameOver(char map[ROWS][COLS], int r, int c)

{

   if (map[r][c] == FINISH)

   return true;

   else

   return false;

}

//-----------------------------------------------------------------------------------

// Name: getMove

// Purpose: This function gets the next move direction from the user.

//           It keeps asking until a valid direction is entered

// Parameters: ????

// Returns: move, char, the valid character entered

//-----------------------------------------------------------------------------------

// ??? getMove(???)

char getMove()

{

   char c;

   cout << "Enter a move(w,a,s,d) or 'q' to save: ";

   cin >> c;

   while (c != UP && c != LEFT && c != DOWN && c != RIGHT)

   {

      cout << "Enter a move (w,a,s,d) or 'q' to save: ";

      cin >> c;

   }

   return c;

}

void getnewRowCol(char map[ROWS][COLS], char path[ROWS][COLS], int r, int c, char move, int &newRow, int &newCol, bool update)

{

   if (move == UP)

   {

      newRow = r-1;

      newCol = c;

   }

   else if (move == LEFT)

   {

      newRow = r;

      newCol = c-1;

   }

   else if (move == DOWN)

   {

      newRow = r + 1;

      newCol = c;

   }

   else

   {

      newRow = r;

      newCol = c + 1;

   }

   if (update)path[newRow][newCol] = TRACK;

}

//-----------------------------------------------------------------------------------

// Name: legal

// Purpose: This function checks whether or not the user can make the move requested

//           by the user. Illegal moves are those that would move the user off the map

//           or land the user in a box.

// Parameters: ???

// Returns: true if the user can make the move, false otherwise

//-----------------------------------------------------------------------------------

// ??? legal(???)

bool legal(char map[ROWS][COLS], char path [ROWS][COLS], int r, int c, char move)

{

   int newRow, newCol;

   getnewRowCol(map, path, r, c, move, newRow, newCol,false);

   if (newRow < 0 || newCol < 0 || newRow >= ROWS || newCol >= COLS || map[newRow][newCol] == BOX)

   return false;

   else

   return true;

}

//-----------------------------------------------------------------------------------

// Name: makeMove

// Purpose: This makes the move selected by the user.

//           It assumes that the move has already been checked and is legal.

//           It updates the player' location and adds that location to the PATH.

//           It then examines the tile the user just moved to to see if it causes any

//           side effects.

//           If the new tile is a space tile, keep going.

//             (i.e., warping to another location); if so, it then

//           updates the player location again

// Parameters: ???

// Returns: void

//-----------------------------------------------------------------------------------

// ??? makeMove(???)

void makeMove(char map[ROWS][COLS], char path[ROWS][COLS], int &r, int &c, char &move)

{

   getnewRowCol (map, path, r, c, move, r, c, true);

   while (map[r][c] != CHOICE && map[r][c] != FINISH)

   {

      if (map[r][c] == WARP_UP)

      {

         if (legal(map, path, r, c, UP))

         {

            move = UP;

            getnewRowCol(map, path, r, c, move, r, c, true);

         }

      }

      else if (map[r][c] == WARP_DOWN)

      {

         if (legal(map, path, r, c, DOWN))

         {

            move = DOWN;

            getnewRowCol(map, path, r, c, move, r, c, true);

         }

      }

      else if (map[r][c] == WARP_RIGHT)

      {

         if (legal(map, path, r, c, RIGHT))

         {

            move = RIGHT;

            getnewRowCol(map, path, r, c, move, r, c, true);

         }

      }

      else if (map[r][c] == WARP_LEFT)

      {

         if (legal(map, path, r, c, LEFT))

         {

            move = LEFT;

            getnewRowCol(map, path, r, c, move, r, c, true);

         }

      }

      else if (map[r][c] == SPACE)

      {

         if (legal(map, path, r, c, move))

         {

            getnewRowCol(map, path, r, c, move, r, c, true);

         }

      }

   }

}

//-----------------------------------------------------------------------------------

// Name: load PAIRS ONLY

// Purpose: This loads a saved game from file(s).

//           It writes an error message to cerr if the file cannot be opened.

//           It opens the file and sets playerRow and playerCol.

//           It also fills in the map and the path matrices from the file.

//           Any '.' in the map or path files are converted to spaces in the array.

// Parameters: ???

// Returns: void

//-----------------------------------------------------------------------------------

// ??? load(???)

void load()

{

}

//-----------------------------------------------------------------------------------

// Name: save PAIRS ONLY

// Purpose: This saves a game to a file.

//           It opens the file and writes playerRow and playerCol.

//           It prints an error message to cerr if the file cannot be opened.

//           It also writes the map and the path matrices to the file.

//           Any spaces in the map or path arrays are converted to '.' in the file so they are visible.

// Parameters: ???

// Returns: void

//-----------------------------------------------------------------------------------

// ??? save(???)

void save()

{

}

int main()

{

    //Declare two 2D char arrays for the map and path

    //Each array should have ROWS rows and COLS cols

    char map[ROWS][COLS];

    char path[ROWS][COLS];

    //Declare two ints to keep track of the player location, their row and col in the map

    int r, c;

    //Ask the user whether or not they want a new game or to load a game (PAIRS)

    //Initialize the map and path and player location for a new game from file "map.txt"

    //or set them based on a save file

    const string filename = "map.txt";

       init(filename, map, path, r, c);

    //While we have not won the game by reaching the top right corner

    //do

    while (!gameOver(map, r, c))

    {

        //Print map and path

        print(map, path, r, c);

        //Get a valid type of move from the player

        char move = getMove();

        //If the user wants to quit, save the game and set done to true

        if (move == 'q')

        {

           save();

           break;

        }

        //Check the move to see if it is legal

        bool check = legal(map, path, r, c, move);

        //If the move is legal, make it

           //Check to see if the user has won after the move

        if (check)

        {

           makeMove(map, path, r, c, move);

        }

    }

    //while(the user has not won and the user has not quit

    //If the player won the game, print a congratulatory message

   cout << " ------------------------------------------- " << endl;

   cout << " CONGRATULATIONS! You found the Silph Scope. "<<endl;

   cout << " ------------------------------------------- " << endl;

   print(map, path, r, c);

    return 0;

}

Explanation / Answer

Hi, I explained your bolded text in comment itself hope you understand. If any part of code you will not then free to ask in comment. Thanks

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote