This project will help you show your mastery of 2D storage/processing and strings (and branching, looping, etc.).
Create a maze and allow the user to roam around in it. Don't think graphics, obviously. Think characters. A grid of Xs or #s can form a maze quite nicely:
################################################ # # # # # # # # # # # #### ##### ## ### ##### ## ####### # # ### # # # # # ## ## # ## # # @ # # # # ### # # # ## ## # # # # # # # # # # # # # # ## ## # # # # # # # ### #### ##### ## ## # # # ### ### # # # # # ## ## # # # # # #### # # # # #E##############################################
(Okay, so I'm not an artist...*phbbt*) (That @ is the player/user and the E is the exit they need to reach.)
Also think turn by turn — not real-time/interactive. In other words, you print the maze, the user tells you which way they want to move, you 'calculate' the new state of the maze, then re-draw it, etc.
Suggestions:
Mark the user's position with the @ symbol.
Mark walls in your maze the % sign, # sign, or a capital X.
Make the walking positions clear (a space).
Remember, people cannot walk through walls! They also cannot walk off the edge of the world...
Let them tell you which way they want to go in a natural way: north, south, east, west (or up, down, left, right). They should just type the word — not choose from a menu. (This is known as a command interface — like the $ prompt.) Other commands you should allow are quit, score (see options), inventory (see options), drop ___ (see options), and help (to print the list of commands).
Make sure to mark the exit clearly (an E perhaps?) so they know where they are supposed to go.
This assignment is (Level 6) plus (Level 2) for a reasonable theme.
Add (Level 1.5) to make the player 'teleport' from the left edge to the right edge and likewise from top to bottom. (In other words, if the user tries to walk out of your maze through a side with no wall boundary, they should immediately re-appear on the opposite side of the maze. If there is a wall in the position they would re-appear, move them 'in' until they are on a passable position.)
Add (Level 1) to have goals placed randomly around the maze. The most obvious goal would be a $ which would represent some monetary gain. Be creative (perhaps * for gems, ~ for books/parchments, etc.). As the user walks onto a goal position, have them 'pick it up'. (Keep their score and remove the symbol from the maze. The score should be kept per goal category — amount of gold/dollars, number of gems, number of books/pages, etc. — all stored separately.)
Add (Level 1) to have positions within the maze which, when the player (or an opponent — see below) steps on them, will teleport them to a random destination within the maze. Such positions should look like normal walkways (spaces) so that it will be a surprise when they are stepped on. Make sure the place they land is passable (not a wall). If it isn't, choose another destination until it is. If the destination is another teleportation 'trap', display the maze before performing the next teleport. (As the screen jumps they'll realize something weird happened.)
Add another (Level 0.5) to have the teleport 'trap' be visible once it has been triggered by the player (not if an opponent triggered it).
Add (Level 2) to have items the player can actually pick up (just automatically pick up things they come across normally) and use strewn randomly throughout the maze.
Don't let them carry more than a few of these at a time (3-5 is a good inventory size for a person). If their inventory is full and they walk over another item, just tell them what it was and leave it on the ground.
Allow the player to use the drop command (suggested above), to make room in their inventory. Since only one item can be in a maze/grid position, they'll have to move away from the new item to drop something and then move back over the new item to pick it up.
(Add another (Level 2) for allowing multiple items to be in one location. If the player steps to such a position but has room for fewer than all items present, give them a numbered list of what's present so they can choose what to pick up. They should be able to pick by item 'name' or list position number.)
(Let's make it another (Level 1) to add the 'get' command so that after you print the list of what's there, they can type something like: get apple 3. This would mean they want to get the apple and item 3 from the list.)
These items might alter the player's abilities (let him/her walk through walls), give them more carrying capacity (let them carry 5-7 items), make opponents avoid them (an extra (Level 1.5) for this one), make them immune to random teleport traps (not the edge-edge teleport), or other such abilities. Be creative.
Add (Level 4) to make the player an object of a class. Player class objects should know their symbol, their score (0 to start; if you are doing the scoring option), their position, their inventory and capacity (if that option is implemented), how to read a move from the user, how to report a move to the game (the main program) when asked, etc.
Add (Level 2) to make an opponent class, objects of which will randomly roam around the maze to block the player's path (note: random denotes a distinct LACK of intelligence; intelligent opponents would earn a higher level; they are difficult to code). Part of making the opponent more intelligent/challenging would be to have them pick up goal's or items (if those options are used) to keep the player from gaining them (er...the goals/items...not the opponent...um...yeah).
Add (Level 2.5) to make the walls of differing sturdinesses. Place in the maze to be picked up or just give the player a shovel/pick for digging. Then each time they run into a wall (or type a 'dig [direction]' command) decrease that section of wall's sturdiness by an amount (specified by the digging tool). Eventually they'll remove the wall. Then they can go through that space to the adjacent room — or is there just another section of wall?
Add (Level 3) to make your maze 3D — give them stairs or trapdoors or such to reach higher or lower levels. Unless they fall through a trapdoor, maybe 'climb up' or 'climb down' would be good commands for going up and down stairs, ladders, ropes, etc.
Add (Level 5) to generate your maze randomly. Be careful — it is easy to create a random map that has no exits or that traps the player in a room with no door/escape!
Add (Level 2) to include an Options menu (brought up by an options command?) where the player can change certain things about how the program behaves. Chief among these should be the commands used for movement. Allow them to change what keys/commands are used to move up-screen, left, right, or down-screen (or higher/lower in the 3D maze). Other options that you might allow them to adjust are the size of the maze (width, height, ...depth) (of course, their desires will need to be truncated to your maximum size in each dimension — only so much maze will fit on the screen at a time), the symbols displayed on-screen for various things (themselves, opponents, goals, walls, etc.), etc.
Other options can be discussed with me to discern their level worth: fighting system, storing mazes on disk, storing game state and re-loading it later, magic system, etc.
If you did all above options, this project could be worth as much as (Level 37).