CS Caverun

Overview

Your task is to implement the CS Caverun game.

CS Caverun is a simplification of game mechanics explored by the 1980s 8-bit video game Boulder Dash. The classic 1984 version can be played here (all trademarks are the property of their respective owners).

In this turn-based re-imagination: the player tunnels through dirt to collect gems, all while avoiding falling boulders in an attempt to reach an unlocked exit with the most points. But beware! For those of you brave enough to venture into the deep: shadow and fire awaits!

Getting Started

  1. Create a new folder for your assignment:
  mkdir ass1
  cd ass1
  1. Fetch the starter code using the command below.
  1511 fetch-activity cs_caverun

You should now have a file named cs_caverun.c in your ass1 directory.

  1. Check that everything works by running the autotest:
  1511 autotest cs_caverun

If you want to stop running the autotest before it finishes, press [Ctrl-C].

Program Structure

This is a summary of the program structure. It's included as an introduction to aid your overall understanding of the assignment. Detailed instructions will be included in later sections of the specification.

The program consists of two phases: a Setup Phase, and a Gameplay Phase.

Two Phase: Setup and Gameplay

Setup Phase

When the program starts, the Setup Phase begins, and a new game is created:

  • An empty game board is initialised.
  • The player's starting position is set.
  • Features (walls, gems, boulders, exits, lava) are added to the board.

Gameplay Phase

When the Setup Phase is complete, the Gameplay Phase begins. In this phase, the player:

  • Tunnels through dirt to clear a path through the cave.
  • Collects gems to unlock exits.
  • Dodges falling boulders and spreading lava.
  • Escapes with as many points as possible!

The Gameplay Phase is organised as a series of rounds. Each round begins with a Player Turn, followed by a Boulder Turn, and then a Lava Turn. Understanding this sequence will help you interpret the assignment specification and guide how your program should behave.

The Turns: Player, Boulder, and Lava

Reference Implementation

To help you understand the game, we've written a complete reference implementation which you can run in any CSE terminal with the command 1511 cs_caverun. It implements every stage of the assignment. You can use this to test how your program should behave.

Try the following input in the reference implementation:

1511 cs_caverun
4 4
w 6 3
g 5 5
e 7 5
s
w
a
s
s
s
d
d
s
s

These inputs will:

  • Spawn the player at board position [4][4].
  • Add a wall at [6][3], a gem at [5][5], and an exit at [7][5].
  • Start the game.
  • Move the player around the board.

You don't need to fully understand these inputs yet; they're only provided as a preview.

Starter Code and Data Structures

Starter code has been provided to help you get up and running. It contains a range of useful constants, structs, enums, and functions.

If you haven't done so already, test the 1511 cs_caverun reference solution, then open the provided cs_caverun.c and follow along with this introduction.

The main() Function

A sample main() function has been provided to get you started.

int main(void) {
    printf("Welcome to CS Caverun!\n\n");

    struct tile board[ROWS][COLS];
    initialise_board(board);

    print_board(board, INVALID_ROW, INVALID_COL, INITIAL_LIVES);

    return 0;
}

Printing a Welcome Message

The first statement prints a welcome message followed by a blank line:

printf("Welcome to CS Caverun!\n\n");

Declaring the board Array

The next statement declares the game board.

struct tile board[ROWS][COLS];

This means that board is a two-dimensional ROWS-by-COLS array, where each element is a struct tile.

struct tile {
    enum entity entity;
};

Each struct tile currently contains one member, an enum entity. This allows each element of the board array to store a game feature (e.g. a wall, gem, or boulder).

enum entity {
    EMPTY,
    DIRT,
    WALL,
    BOULDER,
    GEM,
    EXIT_LOCKED,
    EXIT_UNLOCKED,
    HIDDEN,
    LAVA
};

Each entity corresponds to a feature and a symbol that appears when the board is printed to the terminal:

 Entity Feature Symbol
EMPTY Empty    
DIRT Dirt  . 
WALL Wall |||
BOULDER Boulder (o)
GEM Gem *^*
EXIT_LOCKED Locked Exit [X]
EXIT_UNLOCKED Unlocked Exit [ ]
LAVA Lava ^^^
HIDDEN Hidden  X 

Using the board Array

We can use row and column indices to access board elements.

For example:

  • board[2][3] accesses the struct tile at row 2 and column 3.
  • board[2][3].entity accesses the enum entity of this struct tile.

Similarly:

  • board[8][1] accesses the struct tile at row 8 and column 1.
  • board[8][1].entity accesses the enum entity of this struct tile.

Figure 1 demonstrates how row and column indices can be used to access elements on the game board.

Tiles C and D are not shadowed

Figure 1. Accessing entities on the board.

Initialising the board Array

At this point, we have a board array, but it hasn't been initialised with any values. The next statement passes the newly-declared board array to the provided initialise_board() function. This gives every tile entity an initial value of DIRT:

initialise_board(board);

Printing the Game

Before exiting, main() prints the board in the terminal:

Welcome to CS Caverun!

+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

It does this with the provided print_board() function.

print_board(board, INVALID_ROW, INVALID_COL, INITIAL_LIVES);

The print_board() function takes the following arguments:

  1. The board array.
  2. The row position of the player. Since the player has not yet been placed on the board, we use the #defined constant INVALID_ROW.
  3. The column position of the player. Since the player has not yet been placed on the board, we use the #defined constant INVALID_COL.
  4. The number of lives remaining. Since the game has not yet started, we use the #defined INITIAL_LIVES.

You will need to know how to use print_board() with different values. For example:

  • print_board(board, 2, 9, 3) displays the board with the player at the row 2, column 9 with 3 lives remaining.
  • print_board(board, 0, 5, 1) displays the board with the player at the row 0, column 5 with 1 life remaining.

print_board() checks the enum entity of each struct tile to determine which feature to print. You don't need to understand how it works before starting the assignment.

Other Provided Functions

There are three more provided functions:

  • print_board_line() is a helper function called by print_board(). You will not need to use it in your code.
  • print_board_header() is a helper function called by print_board(). You will not need to use it in your code.
  • print_map_statistics() is a helper function provided to help you complete Stage 2.4.

FAQ

Q: Can I edit the provided code?

Yes! Feel free to modify/replace/discard any of the provided:

  • #define constants,
  • enums,
  • structs, and
  • functions.

For example: you may wish to add fields to the provided struct tile definition.

You are also encouraged to create your own constants, enums, structs, and helper functions.

Q: Can I use pointers?

Yes! You can use pointers. Although, they're not required. It's possible to complete every stage of the assignment without using pointers.

Q: Can I use X other C feature?

For everything not taught in the course, check the Style Guide:

  • If the guide says "avoid", it may incur a style mark penalty if not used correctly.
  • If the guide says "illegal" or "do not use", it will result in a style mark penalty (see the Style Marking Rubric).

These rules exist to ensure that everyone develops the required foundational knowledge and to maintain a level playing field for all students.

Stages

The assignment has been divided into incremental stages.

Stage 1: Setup Phase

  • Stage 1.1 - Spawn Player.
  • Stage 1.2 - Validate Player Spawn.
  • Stage 1.3 - Add Features (Boulders, Walls, Gems).
  • Stage 1.4 - Validate Feature Spawn.
  • Stage 1.5 - Add Multiple Walls.

Stage 2: Gameplay Phase (Player Turn)

  • Stage 2.1 - Player Movement.
  • Stage 2.2 - Validate Player Movement.
  • Stage 2.3 - Collect Gems & Print The Score.
  • Stage 2.4 - Print Map Statistics.
  • Stage 2.5 - Winning The Game.

Stage 3: Gameplay Phase (Player Turn, Boulder Turn + Extra Mechanics)

  • Stage 3.1 - Player Dash (aka Double Movement).
  • Stage 3.2 - Boulder Movement.
  • Stage 3.3 - Losing The Game.
  • Stage 3.4 - Illumination.
  • Stage 3.5 - Gravity Shift.

Stage 4: Gameplay Phase (Lava Turn + Extra Mechanics)

  • Stage 4.1 - The Floor Is Lava.
  • Stage 4.2 - Shadows In The Deep.

Extension (not for marks)

  • SplashKit - Create and Share a Graphical User Interface.

Your Tasks

This assignment consists of four stages. Each stage builds on the work of the previous stage, and each stage has a higher complexity than its predecessor. You should complete the stages in order.

A video explanation to help you get started with the assignment can here found here:

Stage 1

In Stage 1, you will implement the Setup Phase of CS Caverun. This milestone has been divided into five substages:

  • Stage 1.1 - Spawn Player.
  • Stage 1.2 - Validate Player Spawn.
  • Stage 1.3 - Add Features (Boulders, Walls, Gems).
  • Stage 1.4 - Validate Feature Spawn.
  • Stage 1.5 - Add Multiple Walls.

By the end of this stage the board will be set up and ready for Gameplay!

Stage 1.1 - Spawn Player

The first step of the Setup Phase is to spawn the player. By the end of this substage your program will prompt the user for the player's starting position, and then display this on the game board.

The starter code:

  • Prints the welcome message: "Welcome to CS Caverun!\n\n".
  • Declares the board array.
  • Initialises the board array to DIRT.
  • Prints the board without showing the player.

A description of the starter code can be found in Starter Code and Data Structures.

Task

In this substage, you will modify the starter code to:

  1. Print a heading indicating the start of the Setup Phase: "--- Game Setup Phase ---\n".
  2. Prompt the user: "Enter the player's starting position: ".
  3. Scan in two integers [row] [col] as the player's starting position.
  4. Use the provided print_board() function to display the game board with the player's position and remaining lives (the player begins with 3 lives).
  5. Exit the program by returning 0 from main().

Assumptions / Restrictions / Clarifications

When your code is tested in this substage:

  • Only valid array indices will be used. No out-of-bounds values will be entered for row or col.

For this substage and all future substages:

  • The [row] and [col] entered will always be integers.

Examples

Input:

3 4

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 3 4
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Autotest

Stage 1.2 - Validate Player Spawn

In the previous substage, your program allowed the user to spawn the player anywhere on the game board. But what happens if the user attempts to spawn the player outside of the board boundaries?

Give it a try! Test your program with row and column inputs such as 8 15, or -1 6. Should the program allow this?

Task

In this substage, you will modify your Stage 1.1 implementation to handle invalid inputs:

  • A valid spawn position is one that is within the board boundaries.
  • An invalid spawn position is one that is outside the board boundaries.

You will need to:

  1. Create a loop to repeatedly prompt the user for the player's starting position until a valid position is entered.
  2. If the position entered is invalid:
    • Print "Position [row] [col] is invalid!\n" where [row] [col] are the invalid coordinates.
    • Prompt the user for another starting position.
  3. Otherwise, if the position is valid:
    • End the loop.
    • Use the provided print_board() function to display the board.
    • Exit the program by returning 0 from the main() function.

Assumptions / Restrictions / Clarifications

For this substage and all future substages:

  • The [row] and [col] entered will always be integers.

Examples

Input:

0 -1
-3 7
8 15
4 4

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 0 -1
Position 0 -1 is invalid!
Enter the player's starting position: -3 7
Position -3 7 is invalid!
Enter the player's starting position: 8 15
Position 8 15 is invalid!
Enter the player's starting position: 4 4
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Autotest

Stage 1.3 - Add Features (Boulders, Gems, Walls)

In the previous substage, your program spawned the player on the board. In this substage, the program should now continue with the Setup Phase by adding features (entities) such as walls, boulders and gems to the board.

Task

In this substage, you will extend your program to:

  1. Prompt the user: "Enter map features:\n".
  2. Implement a Setup Loop to repeatedly read-in commands and add features to the board until Ctrl-D is pressed:
    • Given the command w [row] [col], add a WALL to that tile.
    • Given the command b [row] [col], add a BOULDER to that tile.
    • Given the command g [row] [col], add a GEM to that tile.
  3. When the user enters Ctrl-D:
    • The Setup Loop should end.
    • The board should be displayed with the provided print_board() function.
    • The program should exit.

Assumptions / Restrictions / Clarifications

When your code is tested in this substage:

  • Your program should ignore commands other than w, b, or g.
  • All features will be placed within the map boundaries.
  • No feature will be placed at the same location as another feature.
  • No feature will be placed at the same location as the player.

For this substage and all future substages:

  • The [row] and [col] will be integers.
  • Incomplete commands will not be tested e.g. when a w is entered, it will always be followed by a [row] and [col].

Examples

Input:

6 5
w 2 3
[Ctrl-D]

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 6 5
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
w 2 3
[Ctrl-D]
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . ||||| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Input:

3 4
w 2 2
b 3 7
b 6 3
g 9 7
g 8 8
w 2 3
w 3 5
[Ctrl-D]

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 3 4
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
w 2 2
b 3 7
b 6 3
g 9 7
g 8 8
w 2 3
w 3 5
[Ctrl-D]
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . ||||||||| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^||||| . |(O)| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |(O)| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . |*^*| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |*^*| . | . |
+---+---+---+---+---+---+---+---+---+---+

Input:

6 3
[Ctrl-D]

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 6 3
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
[Ctrl-D]
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Autotest

Stage 1.4 - Validate Feature Spawns

During the previous substage, your program added features to the board. However, much like checking that the player's location is valid, how should the program handle placing a feature in an invalid position?

Task

In this substage, you will update your implementation of Stage 1.3 to ensure that features are only added to valid locations.

A tile is occupied if any of the following are true:

  • The player is located at the same position as the tile.
  • The tile's entity member is not DIRT.
  1. If the user attempts to place a feature on an occupied tile:
    • Print "Invalid location: tile is occupied!\n".
    • Continue reading the next command.
  2. If the user attempts to place a feature in a position that's not on the board:
    • Print "Invalid location: position is not on map!\n".
    • Continue reading the next command.

Assumptions / Restrictions / Clarifications

When your code is tested in this substage:

  • Your program should ignore commands other than w, b, or g.

For this substage and all future substages:

  • The [row] and [col] will be integers.
  • Incomplete commands will not be tested e.g. when a w is entered, it will always be followed by a [row] and [col].

Examples

Input:

7 2
w 3 -2
b -1 13
g 12 6
w 3 2
[Ctrl-D]

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 7 2
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
w 3 -2
Invalid location: position is not on map!
b -1 13
Invalid location: position is not on map!
g 12 6
Invalid location: position is not on map!
w 3 2
[Ctrl-D]
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . ||||| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Input:

2 7
w 2 7
b 2 7
g 2 7
w 3 7
[Ctrl-D]

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 2 7
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^_^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
w 2 7
Invalid location: tile is occupied!
b 2 7
Invalid location: tile is occupied!
g 2 7
Invalid location: tile is occupied!
w 3 7
[Ctrl-D]
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^_^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . ||||| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Input:

7 7
w 3 3
b 3 3
b 4 4
g 4 4
g 5 5
[Ctrl-D]

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 7 7
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^_^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
w 3 3
b 3 3
Invalid location: tile is occupied!
b 4 4
g 4 4
Invalid location: tile is occupied!
g 5 5
[Ctrl-D]
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . ||||| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |*^*| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^_^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Input:

2 2
w 2 10
w 2 2
w 2 3
b 10 2
b 2 2
b 3 2
g 10 10
g 2 2
g 3 3
[Ctrl-D]

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 2 2
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
w 2 10
Invalid location: position is not on map!
w 2 2
Invalid location: tile is occupied!
w 2 3
b 10 2
Invalid location: position is not on map!
b 2 2
Invalid location: tile is occupied!
b 3 2
g 10 10
Invalid location: position is not on map!
g 2 2
Invalid location: tile is occupied!
g 3 3
[Ctrl-D]
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^||||| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |(O)|*^*| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Autotest

Stage 1.5 - Add Multiple Walls

In Stage 1.3, you implemented a Setup Loop that processed commands to place features on the board. Although these commands are useful, they currently only let users add one feature at a time. Users would find it helpful if they were allowed to add multiple walls at once.

Task

In this substage, you will implement a command to add WALL tiles to the board in the shape of a rectangle:

  1. Modify the Setup Loop from Stage 1.3 to handle a new W command:

    W [start_row] [start_col] [end_row] [end_col]
    

    This command specifies the corners of a rectangle:

    • The top-left corner of the rectangle is defined by [start_row] [start_col].
    • The bottom-right corner of the rectangle is defined by [end_row] [end_col].

    After reading this command, the program should add WALL features to every tile within the rectangle formed by the top-left and bottom-right corners. The rectangle includes all tiles from [start_row] [start_col] to [end_row] [end_col], inclusive.

  2. If any tile within the rectangle (including its corners or edges) are occupied or located off the board, then no WALL features should be added to the board. Instead, the program should print "Invalid location: feature cannot be placed here!\n" before continuing to read the next command.

Assumptions / Restrictions / Clarifications

  • The definition of an "occupied" tile here is the same as in Stage 1.4.

For this substage and all future substages:

  • [start_row], [start_col], [end_row], and [end_col] will be integers.
  • [start_row] will be less than or equal to [end_row].
  • [start_col] will be less than or equal to [end_col].
  • Incomplete commands will not be tested e.g. when a W is entered, it will always be followed by a [start_row] [start_col] [end_row] [end_col].

Examples

Input:

2 3
W 4 2 6 7
W 0 0 9 0
W 8 8 8 8
[Ctrl-D]

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 2 3
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
W 4 2 6 7
W 0 0 9 0
W 8 8 8 8
[Ctrl-D]
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
||||| . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
||||| . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
||||| . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
||||| . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
||||| . ||||||||||||||||||||||||| . | . |
+---+---+---+---+---+---+---+---+---+---+
||||| . ||||||||||||||||||||||||| . | . |
+---+---+---+---+---+---+---+---+---+---+
||||| . ||||||||||||||||||||||||| . | . |
+---+---+---+---+---+---+---+---+---+---+
||||| . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
||||| . | . | . | . | . | . | . ||||| . |
+---+---+---+---+---+---+---+---+---+---+
||||| . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Input:

5 2
W 4 1 6 3
W -1 -1 2 2
W 3 7 6 11
W 8 4 12 8
g 8 8
W 7 7 9 9
W 4 4 6 7
w 5 5
[Ctrl-D]

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 5 2
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
W 4 1 6 3
Invalid location: feature cannot be placed here!
W -1 -1 2 2
Invalid location: feature cannot be placed here!
W 3 7 6 11
Invalid location: feature cannot be placed here!
W 8 4 12 8
Invalid location: feature cannot be placed here!
g 8 8
W 7 7 9 9
Invalid location: feature cannot be placed here!
W 4 4 6 7
w 5 5
Invalid location: tile is occupied!
[Ctrl-D]
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . ||||||||||||||||| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^| . ||||||||||||||||| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . ||||||||||||||||| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . |*^*| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Autotest

Testing & Submission

Are you finished with this stage? If so, you should make sure to do the following:

  • Run 1511 style, and clean up any issues a human may have reading your code. Don't forget -- 20% of your mark in the assignment is based on style!
  • Autotest for this stage of the assignment by running the autotest-stage command as shown below.
  • Remember -- give early, and give often. Only your last submission counts, but why not be safe and submit right now?
1511 style cs_caverun.c
1511 autotest-stage 01 cs_caverun
give cs1511 ass1_cs_caverun cs_caverun.c

Stage 2

In Stage 2, you will begin implementing the Gameplay Phase of CS Caverun. This milestone has been divided into five substages:

  • Stage 2.1 - Player Movement.
  • Stage 2.2 - Validate Player Movement.
  • Stage 2.3 - Collect Gems & Print The Score.
  • Stage 2.4 - Print Map Statistics.
  • Stage 2.5 - Winning The Game.

The focus of these substages is to implement the Player Turn of the Gameplay Phase. The Boulder Turn and Lava Turn will be introduced in Stages 3 and 4.

By the end of this stage, your program will have grown into a partially complete, yet entirely playable, version of the game!

Stage 2.1 - Player Movement

The first step of the Gameplay Phase is to introduce player movements. By the end of this substage, your program will allow the user to control the player and guide them around the game board.

Task

In this substage, you will need to:

  1. Start the Gameplay Phase:

    • Currently the Setup Loop from Stage 1.3 ends when the user enters [Ctrl-D]. Modify the Setup Loop to end when the user enters s for 'start'.
    • Once s is pressed:
      • Print the game board with the provided print_board() function.
      • Remove the DIRT tile at the player's spawn position by replacing it with an EMPTY entity.
      • Print "--- Gameplay Phase ---\n". This indicates that the Setup Phase is complete, and the user can now start playing the game.
  2. Implement a Gameplay Loop to repeatedly read-in and handle user commands:

    • The first command to add to the Gameplay Loop is q to quit.
    • When the q command is entered by the user, the program should immediately:
      • Print "--- Quitting Game ---\n".
      • Exit without any other outputs.
  3. Begin the Player Turn:

    • The next Gameplay Loop commands are player movements:
      • w moves the player up.
      • a moves the player left.
      • s moves the player down.
      • d moves the player right.
      • r (rest) ends the Player Turn without moving the player.
    • When the user enters one of these commands, move the player one tile in the corresponding direction.
  4. Implement the Dig mechanic:

    • If a player finishes their turn on a DIRT tile, the player digs through it and the DIRT is replaced with an EMPTY entity.
    • Reminder: theDIRT tile at the player's spawn position should be removed before the Gameplay Phase begins.
  5. End the Player Turn and finish the round:

    • After the player's movement and Dig mechanic, the Player Turn ends.
    • Display the board with the provided print_board() function. This completes the round.
    • Reminder: this is a Gameplay Loop. After each command is processed/handled, the program should continue to read and handle the next user command until q is pressed.

Assumptions / Restrictions / Clarifications

When your code is tested in this substage:

  • No movement command will attempt to move the player off the board.
  • No movement command will attempt to move the player onto a wall, boulder, or gem.

When your code is tested in this substage (and all subsequent substages up to Stage 3.3):

  • No movement command will result in the player ending their turn on an EMPTY tile directly beneath a boulder. (This case will be handled in Stage 3.3.)

For this substage and all future substages:

  • You program will not need to handle inputs that have not been defined by the assignment specification. For example: your program does not need to handle a Z command, as this is not defined anywhere in the spec.

Examples

Input:

3 3
s
s
s
s
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 3 3
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

3 3
s
d
d
d
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 3 3
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

3 3
s
d
d
r
s
s
r
a
a
r
w
w
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 3 3
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^|   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^|   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^|   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

6 7
s
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 6 7
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^_^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^_^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
q
--- Quitting Game ---

Autotest

Stage 2.2 - Validate Player Movement

In the previous substage, your program allowed the user to control the player’s movements. But what should happen if the player tries to move into a wall, a boulder, or off the edge of the board?

Task

In this substage, you will modify your implementation of Stage 2.1 to handle attempts to move the player to an invalid destination.

For the purpose of this substage, a destination is considered invalid if it meets any of the following conditions:

  • The tile is located off the edge of the board.
  • The tile contains a WALL or BOULDER.

If the player's destination is valid:

  • Allow the move to proceed as in Stage 2.1.

Otherwise, if the player attempts to move to an invalid destination:

  • The move should not proceed.
  • End the Player turn, calling print_board() to signal the end of the round.
  • Wait for the user's next command, continuing the Gameplay Loop.

Assumptions / Restrictions / Clarifications

When your code is tested in this substage:

  • No movement command will result in the player moving off a gem, after having moved onto it (this case will be handled in Stage 2.3).

Examples

Input:

1 1
s
a
a
w
a
w
d
w
s
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 1 1
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^_^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^_^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^_^|   | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^_^|   | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|^_^| . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   |   | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|^_^| . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   |   | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|^_^| . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   |   | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   |^_^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   |   | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   |^_^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   |   | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   |   | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   |^_^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

4 4
w 4 5
b 5 4
g 4 3
s
d
s
a
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 4 4
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
w 4 5
b 5 4
g 4 3
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |*^*|^_^||||| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |*^*|^_^||||| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |*^*|^_^||||| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^|   ||||| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Autotest

Stage 2.3 - Collect Gems and Print the Score

In the previous substage, your program prevented the player from moving onto walls or boulders, and from stepping off the board. By the end of this substage, it will allow the player to collect gems, accrue points, and introduce a new command to display the score!

Task

In this substage, you will need to:

  1. Implement the Collection mechanic to collect gems and dirt from the board:

    • If the player moves onto a tile containing a GEM:
      • Remove the GEM from the tile by assigning its entity to EMPTY.
      • Add 20 points to the player's score.
    • If the player moves onto a tile containing DIRT:
      • Apply the Dig mechanic from Stage 2.1 to replace the DIRT with EMPTY.
      • Add 1 point to the player's score.
  2. Modify the Gameplay Loop to handle a new p command that prints the player's current score:

    • When the p command is entered, print "You have [score] point(s)!\n" where [score] is the player's score.

Assumptions / Restrictions / Clarifications

  • The player starts the game with 0 points.

Examples

Input:

4 2
s
p
d
p
d
p
d
p
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 4 2
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
p
You have 0 point(s)!
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

p
You have 1 point(s)!
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

p
You have 2 point(s)!
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

p
You have 3 point(s)!
q
--- Quitting Game ---

Input:

4 2
g 4 3
g 4 4
s
p
d
p
d
p
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 4 2
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
g 4 3
g 4 4
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^|*^*|*^*| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
p
You have 0 point(s)!
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |^_^|*^*| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

p
You have 20 point(s)!
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

p
You have 40 point(s)!
q
--- Quitting Game ---

Input:

4 2
g 4 4
g 4 6
s
p
d
p
d
p
d
p
d
p
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 4 2
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
g 4 4
g 4 6
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^| . |*^*| . |*^*| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
p
You have 0 point(s)!
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |^_^|*^*| . |*^*| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

p
You have 1 point(s)!
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   |^_^| . |*^*| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

p
You have 21 point(s)!
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   |   |^_^|*^*| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

p
You have 22 point(s)!
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   |   |   |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

p
You have 42 point(s)!
q
--- Quitting Game ---

Autotest

Stage 2.4 - Print Map Statistics

In the previous substage, the player collected gems and earned points. It's expected that many in the CS Caverun community will enjoy keeping track of their accomplishments. By the end of this stage, your program will allow the user to display a concise table of stats to monitor their progress toward completing the level.

Task

In this substage, you will need to:

  1. Modify the Gameplay Loop to handle a new m command that prints map statistics. When the m command is entered, the program will need to check the game board and:

    • Count the number of tiles containing dirt, gems, and boulders.

    • Calculate the "collectible completion" percentage. This is the proportion of collectible entities (dirt and gems) that have been collected by the player. It is defined by the following formula:

      completion_percentage = 100.0 * num_collected / num_collectible

      Where:

      • num_collected is the number of dirt and gem tiles that have been collected by the player.
      • num_collectible is the number of dirt and gem tiles that were present on the board at the beginning of the Gameplay Phase.
    • Calculate the maximum number of points remaining. This is the number of additional points that could be scored by the player if they collect all remaining DIRT and GEM tiles from the board.

    • Call the provided print_map_statistics() function to display this information to the player.

Assumptions / Restrictions / Clarifications

  • number_collectible does not include the DIRT tile that the player was spawned on as this is replaced with an EMPTY tile in Stage 2.1.
  • BOULDER tiles are not collectible so do not contribute to the maximum number of points remaining.

Examples

Input:

3 2
g 3 3
g 3 5
g 5 5
g 5 7
s
m
d
m
d
m
d
m
s
s
d
d
m
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 3 2
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
g 3 3
g 3 5
g 5 5
g 5 7
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^|*^*| . |*^*| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |*^*| . |*^*| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
m
========= Map Statistics =========
Tiles Remaining by Type:
  - DIRT:      95
  - GEMS:      4
  - BOULDERS:  0
Completion Status:
  - Collectible Completion: 0.0%
  - Maximum Points Remaining: 175
==================================
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |^_^| . |*^*| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |*^*| . |*^*| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

m
========= Map Statistics =========
Tiles Remaining by Type:
  - DIRT:      95
  - GEMS:      3
  - BOULDERS:  0
Completion Status:
  - Collectible Completion: 1.0%
  - Maximum Points Remaining: 155
==================================
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   |^_^|*^*| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |*^*| . |*^*| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

m
========= Map Statistics =========
Tiles Remaining by Type:
  - DIRT:      94
  - GEMS:      3
  - BOULDERS:  0
Completion Status:
  - Collectible Completion: 2.0%
  - Maximum Points Remaining: 154
==================================
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |*^*| . |*^*| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

m
========= Map Statistics =========
Tiles Remaining by Type:
  - DIRT:      94
  - GEMS:      2
  - BOULDERS:  0
Completion Status:
  - Collectible Completion: 3.0%
  - Maximum Points Remaining: 134
==================================
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |*^*| . |*^*| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^_^| . |*^*| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |   |^_^|*^*| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |   |   |^_^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

m
========= Map Statistics =========
Tiles Remaining by Type:
  - DIRT:      92
  - GEMS:      0
  - BOULDERS:  0
Completion Status:
  - Collectible Completion: 7.1%
  - Maximum Points Remaining: 92
==================================
q
--- Quitting Game ---

Input:

1 1
W 3 0 3 6
W 6 3 6 9
b 0 0
b 0 9
b 9 0
b 9 9
g 1 3
g 1 5
s
m
d
m
d
m
d
m
d
m
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 1 1
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^_^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
W 3 0 3 6
W 6 3 6 9
b 0 0
b 0 9
b 9 0
b 9 9
g 1 3
g 1 5
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|(O)| . | . | . | . | . | . | . | . |(O)|
+---+---+---+---+---+---+---+---+---+---+
| . |^_^| . |*^*| . |*^*| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
||||||||||||||||||||||||||||| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |||||||||||||||||||||||||||||
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|(O)| . | . | . | . | . | . | . | . |(O)|
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
m
========= Map Statistics =========
Tiles Remaining by Type:
  - DIRT:      79
  - GEMS:      2
  - BOULDERS:  4
Completion Status:
  - Collectible Completion: 0.0%
  - Maximum Points Remaining: 119
==================================
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|(O)| . | . | . | . | . | . | . | . |(O)|
+---+---+---+---+---+---+---+---+---+---+
| . |   |^_^|*^*| . |*^*| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
||||||||||||||||||||||||||||| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |||||||||||||||||||||||||||||
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|(O)| . | . | . | . | . | . | . | . |(O)|
+---+---+---+---+---+---+---+---+---+---+

m
========= Map Statistics =========
Tiles Remaining by Type:
  - DIRT:      78
  - GEMS:      2
  - BOULDERS:  4
Completion Status:
  - Collectible Completion: 1.2%
  - Maximum Points Remaining: 118
==================================
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|(O)| . | . | . | . | . | . | . | . |(O)|
+---+---+---+---+---+---+---+---+---+---+
| . |   |   |^_^| . |*^*| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
||||||||||||||||||||||||||||| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |||||||||||||||||||||||||||||
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|(O)| . | . | . | . | . | . | . | . |(O)|
+---+---+---+---+---+---+---+---+---+---+

m
========= Map Statistics =========
Tiles Remaining by Type:
  - DIRT:      78
  - GEMS:      1
  - BOULDERS:  4
Completion Status:
  - Collectible Completion: 2.5%
  - Maximum Points Remaining: 98
==================================
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|(O)| . | . | . | . | . | . | . | . |(O)|
+---+---+---+---+---+---+---+---+---+---+
| . |   |   |   |^_^|*^*| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
||||||||||||||||||||||||||||| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |||||||||||||||||||||||||||||
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|(O)| . | . | . | . | . | . | . | . |(O)|
+---+---+---+---+---+---+---+---+---+---+

m
========= Map Statistics =========
Tiles Remaining by Type:
  - DIRT:      77
  - GEMS:      1
  - BOULDERS:  4
Completion Status:
  - Collectible Completion: 3.7%
  - Maximum Points Remaining: 97
==================================
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|(O)| . | . | . | . | . | . | . | . |(O)|
+---+---+---+---+---+---+---+---+---+---+
| . |   |   |   |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
||||||||||||||||||||||||||||| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |||||||||||||||||||||||||||||
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|(O)| . | . | . | . | . | . | . | . |(O)|
+---+---+---+---+---+---+---+---+---+---+

m
========= Map Statistics =========
Tiles Remaining by Type:
  - DIRT:      77
  - GEMS:      0
  - BOULDERS:  4
Completion Status:
  - Collectible Completion: 4.9%
  - Maximum Points Remaining: 77
==================================
q
--- Quitting Game ---

Autotest

Stage 2.5 - Winning The Game

Throughout the last four substages, you introduced foundational elements of the Gameplay Loop. Now it’s time for the fun part: winning the game! By the end of this stage, your program will include exits that the player can unlock to escape the cave. Let's go!

Task

In this substage, you will need to:

  1. Modify the Setup Loop from Stage 1.3 to add exits to the board:
    • Given the command e [row] [col], add an EXIT_LOCKED entity to the tile at [row] [col].
    • Ensure that no other feature can be placed on the same tile as an exit.
    • Exits follow the same placement rules as other features in Stage 1.4 with respect to valid and invalid locations, as well as error messages.
  2. Update your program so that any tile containing an EXIT_LOCKED is considered to be an "invalid destination" for all player movements. This ensures the player can't move onto a tile that contains a locked exit.
  3. Implement the Unlock mechanic:
    • In CS Caverun, the player collects gems to unlock exits.
    • If at any point (after all features have been added to the board) there are no GEM tiles on the board, then all exits are immediately unlocked. That is, all EXIT_LOCKED entities are replaced by EXIT_UNLOCKED.
  4. Implement the Game Win mechanic:
    • If the player moves onto an unlocked exit, then the game is won.
    • When then game is won, the program should immediately:
      • Display the board with the provided print_board() function.
      • Print "You Win! Final Score: [score] point(s)!\n" where [score] is the player's score.
      • Exit without any other outputs.

Assumptions / Restrictions / Clarifications

  • More than one exit can be added to the board.

Examples

Input:

3 3
w 1 1
b 1 3
g 1 5
e -1 -1
e 3 3
e 1 1
e 1 3
e 1 5
e 1 7
e 1 7
s
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 3 3
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
w 1 1
b 1 3
g 1 5
e -1 -1
Invalid location: position is not on map!
e 3 3
Invalid location: tile is occupied!
e 1 1
Invalid location: tile is occupied!
e 1 3
Invalid location: tile is occupied!
e 1 5
Invalid location: tile is occupied!
e 1 7
e 1 7
Invalid location: tile is occupied!
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . ||||| . |(O)| . |*^*| . |[X]| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
q
--- Quitting Game ---

Input:

4 4
g 4 5
g 5 4
g 5 5
e 3 4
e 4 6
e 5 3
e 6 5
s
w
d
d
s
s
a
a

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 4 4
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
g 4 5
g 5 4
g 5 5
e 3 4
e 4 6
e 5 3
e 6 5
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |[X]| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|*^*|[X]| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |[X]|*^*|*^*| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |[X]| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |[X]| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|*^*|[X]| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |[X]|*^*|*^*| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |[X]| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |[X]| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |^_^|[X]| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |[X]|*^*|*^*| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |[X]| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |[X]| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |^_^|[X]| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |[X]|*^*|*^*| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |[X]| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |[X]| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   |[X]| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |[X]|*^*|^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |[X]| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |[X]| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   |[X]| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |[X]|*^*|^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |[X]| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |[ ]| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   |[ ]| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |[ ]|^_^|   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |[ ]| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |[ ]| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   |[ ]| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^|   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |[ ]| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

You Win! Final Score: 60 point(s)!

Input:

4 4
e 2 2
e 2 7
e 7 2
e 7 7
s
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 4 4
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
e 2 2
e 2 7
e 7 2
e 7 7
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |[ ]| . | . | . | . |[ ]| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |[ ]| . | . | . | . |[ ]| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
q
--- Quitting Game ---

Autotest

Testing & Submission

Are you finished with this stage? If so, you should make sure to do the following:

  • Run 1511 style, and clean up any issues a human may have reading your code. Don't forget -- 20% of your mark in the assignment is based on style!
  • Autotest for this stage of the assignment by running the autotest-stage command as shown below.
  • Remember -- give early, and give often. Only your last submission counts, but why not be safe and submit right now?
1511 style cs_caverun.c
1511 autotest-stage 02 cs_caverun
give cs1511 ass1_cs_caverun cs_caverun.c

Stage 3

In Stage 3, you will continue implementing the Gameplay Phase of CS Caverun. This milestone has been divided into five substages:

  • Stage 3.1 - Player Dash (Double Movement).
  • Stage 3.2 - Boulder Movement.
  • Stage 3.3 - Losing The Game.
  • Stage 3.4 - Illumination.
  • Stage 3.5 - Gravity Shift.

These substages complete the Player Turn and Boulder Turn of the Gameplay Loop. The Lava Turn will be introduced in Stage 4.

By the end of this stage, you will have brought the core features of CS Caverun to life, allowing it to stand on its own while still leaving room for additional features!

Stage 3.1 - Player Dash (Double Movement)

In the upcoming substages, boulders will no longer be static. They’ll begin to move and may even fall onto the player. The focus now is to counter this impending threat.

By the end of this substage, your program will grant the player a new ability to "dash". This allows them to move twice per turn, digging through up to two dirt tiles. The double-movement ability will give the user a chance to dodge, duck, dip, dive (and dodge) their player out of harm's way!

Task

In this substage, you will need to:

  1. Modify the Gameplay Loop to handle new "dash" commands. These commands are formed by a pair of capitalised WASD movement commands that specify two movements in a single turn. For example, an input of:

    • WA means "move the player one tile up, then one tile to the left".
    • DS means "move the player one tile to the right, then one tile down".
    • AA means "move the player left, twice".
    • SW means "move the player one tile down, then one tile back up".

    During a dash move, when the player moves onto or passes through a tile, it collects any gems or dirt from that tile according to the Collection mechanic from Stage 2.3.

Dash movements follow the same validation rules as regular player movements, but with extra consideration for some new scenarios:

  1. Ensure that your program correctly handles the following edge cases:
    • If the first movement of a dash is invalid, then both moves are blocked, and the player remains stationary (see Example 3.1.5). This ends the Player Turn.
    • If the second movement of a dash is invalid, then the first move is taken, but the second move is blocked (see Example 3.1.5). This ends the Player Turn.
    • If the first movement of a dash results in the player collecting all gems, then the Unlock mechanic from Stage 2.5 is activated and all exits immediately unlock (see Example 3.1.3).
    • If the first movement of a dash results in the player moving onto an unlocked exit, the game is won and should end according to the Game Win mechanic from Stage 2.5 (see Example 3.1.4).

Dash moves are exhausting. After attempting a dash movement, one Player Turn must pass before the player can dash again. During this "recovery" turn, the player can make any non-dash move.

  1. Implement the Dash Cooldown mechanic:
    • If the player attempts a dash move for two consecutive Player Turns:
      • The second dash move should fail, and the player remains stationary.
      • Print "You're out of breath! Skipping dash move...\n".
      • End the Player Turn, call print_board(), and end the round.
      • The player will be able to dash again on their next turn.
    • For example, suppose the player attempts to dash on Turns 1, 2, and 3:
      • The Turn 1 dash is successful.
      • The Turn 2 dash fails because the player is out of breath, so they do nothing, and recover instead.
      • The Turn 3 dash is successful, since the player was forced to recover on Turn 2 and did not dash.

Assumptions / Restrictions / Clarifications

  • Only Player Turns count as a recovery turn. Some commands are not Player Turns, so do not count as a recovery turn. These include:
    • Printing the score with p.
    • Printing map statistics with m.
    • Additional commands introduced in later stages: i and u.

When your code is tested, in this and all future stages:

  • Dash commands will be entered in a valid format. For example, combinations of invalid characters such as sW or Aa will not be used.

Examples

Input:

3 3
s
DD
d
SS
s
AA
a
WW
w
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 3 3
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
DD
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

SS
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

AA
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^|   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

WW
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^|   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

3 3
s
DA
SS
SS
r
SD
d
DS
AS
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 3 3
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
DA
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^|   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

SS
You're out of breath! Skipping dash move...
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^|   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

SS
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

SD
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

DS
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

AS
You're out of breath! Skipping dash move...
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

3 3
g 4 3
e 4 4
s
SD

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 3 3
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
g 4 3
e 4 4
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |*^*|[X]| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
SD
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

You Win! Final Score: 20 point(s)!

Input:

6 6
e 5 6
s
WA

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 6 6
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
e 5 6
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |[ ]| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
WA
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

You Win! Final Score: 0 point(s)!

Input:

4 5
w 4 4
b 6 5
s
AW
r
SS
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 4 5
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
w 4 4
b 6 5
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |||||^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |(O)| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
AW
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |||||^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |(O)| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |||||^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |(O)| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

SS
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |||||   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |(O)| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

5 9
s
SD
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 5 9
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^_^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^_^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
SD
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |   |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^_^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

4 4
s
DD
p
SS
SS
m
AA
AA
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 4 4
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
DD
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

p
You have 2 point(s)!
SS
You're out of breath! Skipping dash move...
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

SS
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

m
========= Map Statistics =========
Tiles Remaining by Type:
  - DIRT:      95
  - GEMS:      0
  - BOULDERS:  0
Completion Status:
  - Collectible Completion: 4.0%
  - Maximum Points Remaining: 95
==================================
AA
You're out of breath! Skipping dash move...
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

AA
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Autotest

Stage 3.2 - Boulder Movement

In the previous substage, you gave the user the ability to dash their player away from danger. In this stage, we create the danger!

Boulders that are surrounded by dirt tiles (or any other non-empty tiles) are locked in place and cannot move. However, this can change if the player creates empty spaces by digging dirt and collecting gems.

Task

In this substage, you will need to:

  1. Add a Boulder Turn to the Gameplay Loop:

    • The Boulder Turn begins after the Player Turn i.e. after player movement (single move, rest, or dash move) and possible Game Win mechanic.
    • Instead of printing the board after the Player Turn, the board should now be printed after the Boulder Turn.
  2. Implement the Boulder Movement mechanic:

    • Every boulder experiences a force in the direction of gravity.
      • The initial direction of gravity is down, towards the bottom of the screen. This will change in Stage 3.5.
    • A boulder's destination is the tile adjacent to it in the direction of gravity. For example:
      • If the direction of gravity is down, then a boulder's destination is the tile directly beneath it.
    • A boulder's destination is valid if:
      • the destination is located on the game board (not out of bounds), and
      • the destination's entity is EMPTY.
    • During the Boulder Turn, if any boulder has a valid destination, your program should move the boulder to that destination.
      • The tile which previously contained the moved boulder should be set to EMPTY.
    • Boulders move in order of their priority:
      • If boulder A is closer to the direction of gravity than boulder B, then A has a higher priority than B. For example: if the direction of gravity is down, and boulder A is beneath boulder B, then boulder A has a higher priority than boulder B, so A should move before B.

Assumptions / Restrictions / Clarifications

  • Some commands do not count as a Player Turn, so do not trigger the Boulder Turn. These commands include:
    • Printing the score with p.
    • Printing map statistics with m.
    • Quitting the game with q.
    • Additional commands introduced in later stages.
  • When your code is tested in this stage:
    • We will not test the case where a boulder moves onto a tile that contains the player (this will be handled in Stage 3.3).
    • The direction of gravity will be down, towards the bottom of the screen (this will change in Stage 3.5).

Examples

Input:

4 3
b 3 4
s
DD
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 4 3
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
b 3 4
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
DD
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |(O)|^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

4 3
b 2 4
b 3 4
s
DD
s
AA
s
DD
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 4 3
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
b 2 4
b 3 4
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
DD
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |(O)|^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |(O)|   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

AA
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |(O)|   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^|(O)|   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |(O)|   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |(O)|   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

DD
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |(O)|   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |(O)|^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

9 4
b 5 4
b 3 5
w 7 5
s
w
w
WD
w
WA
r
r
r
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 9 4
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
b 5 4
b 3 5
w 7 5
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |(O)| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . ||||| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |(O)| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . ||||| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |(O)| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^||||| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

WD
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |(O)| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)|^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   ||||| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |(O)| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)||||| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

WA
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|(O)| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   ||||| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |(O)| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   ||||| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |(O)| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   ||||| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |(O)| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   ||||| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

9 4
b 5 4
s
w
w
WD
p
m
r
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 9 4
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
b 5 4
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

WD
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)|^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

p
You have 4 point(s)!
m
========= Map Statistics =========
Tiles Remaining by Type:
  - DIRT:      94
  - GEMS:      0
  - BOULDERS:  1
Completion Status:
  - Collectible Completion: 4.1%
  - Maximum Points Remaining: 94
==================================
r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Autotest

Stage 3.3 - Losing The Game

In the previous substage, boulders began rolling down after the entities beneath them had been removed. But what happens if a boulder falls onto the player? By the end of this substage, your program will address this by introducing a Respawn mechanic and tracking the number of remaining lives to determine if the game has been lost.

Task

In this substage, you will need to:

  1. Handle the case where a boulder moves onto the player:

    • The player starts the game with 3 lives.
    • After all boulders have moved, if any boulder occupies the same tile as the player, then the player faints and loses one life.
  2. Implement the Loss-of-Life mechanic:

    • Whenever the player loses a life:
      • If the player has no lives remaining:
        • Print "Game Lost! You scored %d points!\n" where %d is the score.
        • Display the game board with the provided print_board() function.
        • Immediately exit the game, with no further output.
      • Otherwise, if the player still has at least 1 life:
        • Attempt to respawn the player (see the next section).
  3. Implement the Respawn mechanic:

    • The player should respawn at their initial starting position from Stage 1.1.
      • If this position is a valid destination then:
        • Print "Respawning!\n".
        • Move the player to that position.
        • Display the game board with the provided print_board() function to signal the end of the round and then wait, ready to read the user's next command.
      • Otherwise, if the initial starting position is not a valid destination (e.g. it is occupied by a boulder) then the respawn is blocked:
        • Print "Respawn blocked! Game over. Final score: %d points.\n" where %d is the score.
        • Display the game board with the provided print_board() function.
        • Exit the game immediately, with no further output.

Examples

Input:

4 4
b 1 4
b 3 2
b 3 6
s
d
d
a
a
w
w

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 4 4
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
b 1 4
b 3 2
b 3 6
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |(O)| . | . | . |(O)| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |(O)| . | . | . |(O)| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
Respawning!
+---+---+---+---+---+---+---+---+---+---+
| Lives: 2    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |(O)| . | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|   |(O)| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 2    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |(O)| . | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^|   |   |(O)| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
Respawning!
+---+---+---+---+---+---+---+---+---+---+
| Lives: 1    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   | . | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |(O)|   |^_^|   |(O)| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 1    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   | . |^_^| . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |(O)|   |   |   |(O)| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
Game Lost! You scored 6 points!
+---+---+---+---+---+---+---+---+---+---+
| Lives: 0    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   | . |   | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |(O)|   |   |   |(O)| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Input:

5 3
b 4 3
b 4 5
s
d
d

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 5 3
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
b 4 3
b 4 5
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |(O)| . |(O)| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . |(O)| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |(O)|^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
Respawn blocked! Game over. Final score: 2 points.
+---+---+---+---+---+---+---+---+---+---+
| Lives: 2    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |(O)|   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Autotest

Stage 3.4 - Illumination

Let’s bring some realism to the underground world. Caves are dark places, so we’ll equip the player with a lamp whose light only travels so far. By the end of this stage, your program will add an optional illumination setting, making distant tiles disappear into the darkness!

Task

The program has an illumination mode that can be turned ON or OFF. The Gameplay Phase begins with the illumination mode OFF.

In this substage you will need to:

  1. Modify the Gameplay Loop to handle a new i [radius] command.

    • If the radius entered is a positive number:
      • Print "Illumination Mode: Activated\n".
      • Turn ON the illumination mode.
      • Print the board with the provided print_board() function.
    • Otherwise, if the radius is negative or zero:
      • Print "Illumination Mode: Deactivated\n".
      • Turn OFF the illumination mode.
      • Print the board with the provided print_board() function.
    • The illumination command does not count as a Player Turn, so does not count as a dash-recovery or initiate a Boulder Turn.
  2. Implement the Illumination Mode mechanic:

    • When the illumination mode is ON:
      • All tiles within a distance of [radius] (inclusive) from the player are illuminated and appear as normal.
      • All tiles beyond that distance are not illuminated and should be hidden when printing the board.
        • To hide a tile, set its entity to HIDDEN before calling print_board().
        • Hidden tiles are displayed as an  X  instead of their usual symbols e.g. as an  X  instead of ||| or *^*.
      • Entities should persist: if a tile stops being illuminated and later becomes illuminated again, it should revert to its original entity. Examples:
        • A wall ||| that becomes hidden should appear as  X . When illuminated again, it should reappear as |||.
        • A moving boulder (O) that becomes hidden should appear as  X . However, it continues moving even while hidden and should reappear as (O) when illuminated again.
    • When the illumination mode is OFF:
      • The board should print as normal with all entities illuminated (no hidden tiles).

Assumptions / Restrictions / Clarifications

When your code is tested:

  • [radius] will be an integer.

Examples

Input:

4 3
W 2 2 2 7
W 7 2 7 7
w 1 1
b 1 8
g 8 1
e 8 8
s
i 5
i 4
i 3
i 2
i 1
i 0
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 4 3
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
W 2 2 2 7
W 7 2 7 7
w 1 1
b 1 8
g 8 1
e 8 8
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . ||||| . | . | . | . | . | . |(O)| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . ||||||||||||||||||||||||| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . ||||||||||||||||||||||||| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |*^*| . | . | . | . | . | . |[X]| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
i 5
Illumination Mode: Activated
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . ||||| . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . ||||||||||||||||||||||||| X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . ||||||||||||||||||||||||| X | X |
+---+---+---+---+---+---+---+---+---+---+
| . |*^*| . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

i 4
Illumination Mode: Activated
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X ||||| . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . ||||||||||||||||||||| X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . ||||||||||||||||| X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

i 3
Illumination Mode: Activated
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . ||||||||||||||||| X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X ||||| X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

i 2
Illumination Mode: Activated
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X ||||| X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . |^_^| . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

i 1
Illumination Mode: Activated
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . |^_^| . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

i 0
Illumination Mode: Deactivated
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . ||||| . | . | . | . | . | . |(O)| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . ||||||||||||||||||||||||| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . ||||||||||||||||||||||||| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |*^*| . | . | . | . | . | . |[X]| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

4 3
W 2 2 2 7
W 7 2 7 7
w 1 1
b 1 8
g 8 1
e 8 8
s
i 4
d
d
d
s
a
a
a
w
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 4 3
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
W 2 2 2 7
W 7 2 7 7
w 1 1
b 1 8
g 8 1
e 8 8
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . ||||| . | . | . | . | . | . |(O)| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . ||||||||||||||||||||||||| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . ||||||||||||||||||||||||| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |*^*| . | . | . | . | . | . |[X]| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
i 4
Illumination Mode: Activated
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X ||||| . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . ||||||||||||||||||||| X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . ||||||||||||||||| X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . ||||||||||||||||||||||||| X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |^_^| . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X ||||||||||||||||||||| X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X ||||||||||||||||||||||||| . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . |   |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X ||||||||||||||||||||| X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | . | . | . |(O)| X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X ||||||||||||||||||||| . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . |   |   |   |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X ||||||||||||||||| . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X ||||||||||||||||| . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X ||||||||||||||||||||| . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | . | . | . |[X]| X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X ||||||||||||||||||||| X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . |   |   |   |   | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . |^_^|   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X ||||||||||||||||||||||||| . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X ||||||||||||||||||||| X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . |   |   |   |   | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|   |   | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . ||||||||||||||||||||||||| X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . ||||||||||||||||| X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^|   |   |   | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . ||||||||||||||||||||| X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X |*^*| . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X ||||| . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . ||||||||||||||||||||| X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^|   |   |   | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . ||||||||||||||||| X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

9 4
b 4 4
s
WW
w
WD
i 2
r
r
r
r
i 0
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 9 4
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
b 4 4
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
WW
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

WD
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)|^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

i 2
Illumination Mode: Activated
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X |   | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . |(O)|^_^| . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X |   | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X |   | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . |   |^_^| . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X |(O)| . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X |   | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . |   |^_^| . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X |   | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X |   | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . |   |^_^| . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X |   | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X |   | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . |   |^_^| . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X |   | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

i 0
Illumination Mode: Deactivated
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Autotest

Stage 3.5 - Gravity Shift

In the previous substage, we focused on making CS Caverun more realistic. This time we cast the laws of physics aside! By the end of this substage, the user will have power over gravity to affect the direction in which boulders move.

Task

In this substage, you will need to:

  1. Implement the Gravity Shift mechanic:
    • Add a new command g [direction] to the Gameplay Loop where [direction] is one of the characters w, a, s, or d.

    • When a gravity shift g [direction] command is entered, if the direction is:

      • w then print "Gravity now pulls UP!\n".
      • a then print "Gravity now pulls LEFT!\n".
      • s then print "Gravity now pulls DOWN!\n".
      • d then print "Gravity now pulls RIGHT!\n".

      and update the Boulder Movement mechanic from Stage 3.2 so that boulders now move in the new direction of gravity.

    • For example:

      • If g w is entered, boulders should move up towards the top edge of the board.
      • If g a is entered, boulders should move left towards the left-hand-side of the board.

Assumptions / Restrictions / Clarifications

  • When your code is tested:
    • Only valid inputs for the g [direction] command will be used. We will not test invalid input formats such as g 3 or g D.

Examples

Input:

5 4
b 6 4
s
w
d
s
d
g w
r
g d
g s
g a
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 5 4
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
b 6 4
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

g w
Gravity now pulls UP!
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)|   |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)|   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

g d
Gravity now pulls RIGHT!
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |(O)| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

g s
Gravity now pulls DOWN!
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |(O)|^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

g a
Gravity now pulls LEFT!
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)|   |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

2 8
b 1 3
b 1 5
b 1 7
s
AA
r
AA
r
AA
g d
r
r
r
g a
r
r
r
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 2 8
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . |^_^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
b 1 3
b 1 5
b 1 7
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |(O)| . |(O)| . |(O)| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . |^_^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
AA
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |(O)| . |(O)| . |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^_^|(O)|   | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |(O)| . |(O)| . |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^_^|(O)|   | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

AA
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |(O)| . |   | . |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|(O)|   |(O)|   | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |(O)| . |   | . |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|(O)|   |(O)|   | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

AA
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . |   | . |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^|(O)|   |(O)|   |(O)|   | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

g d
Gravity now pulls RIGHT!
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . |   | . |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^|   |(O)|   |(O)|   |(O)| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . |   | . |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^|   |   |(O)|   |(O)|(O)| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . |   | . |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^|   |   |   |(O)|(O)|(O)| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . |   | . |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^|   |   |   |(O)|(O)|(O)| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

g a
Gravity now pulls LEFT!
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . |   | . |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^|   |   |(O)|(O)|(O)|   | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . |   | . |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^|   |(O)|(O)|(O)|   |   | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . |   | . |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^|(O)|(O)|(O)|   |   |   | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
Respawning!
+---+---+---+---+---+---+---+---+---+---+
| Lives: 2    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . |   | . |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |(O)|(O)|(O)|   |   |   |^_^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Autotest

Testing & Submission

Are you finished with this stage? If so, you should make sure to do the following:

  • Run 1511 style, and clean up any issues a human may have reading your code. Don't forget -- 20% of your mark in the assignment is based on style!
  • Autotest for this stage of the assignment by running the autotest-stage command as shown below.
  • Remember -- give early, and give often. Only your last submission counts, but why not be safe and submit right now?
1511 style cs_caverun.c
1511 autotest-stage 03 cs_caverun
give cs1511 ass1_cs_caverun cs_caverun.c

Stage 4

Welcome to Stage 4! In this stage you will have to opportunity to extend the core functionality of CS Caverun with some advanced features. This milestone consists of two substages:

  • Stage 4.1 - The Floor Is Lava.
  • Stage 4.2 - Shadows In The Deep.

Stage 4.1 introduces a LAVA entity and adds the Lava Turn to the Gameplay Loop.

Stage 4.1 - The Floor Is Lava

Since the earliest days of video games, programmers have hidden secret codes and 'Easter Eggs' for curious users to discover. A classic example that still appears in modern titles (and software) is the Konami Code. This legacy continues in CS Caverun. You'll add two 'lava codes' to your game, each activating a special lava-powered mode!

Task

In this stage, the LAVA entity will be added to the game. There are some key differences in how your program should treat this new entity:

  • LAVA will be dynamic: it will be able to appear at, and disappear from tiles on the board.
  • LAVA doesn't replace the entity on a tile. Instead, LAVA is added separately while preserving the tile's regular entity. For example:
    • If a tile containing DIRT has LAVA added to it, and the LAVA is subsequently removed from the tile, then the tile will still contain the original DIRT entity.
    • If a tile containing DIRT and LAVA has its DIRT replaced with EMPTY, then tile will contain LAVA as well as the EMPTY entity that replaced the DIRT.
  • When the board is displayed with print_board(), LAVA should take priority over all other entity types. For example:
    • If a tile contains both a WALL and LAVA at the same time, and the board is printed, the tile should appear as LAVA.

In this substage, you will need to:

Incorporate the new LAVA entity into the game

  1. Modify the Setup Loop from Stage 1.3 to add lava to the board:

    • Given the command l [row] [col], add a LAVA entity to the tile at [row] [col].
    • Reminder: LAVA is separate from a tile's pre-existing entity.
    • Lava follows the same placement rules as other features in Stage 1.4 with respect to valid and invalid locations.
  2. Ensure the program follows the "Lava Destination Rules":

    • Player and BOULDER movement validation (Stages 2.1, 3.1, and 3.2) should ignore LAVA entities. Neither the player nor boulders are blocked from moving onto (or through) a LAVA entity.
  3. Update the Respawn mechanic from Stage 3.3:

    • Any attempt to respawn the player onto a LAVA tile is blocked. If this occurs:
      • Print "Respawn blocked! You're toast! Final score: %d points.\n" where %d is the score.
      • Display the game board with the provided print_board() function.
      • Exit immediately, with no other outputs.
  4. Ensure the program follows the "Lava Illumination Rules":

    • Lava tiles glow with their own brightness, so are always visible.
    • With respect to Stage 3.4 (illumination):
      • LAVA is always illuminated and should always appear when the board is printed, regardless of the illumination mode or [radius].

Implement the Lava Turn

  1. Add a Lava Turn to the Gameplay Loop:

    • The Lava Turn begins after the Boulder Turn i.e. after any associated loss-of-life or respawn caused by boulder movement.
    • Instead of printing the board after the Boulder Turn, the board should now be printed after the Lava Turn.
  2. Implement the Lava Damage mechanic:

    • At the end of the Lava Turn:
      • If the player is located on a LAVA tile, then the player faints (losing a life) and attempts to respawn according to the Loss-of-Life and (updated) Respawn mechanics.
  3. Implement the Lava Activation mechanic:

    • There are two lava codes, and two lava modes:
      1. The "wdsaL" code corresponds to the "Game of Lava" mode.
      2. The "wasdL" code corresponds to the "Lava Seeds" mode.
    • If the most recent sequence of past commands matches one of the lava codes, the corresponding mode is activated:
      • If the user ever enters the commands w, d, s, a, L in sequence:
        • The "Game of Lava" mode is activated.
        • Print "Game Of Lava: Activated\n".
      • If the user ever enters the commands w, a, s, d, L in sequence:
        • The "Lava Seeds" mode is activated.
        • Print "Lava Seeds: Activated\n".
      • Only one mode can be active at any time.
      • If a new mode is activated while another mode is already active, the new mode replaces the previous one.
      • The activation of lava modes occurs at the beginning of the Gameplay Loop, immediately after commands are read. It does not count as a Player Turn, so it should not trigger the Boulder or Lava Turns, nor should it cause the board to be printed.
    • When a lava mode is active:
      • All points obtained from gems and dirt are multiplied by 10. This will require updates to:
        • the Collection mechanic, and
        • the m command.
  4. Implement the Lava Movement mechanic:

    • Before the Lava Damage mechanic, lava can appear and disappear from the map - this is the Lava Movement mechanic.
    • When a lava mode is active, LAVA tiles are treated like "living" cells.
    • At the start of the Lava Turn, the board has a pattern of alive (LAVA) and dead (no LAVA) tiles.
    • During a Lava Turn, a set of rules is applied to determine which tiles will contain LAVA at the end of the turn.
    • If the Game of Lava mode is active, LAVA tiles evolve according to Conway's Game of Life:
      • Birth: If a dead (no LAVA) tile is surrounded by exactly 3 neighbouring LAVA tiles, it becomes a new LAVA tile by the end of the turn.
      • Survival: If a LAVA tile has 2 or 3 neighbouring LAVA tiles, it "survives" and remains LAVA for the next turn.
      • Death: If a LAVA tile has fewer than 2 neighbours or more than 3 neighbours, it disappears by the end of the turn.
    • If the Lava Seeds mode is active, LAVA tiles evolve according to the Seeds cellular automaton:
      • Birth: if a dead (no LAVA) tile has exactly 2 neighbouring LAVA tiles, it turns into a LAVA tile by the end of the turn.
      • Survival & Death: LAVA tiles in Seeds never survive to the next turn. All pre-existing LAVA tiles disappear by the end of the turn.

Assumptions / Restrictions / Clarifications

  • Detecting lava codes is independent of game events. For example, detection of lava codes and activation of lava modes is unaffected if a move is blocked, or if the player respawns.

When code is tested:

  • We will not test the case where any feature is placed on top of lava during the Setup Phase.
  • The L command will only be entered after a valid "wasd" or "wdsa" sequence.

Examples

Input:

4 4
l 4 5
s
p
m
DD
p
m
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 4 4
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
l 4 5
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|^^^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
p
You have 0 point(s)!
m
========= Map Statistics =========
Tiles Remaining by Type:
  - DIRT:      99
  - GEMS:      0
  - BOULDERS:  0
Completion Status:
  - Collectible Completion: 0.0%
  - Maximum Points Remaining: 99
==================================
DD
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |^^^|^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

p
You have 2 point(s)!
m
========= Map Statistics =========
Tiles Remaining by Type:
  - DIRT:      97
  - GEMS:      0
  - BOULDERS:  0
Completion Status:
  - Collectible Completion: 2.0%
  - Maximum Points Remaining: 97
==================================
q
--- Quitting Game ---

Input:

5 4
b 1 4
l 4 4
s
p
m
WW
r
WD
p
m
r
r
r
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 5 4
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
b 1 4
l 4 4
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
p
You have 0 point(s)!
m
========= Map Statistics =========
Tiles Remaining by Type:
  - DIRT:      98
  - GEMS:      0
  - BOULDERS:  1
Completion Status:
  - Collectible Completion: 0.0%
  - Maximum Points Remaining: 98
==================================
WW
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

WD
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)|^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

p
You have 4 point(s)!
m
========= Map Statistics =========
Tiles Remaining by Type:
  - DIRT:      94
  - GEMS:      0
  - BOULDERS:  1
Completion Status:
  - Collectible Completion: 4.1%
  - Maximum Points Remaining: 94
==================================
r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |(O)| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

4 4
l 4 6
s
d
d
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 4 4
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
l 4 6
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . |^^^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |^_^|^^^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
Respawning!
+---+---+---+---+---+---+---+---+---+---+
| Lives: 2    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|   |^^^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

Click HERE to view inputs for this example
5 6
l 3 4
l 4 4
l 5 4
l 3 9
l 4 9
l 5 9
l 8 9
l 9 9
l 0 9
g 5 3
s
p
m
w
d
s
a
L
p
m
r
r
a
a
a
w
p
AW
p
r
a
i 3
AA
p
m
w

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 5 6
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
l 3 4
l 4 4
l 5 4
l 3 9
l 4 9
l 5 9
l 8 9
l 9 9
l 0 9
g 5 3
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |*^*|^^^| . |^_^| . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
p
You have 0 point(s)!
m
========= Map Statistics =========
Tiles Remaining by Type:
  - DIRT:      98
  - GEMS:      1
  - BOULDERS:  0
Completion Status:
  - Collectible Completion: 0.0%
  - Maximum Points Remaining: 118
==================================
w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . |^_^| . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |*^*|^^^| . |   | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . |   |^_^| . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |*^*|^^^| . |   | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . |   |   | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |*^*|^^^| . |   |^_^| . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . |   |   | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |*^*|^^^| . |^_^|   | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+

L
Game Of Lava: Activated
p
You have 3 point(s)!
m
========= Map Statistics =========
Tiles Remaining by Type:
  - DIRT:      95
  - GEMS:      1
  - BOULDERS:  0
Completion Status:
  - Collectible Completion: 3.0%
  - Maximum Points Remaining: 1150
==================================
r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . |^^^|^^^|^^^|   |   |^^^|^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |*^*| . | . |^_^|   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . | . | . | . | . | . |^^^|^^^|
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . |   |   | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |*^*|^^^| . |^_^|   | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . |^^^|^^^|^^^|   |   |^^^|^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |*^*| . |^_^|   |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . | . | . | . | . | . |^^^|^^^|
+---+---+---+---+---+---+---+---+---+---+

a
Respawning!
+---+---+---+---+---+---+---+---+---+---+
| Lives: 2    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . |   |   | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |*^*|^^^|   |^_^|   | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 2    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . |^^^|^^^|^^^|   |   |^^^|^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |*^*|   |^_^|   |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . | . | . | . | . | . |^^^|^^^|
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 2    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^|^_^|   |   | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |*^*|^^^|   |   |   | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+

p
You have 33 point(s)!
AW
+---+---+---+---+---+---+---+---+---+---+
| Lives: 2    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . |^^^|^^^|^^^|   |   |^^^|^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |*^*|   |   |   |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . | . | . | . | . | . |^^^|^^^|
+---+---+---+---+---+---+---+---+---+---+

p
You have 53 point(s)!
r
Respawning!
+---+---+---+---+---+---+---+---+---+---+
| Lives: 1    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^|   |   |   | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |*^*|^^^|   |^_^|   | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 1    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . |^^^|^^^|^^^|   |   |^^^|^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |*^*|   |^_^|   |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . | . | . | . | . | . |^^^|^^^|
+---+---+---+---+---+---+---+---+---+---+

i 3
Illumination Mode: Activated
+---+---+---+---+---+---+---+---+---+---+
| Lives: 1    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . |   | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
|^^^| X | X |^^^|^^^|^^^|   |   |^^^|^^^|
+---+---+---+---+---+---+---+---+---+---+
| X | X | . |*^*|   |^_^|   |   | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|^^^| X | X | X | X | X | X | X |^^^|^^^|
+---+---+---+---+---+---+---+---+---+---+

AA
+---+---+---+---+---+---+---+---+---+---+
| Lives: 1    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X |^^^|
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . |^^^| . | X | X | X |^^^|
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . |^^^|   | X | X | X |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^|^^^|   |   | X | X |^^^|
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X |^^^|
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X |^^^|
+---+---+---+---+---+---+---+---+---+---+

p
You have 253 point(s)!
m
========= Map Statistics =========
Tiles Remaining by Type:
  - DIRT:      90
  - GEMS:      0
  - BOULDERS:  0
Completion Status:
  - Collectible Completion: 9.1%
  - Maximum Points Remaining: 900
==================================
w
Game Lost! You scored 263 points!
+---+---+---+---+---+---+---+---+---+---+
| Lives: 0    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . |   | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . |^_^|^^^|^^^|   | X |^^^|^^^|
+---+---+---+---+---+---+---+---+---+---+
| X | . | . |   |   |   | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|^^^| X | X | X | X | X | X | X |^^^|^^^|
+---+---+---+---+---+---+---+---+---+---+

Input:

Click HERE to view inputs for this example
5 4
l 1 7
l 2 8
l 3 6
l 3 7
l 3 8
l 6 2
l 7 3
l 8 1
l 8 2
l 8 3
s
w
d
s
a
L
w
d
s
a
w
d
s
a
w
d
s
a
w
d
s
a
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 5 4
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
l 1 7
l 2 8
l 3 6
l 3 7
l 3 8
l 6 2
l 7 3
l 8 1
l 8 2
l 8 3
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^^^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . |^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^^^|^^^|^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^|^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^^^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . |^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^^^|^^^|^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^|^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^^^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . |^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^^^|^^^|^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^|^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^^^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . |^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^^^|^^^|^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^|^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^^^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . |^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^^^|^^^|^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^|^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

L
Game Of Lava: Activated
w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^^^| . |^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^^^|^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|   | . |^^^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^| . |^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . |^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^^^| . |^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |^_^| . |^^^|^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^| . |^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^^^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . |^^^|^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . |^^^|^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^^^|^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . |^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . |^^^|^^^|^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^|^^^|^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^^^| . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|   | . | . |^^^|^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . | . |^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^| . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^^^|^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^^^|^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |^_^| . |^^^| . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . | . |^^^|^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^| . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^^^|^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . |^^^| . |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . | . |   |   | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |^_^| . | . |^^^|^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^|^^^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^^^|^^^|^^^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . | . |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . | . |^_^|   | . | . |^^^|^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^^^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^|^^^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . | . |^_^|   | . | . |^^^| . |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . | . |   |   | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^^^| . |^^^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^^^| . |^^^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^|^^^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . | . |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . | . |   |   | . | . |^^^| . |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^^^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^^^|^^^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^|^^^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
|^^^|^^^| . | . |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^^^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^|^^^|^^^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . | . |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^| . | . |^_^|   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^^^|^^^| . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^^^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . |^^^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^^^|^^^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^^^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^| . | . |   |   | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
|^^^|^^^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^^^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . |^^^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^^^|^^^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^| . | . |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^| . | . | . | . | . | . | . |^^^|
+---+---+---+---+---+---+---+---+---+---+
|^^^|^^^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^^^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^^^|^^^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^^^|^^^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^^^| . | . | . |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^|^^^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^^^|^^^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^^^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^^^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^^^|^^^|^^^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^| . | . |^_^|   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^^^|^^^|^^^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

Click HERE to view inputs for this example
7 7
l 7 8
l 8 7
l 1 1
l 2 2
l 2 3
l 3 2
l 3 3
l 4 4
s
w
a
s
d
L
d
s
a
w
d
s
r

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 7 7
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^_^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
l 7 8
l 8 7
l 1 1
l 2 2
l 2 3
l 3 2
l 3 3
l 4 4
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^_^|^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^^^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^_^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |   |^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^^^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^_^|   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |   |^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^^^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^_^|   |^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^^^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   |^_^|^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^^^| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

L
Lava Seeds: Activated
d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   |^^^|^_^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . |^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   |   |^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^^^|^_^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   |^^^|   | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^_^|^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   |^_^|^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^^^|   | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   |^^^|^_^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |   |^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^|^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   |   |^^^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |^^^|^_^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
Respawn blocked! You're toast! Final score: 33 points.
+---+---+---+---+---+---+---+---+---+---+
| Lives: 2    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^^^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^^^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^^^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^^^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   |   | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   |^^^|   | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . |   |^_^| . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Autotest

Stage 4.2 - Shadows In The Deep

In substage 3.4, you introduced an illumination mode that hid distant tiles in darkness. Now, your program will build on that idea with a new 'shadow' mode. When shadow mode is active, certain features (such as boulders, walls, and gems) will block the light from the player’s lamp, causing them to cast shadows that hide tiles behind them.

Introduction

Determining realistic shadows in a game scene can be complex and computationally expensive. Because of this, CS Caverun uses a simplified method to approximate shadows:

  • The player acts as a source of light that illuminates tiles.
  • Rays of light are emitted from the player's tile in all directions.
  • If an opaque entity (a wall, boulder, or gem) blocks the light between the player and a tile, then the tile is "shadowed".
  • Detailed rules for determining whether a tile is shadowed are included after the following task description.

Task

This substage has one task:

  1. Implement the Shadow Mode mechanic:
    • The program has a shadow mode that can be turned ON or OFF.
    • The Gameplay Phase begins with shadow mode OFF.
    • Add a new shadow command u to the Gameplay Loop that toggles the shadow mode between ON and OFF.
    • When a user enters the u command:
      • If shadow mode is OFF:
        • Print "Shadow Mode: Activated\n".
        • Turn the shadow mode ON.
        • Display the board with print_board().
      • Otherwise, if shadow mode is ON:
        • Print "Shadow Mode: Deactivated\n".
        • Turn the shadow mode OFF.
        • Display the board with print_board().
    • When shadow mode is ON:
      • All tiles that are shadowed should be hidden whenever the board is printed by assigning its entity to HIDDEN when print_board() is called.
    • When shadow mode is OFF:
      • There is no change to how tiles should appear when the board is printed.

Determining Whether a Tile is Shadowed

Assumptions

  • The board consists of 100 square tiles arranged in a tight 10-by-10 grid, with no gaps between tiles.
  • Each tile is a unit square, 1 unit wide and 1 unit tall.
  • The coordinates of the centre of each tile correspond to its array indices. For example, the centre of board[2][3] is located at (2,3).

The Rules

  • Rays of light are emitted from the centre of the player's tile in all directions.
  • Any tile containing a WALL, BOULDER, or GEM is considered "opaque".
  • Opaque tiles can block rays of light.
  • A tile T is "shadowed" if there is not a clear line of sight from the centre of the player's tile to the centre of tile T. In other words, if an opaque entity (a wall, boulder, or gem) blocks the ray of light between the player and tile T, then T is "shadowed".

Several images with step-by-step explanations are included below to help clarify these rules. The last figure specifically addresses how to handle cases where the ray of light intersects at the corners of opaque tiles.


The Unshadowed Case

Figure 4.2.1 illustrates a scenario where a tile is not shadowed. In this example:

  • A ray of light (shown as a light orange arrow) extends from the centre of the player’s tile at (5,1) to the centre of tile A at (2,2).
  • This ray does not intersect (pass through the middle of) any opaque tiles, so tile A is not shadowed.
Tile A is not shadowed

Figure 4.2.1. Tile A is not shadowed.


The Shadowed Case

Figure 4.2.2 illustrates a scenario where a tile is shadowed. In this example:

  • A ray of light (shown as a dark orange arrow) extends from the centre of the player’s tile at (5,1) to the centre of tile B at (4,8).
  • This ray intersects (passes through) the wall at (5,3). Since WALL tiles are opaque, they block rays of light, so tile B is shadowed and displayed as an X.
Tile B is shadowed by the wall at (5,3)

Figure 4.2.2. Tile B is shadowed by the wall at (5,3).

The previous diagram is incomplete! To check this: draw a ray of light from the centre of the player to tile (6,7). Does this intersect the wall at (5,3)? It does! In fact, the wall at (5,3) shadows many more tiles. These are shown in Figure 4.2.3. If you draw rays of light from the player to each tile marked with an X, you'll notice that they all intersect (5,3).

The wall at (5,3) shadows 20 tiles, each marked with an `X`

Figure 4.2.3. The wall at (5,3) shadows 20 tiles, each marked with an `X`.


The Almost Shadowed Cases

Figure 4.2.4 illustrates two corner-cases where tiles are almost shadowed. In this example:

  1. A ray of light (shown as a blue arrow) extends from the centre of the player’s tile at (5,1) to the centre of tile C at (4,4).

    • This ray intersects the top-left corner of the wall at (5,3).
    • In this corner case, since the opaque tile (5,3) is below the blue ray, we say that this ray is "partially blocked from below".
    • As this ray is not completely blocked, we allow it to pass through, and consider C to be not shadowed.
  2. A ray of light (shown as a pink arrow) extends from the centre of the player’s tile at (5,1) to the centre of tile D at (7,7).

    • This ray intersects the bottom-left corner of the wall at (5,3).
    • Since the opaque tile (5,3) is above the pink ray, we say that this ray is "partially blocked from above".
    • As this ray is not completely blocked, we allow it to pass through, and consider D to be not shadowed.

In summary: when a ray of light passes (exactly) through a corner of an opaque tile, it becomes partially blocked "from above" or "from below".

Tiles C and D are not shadowed

Figure 4.2.4. Tiles C and D are not shadowed.


A Summary of Basic Cases

Figure 4.2.5 summarises all cases discussed so far into one diagram for you to reference:

  • A is not shadowed, because the light orange ray is not blocked.
  • B is shadowed, because the dark orange ray is blocked by (5,3).
  • C is not shadowed, because the blue ray is only partially blocked (from below).
  • D is not shadowed, because the pink ray is only partially blocked (from above).
Combined diagram showing tiles A, B, C, and D

Figure 4.2.5. Combined diagram showing tiles A, B, C, and D.


The Complex Case: Partially Blocked from Above and Below

Figure 4.2.6 illustrates how corner cases can combine to shadow previously un-shadowed tiles. In this example:

  1. A ray of light (shown as a green arrow) extends from the centre of the player’s tile at (5,1) to the centre of tile E at (1,5).

    • This ray intersects the bottom-right corner of the wall at (2,3) so is partially blocked from above.
    • This ray also intersects the top-left corner of the wall at (3,4) so is partially blocked from below.
    • Since this ray is partially blocked from both above and below, we consider it to be totally blocked, and E is shadowed by the combined effects of opaque tiles (2,3) and (3,4).
  2. A ray of light (shown as a light orange arrow) extends from the centre of the player’s tile at (5,1) to the centre of tile F at (8,4).

    • This ray intersects the bottom-left corner of wall (6,3) so is partially blocked from above.
    • This ray also intersects the top-right corner of (8,3) so is partially blocked from below.
    • Since this ray is partially blocked from both above and below, we consider it to be totally blocked, and F is shadowed by the combined effects of opaque tiles (6,3) and (8,3).

In summary: when a ray of light from the player to a tile T is partially blocked from above and below, the ray is considered to be totally blocked, and T becomes shadowed.

Combined effects: tiles blocked from above and below

Figure 4.2.6. Tile E is shadowed by the combined effects of the walls at (2,3) and (3,4). Tile F is shadowed by the combined effects of the walls at (6,3) and (8,3).

Assumptions / Restrictions / Clarifications

  • Opaque tiles do not block light from reaching themselves.

  • If the player is on the same tile as an opaque entity, then the entire board is shadowed.

  • Trivia: the u command is named after the Latin word "umbra".

Examples

Input:

Click HERE to view inputs for this example
4 4
w 5 4
s
u
d
s
s
a
a
w
w
w
d
d
d
s
s
s
s
a
a
a
a
w
w
w
w
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 4 4
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
w 5 4
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . ||||| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
u
Shadow Mode: Activated
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . ||||| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | X | X | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | X | X | X | X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | X | X | X | X | X | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X ||||| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X |||||^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X |||||   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | . |
+---+---+---+---+---+---+---+---+---+---+
| . | X | X | X | X | X | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | X | X | X | X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | X | X | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |||||   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | X | X | X | X | X | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . ||||| X | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^|   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^||||| X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^|   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   ||||| X | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | X | X | X | X | X | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |||||   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | X | X | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | X | X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | X | X | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |||||   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | X |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | X | X | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | X | X | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | X | X | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |||||   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | X |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | X | X | X | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | X | X | X | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X |||||   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | X | X | X |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | X | X |||||   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X |||||   |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X |   |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | X | X |||||   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | X | X | X |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X |||||   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | X | X | X | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | X | X | X |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | X |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |||||   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^_^|   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | X | X | X | X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | X | X | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | X | X | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | X | X |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | X |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |||||   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | X | X | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | X | X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | X | X |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |||||   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^|   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   | X | X | X | X | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | X | X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   ||||| X |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^|   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   ||||| X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^|   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^|   ||||| X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   |   |   | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   |   |   |   | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^|   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   ||||| X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   |   | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   |   |   | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |^_^|   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   ||||| X |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   | X | X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . |   |   |   | X | X | X | X | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

4 4
w 5 4
s
u
i 4
d
s
s
a
a
w
w
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 4 4
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
w 5 4
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . ||||| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
u
Shadow Mode: Activated
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . ||||| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | X | X | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | X | X | X | X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | X | X | X | X | X | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | . |
+---+---+---+---+---+---+---+---+---+---+

i 4
Illumination Mode: Activated
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . ||||| . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | X | X | X | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | X ||||| . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X |   |   | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X |||||^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X |   | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | X |||||   | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | X | X | X | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . |||||   | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^|   | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . ||||| X | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^|   |   | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^||||| X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^|   |   | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   ||||| X | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

Click HERE to view inputs for this example
0 0
w 2 7
b 3 3
e 5 3
g 6 6
w 7 3
s
u
s
s
s
s
s
s
s
s
s
d
d
d
d
d
w
w
w
w
w
w
w
w
w
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 0 0
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|^_^| . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
w 2 7
b 3 3
e 5 3
g 6 6
w 7 3
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|^_^| . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . ||||| . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |(O)| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |[X]| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |*^*| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . ||||| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
u
Shadow Mode: Activated
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|^_^| . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . ||||| X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |(O)| X | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | X | X | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |[X]| X | X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | X | X | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . ||||| . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | X | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^_^| . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . ||||| X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |(O)| X | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | X | X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |[X]| . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . ||||| . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | X | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | X | X | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^_^| . | . | . | . | . | . ||||| X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |(O)| X | X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |[X]| . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |*^*| X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . ||||| . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | X | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | X | X | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|^_^| . | . |(O)| X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |[X]| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |*^*| X | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . ||||| . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | X | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | X | X | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |(O)| X | X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^_^| . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |[X]| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |*^*| X | X | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . ||||| X | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | X | X | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | X | X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | X | X | X ||||| X | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |(O)| X | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^_^| . | . |[X]| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |*^*| X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . ||||| X | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | X | X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | X | X | X | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | X | X | X | . ||||| X | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |(O)| X | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |[X]| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^_^| . | . | . | . | . |*^*| X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . ||||| X | X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | X | X | X | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | X | X | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | X | X | . | . ||||| X | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |(O)| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |[X]| . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|^_^| . | . ||||| X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | X | X | X | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | X | X | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | X | X | . | . ||||| X | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |(O)| . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |[X]| . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . ||||| X | X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^_^| . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | X | X | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | X | X | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | X | X | . | . ||||| X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |(O)| . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |[X]| . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | X | X | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . ||||| X | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^_^| . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | X | X | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | X | X | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |(O)| . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |[X]| X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | X | X | X |*^*| X | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . ||||| X | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   |^_^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |(O)| X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | X | X | . |*^*| X | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . ||||| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   |   |^_^| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   | X | X | X | X | X | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | X | X | X | X | X | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | X | X | X | X | X | . ||||| . | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | X | X | X | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | X | X | X | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | X | X | X | . | X | X | X | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | X | . | . |*^*| X | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . ||||| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   |   |   |^_^| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | . | . ||||| X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X |(O)| . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | X | X | . |
+---+---+---+---+---+---+---+---+---+---+
|   | X | X | X | . | . | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | X | X | . | . |*^*| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . ||||| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   |   |   |   |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

d
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   | X | X | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | X | X | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | X | X | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . |(O)| . | . | X | X | X | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X |[X]| . | . | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | X | X | X | . | . |*^*| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | X ||||| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   |   |   |   |   |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   | X | X | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | X | X | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | X | X | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |(O)| . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | X | X | X | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . |[X]| . | . | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . |*^*| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | X | X ||||| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   | X | X | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | X | X | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | X | X | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |(O)| . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |[X]| . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . |*^*| X | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X ||||| . |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | X | X | . | . | . | . | X | X | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | X | X | . | . | . ||||| . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |(O)| . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |[X]| . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . |^_^|*^*| X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | X | X ||||| . |   | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . |   | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X |   |   |   |   | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | X | X | . |
+---+---+---+---+---+---+---+---+---+---+
|   | X | X | X | . | . | . ||||| . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | X |(O)| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |[X]| . |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . |   |*^*| X | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | X ||||| . |   | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | X | X | X | . |   | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X |   |   |   | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . ||||| X | . |
+---+---+---+---+---+---+---+---+---+---+
|   | X | X |(O)| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |[X]| . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . |   |*^*| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . ||||| . |   | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | X | X | . |   | X | X | X | . |
+---+---+---+---+---+---+---+---+---+---+
|   | X | X |   |   |   | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . ||||| X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X |(O)| . |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |[X]| . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . |   |*^*| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . ||||| . |   | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | X | X | . |   | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | X | X |   |   |   | X | X | X | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . |^_^| . ||||| X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | X | X |(O)| . |   | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . |[X]| . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . |   |*^*| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . ||||| . |   | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | X | X | . |   | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   |   | X | X |   |   | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . |   | . ||||| X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | X |(O)| . |   | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | X | X | X | . |   | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X |[X]| . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . |   |*^*| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . ||||| . |   | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | . | X | X | . |   | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X |   | X | X |   |   | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . |^_^| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . |   | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . | . | . |   | . ||||| X | . |
+---+---+---+---+---+---+---+---+---+---+
|   | . | . |(O)| . |   | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | . | X | X | . |   | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
|   | X | X |[X]| . |   | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . |   |*^*| . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . ||||| . |   | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . |   | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X |   |   | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

8 1
w 3 5
s
u
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 8 1
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^_^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
w 3 5
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . ||||| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^_^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
u
Shadow Mode: Activated
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . ||||| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^_^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

8 1
w 7 3
s
u
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 8 1
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^_^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
w 7 3
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . ||||| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^_^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
u
Shadow Mode: Activated
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . ||||| X | X | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^_^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

8 1
w 3 5
w 7 3
s
u
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 8 1
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^_^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
w 3 5
w 7 3
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . ||||| . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . ||||| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^_^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
u
Shadow Mode: Activated
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . ||||| X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . ||||| X | X | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . |^_^| . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

3 0
w 5 4
w 3 2
s
u
q

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 3 0
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^_^| . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
w 5 4
w 3 2
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
|^_^| . ||||| . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . ||||| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
u
Shadow Mode: Activated
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
|^_^| . ||||| X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . ||||| X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+

q
--- Quitting Game ---

Input:

4 4
b 3 3
s
u
w
DD
s
SS
a
AA
w
WD
r
r
g d
r
u
u
r
g w
r
r
g a
r
g s

Input and Output:

dcc -o cs_caverun cs_caverun.c
./cs_caverun
Welcome to CS Caverun!

--- Game Setup Phase ---
Enter the player's starting position: 4 4
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

Enter map features:
b 3 3
s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |(O)| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

--- Gameplay Phase ---
u
Shadow Mode: Activated
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | X |(O)| . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X |(O)|^_^| . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

DD
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X |(O)|   |   |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . |   | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

s
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X |(O)|   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

SS
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | X | X | X | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | X |(O)|   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |^_^| . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

a
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | X | X | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |(O)|   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . |^_^|   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

AA
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | X | X | X | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |(O)|   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^|   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

w
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | X | X | X | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | X | X | X | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |(O)|   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . |   | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |^_^| . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

WD
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X |(O)|^_^| . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X |   | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |^_^| . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | X |(O)| . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |^_^| . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |(O)|   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | X | X | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | X | X | X | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

g d
Gravity now pulls RIGHT!
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |^_^| . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |(O)|   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | X | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | X | X | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | X | X | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |^_^| . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |(O)|   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | . |
+---+---+---+---+---+---+---+---+---+---+

u
Shadow Mode: Deactivated
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |^_^| . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |(O)|   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

u
Shadow Mode: Activated
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |^_^| . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |(O)|   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |^_^| . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |(O)| X | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+

g w
Gravity now pulls UP!
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |^_^| . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . |(O)| X | X | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |^_^| . |(O)| X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . |   | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |(O)| X | X | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |^_^| . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

g a
Gravity now pulls LEFT!
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |(O)| X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |^_^| . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

r
+---+---+---+---+---+---+---+---+---+---+
| Lives: 3    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| . | X | X | X | X | X | X | X | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | X | X | X | X | X | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | X | X | X | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |(O)|   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |^_^| . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   | . | . |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . |   |   |   |   | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+
| . | . | . | . | . | . | . | . | . | . |
+---+---+---+---+---+---+---+---+---+---+

g s
Gravity now pulls DOWN!
Respawn blocked! Game over. Final score: 11 points.
+---+---+---+---+---+---+---+---+---+---+
| Lives: 2    C A V E R U N             |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X |^_^| X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+
| X | X | X | X | X | X | X | X | X | X |
+---+---+---+---+---+---+---+---+---+---+

Autotest

Testing & Submission

Are you finished with this stage? If so, you should make sure to do the following:

  • Run 1511 style, and clean up any issues a human may have reading your code. Don't forget -- 20% of your mark in the assignment is based on style!
  • Autotest for this stage of the assignment by running the autotest-stage command as shown below.
  • Remember -- give early, and give often. Only your last submission counts, but why not be safe and submit right now?
1511 style cs_caverun.c
1511 autotest-stage 04 cs_caverun
give cs1511 ass1_cs_caverun cs_caverun.c

Extension

As an extension, we have set up a starting point to add a texture pack to your game via SplashKit.

Extension activities are NOT worth any marks, nor are there any autotests. They are just for fun!

Getting Started

To get started with SplashKit, complete the SplashKit activities.

Sample Code

First, navigate to your SplashKit directory.

cd splashkit

Create a new directory for your project and cd into it.

mkdir cs_caverun
cd cs_caverun

Set up your directory for SplashKit with:

1511 setup-splashkit-directory

Run this cp command to retrieve the sample code.

cp -n /web/cs1511/25T1/activities/cs_caverun/splashkit_example.c .

This should add the splashkit_example.c sample code to your current directory.

Check that SplashKit Works

Let's check that SplashKit works by running a test file. It should display a white square with a grid inside.

skm clang++ splashkit_example.c -o splashkit_example
./splashkit_example

Have a look inside of splashkit_example.c and note that:

  • At the very top, the the SplashKit library "splashkit.h" is included. If you see an error here, check SplashKit #1 - Getting Started for a solution to set up your VS Code project.
  • In the main() function:
    • open_window("SplashKit Example", 600, 400) creates a 600×400 window for displaying graphics.
    • The while (!window_close_requested(w)) loop keeps running until the user closes the window. Within this loop:
      • process_events() handles input or window-related actions (like closing the window).
      • refresh_screen() updates the window so any graphical changes (like drawing a rectangle) are displayed to the user.

Running Your SplashKit Code

When creating your SplashKit program, give it a distinctive name like splashkit_cs_caverun.c.

To compile and run your program, use:

skm clang++ splashkit_cs_caverun.c -o splashkit_cs_caverun
./splashkit_cs_caverun

Writing Your SplashKit Program

Now that you've seen how the sample code works, it’s time to create your own SplashKit program.

If you're not sure where to begin, start by researching the SplashKit Library. The goal at first is not to understand and memorise the entire library. Rather, it's better to skim through the pages to build a broad understanding of the capabilities that SplashKit can bring to your creations.

The Graphics page is a good place to start, and the following sections will be useful:

  • Windows for opening, closing, and controlling the size of windows.
  • Color for using different colours.
  • Graphics for drawing shapes, images, and text.
  • Geometry for handling shapes such as rectangles, circles, lines, and points.
  • Input for capturing and handling user input such as keyboard and mouse events.

Sample Assets

If you wish to use assets similar to the demo project, copy them to your current directory with:

cp -rn /web/cs1511/25T1/activities/cs_caverun/splashkit_assets .

SplashKit Gallery

Have you built something fun or interesting using SplashKit? Show it off and inspire your classmates!

Share any screenshots or short videos of your running program in the SplashKit Gallery on the Course Forum. Feel free to add a brief description or reflect on how you made it, so we can all learn from your mistakes journey 😅.

Tools

Creating Levels in Separate Files

If you are getting sick of typing in your inputs for a level every single time you run CS Caverun, you might want to store your input in a separate file. This allows you to see the result of the Setup Phase or to play your level straight away.

1. Create a file for your input.

First, let's create a file to store in the input for a level that you have created. This isn't a .c file, it's just a regular plain text file, and the file extension .in works nicely for this!

Let's put it in the same directory as your cs_caverun.c code.

ls
cs_caverun.c 
cs_caverun 
my_level.in

2. Add your input to the file

Inside of this file, add the input for the level. Don't add in any of the 'wasd' movement commands as those will come from the terminal (from substage 2.1 onwards).

Your file could look a bit like this:

4 8
w 1 5
b 2 3
g 4 2
s

3. Run the code with your file

Next, instead of just running ./cs_caverun, lets tell the computer to first read from the file we created.

If you have completed substage 2.1 then use the following:

cat my_level.in - | ./cs_caverun

Otherwise, use the following:

cat my_level.in | ./cs_caverun

The dash tells your program that you want to enter more input after what's in the file, allowing you to play the level!

Community Levels

If you want to create your own levels, we encourage you to share them on the course forum! Prefix it with the stage required, and post it on EdStem here.




Assessment

Assignment Conditions

  • Joint work is not permitted on this assignment.

    This is an individual assignment.

    The work you submit must be entirely your own work. Submission of any work even partly written by any other person is not permitted.

    Except, you may use small amounts (< 10 lines) of general purpose code (not specific to the assignment) obtained from a site such as Stack Overflow or other publicly available resources. You should attribute clearly the source of this code in an accompanying comment.

    Assignment submissions will be examined, both automatically and manually for work written by others.

    Do not request help from anyone other than the teaching staff of COMP1511, e.g. in the course forum & help sessions.

    Do not post your assignment code to the course forum - the teaching staff can view assignment code you have recently autotested or submitted with give.

    Rationale: this assignment is designed to develop the individual skills needed to produce an entire working program. Using code written by or taken from other people will stop you learning these skills. Other CSE courses focus on the skill needed for work in a team.

  • The use of code-synthesis tools, such as GitHub Copilot, is not permitted on this assignment.

    The use of Generative AI to generate code solutions is not permitted on this assignment.

    Rationale: this assignment is intended to develop your understanding of basic concepts. Using synthesis tools will stop you learning these fundamental concepts.

  • Sharing, publishing, distributing your assignment work is not permitted.

    Do not provide or show your assignment work to any other person other than the teaching staff of COMP1511. For example, do not message your work to friends.

    Do not publish your assignment code via the internet. For example, do not place your assignment in a public GitHub repository.

    Rationale: by publishing or sharing your work you are facilitating other students using your work which is not permitted. If they submit your work, you may become involved in an academic integrity investigation.

  • Sharing, publishing, distributing your assignment work after the completion of COMP1511 is not permitted.

    For example, do not place your assignment in a public GitHub repository after COMP1511 is over.

    Rationale: COMP1511 sometimes reuses assignment themes using similar concepts and content. Students in future terms find your code and use it which is not permitted and you may become involved in an academic integrity investigation.

Violation of the above conditions may result in an academic integrity investigation with possible penalties, up to and including a mark of 0 in COMP1511 and exclusion from UNSW.

Relevant scholarship authorities will be informed if students holding scholarships are involved in an incident of plagiarism or other misconduct. If you knowingly provide or show your assignment work to another person for any reason, and work derived from it is submitted you may be penalised, even if the work was submitted without your knowledge or consent. This may apply even if your work is submitted by a third party unknown to you.

Note, you will not be penalised if your work is taken without your consent or knowledge.

For more information, read the UNSW Student Code, or contact the course account. The following penalties apply to your total mark for plagiarism:

0 for the assignment Knowingly providing your work to anyone and it is subsequently submitted (by anyone).
0 for the assignment Submitting any other person's work. This includes joint work.
0 FL for COMP1511 Paying another person to complete work. Submitting another person's work without their consent.

Submission of Work

You should submit intermediate versions of your assignment. Every time you autotest or submit, a copy will be saved as a backup. You can find those backups here, by logging in, and choosing the yellow button next to 'cs_caverun.c'.

Every time you work on the assignment and make some progress you should copy your work to your CSE account and submit it using the give command below.

It is fine if intermediate versions do not compile or otherwise fail submission tests.

Only the final submitted version of your assignment will be marked.

You submit your work like this:

give cs1511 ass1_cs_caverun cs_caverun.c

Assessment Scheme

This assignment will contribute 20% to your final mark.

80% of the marks for this assignment will be based on the performance of the code you write in cs_caverun.c

20% of the marks for this assignment will come from manual marking of the readability of the C you have written. The manual marking will involve checking your code for clarity, and readability, which includes the use of functions and efficient use of loops and if statements.

Marks for your performance will be allocated roughly according to the below scheme.

100% for Performance Completely Working Implementation, which exactly follows the spec (Stage 1, 2, 3 and 4).
85% for Performance Completely working implementation of Stage 1, 2 and 3.
65% for Performance Completely working implementation of Stage 1 and Stage 2.
35% for Performance Completely working implementation of Stage 1.

The Challenge stage of the assignment is NOT worth any marks, but is something fun for you to work on getting to know a new library and building something more visual!

Style Marking Rubric

0 1 2 3 4
Formatting (/5)
Indentation (/2) - Should use a consistent indentation scheme. Multiple instances throughout code of inconsistent/bad indentation Code is mostly correctly indented Code is consistently indented throughout the program
Whitespace (/1) - Should use consistent whitespace (for example, 3 + 3 not 3+ 3) Many whitespace errors No whitespace errors
Vertical Whitespace (/1) - Should use consistent whitespace (for example, vertical whitespace between sections of code) Code has no consideration for use of vertical whitespace Code consistently uses reasonable vertical whitespace
Line Length (/1) - Lines should be max. 80 characters long Many lines over 80 characters No lines over 80 characters
Documentation (/5)
Comments (incl. header comment) (/3) - Comments have been used throughout the code above code sections and functions to explain their purpose. A header comment (with name, zID and a program description) has been included No comments provided throughout code Few comments provided throughout code Comments are provided as needed, but some details or explanations may be missing causing the code to be difficult to follow Comments have been used throughout the code above code sections and functions to explain their purpose. A header comment (with name, zID and a program description) has been included
Function/variable/constant naming (/2) - Functions/variables/constants names all follow naming conventions in style guide and help in understanding the code Functions/variables/constants names do not follow naming conventions in style guide and help in understanding the code Functions/variables/constants names somewhat follow naming conventions in style guide and help in understanding the code Functions/variables/constants names all follow naming conventions in style guide and help in understanding the code
Organisation (/5)
Function Usage (/4) - Code has been decomposed into appropriate functions separating functionalities No functions are present, code is one main function Some code has been moved to functions Some code has been moved to sensible/thought out functions, and/or many functions exceed 50 lines (incl. main function) Most code has been moved to sensible/thought out functions, and/or some functions exceed 50 lines (incl. main function) All code has been meaningfully decomposed into functions of a maximum of 50 lines (incl. The main function)
Function Prototypes (/1) - Function Prototypes have been used to declare functions above main Functions are used but have not been prototyped All functions have a prototype above the main function or no functions are used
Elegance (/5)
Overdeep nesting (/2) - You should not have too many levels of nesting in your code (nesting which is 5 or more levels deep) Many instances of overdeep nesting <= 3 instances of overdeep nesting No instances of overdeep nesting
Code Repetition (/2) - Potential repetition of code has been dealt with via the use of functions or loops Many instances of repeated code sections <= 3 instances of repeated code sections Potential repetition of code has been dealt with via the use of functions or loops
Constant Usage (/1) - Any magic numbers are #defined None of the constants used throughout program are #defined All constants used are #defined and are used consistently in the code
Illegal elements
Illegal elements - Presence of any illegal elements indicated in the style guide CAP MARK AT 16/20

Allowed C Features

In this assignment, there are no restrictions on C Features, except for those in the style guide. If you choose to disregard this advice, you must still follow the style guide.

You also may be unable to get help from course staff if you use features not taught in COMP1511. Features that the Style Guide identifies as illegal will result in a penalty during marking. You can find the style marking rubric above.

Due Date

This assignment is due 31 March 2025 17:00:00. For each day after that time, the maximum mark it can achieve will be reduced by 5% (off the ceiling).
  • For instance, at 1 day past the due date, the maximum mark you can get is 95%.
  • For instance, at 3 days past the due date, the maximum mark you can get is 85%.
  • For instance, at 5 days past the due date, the maximum mark you can get is 75%.
No submissions will be accepted after 5 days late, unless you have special provisions in place.

Change Log

Version 1.0
(2025-03-10 13:00)
  • Assignment released
Version 1.1
(2025-03-13 18:00)
  • Add assumptions to Stage 1.3 and 1.4: Your program should ignore commands other than w, b, or g
Version 1.2
(2025-03-19 20:00)
  • Fix math library inclusion in stage 3
Version 1.3
(2025-03-23 11:00)
  • Update Example 3.1.7 to avoid boulder movement
Version 1.4
(2025-03-23 11:00)
  • Correct print_board() description in Starter Code Walkthrough
Version 1.5
(2025-03-29 18:00)
  • Remove autotest 04_01_09
Version 1.6
(2025-03-30 10:00)
  • Update Example 4.1.4, move gem placement from 4 4 to 5 3