Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- using namespace std;
- #include "olcConsoleGameEngine.h"
- class game : public olcConsoleGameEngine
- {
- public:
- game() { m_sAppName = L"Terrible Game"; }
- ~game() {}
- private:
- wstring sLevel;
- int nLevelHeight;
- int nLevelWidth;
- float fPlayerPosX = 0.0f;
- float fPlayerPosY = 0.0f;
- float fPlayerVelX = 0.0f;
- float fPlayerVelY = 0.0f;
- float fCameraPosX = 0.0f;
- float fCameraPosY = 0.0f;
- protected:
- virtual bool OnUserCreate() override
- {
- nLevelWidth = 64;
- nLevelHeight = 16;
- sLevel += L"................................................................";
- sLevel += L"................................................................";
- sLevel += L"......#######...................................................";
- sLevel += L"........###.....................................................";
- sLevel += L".......................########.................................";
- sLevel += L".....##########.......###..............#.#......................";
- sLevel += L"....................###................#.#......................";
- sLevel += L"...................####.........................................";
- sLevel += L"####################################.##############.....########";
- sLevel += L"...................................#.#...............###........";
- sLevel += L"........................############.#............###...........";
- sLevel += L"........................#............#.........###..............";
- sLevel += L"........................#.############......###.................";
- sLevel += L"........................#................###....................";
- sLevel += L"........................#################.......................";
- sLevel += L"................................................................";
- return true;
- }
- virtual bool OnUserUpdate(float fElapsedTime) override
- {
- //utility lambdas (to do some stuff to make life easier)
- auto GetTile = [&](int x, int y)
- {
- if (x >= 0 && x < nLevelWidth && y >= 0 && y < nLevelHeight)
- return sLevel[y * nLevelWidth + x];
- else
- return L' ';
- };
- auto SetTile = [&](int x, int y, wchar_t c)
- {
- if (x >= 0 && x < nLevelWidth && y >= 0 && y < nLevelHeight)
- sLevel[y * nLevelWidth + x] = c;
- };
- fPlayerVelX = 0.0f;
- fPlayerVelY = 0.0f;
- //handle input
- if (IsFocused())
- {
- if (GetKey(VK_UP).bHeld)
- {
- fPlayerVelY = -6.0f;
- }
- if (GetKey(VK_DOWN).bHeld)
- {
- fPlayerVelY = 6.0f;
- }
- if (GetKey(VK_LEFT).bHeld)
- {
- fPlayerVelX = -6.0f;
- }
- if (GetKey(VK_RIGHT).bHeld)
- {
- fPlayerVelX = 6.0f;
- }
- }
- fPlayerPosX = fPlayerPosX + fPlayerVelX * fElapsedTime;
- fPlayerPosY = fPlayerPosY + fPlayerVelY * fElapsedTime;
- fCameraPosX = fPlayerPosX;
- fCameraPosY = fPlayerPosY;
- //draw level
- int nTileWidth = 16;
- int nTileHeight = 16;
- int nVisibleTilesX = ScreenWidth() / nTileWidth;
- int nVisibleTilesY = ScreenHeight() / nTileHeight;
- //calculate the top-leftmost visible tile
- float fOffsetX = fCameraPosX - (float)nVisibleTilesX / 2.0f;
- float fOffsetY = fCameraPosY - (float)nVisibleTilesY / 2.0f;
- //clamp camera to game boundaries so it doesn't do outside of the map
- if (fOffsetX < 0) fOffsetX = 0;
- if (fOffsetY < 0) fOffsetY = 0;
- if (fOffsetX > nLevelWidth - nVisibleTilesX) fOffsetX = nLevelWidth - nVisibleTilesX;
- if (fOffsetY > nLevelHeight - nVisibleTilesY) fOffsetY = nLevelHeight - nVisibleTilesY;
- for (int x = 0; x < nVisibleTilesX; x++)
- {
- for (int y = 0; x < nVisibleTilesY; y++)
- {
- wchar_t sTileID = GetTile(x + fOffsetX, y + fOffsetY);
- switch (sTileID)
- {
- case L'.':
- Fill(x * nTileWidth, y * nTileHeight, (x + 1) * nTileWidth, (y + 1) * nTileHeight, PIXEL_SOLID, FG_CYAN);
- break;
- case L'#':
- Fill(x * nTileWidth, y * nTileHeight, (x + 1) * nTileWidth, (y + 1) * nTileHeight, PIXEL_SOLID, FG_RED);
- break;
- default:
- Fill(x * nTileWidth, y * nTileHeight, (x + 1) * nTileWidth, (y + 1) * nTileHeight, PIXEL_SOLID, FG_BLACK);
- break;
- }
- }
- }
- Fill((fPlayerPosX - fOffsetX) * nTileWidth, (fPlayerPosY - fOffsetY) * nTileHeight, (fPlayerPosX - fOffsetX + 1) * nTileWidth, (fPlayerPosY - fOffsetY + 1) * nTileHeight, PIXEL_SOLID, FG_GREEN);
- return true;
- }
- };
- int main()
- {
- game g;
- if (g.ConstructConsole(256, 240, 4, 4))
- g.Start();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement