]> jfr.im git - irc/gameservirc.git/blob - 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
1 #include <iostream>
2 using namespace std;
3 #include <GameServ/GameLayer/GameObjects/PlayerGO.h>
4 using GameServ::GameLayer::GameObjects::PlayerGO;
5 #include <GameServ/GameLayer/PlayerGL.h>
6 using GameServ::GameLayer::PlayerGL;
7 #include <GameServ/GameLayer/ForestGL.h>
8 using GameServ::GameLayer::ForestGL;
9 #include <GameServ/GameLayer/FightGL.h>
10 using GameServ::GameLayer::FightGL;
11
12 #include <GameServ/GameLayer/GameObjects/ItemGO.h>
13 using GameServ::GameLayer::GameObjects::ItemGO;
14 #include <GameServ/GameLayer/GameObjects/WeaponGO.h>
15 using GameServ::GameLayer::GameObjects::WeaponGO;
16 #include <GameServ/GameLayer/GameObjects/ArmorGO.h>
17 using GameServ::GameLayer::GameObjects::ArmorGO;
18 #include <GameServ/GameLayer/GameObjects/PotionGO.h>
19 using GameServ::GameLayer::GameObjects::PotionGO;
20 #include <GameServ/GameLayer/GameObjects/MonsterGO.h>
21 using GameServ::GameLayer::GameObjects::MonsterGO;
22
23
24 #include <GameServ/GameServException.h>
25 using GameServ::Exceptions::GameServException;
26
27 #include <GameServ/Types.h>
28 using GameServ::Types::Range;
29 using GameServ::Types::ItemTypes;
30 using GameServ::Types::Modifiers;
31
32 #include <GameServ/GameLayer/Helpers/InventoryManager.h>
33 using namespace GameServ::GameLayer::Helpers;
34
35 #include <boost/algorithm/string.hpp>
36 #include <boost/format.hpp>
37 using boost::str;
38 using boost::format;
39
40 #include <boost/smart_ptr/shared_ptr.hpp>
41 using boost::shared_ptr;
42
43 string ItemInfo(shared_ptr<ItemGO> spItem);
44 string MonsterInfo(shared_ptr<MonsterGO> spMonster);
45 string PlayerInfo(shared_ptr<PlayerGO> spPlayer);
46 void DisplayMonster(shared_ptr<MonsterGO> spMonster);
47 void DisplayPlayer(shared_ptr<PlayerGO> spPlayer);
48
49 int main()
50 {
51 try
52 {
53 PlayerGL pgl;
54 shared_ptr<PlayerGO> spPlayer = pgl.GetById("Kain");
55
56
57
58 cout << "Name: " << spPlayer->Name() << endl
59 << "Level: " << spPlayer->LevelNumber() << endl
60 << "Exp: " << spPlayer->Experience() << endl
61 << "Strength: " << spPlayer->Strength() << endl
62 << "Defense: " << spPlayer->Defense() << endl
63 << "Gold: " << spPlayer->Gold() << endl
64 << "Bank: " << spPlayer->Bank() << endl
65 << "Items: " << endl;
66
67
68
69 shared_ptr<InventoryManager> spInventory = InventoryManager::Instance();
70 ItemList inventory = spInventory->GetInventory(spPlayer);
71 ItemList::const_iterator iter;
72 for (iter = inventory.begin(); iter != inventory.end(); iter++)
73 {
74 shared_ptr<ItemGO> spItem = (*iter);
75 cout << ItemInfo(spItem) << endl;
76 }
77
78 ForestGL forestGL;
79 FightGL fightGL;
80 string cmd = "";
81 while (cmd != "quit")
82 {
83 spPlayer->Health(spPlayer->MaxHealth());
84 spPlayer->Alive(true);
85 DisplayPlayer(spPlayer);
86 getline(cin, cmd);
87 if (cmd == "search")
88 {
89 cout << "Searching the forest..." << endl;
90 shared_ptr<MonsterGO> spMonster = forestGL.GetRandomMonsterForPlayer(spPlayer);
91
92 while (spPlayer->Alive() && spMonster->Alive())
93 {
94 DisplayMonster(spMonster);
95 cout << "Hit Enter to attack: " << endl;
96 getline(cin, cmd);
97 cout << "You hit " << spMonster->Name() << " for " <<
98 fightGL.PlayerAttackMonster(spPlayer, spMonster) << endl;
99 if (!spMonster->Alive())
100 {
101 cout << "You have killed " << spMonster->Name() << endl;
102 cout << "He shouts: " << spMonster->DeathCry() << endl;
103 }
104 else
105 {
106 cout << spMonster->Name() << " hits you with their "
107 << spMonster->WeaponName() << " for " << fightGL.MonsterAttackPlayer(spMonster, spPlayer)
108 << endl;
109 if (!spPlayer->Alive())
110 {
111 cout << spMonster->Name() << " has killed you!" << endl;
112 }
113 }
114 }
115 }
116 }
117
118
119 //map <int, int> frequencies;
120 //int x;
121 //for (x = 0; x < 10000; x++)
122 //{
123 // Range testrange(-100, 100);
124 // int randnum = testrange.Random();
125 // frequencies[randnum]++;
126 //}
127 //map<int, int>::const_iterator iter;
128 //for (iter = frequencies.begin(); iter != frequencies.end(); iter++)
129 //{
130 // cout << iter->first << ": ";
131 // cout << (iter->second / (double)(x + 1)) * 100 << '%' << endl;
132 //}
133 }
134 catch (GameServException &e)
135 {
136 cout << e.VerboseError() << endl;
137
138 }
139 cout << "Done. Hit enter to quit." << endl;
140 string temp;
141 getline(cin, temp);
142 return 0;
143 }
144
145 string ItemInfo(shared_ptr<ItemGO> spItem)
146 {
147 return str(format("Name: %1% Type: %2%") % spItem->Name() % ItemTypes::GetName(spItem->Type()));
148 }
149
150 string MonsterInfo(shared_ptr<MonsterGO> spMonster)
151 {
152 string info = str(format("Name: %1% Weapon: %2%\nStrength: %3% Defense %4% ") %
153 spMonster->Name() % spMonster->WeaponName() % spMonster->Strength() %
154 spMonster->Defense());
155 info += str(format("Health: %1%/%2%") % spMonster->Health() % spMonster->MaxHealth());
156 return info;
157 }
158
159 string PlayerInfo(shared_ptr<PlayerGO> spPlayer)
160 {
161 string info = str(format("Name: %1% Level: %2%\nHealth: %3%/%4%") %
162 spPlayer->Name() % spPlayer->LevelNumber() % spPlayer->Health() %
163 spPlayer->MaxHealth());
164 return info;
165 }
166
167 void DisplayMonster(shared_ptr<MonsterGO> spMonster)
168 {
169 cout << "Monster:\n" << MonsterInfo(spMonster) << endl;
170 }
171
172 void DisplayPlayer(shared_ptr<PlayerGO> spPlayer)
173 {
174 cout << "Player:\n" << PlayerInfo(spPlayer) << endl;
175 }