Advertisement
TheLegend12

Untitled

Oct 9th, 2023
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.91 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. using namespace std;
  5.  
  6. const int ROWS = 6;
  7. const int COLS = 7;
  8.  
  9. int findMin(int a, int b) {
  10.     return (a < b) ? a : b;
  11. }
  12.  
  13. void displayBoard(char boardArray[][COLS]) {
  14.     cout << "--------" << endl;
  15.     for (int i = 0; i < ROWS; ++i) {
  16.         cout << "|";
  17.         for (int j = 0; j < COLS; ++j) {
  18.             if (boardArray[i][j] == '.') {
  19.                 cout << ".";
  20.             } else if (boardArray[i][j] == '=') {
  21.                 cout << "=";
  22.             } else {
  23.                 cout << boardArray[i][j];
  24.             }
  25.         }
  26.         cout << "|" << endl;
  27.     }
  28.     cout << "--------" << endl;
  29. }
  30.  
  31. void shiftCar(char boardArray[][COLS], int row, int col, char direction) {
  32.     while ((direction == 'L' && col - 1 >= 0 && boardArray[row][col - 1] == '.') ||
  33.            (direction == 'R' && col + 1 < COLS && boardArray[row][col + 1] == '.') ||
  34.            (direction == 'U' && row - 1 >= 0 && boardArray[row - 1][col] == '.') ||
  35.            (direction == 'D' && row + 1 < ROWS && boardArray[row + 1][col] == '.')) {
  36.         if (direction == 'L') col--;
  37.         else if (direction == 'R') col++;
  38.         else if (direction == 'U') row--;
  39.         else if (direction == 'D') row--;
  40.         boardArray[row][col] = 'X';  // Symbolize a temporarily shifted car
  41.         boardArray[row][col - 1] = '.';
  42.     }
  43. }
  44.  
  45. void moveLeft(char boardArray[][COLS], char carToMove, int numSpaces) {
  46.     for (int i = 0; i < ROWS; ++i) {
  47.         for (int j = 1; j < COLS; ++j) {
  48.             if (boardArray[i][j] == carToMove) {
  49.                 int maxSpaces = findMin(numSpaces, j);
  50.                 for (int k = 0; k < maxSpaces; ++k) {
  51.                     if (boardArray[i][j - k - 1] == '.') {
  52.                         boardArray[i][j - k] = '.';
  53.                         boardArray[i][j - k - 1] = carToMove;
  54.                     } else {
  55.                         // Shift the blocking car
  56.                         shiftCar(boardArray, i, j - k - 1, 'L');
  57.                         boardArray[i][j - k] = '.';
  58.                         boardArray[i][j - k - 1] = carToMove;
  59.                     }
  60.                 }
  61.             }
  62.         }
  63.     }
  64. }
  65.  
  66. void moveRight(char boardArray[][COLS], char carToMove, int numSpaces) {
  67.     for (int i = 0; i < ROWS; ++i) {
  68.         for (int j = COLS - 2; j >= 0; --j) {
  69.             if (boardArray[i][j] == carToMove) {
  70.                 int maxSpaces = findMin(numSpaces, COLS - j - 1);
  71.                 for (int k = 0; k < maxSpaces; ++k) {
  72.                     if (boardArray[i][j + k + 1] == '.') {
  73.                         boardArray[i][j + k] = '.';
  74.                         boardArray[i][j + k + 1] = carToMove;
  75.                     } else {
  76.                         // Shift the blocking car
  77.                         shiftCar(boardArray, i, j + k + 1, 'R');
  78.                         boardArray[i][j + k] = '.';
  79.                         boardArray[i][j + k + 1] = carToMove;
  80.                     }
  81.                 }
  82.             }
  83.         }
  84.     }
  85. }
  86.  
  87. void moveUp(char boardArray[][COLS], char carToMove, int numSpaces) {
  88.     for (int j = 0; j < COLS; ++j) {
  89.         for (int i = 1; i < ROWS; ++i) {
  90.             if (boardArray[i][j] == carToMove) {
  91.                 int maxSpaces = findMin(numSpaces, i);
  92.                 for (int k = 0; k < maxSpaces; ++k) {
  93.                     if (boardArray[i - k - 1][j] == '.') {
  94.                         boardArray[i - k][j] = '.';
  95.                         boardArray[i - k - 1][j] = carToMove;
  96.                     } else {
  97.                         // Shift the blocking car
  98.                         shiftCar(boardArray, i - k - 1, j, 'U');
  99.                         boardArray[i - k][j] = '.';
  100.                         boardArray[i - k - 1][j] = carToMove;
  101.                     }
  102.                 }
  103.             }
  104.         }
  105.     }
  106. }
  107.  
  108. void moveDown(char boardArray[][COLS], char carToMove, int numSpaces) {
  109.     if (){
  110.     for (int j = 0; j < COLS; ++j) {
  111.         for (int i = ROWS - 2; i >= 0; --i) {
  112.             if (boardArray[i][j] == carToMove) {
  113.                 int maxSpaces = findMin(numSpaces, ROWS - i - 1);
  114.                 for (int k = 0; k < maxSpaces; ++k) {
  115.                     if (boardArray[i + k + 1][j] == '.') {
  116.                         boardArray[i + k][j] = '.';
  117.                         boardArray[i + k + 1][j] = carToMove;
  118.                     } else {
  119.                         // Shift the blocking car
  120.                         shiftCar(boardArray, i + k + 1, j, 'D');
  121.                         boardArray[i + k][j] = '.';
  122.                         boardArray[i + k + 1][j] = carToMove;
  123.  
  124.                     }
  125.                 }
  126.             }
  127.         }
  128.     }
  129.  
  130.     }
  131.    
  132. }
  133.  
  134. void moveCar(char boardArray[][COLS], char carToMove, int numSpaces, char moveDirection) {
  135.     if (moveDirection == 'L') {
  136.         moveLeft(boardArray, carToMove, numSpaces);
  137.     } else if (moveDirection == 'R') {
  138.         moveRight(boardArray, carToMove, numSpaces);
  139.     } else if (moveDirection == 'U') {
  140.         moveUp(boardArray, carToMove, numSpaces);
  141.     } else if (moveDirection == 'D') {
  142.         moveDown(boardArray, carToMove, numSpaces);
  143.     } else {
  144.         cout << "Invalid move direction." << endl;
  145.     }
  146. }
  147.  
  148. void movingCarsOnBoard(char boardArray[][COLS]) {
  149.     cout << "Enter next move (or Q to quit): ";
  150.     char carToMove;
  151.     int numSpaces;
  152.     char moveDirection;
  153.     cin >> carToMove >> numSpaces >> moveDirection;
  154.  
  155.     if (numSpaces <= 0) {
  156.         cout << "Invalid number of spaces to move." << endl;
  157.         return;
  158.     }
  159.  
  160.     // Move the specified car according to the specified direction
  161.     moveCar(boardArray, carToMove, numSpaces, moveDirection);
  162.  
  163.     // Display the board after the move
  164.     displayBoard(boardArray);
  165.  
  166.     // Check for win
  167.     for (int i = 0; i < ROWS; ++i) {
  168.         for (int j = 0; j < COLS; ++j) {
  169.             if (boardArray[i][j] == '=') {
  170.                 cout << "Congratulations! You won!" << endl;
  171.                 return;
  172.             }
  173.         }
  174.     }
  175. }
  176.  
  177. void readBoard(const string& fileName, char boardArray[][COLS]) {
  178.     fstream newfile;
  179.     newfile.open(fileName.c_str(), ios::in);
  180.  
  181.     if (!newfile.is_open()) {
  182.         cout << "Error opening file." << endl;
  183.         return;
  184.     }
  185.  
  186.     string line;
  187.     int row = 0;
  188.  
  189.     // Read the board layout from the file
  190.     while (getline(newfile, line) && row < ROWS) {
  191.         // Ensure the line length is at most COLS characters
  192.         line.resize(COLS, ' ');
  193.  
  194.         for (int j = 0; j < COLS; ++j) {
  195.             boardArray[row][j] = line[j];
  196.         }
  197.  
  198.         row++;
  199.     }
  200.  
  201.     newfile.close();
  202. }
  203.  
  204. int main() {
  205.     string fileName;
  206.  
  207.     cout << "Enter the file name: ";
  208.     getline(cin, fileName);
  209.  
  210.     char boardArray[ROWS][COLS];
  211.  
  212.     readBoard(fileName, boardArray);
  213.  
  214.     displayBoard(boardArray);
  215.  
  216.     while (true) {
  217.         movingCarsOnBoard(boardArray);
  218.     }
  219.  
  220.     return 0;
  221. }
  222.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement