]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv-2.0/testdriver/main.cpp
I implemented a mock forest driver and found a problem in using the singleton design...
[irc/gameservirc.git] / gameserv-2.0 / testdriver / main.cpp
index 22c7ce109cedb12c045e082dcde1c131b42481c6..4a8dcc7c31b02123b82187013d19fd8334dc5a1c 100644 (file)
@@ -4,6 +4,10 @@ using namespace std;
 using GameServ::GameLayer::GameObjects::PlayerGO;\r
 #include <GameServ/GameLayer/PlayerGL.h>\r
 using GameServ::GameLayer::PlayerGL;\r
+#include <GameServ/GameLayer/ForestGL.h>\r
+using GameServ::GameLayer::ForestGL;\r
+#include <GameServ/GameLayer/FightGL.h>\r
+using GameServ::GameLayer::FightGL;\r
 \r
 #include <GameServ/GameLayer/GameObjects/ItemGO.h>\r
 using GameServ::GameLayer::GameObjects::ItemGO;\r
@@ -13,6 +17,8 @@ using GameServ::GameLayer::GameObjects::WeaponGO;
 using GameServ::GameLayer::GameObjects::ArmorGO;\r
 #include <GameServ/GameLayer/GameObjects/PotionGO.h>\r
 using GameServ::GameLayer::GameObjects::PotionGO;\r
+#include <GameServ/GameLayer/GameObjects/MonsterGO.h>\r
+using GameServ::GameLayer::GameObjects::MonsterGO;\r
 \r
 \r
 #include <GameServ/GameServException.h>\r
@@ -31,14 +37,26 @@ using namespace GameServ::GameLayer::Helpers;
 using boost::str;\r
 using boost::format;\r
 \r
+#include <boost/smart_ptr/shared_ptr.hpp>\r
+using boost::shared_ptr;\r
+\r
+string ItemInfo(shared_ptr<ItemGO> spItem);\r
+string MonsterInfo(shared_ptr<MonsterGO> spMonster);\r
+string PlayerInfo(shared_ptr<PlayerGO> spPlayer);\r
+void DisplayMonster(shared_ptr<MonsterGO> spMonster);\r
+void DisplayPlayer(shared_ptr<PlayerGO> spPlayer);\r
+\r
 int main()\r
 {\r
        try\r
        {\r
                PlayerGL pgl;\r
                shared_ptr<PlayerGO> spPlayer = pgl.GetById("Kain");\r
+               \r
+               \r
+               \r
                cout << "Name: " << spPlayer->Name() << endl\r
-                        << "Level: " << spPlayer->Level() << endl\r
+                        << "Level: " << spPlayer->LevelNumber() << endl\r
                         << "Exp: " << spPlayer->Experience() << endl\r
                         << "Strength: " << spPlayer->Strength() << endl\r
                         << "Defense: " << spPlayer->Defense() << endl\r
@@ -47,23 +65,55 @@ int main()
                         << "Items: " << endl;\r
 \r
 \r
+\r
                shared_ptr<InventoryManager> spInventory = InventoryManager::Instance();\r
                ItemList inventory = spInventory->GetInventory(spPlayer);\r
                ItemList::const_iterator iter;\r
                for (iter = inventory.begin(); iter != inventory.end(); iter++)\r
                {\r
                        shared_ptr<ItemGO> spItem = (*iter);\r
-                       cout << str(format("Name: %1%  Type: %2%") % spItem->Name() % ItemTypes::GetName(spItem->Type())) << endl;\r
+                       cout << ItemInfo(spItem) << endl;\r
                }\r
 \r
-       /*      vector< shared_ptr<ItemGO> > spInventory = spPlayer->Inventory();\r
-               vector< shared_ptr<ItemGO> >::const_iterator iter;\r
-               for (iter = spInventory.begin(); iter != spInventory.end(); iter++)\r
+               ForestGL forestGL;\r
+               FightGL fightGL;\r
+               string cmd = "";\r
+               while (cmd != "quit")\r
                {\r
-                       shared_ptr<ItemGO> spItem = (*iter);\r
-                       cout << str(format("Name: %1%  Type: %2%") % spItem->Name() % ItemTypes::GetName(spItem->Type())) << endl;\r
-               }*/\r
-               \r
+                       spPlayer->Health(spPlayer->MaxHealth());\r
+                       spPlayer->Alive(true);\r
+                       DisplayPlayer(spPlayer);\r
+                       getline(cin, cmd);\r
+                       if (cmd == "search")\r
+                       {\r
+                               cout << "Searching the forest..." << endl;\r
+                               shared_ptr<MonsterGO> spMonster = forestGL.GetRandomMonsterForPlayer(spPlayer);\r
+                               \r
+                               while (spPlayer->Alive() && spMonster->Alive())\r
+                               {\r
+                                       DisplayMonster(spMonster);\r
+                                       cout << "Hit Enter to attack: " << endl;\r
+                                       getline(cin, cmd);\r
+                                       cout << "You hit " << spMonster->Name() << " for " <<\r
+                                               fightGL.PlayerAttackMonster(spPlayer, spMonster) << endl;\r
+                                       if (!spMonster->Alive())\r
+                                       {\r
+                                               cout << "You have killed " << spMonster->Name() << endl;\r
+                                               cout << "He shouts: " << spMonster->DeathCry() << endl;\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               cout << spMonster->Name() << " hits you with their "\r
+                                                        << spMonster->WeaponName() << " for " << fightGL.MonsterAttackPlayer(spMonster, spPlayer)\r
+                                                       <<      endl;\r
+                                               if (!spPlayer->Alive())\r
+                                               {\r
+                                                       cout << spMonster->Name() << " has killed you!" << endl;\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
 \r
                \r
                //map <int, int> frequencies;\r
@@ -86,7 +136,40 @@ int main()
                cout << e.VerboseError() << endl;\r
 \r
        }\r
+       cout << "Done. Hit enter to quit." << endl;\r
        string temp;\r
-       cin >> temp;\r
+       getline(cin, temp);\r
        return 0;\r
 }\r
+\r
+string ItemInfo(shared_ptr<ItemGO> spItem)\r
+{\r
+       return str(format("Name: %1%  Type: %2%") % spItem->Name() % ItemTypes::GetName(spItem->Type()));\r
+}\r
+\r
+string MonsterInfo(shared_ptr<MonsterGO> spMonster)\r
+{\r
+       string info = str(format("Name: %1% Weapon: %2%\nStrength: %3% Defense %4% ") %\r
+               spMonster->Name() % spMonster->WeaponName() % spMonster->Strength() %\r
+               spMonster->Defense());\r
+       info += str(format("Health: %1%/%2%") % spMonster->Health() % spMonster->MaxHealth());\r
+       return info;\r
+}\r
+\r
+string PlayerInfo(shared_ptr<PlayerGO> spPlayer)\r
+{\r
+       string info = str(format("Name: %1%  Level: %2%\nHealth: %3%/%4%") % \r
+               spPlayer->Name() % spPlayer->LevelNumber() % spPlayer->Health() %\r
+               spPlayer->MaxHealth());\r
+       return info;\r
+}\r
+\r
+void DisplayMonster(shared_ptr<MonsterGO> spMonster)\r
+{\r
+       cout << "Monster:\n" << MonsterInfo(spMonster) << endl;\r
+}\r
+\r
+void DisplayPlayer(shared_ptr<PlayerGO> spPlayer)\r
+{\r
+       cout << "Player:\n" << PlayerInfo(spPlayer) << endl;\r
+}
\ No newline at end of file