]> 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 7cd45a1b798c4826c57d872ee5016222150e29ec..4a8dcc7c31b02123b82187013d19fd8334dc5a1c 100644 (file)
@@ -4,45 +4,172 @@ 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
+#include <GameServ/GameLayer/GameObjects/WeaponGO.h>\r
+using GameServ::GameLayer::GameObjects::WeaponGO;\r
+#include <GameServ/GameLayer/GameObjects/ArmorGO.h>\r
+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
 using GameServ::Exceptions::GameServException;\r
 \r
 #include <GameServ/Types.h>\r
 using GameServ::Types::Range;\r
+using GameServ::Types::ItemTypes;\r
+using GameServ::Types::Modifiers;\r
+\r
+#include <GameServ/GameLayer/Helpers/InventoryManager.h>\r
+using namespace GameServ::GameLayer::Helpers;\r
+\r
+#include <boost/algorithm/string.hpp>\r
+#include <boost/format.hpp>\r
+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
-               //cout << spPlayer->Name() << endl;\r
-               //spPlayer->Name("Kainazzzo");\r
-               //pgl.Insert(spPlayer);\r
-\r
+               PlayerGL pgl;\r
+               shared_ptr<PlayerGO> spPlayer = pgl.GetById("Kain");\r
+               \r
                \r
-               map <int, int> frequencies;\r
-               int x;\r
-               for (x = 0; x < 10000; x++)\r
+               \r
+               cout << "Name: " << spPlayer->Name() << endl\r
+                        << "Level: " << spPlayer->LevelNumber() << endl\r
+                        << "Exp: " << spPlayer->Experience() << endl\r
+                        << "Strength: " << spPlayer->Strength() << endl\r
+                        << "Defense: " << spPlayer->Defense() << endl\r
+                        << "Gold: " << spPlayer->Gold() << endl\r
+                        << "Bank: " << spPlayer->Bank() << endl\r
+                        << "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
-                       Range testrange(-100, 100);\r
-                       int randnum = testrange.Random();\r
-                       frequencies[randnum]++;\r
+                       shared_ptr<ItemGO> spItem = (*iter);\r
+                       cout << ItemInfo(spItem) << endl;\r
                }\r
-               map<int, int>::const_iterator iter;\r
-               for (iter = frequencies.begin(); iter != frequencies.end(); iter++)\r
+\r
+               ForestGL forestGL;\r
+               FightGL fightGL;\r
+               string cmd = "";\r
+               while (cmd != "quit")\r
                {\r
-                       cout << iter->first << ": ";\r
-                       cout << (iter->second / (double)(x + 1)) * 100 << '%' << endl;\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
+               //int x;\r
+               //for (x = 0; x < 10000; x++)\r
+               //{\r
+               //      Range testrange(-100, 100);\r
+               //      int randnum = testrange.Random();\r
+               //      frequencies[randnum]++;\r
+               //}\r
+               //map<int, int>::const_iterator iter;\r
+               //for (iter = frequencies.begin(); iter != frequencies.end(); iter++)\r
+               //{\r
+               //      cout << iter->first << ": ";\r
+               //      cout << (iter->second / (double)(x + 1)) * 100 << '%' << endl;\r
+               //}\r
        }\r
        catch (GameServException &e)\r
        {\r
                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