Professional Documents
Culture Documents
Zach and Dan's RPG - User Manual: How To Play
Zach and Dan's RPG - User Manual: How To Play
How to Play
Note: To run the game, run project GUI123 in the solution. Compilation requires boost 1.44 and GLUT.
1. Upon running the game, a window will pop up with instructions. Click “Start Game”.
2. Upon starting the game, you will see two windows: one shows you your party (the top row),
creatures (the second row; if any), and which directions you can move (yellow arrows in the
North/South/East/West of the room).
Known bug: The party will not display in the first room
To test out combat, head east! The second room has plenty of monsters. Pressing Fight will engage in
one round of combat against the monsters. (Note: Currently, there is no feedback on-screen of current
hit points/magic points/exp of heroes, but it is processed in the background). Upon pressing fight, each
hero and each monster will randomly choose to attack or defend. They have the following effects,
depending on class:
Fighter (Red)
o Attack – attacks two creatures for 10 damage per hit
o Defend – enters a defensive stance, halving the damage of the next blow he receives
Cleric (White)
o Attack – Attacks one random creature for 6 damage
o Defend – Casts a healing spell, healing each party member for 5hp each
Wizard (Blue)
o Attack – Casts a spell attacking every enemy in the room for 4 damage
o Defend – Casts a reflective spell. The next time the Wizard is hit, the enemy that
attacked him will take the attack’s damage instead.
Known Issues
Party does not display in the first room
Boss is not in final room (had issues getting the code working right); consider yourself a winner if
you get there :P
Items are picked up by players, but not displayed properly next to them. D’oh
Memory leaks in the GUI – though, it’s all the dungeon stuff, which should be there the whole
game anyway, soooo…. (Note: these are Dan’s fault)
HP/MP/Exp are not displayed next to PCs (Didn’t get a chance to implement)
Only combat feedback is something dying (it’s no longer drawn on-screen)
Objectives Addressed
Objectives
Practice with single inheritance by creating a robust class hierarchy that demonstrates
abstraction, encapsulation, and polymorphism via dynamic binding.
Demonstrate multiple inheritance with a minimum of three classes (e.g., one child inheriting
from two parents).
o Boss class (for enemy) implements every character class
Organize code with headers and includes.
Manage memory destructors and freeing dynamically allocated memory.
Implement exception handling and user-I/O.
o Exception-handling seen with threads in Dungeon::fight() in Dungeon.cpp (RPGLibrary)
Apply C++ and OOP to an interactive application.
High Concept
Write a text-based RPG in which a player leads a party of characters in a dungeon to victory.
o Done!
Character Specifications
The player controls a Party of Characters. Each Character will have the following: hit points,
magic points, experience points, an inventory, a unique alignment, a class
o HP is modified in combat
o They *have* magic points, but they aren’t used. But, they have them for the purpose of future
implementation
o EXP is earned in combat, but not utilized (yet!)
o Characters have items
o Alignment is implemented in the code, but not utilized in gameplay
o Classes are implemented as children of Character; i.e. Fighter implements Character, but
overrides attack() and defend()
o Each character class has its own attack/defend methods to customize how it attacks or defends
o Attack/defend are not explicitly picked by the player; they are picked “behind the scenes”
randomly for each party member when one clicks Fight
The player's Party has the following: at least one member who can cast spells, at least one member who
can use physical means
The Dungeon
There are 6 rooms; the player may move freely between them
Map:
❸—❹—EXIT
| |
❶—❷—❺
|
❻
Enemies
Populate your Dungeon with other creatures, like an Enemy or NPC.
These other creatures will interact with the player's Party via combat or some other mechanism that
you devise.
Loot
A Room may have items, and an (sic) creature with whom (sic) you interact may drop items.
o When item is dropped, player party picks it up automatically; item is assigned to a random
character
Mechanics
Victory Conditions
You may freely decide how the player wins the game. Do they need to escape the dungeon with
at least one remaining Character? Defeat all the enemies? Find secret treasure? Be
interesting.
o Exit the dungeon to finish the game (Note: exit is east from room 4)
Interface
Provide a clear, concise, and helpful menu to the player.
Ensure that you include a choice for help and that you handle all incorrect input.
Input must generate clear output: ensure that player knows what happened.
Given the flexibility of design, make reasonable choices that will provides a balanced, interesting
game that still demonstrates mastery of OOP principles (especially in inheritance and
polymorphism) in C++.
For the sake of my sanity, please make combat short enough that I can quickly move through the
game.
You may wish to include an option via your interface for short/long versions.
Inside a user's manual, explain how to play your game and how (and where) you addressed each
of the objectives.
o You’re reading it
Bonuses
Use threading via Boost to support real-time interactions instead of turn-based actions: 100 points. For
example, if I have five characters fighting against a room full of Orcs, I'd rather let the game handle a
"simultaneous mashup" and report back the results.
o We went with the “simultaneous mashup”: The Fight button runs a threaded round of combat,
where both the player’s party and the enemy’s party gets to attack at the same time.
o See Dungeon::fight() in Dungeon.cpp in RPGLibrary
Create a GUI using .Net and CLR C++ to improve the interface. You must use Native C++ for the game
engine and employ MVC for your overall design: 100 points.
o Input is done through an MFC GUI window, which acts as the controller and as a view.
o The OpenGL window is a view that is updated by the controller
o The GameEngine class is the model, which processes the input and updates the view
appropriately
o Room contents, enemies, party info and directions you can move are displayed in an OpenGL
window