Advertisement
ayan0602

platformer

Jul 16th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.43 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. #include "olcConsoleGameEngine.h"
  6.  
  7. class game : public olcConsoleGameEngine
  8. {
  9. public:
  10.     game() { m_sAppName = L"Terrible Game"; }
  11.     ~game() {}
  12. private:
  13.     wstring sLevel;
  14.     int nLevelHeight;
  15.     int nLevelWidth;
  16.  
  17.     float fPlayerPosX = 0.0f;
  18.     float fPlayerPosY = 0.0f;
  19.  
  20.     float fPlayerVelX = 0.0f;
  21.     float fPlayerVelY = 0.0f;
  22.  
  23.     float fCameraPosX = 0.0f;
  24.     float fCameraPosY = 0.0f;
  25. protected:
  26.     virtual bool OnUserCreate() override
  27.     {
  28.         nLevelWidth = 64;
  29.         nLevelHeight = 16;
  30.         sLevel += L"................................................................";
  31.         sLevel += L"................................................................";
  32.         sLevel += L"......#######...................................................";
  33.         sLevel += L"........###.....................................................";
  34.         sLevel += L".......................########.................................";
  35.         sLevel += L".....##########.......###..............#.#......................";
  36.         sLevel += L"....................###................#.#......................";
  37.         sLevel += L"...................####.........................................";
  38.         sLevel += L"####################################.##############.....########";
  39.         sLevel += L"...................................#.#...............###........";
  40.         sLevel += L"........................############.#............###...........";
  41.         sLevel += L"........................#............#.........###..............";
  42.         sLevel += L"........................#.############......###.................";
  43.         sLevel += L"........................#................###....................";
  44.         sLevel += L"........................#################.......................";
  45.         sLevel += L"................................................................";
  46.  
  47.         return true;
  48.     }
  49.  
  50.     virtual bool OnUserUpdate(float fElapsedTime) override
  51.     {
  52.         //utility lambdas (to do some stuff to make life easier)
  53.         auto GetTile = [&](int x, int y)
  54.         {
  55.             if (x >= 0 &&  x < nLevelWidth && y >= 0 && y < nLevelHeight)
  56.                 return sLevel[y * nLevelWidth + x];
  57.             else
  58.                 return L' ';
  59.         };
  60.  
  61.         auto SetTile = [&](int x, int y, wchar_t c)
  62.         {
  63.             if (x >= 0 && x < nLevelWidth && y >= 0 && y < nLevelHeight)
  64.                 sLevel[y * nLevelWidth + x] = c;
  65.         };
  66.  
  67.         fPlayerVelX = 0.0f;
  68.         fPlayerVelY = 0.0f;
  69.  
  70.         //handle input
  71.         if (IsFocused())
  72.         {
  73.             if (GetKey(VK_UP).bHeld)
  74.             {
  75.                 fPlayerVelY = -6.0f;
  76.             }
  77.  
  78.             if (GetKey(VK_DOWN).bHeld)
  79.             {
  80.                 fPlayerVelY = 6.0f;
  81.             }
  82.  
  83.             if (GetKey(VK_LEFT).bHeld)
  84.             {
  85.                 fPlayerVelX = -6.0f;
  86.             }
  87.  
  88.             if (GetKey(VK_RIGHT).bHeld)
  89.             {
  90.                 fPlayerVelX = 6.0f;
  91.             }
  92.  
  93.         }
  94.  
  95.         fPlayerPosX = fPlayerPosX + fPlayerVelX * fElapsedTime;
  96.         fPlayerPosY = fPlayerPosY + fPlayerVelY * fElapsedTime;
  97.  
  98.         fCameraPosX = fPlayerPosX;
  99.         fCameraPosY = fPlayerPosY;
  100.  
  101.         //draw level
  102.         int nTileWidth = 16;
  103.         int nTileHeight = 16;
  104.         int nVisibleTilesX = ScreenWidth() / nTileWidth;
  105.         int nVisibleTilesY = ScreenHeight() / nTileHeight;
  106.  
  107.         //calculate the top-leftmost visible tile
  108.         float fOffsetX = fCameraPosX - (float)nVisibleTilesX / 2.0f;
  109.         float fOffsetY = fCameraPosY - (float)nVisibleTilesY / 2.0f;
  110.  
  111.         //clamp camera to game boundaries so it doesn't do outside of the map
  112.         if (fOffsetX < 0) fOffsetX = 0;
  113.         if (fOffsetY < 0) fOffsetY = 0;
  114.         if (fOffsetX > nLevelWidth - nVisibleTilesX) fOffsetX = nLevelWidth - nVisibleTilesX;
  115.         if (fOffsetY > nLevelHeight - nVisibleTilesY) fOffsetY = nLevelHeight - nVisibleTilesY;
  116.  
  117.         for (int x = 0; x < nVisibleTilesX; x++)
  118.         {
  119.             for (int y = 0; x < nVisibleTilesY; y++)
  120.             {
  121.                 wchar_t sTileID = GetTile(x + fOffsetX, y + fOffsetY);
  122.                 switch (sTileID)
  123.                 {
  124.                 case L'.':
  125.                     Fill(x * nTileWidth, y * nTileHeight, (x + 1) * nTileWidth, (y + 1) * nTileHeight, PIXEL_SOLID, FG_CYAN);
  126.                     break;
  127.                 case L'#':
  128.                     Fill(x * nTileWidth, y * nTileHeight, (x + 1) * nTileWidth, (y + 1) * nTileHeight, PIXEL_SOLID, FG_RED);
  129.                     break;
  130.                 default:
  131.                     Fill(x * nTileWidth, y * nTileHeight, (x + 1) * nTileWidth, (y + 1) * nTileHeight, PIXEL_SOLID, FG_BLACK);
  132.                     break;
  133.                 }
  134.             }
  135.         }
  136.  
  137.         Fill((fPlayerPosX - fOffsetX) * nTileWidth, (fPlayerPosY - fOffsetY) * nTileHeight, (fPlayerPosX - fOffsetX + 1) * nTileWidth, (fPlayerPosY - fOffsetY + 1) * nTileHeight, PIXEL_SOLID, FG_GREEN);
  138.  
  139.         return true;
  140.     }
  141. };
  142.  
  143.  
  144. int main()
  145. {
  146.     game g;
  147.     if (g.ConstructConsole(256, 240, 4, 4))
  148.         g.Start();
  149.     return 0;
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement