From 12c719225c3de8103b2afea05d37bd0558f94b09 Mon Sep 17 00:00:00 2001 From: Kishan Takoordyal Date: Sun, 15 Nov 2020 10:56:33 +0400 Subject: [PATCH] init --- .gitignore | 3 + gameTile.cpp | 27 +++++ gameTile.h | 20 ++++ gameWorld.cpp | 246 ++++++++++++++++++++++++++++++++++++++++++++++ gameWorld.h | 41 ++++++++ images/.DS_Store | Bin 0 -> 6148 bytes images/door.png | Bin 0 -> 4061 bytes images/enemy.png | Bin 0 -> 3358 bytes images/ground.png | Bin 0 -> 2959 bytes images/player.png | Bin 0 -> 3540 bytes images/wall.png | Bin 0 -> 1973 bytes main.cpp | 42 ++++++++ runningSFML.sh | 7 ++ 13 files changed, 386 insertions(+) create mode 100644 .gitignore create mode 100644 gameTile.cpp create mode 100644 gameTile.h create mode 100644 gameWorld.cpp create mode 100644 gameWorld.h create mode 100644 images/.DS_Store create mode 100644 images/door.png create mode 100644 images/enemy.png create mode 100644 images/ground.png create mode 100644 images/player.png create mode 100644 images/wall.png create mode 100644 main.cpp create mode 100755 runningSFML.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..879cc29 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.vscode/ +main.o +sfml-app \ No newline at end of file diff --git a/gameTile.cpp b/gameTile.cpp new file mode 100644 index 0000000..ba035eb --- /dev/null +++ b/gameTile.cpp @@ -0,0 +1,27 @@ +#include +#include "gameTile.h" + +bool GameTile::setupSprite(std::string textureName) { + if (!texture.loadFromFile("images/" + textureName)) { + std::cout << "Can't load texture " << textureName << std::endl; + return false; + } + + texture.setSmooth(true); + sprite.setTexture(texture); + sprite.setTextureRect(sf::IntRect(0, 0, 50, 50)); + + return true; +} + +GameTile::GameTile(std::string textureName, float x, float y, bool passable, bool exit) { + if (!setupSprite(textureName)) { + return; + } + + pos = sf::Vector2f(x, y); + sprite.setPosition(pos); + + isPassable = passable; + isExit = exit; +} diff --git a/gameTile.h b/gameTile.h new file mode 100644 index 0000000..ba01dfa --- /dev/null +++ b/gameTile.h @@ -0,0 +1,20 @@ +#include + +#ifndef GAMETILE_H +#define GAMETILE_H + +class GameTile { + public: + bool isPassable; + bool isExit; + + sf::Vector2f pos; + sf::Texture texture; + sf::Sprite sprite; + + GameTile(std::string, float, float, bool, bool); + + bool setupSprite(std::string); +}; + +#endif diff --git a/gameWorld.cpp b/gameWorld.cpp new file mode 100644 index 0000000..6abaa4c --- /dev/null +++ b/gameWorld.cpp @@ -0,0 +1,246 @@ +#include +#include + +#include "gameWorld.h" + +void GameWorld::setupInitialState() { + exitPos = sf::Vector2i(1, 0); + playerPos = sf::Vector2i(gridLength - 1, gridLength - 1); + setupEnemyPositions(); + setupTiles(); +} + +void GameWorld::setupEnemyPositions() { + enemyPositions.clear(); + + enemyPositions.push_back(sf::Vector2i(0, 2)); + enemyPositions.push_back(sf::Vector2i(6, 0)); + enemyPositions.push_back(sf::Vector2i(2, 7)); +} + +void GameWorld::setupTiles() { + tiles.clear(); + + std::vector firstRow; + firstRow.push_back(new GameTile("wall.png", 0, 0, false, false)); + firstRow.push_back(new GameTile("door.png", 50, 0, true, true)); + firstRow.push_back(new GameTile("wall.png", 100, 0, false, false)); + firstRow.push_back(new GameTile("wall.png", 150, 0, false, false)); + firstRow.push_back(new GameTile("wall.png", 200, 0, false, false)); + firstRow.push_back(new GameTile("wall.png", 250, 0, false, false)); + firstRow.push_back(new GameTile("enemy.png", 300, 0, true, false)); + firstRow.push_back(new GameTile("wall.png", 350, 0, false, false)); + tiles.push_back(firstRow); + + std::vector secondRow; + secondRow.push_back(new GameTile("wall.png",0,50,false,false)); + secondRow.push_back(new GameTile("ground.png",50,50,true,false)); + secondRow.push_back(new GameTile("ground.png",100,50,true,false)); + secondRow.push_back(new GameTile("ground.png",150,50,true,false)); + secondRow.push_back(new GameTile("ground.png",200,50,true,false)); + secondRow.push_back(new GameTile("ground.png",250,50,true,false)); + secondRow.push_back(new GameTile("ground.png",300,50,true,false)); + secondRow.push_back(new GameTile("ground.png",350,50,true,false)); + tiles.push_back(secondRow); + + std::vector thirdRow; + thirdRow.push_back(new GameTile("enemy.png",0,100,true,false)); + thirdRow.push_back(new GameTile("ground.png",50,100,true,false)); + thirdRow.push_back(new GameTile("ground.png",100,100,true,false)); + thirdRow.push_back(new GameTile("wall.png",150,100,false,false)); + thirdRow.push_back(new GameTile("ground.png",200,100,true,false)); + thirdRow.push_back(new GameTile("ground.png",250,100,true,false)); + thirdRow.push_back(new GameTile("wall.png",300,100,false,false)); + thirdRow.push_back(new GameTile("wall.png",350,100,false,false)); + tiles.push_back(thirdRow); + + std::vector fourthRow; + fourthRow.push_back(new GameTile("wall.png",0,150,false,false)); + fourthRow.push_back(new GameTile("ground.png",50,150,true,false)); + fourthRow.push_back(new GameTile("ground.png",100,150,true,false)); + fourthRow.push_back(new GameTile("wall.png",150,150,false,false)); + fourthRow.push_back(new GameTile("ground.png",200,150,true,false)); + fourthRow.push_back(new GameTile("ground.png",250,150,true,false)); + fourthRow.push_back(new GameTile("ground.png",300,150,true,false)); + fourthRow.push_back(new GameTile("wall.png",350,150,false,false)); + tiles.push_back(fourthRow); + + std::vector fifthRow; + fifthRow.push_back(new GameTile("wall.png",0,200,false,false)); + fifthRow.push_back(new GameTile("ground.png",50,200,true,false)); + fifthRow.push_back(new GameTile("ground.png",100,200,true,false)); + fifthRow.push_back(new GameTile("wall.png",150,200,false,false)); + fifthRow.push_back(new GameTile("wall.png",200,200,false,false)); + fifthRow.push_back(new GameTile("ground.png",250,200,true,false)); + fifthRow.push_back(new GameTile("ground.png",300,200,true,false)); + fifthRow.push_back(new GameTile("ground.png",350,200,true,false)); + tiles.push_back(fifthRow); + + std::vector sixthRow; + sixthRow.push_back(new GameTile("ground.png",0,250,true,false)); + sixthRow.push_back(new GameTile("ground.png",50,250,true,false)); + sixthRow.push_back(new GameTile("ground.png",100,250,true,false)); + sixthRow.push_back(new GameTile("ground.png",150,250,true,false)); + sixthRow.push_back(new GameTile("wall.png",200,250,false,false)); + sixthRow.push_back(new GameTile("ground.png",250,250,true,false)); + sixthRow.push_back(new GameTile("ground.png",300,250,true,false)); + sixthRow.push_back(new GameTile("wall.png",350,250,false,false)); + tiles.push_back(sixthRow); + + std::vector seventhRow; + seventhRow.push_back(new GameTile("wall.png",0,300,false,false)); + seventhRow.push_back(new GameTile("wall.png",50,300,false,false)); + seventhRow.push_back(new GameTile("ground.png",100,300,true,false)); + seventhRow.push_back(new GameTile("ground.png",150,300,true,false)); + seventhRow.push_back(new GameTile("ground.png",200,300,true,false)); + seventhRow.push_back(new GameTile("ground.png",250,300,true,false)); + seventhRow.push_back(new GameTile("wall.png",300,300,false,false)); + seventhRow.push_back(new GameTile("wall.png",350,300,false,false)); + tiles.push_back(seventhRow); + + std::vector eighthRow; + eighthRow.push_back(new GameTile("wall.png",0,350,false,false)); + eighthRow.push_back(new GameTile("wall.png",50,350,false,false)); + eighthRow.push_back(new GameTile("enemy.png",100,350,true,false)); + eighthRow.push_back(new GameTile("wall.png",150,350,false,false)); + eighthRow.push_back(new GameTile("wall.png",200,350,false,false)); + eighthRow.push_back(new GameTile("ground.png",250,350,true,false)); + eighthRow.push_back(new GameTile("ground.png",300,350,true,false)); + eighthRow.push_back(new GameTile("player.png",350,350,true,false)); + tiles.push_back(eighthRow); +} + +void GameWorld::redrawSprites() { + tiles[playerPos.y][playerPos.x]->setupSprite("player.png"); + + for (int i = 0; i < enemyPositions.size(); i++) { + sf::Vector2i currentEnemyPos = enemyPositions[i]; + tiles[currentEnemyPos.y][currentEnemyPos.x]->setupSprite("enemy.png"); + } +} + +void GameWorld::moveLeft() { + if (playerPos.x == 0 || !tiles[playerPos.y][playerPos.x - 1]->isPassable) { + return; + } + + tiles[playerPos.y][playerPos.x]->setupSprite("ground.png"); + playerPos.x--; + + checkCollisionsAndMoveEnemies(); +} + +void GameWorld::moveUp() { + if (playerPos.y == 0 || !tiles[playerPos.y - 1][playerPos.x]->isPassable) { + return; + } + + tiles[playerPos.y][playerPos.x]->setupSprite("ground.png"); + playerPos.y--; + + checkCollisionsAndMoveEnemies(); +} + +void GameWorld::moveRight() { + if (playerPos.x == gridLength - 1 || !tiles[playerPos.y][playerPos.x + 1]->isPassable) { + return; + } + + tiles[playerPos.y][playerPos.x]->setupSprite("ground.png"); + playerPos.x++; + + checkCollisionsAndMoveEnemies(); +} + +void GameWorld::moveDown() { + if (playerPos.y == gridLength - 1 || !tiles[playerPos.y + 1][playerPos.x]->isPassable) { + return; + } + + tiles[playerPos.y][playerPos.x]->setupSprite("ground.png"); + playerPos.y++; + + checkCollisionsAndMoveEnemies(); +} + +std::vector GameWorld::getFreeCoordinates(sf::Vector2i currentPos) { + std::vector freePositions; + std::vector allPositions; + + allPositions.push_back(sf::Vector2i(currentPos.x - 1, currentPos.y)); + allPositions.push_back(sf::Vector2i(currentPos.x - 1, currentPos.y - 1)); + allPositions.push_back(sf::Vector2i(currentPos.x, currentPos.y - 1)); + allPositions.push_back(sf::Vector2i(currentPos.x + 1, currentPos.y - 1)); + allPositions.push_back(sf::Vector2i(currentPos.x + 1, currentPos.y)); + allPositions.push_back(sf::Vector2i(currentPos.x + 1, currentPos.y + 1)); + allPositions.push_back(sf::Vector2i(currentPos.x, currentPos.y + 1)); + allPositions.push_back(sf::Vector2i(currentPos.x - 1, currentPos.y + 1));\ + + for (int i = 0; i < allPositions.size(); i++) { + if (checkIfPositionIsFree(allPositions[i])) { + freePositions.push_back(allPositions[i]); + } + } + + return freePositions; +} + +bool GameWorld::checkIfPositionIsFree(sf::Vector2i pos) { + if (pos.x < 0 || pos.y < 0 || pos.x > gridLength - 1 || pos.y > gridLength - 1) { + return false; + } + + if (!tiles[pos.y][pos.x]->isPassable || tiles[pos.y][pos.x]->isExit) { + return false; + } + + return true; +} + +void GameWorld::moveEnemies() { + for (int i = 0; i < enemyPositions.size(); i++) { + sf::Vector2i currentEnemyPosition = enemyPositions[i]; + std::vector freePositions = getFreeCoordinates(currentEnemyPosition); + + int randomIndex = rand() % (freePositions.size() - 1); + sf::Vector2i newPos = freePositions[randomIndex]; + + tiles[currentEnemyPosition.y][currentEnemyPosition.x]->setupSprite("ground.png"); + enemyPositions[i] = newPos; + } +} + +bool GameWorld::checkIfReachedExit() { + return playerPos.x == exitPos.x && playerPos.y == exitPos.y; +} + +bool GameWorld::checkIfTouchedEnemy() { + for (int i = 0; i < enemyPositions.size(); i++) { + sf::Vector2i currentEnemyPos = enemyPositions[i]; + if (playerPos.x == currentEnemyPos.x && playerPos.y == currentEnemyPos.y) { + return true; + } + } + + return false; +} + +void GameWorld::checkCollisionsAndMoveEnemies() { + if (checkIfReachedExit()) { + setupInitialState(); + return; + } + + moveEnemies(); + if (checkIfTouchedEnemy()) { + setupInitialState(); + return; + } + + redrawSprites(); +} + +GameWorld::GameWorld() { + gridLength = 8; + setupInitialState(); +} diff --git a/gameWorld.h b/gameWorld.h new file mode 100644 index 0000000..ae1de59 --- /dev/null +++ b/gameWorld.h @@ -0,0 +1,41 @@ +#include +#include + +#include "gameTile.h" + +#ifndef GAMEWORLD_H +#define GAMEWORLD_H + +class GameWorld { + sf::Vector2i exitPos; + sf::Vector2i playerPos; + std::vector enemyPositions; + + void setupInitialState(); + void setupEnemyPositions(); + void setupTiles(); + + void redrawSprites(); + + std::vector getFreeCoordinates(sf::Vector2i currentPos); + bool checkIfPositionIsFree(sf::Vector2i); + + void moveEnemies(); + + bool checkIfReachedExit(); + bool checkIfTouchedEnemy(); + void checkCollisionsAndMoveEnemies(); + + public: + std::vector< std::vector > tiles; + int gridLength; + + GameWorld(); + + void moveLeft(); + void moveUp(); + void moveRight(); + void moveDown(); +}; + +#endif diff --git a/images/.DS_Store b/images/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 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 K09mHy81@hLlO+cL literal 0 HcmV?d00001 diff --git a/images/enemy.png b/images/enemy.png new file mode 100644 index 0000000000000000000000000000000000000000..c77247b890fffab2177bf2509ad43087591fe8f7 GIT binary patch literal 3358 zcmZ`*2|Sc*7k|fAc1a9M6D^j^Fp-O~4Kc`Y?PMDaCd^<4Ge*j^7@svuQMQ_hEF~d( zWb9N#){7#Mgu1RReKXbVe&2V$`@X;DIp;a&fBxq==Xu`W?~S!Wn+Wnr@c{rJXo@nj zW=S}E?B-$3GJ5oKmH-j0O^`rY-~M^l;vUw~)W^aCP-N-50d9~ez{!TNUH~KoaDUSQ zzzih)Q?~}m|G;nnKnxDx`hjs~Nw#{NJ^hqiDOZ49EQ=&-B)71dLs50PcUtzghpA9r3NYf7lR$ zU4oWn2#&Q+47-QAstDNMY(IMWJ?DQk{QGHs%gH)UT|NZt=he{Vb84_RAq_1SB+Md^OWVF9De?%A1bSd_wh z4f}i*n`eRjXFp~+RPb|wQa1iCzf6I4OPu{i#!6iMVa5R64I~zaBa1M-?~HIp@qf}m{-q? zen1skLOLAU%@YdEO?A5yN65stm}w45eX&}jo||`+vQ$h6tDV97DMGkzU3yqqnV+O1 zZ&A%3=cp~K$O#G67+umT#u3zd4!VT!-9*6qk-$j3Lj~R@J=5#3f}JvuA5mImyY?}a z(6pgda>-T@i#`rR?eRd7)8jP!`wiqbrg&EA!%i8gpJHD9mNwyC8AQfRWl?N2!GU+Q zWCTX@eN>u0w)$44-UH3qplg>N!JkIyWrk)wxLW?}0VP7hlM>FvW_&=}JM#nGLPu*I z058Q1g`t~M4d{ z^zFdQV%38mIwyDR+UuG>o00sgGX~csI&#nd?vIPyj-4^5>*?jxL)XCK-TSCAXGG~K znv{}DiS&ZU$dM}WIHb>t{>a{A**^hQu7|OU+4f}48%BKsbjS9acpCGycBsUa3F}Ia z&PVp31p?5ai%sBLbraWQB=nO4s%p^7BY#i=+>(J|n(gB69Tq;>7?iINf|7$W%BEW_ORr0Bx6bPEGHP(BJ)gSFa7`jbVu_0xh6a@9mvi6A5DV^o_a?iOf67j5pZV#?fR$(w71^30*U^vuz)& z6|Dc|!HwibW(_ZdFLhA~4UGBg?@gE6o{^}(F{^HKgj2*-Q;kWb_w`OJ2Ojt(A-Jnn zj;@YoFsEZsy^oCf5-<6KtcrstLCp$D20b}Fhc^)hS4+Bx{l`nuB6ls&1vX_|b+$o$QOp;Wx~J46>cm|ZFW$Vl z=~Pp5XeUR0WcFo|4O~Ox*x=dFcTcsdu=%OSERkqCpF?xS?i->*cQrSpJXhW|-#c!P z#Lbrvn09lu^1SU?PQA-O=fTTjBVTXreA%izEADS#FB`;QGSAiWSBFQ?Exla2eI?JK zJHQxuV~IW8-QE2yJ|Bll&xjh=oh=AUado~^lgq2-*65$|;7VGEgTD2QfL*o@)xIxF zlQB|sF?9ahnaADsLNvrPbB}{=U(lJrZTGf7haXQ4rHu? z1O;ar5MmJSkF-RyO!c>ObF;d5DVS^ROpywCro_D=LcJ_+f9n^c% zG&d=9Mkn~S(V}ySTwtL3?33t=sIR9d$4^ds-=MGQfLboNIXkB~_fCkOloBjoGqPdL=j$^{cKSnR{KF;Nb<+dus7>3$e$OsE zR}{_$Xde6XreCbJR{AB3RTKOppQod9bxY^NFc^dPS7NeudIJNIl-Hfl>iYEi>#L&= zP*txr9n+W3-U)nETdQ~-=3ezmN2%%Swih%O^1MBF#OBIC9B)CapZeP#a1rIh5yg?d z9-G!aifHhm&)BQizhvMyOy&B>^kSRUBJmvPOs?Oay84P-k?n5n9LvWa;S_{RutBK0rU0DTS`gK#IgvCY^5*hN)BnT4W`B0>8CMo7V0d<)jR4yKOkyPDQ6#MH zzq+i1aD6e9!?#4e*;^1)P2JhvAjdaN84b4zX$apRUZFvk(pR5!YjgLvXzB)2e2?vQ zZq2bUO5Ak<>QXrMI=@=xSB5KnOVv&>U5vhZ%Kk{5E6q=b8=V(h#snV{aT{OB#?ZU=y*1cu^T28~ucOXCZa@ z9OM?f{rooLR_q6!`S7Oe zZ4IHFUY|OC2^`-zJfa+x>vuJSpSB_Qbu-~SgKr_Y>Q=I4Jg;cG(X93c zEb1V$_R`ypAI8i~MLh7R6)fJDc0?mMw(}D=b{EaKQ+(2@Q7Z+Z%CREG4R{Ts02yq*96 literal 0 HcmV?d00001 diff --git a/images/ground.png b/images/ground.png new file mode 100644 index 0000000000000000000000000000000000000000..3aac705afd094c71d183ff7284c1ad215593c8fb GIT binary patch literal 2959 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 v&}~oN`-{BII=y5lPxg5&-Rd^6Z{ literal 0 HcmV?d00001 diff --git a/images/player.png b/images/player.png new file mode 100644 index 0000000000000000000000000000000000000000..16c6c04b091a1396b301e67cc41d2f5edb1c4a78 GIT binary patch literal 3540 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 A=Kufz literal 0 HcmV?d00001 diff --git a/images/wall.png b/images/wall.png new file mode 100644 index 0000000000000000000000000000000000000000..8035dd1f9aa6114e0f73b98ff25b6229a7d66310 GIT binary patch literal 1973 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-#^NA%Cx&(BWL^R}t5PF8(|mmy zw18|523AHP24;{FAY@>aVqgWc85q16rQz%#Mh&PMCI*J~Oa>OHnkXO*V(NehIL$Jt zje#8~A_>G37BC`AU%&*{X|#YD!3L^ha13_#^aRq*MX8A;sVNHOnI#zt?w-B@47VBQ zy8tCP3p^r=85s1GL71^(seKs(1CwoLNJL45ua8x7ey(0(N`6wRUPW#J$UFv{3M(Kp zH?<^Dp&~aYuh^=>Rtc=a3djZt>nkaMm6T-LDnNc-DA*LG zq*(>IxIwi8dA3R!B_#z``ugSN<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF z$`C_f=D4I5Cl_TFlw{`TDS*sPOv*1Uu~kw6Sp)|VccxZkB5cYlhI$L=L4A;nzM-Ch zJ~nM7nQ1t*fn*@s!2W_*X9F_KDzrGY$T>eZH#M&WNe-w2?0Lr=G*OsDP9`W&ta1|b z(ruM0bW>8(5=(PRlZOATL7i$xv|j2-jbX9Z~iSyOHVs4t*XSi@Bcg{&Zx_+9&G~VW;I#@fr_^#*vANomiojd z&d|D;s&w*!N$!ly;Qzl8Znz#xh^ROn6c@xWN%X{)SAVV9-Bfn_pEh@1>z+HYKi}ov zK7*R?^4ZAT(Hw)GCFNx*d*kmbIOhp};hZJu zlW#YRckv>H8x~u8FRa~V`Tyiwo0-x3cQ=KykW+ZTsuq6y{rF86qIF{DPOa+ zRPD=bKmReM_JgqJd$H5=r=GKlwAVftv27lIo3VMc`9u#1ztbAry*rzeS8OeQ!y0CG zfBAm39*=!*rXCKAzVqYZ!H(z0)r0r%DVS4p#3*>J8c%YIX3@%p4xc@ zIbZMdA_K0b9SeSLGhaOS%1wibz7M?r-rrW96v^AX&+GiY-QBMxww`Xx$+e#%pxMbe z_eINJwh!%(&%b~AN z$e%o0ZFSW{?_6r}^G=r?8-;6wlT{5`a(|rI9bVLQ$8&97&#_}nf-EmR|DX4maBfxx z&y3Wfi>u|G|1Vjf&|JLusAGIm4d)zdN4cYi7o~|vOlCCUab$gb!d_#coc^?xDZg9} zq-(P2KWB}&EZzJ=WfqrafBUlTM!mG^Nd`w9K3%u}sp*{IJD=magUiB|yuZ?|s#M=x ze%ZlVa9TuV{-!0xX@?7(o0^>+KS@Lh{CU{6G5KcwUzx9aYLghZS!;W^F8j$YKFcBG z6_a6+xvXD(YV8}pjHJ?~O5KMvIFc@X+_>q=wVfI~*Cn!Vf7l<#p`IkWk}t!;Nm1g4 zX``crtZq*H)gl|VChNnQzAo)*H>*2Jzoq7$KG4{eGX2Cglh+!N`|{eg*1hp-e#JTI zX-Y=<`m5C+Z0<3+RXunYw&%8ivgkw6wuieNejHq?e|3xTvHTyao^&qMz0Tb{UBEPO zx#q3|#R(?-C1;uEX8ZXx&SKwnQ8_`;wQy?aJ+~=YaxYF@4VFo4X*pyg&!|0*L(%ui zI&Ez|uEgkn5 +#include "gameTile.cpp" +#include "gameWorld.cpp" + +int main() { + float windowWidth = 400; + float windowHeight = 400; + + sf::RenderWindow window(sf::VideoMode(windowWidth, windowHeight), "Roguelike game"); + + GameWorld gameWorld = GameWorld(); + + while (window.isOpen()) { + sf::Event event; + + while (window.pollEvent(event)) { + if (event.type == sf::Event::Closed) { + window.close(); + } else if (event.type == sf::Event::KeyPressed) { + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) { + gameWorld.moveLeft(); + } else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) { + gameWorld.moveUp(); + } else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) { + gameWorld.moveRight(); + } else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) { + gameWorld.moveDown(); + } + } + } + + window.clear(); + + for (int i = 0; i < gameWorld.gridLength; i++) { + for (int j = 0; j < gameWorld.gridLength; j++) { + window.draw(gameWorld.tiles[i][j]->sprite); + } + } + + window.display(); + } +} diff --git a/runningSFML.sh b/runningSFML.sh new file mode 100755 index 0000000..1dc8666 --- /dev/null +++ b/runningSFML.sh @@ -0,0 +1,7 @@ +#! /bin/bash + +SFML=/usr/local/SFML + +g++ -c main.cpp -I $SFML/include +g++ main.o -o sfml-app -L $SFML/lib -lsfml-graphics -lsfml-audio -lsfml-window -lsfml-system +export LD_LIBRARY_PATH=$SFML/lib && ./sfml-app