#include "Database.h"
#include"Test.h"
using namespace MUD ;
void run_test(void)
{
cout << "Ignore the combat printouts from the\n";
cout << "test_dungeon_class() method\n" << endl;
Test::get_instance()->test_item_class();
Test::get_instance()->test_monster_class();
Test::get_instance()->test_room_class();
Test::get_instance()->test_player_class();
Test::get_instance()->test_dungeon_class();
Test::get_instance()->test_filter_class();
Test::get_instance()->test_dispatch_class();
}
void run_sample_game(void);
int main(void)
{
run_test();
return 0;
}
void run_sample_game(void)
{
Dungeon caves( 2, 21 ) ;
Item* herb_a = new Item( "herb", Item::HEALTH, 0, 0, 0 ) ;
Item* herb_b = new Item( "herb", Item::HEALTH, 0, 0, 0 ) ;
Item* herb_c = new Item( "herb", Item::HEALTH, 0, 0, 0 ) ;
Item* herb_d = new Item( "herb", Item::HEALTH, 0, 0, 0 ) ;
Item* herb_e = new Item( "herb", Item::HEALTH, 0, 0, 0 ) ;
Item* herb_f = new Item( "herb", Item::HEALTH, 0, 0, 0 ) ;
Item* herb_g = new Item( "herb", Item::HEALTH, 0, 0, 0 ) ;
Item* woodsword = new Item( "woodsword", Item::WEAPON, 10, 0, 0 ) ;
Item* steelblade = new Item( "steelblade", Item::WEAPON, 20, 0, 0 ) ;
Item* crystalsword = new Item( "crystalsword", Item::WEAPON, 35, 0, 0 ) ;
Item* genjiblade = new Item( "genjiblade", Item::WEAPON, 60, 0, 0 ) ;
Item* angelicsword = new Item( "angelicsword", Item::WEAPON, 80, 0, 0 ) ;
Item* finalweapon = new Item( "dragonslayer", Item::WEAPON, 2000, 0, 0 ) ;
Item* woodarmor = new Item( "woodarmor", Item::ARMOR, 0, 5, 15 ) ;
Item* steelarmor = new Item( "steelarmor", Item::ARMOR, 0, 7, 20 ) ;
Item* diamondarmor = new Item( "diamondarmor", Item::ARMOR, 0, 12, 30 ) ;
Item* crystalarmor = new Item( "crystalarmor", Item::ARMOR, 0, 15, 35 ) ;
Item* dragonarmor = new Item( "dragonarmor", Item::ARMOR, 0, 20, 100 ) ;
Item* ultimatearmor = new Item( "ultimatearmor", Item::ARMOR, 0, 1000, 1000 ) ;
Monster* bear = new Monster( "bear", 15, 2, 3 ) ;
Monster* goblin = new Monster( "goblin", 5, 3, 1 ) ;
Monster* imp = new Monster( "imp", 5, 5, 2 ) ;
Monster* redgoblin = new Monster( "redgoblin", 5, 5, 5 ) ;
Monster* demon = new Monster( "demon", 6, 3, 7 ) ;
Monster* zergling = new Monster( "zergling", 10, 10, 9 ) ;
Monster* bats = new Monster( "bats", 20, 15, 3 ) ;
Monster* morebats = new Monster( "morebats", 25, 20, 15 ) ;
Monster* golem = new Monster( "golem", 50, 21, 9 ) ;
Monster* goatdemon = new Monster( "goatdemon", 100, 10, 10 ) ;
Monster* cyclops = new Monster( "cyclops", 150, 90, 0 ) ;
Monster* behemoth = new Monster( "behemoth", 250, 30, 40 ) ;
Monster* alien = new Monster( "alien", 50, 21, 4 ) ;
Monster* giantrat = new Monster( "giantrat", 55, 40, 1 ) ;
Monster* fallenangel = new Monster( "fallenangel", 300, 100, 100 ) ;
Monster* greatdragon = new Monster( "greatdragon", 500, 300, 1 ) ;
Monster* invincibledragon = new Monster( "invincibledragon", 999, 999, 999 ) ;
Room* mainHall = new Room( "The main cavern", "A murkey swamp cavern", woodsword ) ;
Room* river = new Room( "The black river", "A river with dark water", woodarmor ) ;
Room* greencave = new Room( "The greencave", "A moss covered cave", herb_a ) ;
Room* bluecave = new Room( "The bluecave", "A frosty cave", steelblade ) ;
Room* darkpit = new Room( "The darkpit", "An endless hole lies before you", steelarmor ) ;
Room* morbidfield = new Room( "The morbidfield", "Pitch black grass surrounds you", herb_b ) ;
Room* graveyard = new Room( "The graveyard", "Tombstones abound", diamondarmor ) ;
Room* crypt = new Room( "The crypt", "A nasty rotten crypt", crystalsword ) ;
Room* evilpassage = new Room( "The evil passage", "An evil pasage", crystalarmor ) ;
Room* darklair = new Room( "The dark lair", "A dark lair", herb_c ) ;
Room* firepit = new Room( "The firey pits", "Fire is every where", herb_d ) ;
Room* greenpasture = new Room( "The greenpastures", "A meadow is before you", genjiblade ) ;
Room* icecave = new Room( "The icy caves", "Ice everywhere you look", herb_e ) ;
Room* livingroom = new Room( "The living room", "The room is alive", dragonarmor ) ;
Room* cellar = new Room( "The cellar", "A dirty cellar filled with rats", angelicsword ) ;
Room* lifespring = new Room( "The lifespring", "A beautiful fountain stands", herb_f ) ;
Room* waterfall = new Room( "The waterfall", "Clear blue water falls", herb_g ) ;
Room* hellsgate = new Room( "The gates of hell", "Large rusty doors lead to hell", ultimatearmor ) ;
Room* dragoncave = new Room( "The dragon's cave", "An ancient cave..." ) ;
Room* dragonsden = new Room( "The dragon's den", "A powerful monster awaits" ) ;
Room* lostforest = new Room( "The secret forest", "The strongest sword lies hidden here", finalweapon ) ;
mainHall->link( 'e', *river ) ;
river->link( 's', *greencave ) ;
river->link( 'e', *bluecave ) ;
river->link( 'w', *mainHall ) ;
greencave->link( 'n', *river ) ;
bluecave->link( 'w', *river ) ;
bluecave->link( 'n', *darkpit ) ;
darkpit->link( 's', *bluecave ) ;
darkpit->link( 'n', *morbidfield ) ;
morbidfield->link( 's', *darkpit ) ;
morbidfield->link( 'e', *graveyard ) ;
graveyard->link( 'w', *morbidfield ) ;
graveyard->link( 'n', *crypt ) ;
graveyard->link( 'e', *evilpassage ) ;
crypt->link( 's', *graveyard ) ;
evilpassage->link( 'w', *graveyard ) ;
evilpassage->link( 's', *darklair ) ;
darklair->link( 'n', *evilpassage ) ;
darklair->link( 's', *firepit ) ;
firepit->link( 'n', *darklair ) ;
firepit->link( 'e', *greenpasture ) ;
greenpasture->link( 'w', *firepit ) ;
greenpasture->link( 's', *icecave ) ;
greenpasture->link( 'e', *livingroom ) ;
icecave->link( 'n', *greenpasture ) ;
livingroom->link( 'w', *greenpasture ) ;
livingroom->link( 'e', *cellar ) ;
cellar->link( 'w', *livingroom ) ;
cellar->link( 'n', *lifespring ) ;
cellar->link( 'e', *hellsgate ) ;
lifespring->link( 's', *cellar ) ;
lifespring->link( 'n', *waterfall ) ;
waterfall->link( 's', *lifespring ) ;
hellsgate->link( 'w', *cellar ) ;
hellsgate->link( 'e', *dragoncave ) ;
dragoncave->link( 'w', *hellsgate ) ;
dragoncave->link( 'e', *dragonsden ) ;
dragonsden->link( 'w', *dragoncave ) ;
dragonsden->link( 'e', *lostforest ) ;
lostforest->link( 'w', *dragonsden ) ;
mainHall->addMonster( goblin ) ;
mainHall->addMonster( imp ) ;
river->addMonster( bear ) ;
river->addMonster( redgoblin ) ;
bluecave->addMonster( demon ) ;
bluecave->addMonster( zergling ) ;
morbidfield->addMonster( bats ) ;
morbidfield->addMonster( morebats ) ;
graveyard->addMonster( golem ) ;
evilpassage->addMonster( goatdemon ) ;
firepit->addMonster( cyclops ) ;
greenpasture->addMonster( behemoth ) ;
livingroom->addMonster( alien ) ;
cellar->addMonster( giantrat ) ;
hellsgate->addMonster( fallenangel ) ;
dragoncave->addMonster( greatdragon ) ;
dragonsden->addMonster( invincibledragon ) ;
caves.addRoom( mainHall ) ;
caves.addRoom( river ) ;
caves.addRoom( greencave ) ;
caves.addRoom( bluecave ) ;
caves.addRoom( darkpit ) ;
caves.addRoom( morbidfield ) ;
caves.addRoom( graveyard ) ;
caves.addRoom( crypt ) ;
caves.addRoom( evilpassage ) ;
caves.addRoom( darklair ) ;
caves.addRoom( firepit ) ;
caves.addRoom( greenpasture ) ;
caves.addRoom( icecave ) ;
caves.addRoom( livingroom ) ;
caves.addRoom( cellar ) ;
caves.addRoom( lifespring ) ;
caves.addRoom( waterfall ) ;
caves.addRoom( hellsgate ) ;
caves.addRoom( dragoncave ) ;
caves.addRoom( dragonsden ) ;
caves.addRoom( lostforest ) ;
Dispatch dispatch ;
char command ;
string value ;
string input ;
cout << "Welcome to the game\nEnter in a new name: " ;
getline(cin, input, '\n');
Player* one = new Player( input, mainHall ) ;
cout << caves.addPlayer( one ) << endl ;
cout << "The objective is to clear the dungeon of all monsters. Good Luck" << endl ;
cout << "Enter in a new command to start, to display help type the following command" << endl ;
cout << "help:" << endl ;
cout << "To quit simply enter \"quit\" without the quotes as a new command" << endl ;
cout << "New Command" << endl ;
getline(cin, input, '\n');
while( input != "quit" )
{
if( filter.validateMessage( input ) )
{
command = dispatch.extractCommand( input ) ;
value = dispatch.extractValue( input ) ;
switch( command )
{
case 'a':
if( &(one->mLocation->getMonsterRef( value )) == NULL )
{
cout << "There is no " + value + " at this location" << endl ;
break ;
}
if( one->mLocation->getMonsterRef( value ).inCombat == true )
{
cout << "The " + value + " is currently fighting" << endl ;
break ;
}
caves.combatLoop( *one, one->mLocation->getMonsterRef( value ) ) ;
break ;
case 'm':
cout << one->move( value[ 0 ] ) ;
break ;
case 'f':
cout << one->search() ;
break ;
case 'l':
cout << one->getLocation() ;
break ;
case 'e':
cout << one->equip( value ) ;
break ;
case 'y':
{
string* playerStats = new string ;
playerStats = caves.playerStatus( *one ) ;
for( int i = 0 ; i < 7 ; ++i )
{
cout << playerStats[i] << endl ;
}endl
}
break ;
case 'h':
caves.displayHelp();
break ;
}
}
else
{
cout << "Invalid command please refer to the help menu.\nhelp:" << endl ;
cout << "Or type \"quit\" to quit the game" << endl ;
}
if( caves.isComplete() )
{
cout << "Dungeon Cleared, YOU WIN!" << endl ;
break ;
}
if( one->death() )
{
cout << one->getName() + " was slain by the " + one->mLocation->getMonsterRef( value ).getName() << endl ;
one->mLocation->getMonsterRef( value ).inCombat = false ;
cout << "*Hint* Secret rooms hidden abound; find them and victory shall be yours" << endl ;
input = "quit" ;
}
else
{
cout << "\n\nNew Command" << endl ;
getline(cin, input, '\n');
}
}
caves.removePlayer( one->getName() ) ;
}