Index: client/Client/Client.vcxproj
===================================================================
--- client/Client/Client.vcxproj	(revision ad5d122790401d2d049952e17ca5f88fba109348)
+++ client/Client/Client.vcxproj	(revision 60017fc77171d89da05e3eaab5eb4a9c3d0a0f6e)
@@ -65,4 +65,5 @@
   <ItemGroup>
     <ClCompile Include="..\..\common\Common.cpp" />
+    <ClCompile Include="..\..\common\WorldMap.cpp" />
     <ClCompile Include="..\..\common\Message.cpp" />
     <ClCompile Include="..\..\common\Player.cpp" />
@@ -77,4 +78,5 @@
     <ClInclude Include="..\..\common\Common.h" />
     <ClInclude Include="..\..\common\Compiler.h" />
+    <ClInclude Include="..\..\common\WorldMap.h" />
     <ClInclude Include="..\..\common\Message.h" />
     <ClInclude Include="..\..\common\Player.h" />
Index: client/Client/Client.vcxproj.filters
===================================================================
--- client/Client/Client.vcxproj.filters	(revision ad5d122790401d2d049952e17ca5f88fba109348)
+++ client/Client/Client.vcxproj.filters	(revision 60017fc77171d89da05e3eaab5eb4a9c3d0a0f6e)
@@ -55,4 +55,7 @@
       <Filter>Source Files\common</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\common\WorldMap.cpp">
+      <Filter>Source Files\gui</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
@@ -84,4 +87,7 @@
       <Filter>Header Files\common</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\common\WorldMap.h">
+      <Filter>Header Files\common</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
Index: client/Client/main.cpp
===================================================================
--- client/Client/main.cpp	(revision ad5d122790401d2d049952e17ca5f88fba109348)
+++ client/Client/main.cpp	(revision 60017fc77171d89da05e3eaab5eb4a9c3d0a0f6e)
@@ -29,5 +29,6 @@
 #include "../../common/Message.h"
 #include "../../common/Common.h"
-#include "../../common/Player.h"_
+#include "../../common/Player.h"
+#include "../../common/WorldMap.h"
 
 #include "Window.h"
@@ -45,5 +46,8 @@
 void shutdownWinSock();
 void processMessage(NETWORK_MSG &msg, int &state, chat &chatConsole, map<unsigned int, Player>& mapPlayers, unsigned int& curPlayerId);
+void drawMap(WorldMap* gameMap);
 void drawPlayers(map<unsigned int, Player>& mapPlayers, unsigned int curPlayerId);
+POSITION screenToMap(POSITION pos);
+POSITION mapToScreen(POSITION pos);
 
 // callbacks
@@ -156,4 +160,6 @@
    }
 
+   WorldMap* gameMap = WorldMap::createDefaultMap();
+
    wndLogin = new Window(0, 0, SCREEN_W, SCREEN_H);
    wndLogin->addComponent(new Textbox(104, 40, 100, 20, font));
@@ -306,9 +312,19 @@
             msgTo.type = MSG_TYPE_PLAYER_MOVE;
 
-            memcpy(msgTo.buffer, &curPlayerId, 4);
-            memcpy(msgTo.buffer+4, &ev.mouse.x, 4);
-            memcpy(msgTo.buffer+8, &ev.mouse.y, 4);
-
-            sendMessage(&msgTo, sock, &server);
+            POSITION pos;
+            pos.x = ev.mouse.x;
+            pos.y = ev.mouse.y;
+            pos = screenToMap(pos);
+
+            if (pos.x != -1)
+            {
+               memcpy(msgTo.buffer, &curPlayerId, 4);
+               memcpy(msgTo.buffer+4, &pos.x, 4);
+               memcpy(msgTo.buffer+8, &pos.y, 4);
+
+               sendMessage(&msgTo, sock, &server);
+            }
+            else
+               cout << "Invalid point: User did not click on the map" << endl;
          }
       }
@@ -326,6 +342,4 @@
          wndCurrent->draw(display);
 
-         drawPlayers(mapPlayers, curPlayerId);
-
          chatConsole.draw(font, al_map_rgb(255,255,255));
 
@@ -336,4 +350,7 @@
          else if(wndCurrent == wndMain) {
             al_draw_text(font, al_map_rgb(0, 255, 0), 4, 43, ALLEGRO_ALIGN_LEFT, "Message:");
+
+            drawMap(gameMap);
+            drawPlayers(mapPlayers, curPlayerId);
          }
 
@@ -352,4 +369,6 @@
    delete wndLogin;
    delete wndMain;
+
+   delete gameMap;
 
    al_destroy_event_queue(event_queue);
@@ -392,4 +411,26 @@
    WSACleanup();
 #endif
+}
+
+POSITION screenToMap(POSITION pos)
+{
+   pos.x = pos.x-300;
+   pos.y = pos.y-100;
+
+   if (pos.x < 0 || pos.y < 0)
+   {
+      pos.x = -1;
+      pos.y = -1;
+   }
+
+   return pos;
+}
+
+POSITION mapToScreen(POSITION pos)
+{
+   pos.x = pos.x+300;
+   pos.y = pos.y+100;
+
+   return pos;
 }
 
@@ -498,16 +539,42 @@
 }
 
+void drawMap(WorldMap* gameMap)
+{
+   POSITION mapPos;
+   mapPos.x = 0;
+   mapPos.y = 0;
+   mapPos = mapToScreen(mapPos);
+   for (int x=0; x<12; x++)
+   {
+      for (int y=0; y<12; y++)
+      {
+         WorldMap::TerrainType el = gameMap->getElement(x, y);
+
+         if (el == WorldMap::TERRAIN_GRASS)
+            al_draw_filled_rectangle(x*25+mapPos.x, y*25+mapPos.y, x*25+25+mapPos.x, y*25+25+mapPos.y, al_map_rgb(0, 255, 0));
+         else if (el == WorldMap::TERRAIN_OCEAN)
+            al_draw_filled_rectangle(x*25+mapPos.x, y*25+mapPos.y, x*25+25+mapPos.x, y*25+25+mapPos.y, al_map_rgb(0, 0, 255));
+         else if (el == WorldMap::TERRAIN_ROCK)
+            al_draw_filled_rectangle(x*25+mapPos.x, y*25+mapPos.y, x*25+25+mapPos.x, y*25+25+mapPos.y, al_map_rgb(100, 100, 0));
+      }
+   }
+}
+
 void drawPlayers(map<unsigned int, Player>& mapPlayers, unsigned int curPlayerId)
 {
    map<unsigned int, Player>::iterator it;
+
+   Player* p;
+   POSITION pos;
 
    for(it = mapPlayers.begin(); it != mapPlayers.end(); it++)
    {
-      Player *p = &it->second;
+      p = &it->second;
+      pos = mapToScreen(p->pos);
 
       if (p->id == curPlayerId)
-         al_draw_filled_circle(p->pos.x, p->pos.y, 15, al_map_rgb(0, 255, 0));
+         al_draw_filled_circle(pos.x, pos.y, 12, al_map_rgb(255, 0, 0));
       else
-         al_draw_filled_circle(p->pos.x, p->pos.y, 30, al_map_rgb(255, 0, 0));
+         al_draw_filled_circle(pos.x, pos.y, 12, al_map_rgb(191, 0, 0));
    }
 }
