From 16ccfe61b46089a4000d086a1304bdc5655258b4 Mon Sep 17 00:00:00 2001 From: OBJULL Date: Wed, 8 May 2024 13:50:29 -0400 Subject: [PATCH] Transferred from GitHub --- Makefile | 28 +++ assets/.DS_Store | Bin 0 -> 6148 bytes assets/piskel/Tileset.piskel | 1 + assets/piskel/glyph.piskel | 1 + data/fonts/font.ttf | Bin 0 -> 175644 bytes data/sprites/glyph.png | Bin 0 -> 2466 bytes data/sprites/tileset.png | Bin 0 -> 849 bytes include/engine/engine.h | 45 ++++ include/engine/externals.h | 20 ++ include/engine/vectors.h | 25 ++ include/game/message.h | 34 +++ include/game/navbar.h | 42 ++++ include/game/tilemap.h | 65 +++++ source/engine/engine.cpp | 85 +++++++ source/engine/vectors.cpp | 26 ++ source/game/message.cpp | 38 +++ source/game/navbar.cpp | 359 +++++++++++++++++++++++++++ source/game/tilemap.cpp | 453 +++++++++++++++++++++++++++++++++++ source/main.cpp | 60 +++++ 19 files changed, 1282 insertions(+) create mode 100644 Makefile create mode 100644 assets/.DS_Store create mode 100644 assets/piskel/Tileset.piskel create mode 100644 assets/piskel/glyph.piskel create mode 100644 data/fonts/font.ttf create mode 100644 data/sprites/glyph.png create mode 100644 data/sprites/tileset.png create mode 100644 include/engine/engine.h create mode 100644 include/engine/externals.h create mode 100644 include/engine/vectors.h create mode 100644 include/game/message.h create mode 100644 include/game/navbar.h create mode 100644 include/game/tilemap.h create mode 100644 source/engine/engine.cpp create mode 100644 source/engine/vectors.cpp create mode 100644 source/game/message.cpp create mode 100644 source/game/navbar.cpp create mode 100644 source/game/tilemap.cpp create mode 100644 source/main.cpp diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..133ab4f --- /dev/null +++ b/Makefile @@ -0,0 +1,28 @@ +# Variables +LIBS:= -lSDL2main -lSDL2 -lSDL2_image -lSDL2_ttf +TARGET:= minesweeper + +# Instructions +build: compile link run + +compile: + g++ -c -I include source/engine/vectors.cpp -o bin/vectors.o + g++ -c -I include source/engine/engine.cpp -o bin/engine.o + g++ -c -I include source/game/tilemap.cpp -o bin/tilemap.o + g++ -c -I include source/game/navbar.cpp -o bin/navbar.o + g++ -c -I include source/game/message.cpp -o bin/message.o + g++ -c -I include source/main.cpp -o bin/main.o + +link: + g++ bin/*.o -L lib $(LIBS) -o build/$(TARGET) + +cpydat: + cp data -r build + +run: + ./build/$(TARGET) + +# Complimentary +clean: + rm build/* + rm bin/* \ No newline at end of file diff --git a/assets/.DS_Store b/assets/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..740c8cea3999bc8172e137306ab978c12e39c1ed GIT binary patch literal 6148 zcmeHK%}T>S5Z<-5-BN@c6nb3nS}?VxAYMYP2d_r-pi&cBYB0@~CbfrB$XQ>=C-Hfl z+1(t11#cpD26n&M`Pt2Uko{qd@xgN3Va#ES322BMl`Vqit*$*AjL7vI6PAXnbRNbk z+%nN$G~u_`*cF?xfK6HX`#-{Y9Hp7-e)7Fab-z{@bT(T!4Z zSm;4`8%@i;}Tg4b(Cjr#ja+4$%;ek<(hQJN;f;c3pSV zmg}=qw=H|!{$|q2KCkf9bTW&UqwU#9p4g&(xPWEHwYdO zZc+hFDz{GzZqmUnZJcK@H)zrs*DJ$3cID#n!u9H4mpYtr&mi^005MQzpkjs&p8uEd z%WQq*ms4m&3=jkVi~(L9`ojSfWzW`c<>6T?p*=xE!MGe15YS7P02tst($Y@jm#9OW YXE8U3v!Gq41JXr66G9y^@Cyul0dreR!~g&Q literal 0 HcmV?d00001 diff --git a/assets/piskel/Tileset.piskel b/assets/piskel/Tileset.piskel new file mode 100644 index 0000000..d1c3827 --- /dev/null +++ b/assets/piskel/Tileset.piskel @@ -0,0 +1 @@ +{"modelVersion":2,"piskel":{"name":"Tileset","description":"","fps":12,"height":16,"width":16,"layers":["{\"name\":\"Layer 1\",\"opacity\":1,\"frameCount\":12,\"chunks\":[{\"layout\":[[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11]],\"base64PNG\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAAAQCAYAAABA4nAoAAADLElEQVRoQ+2avW7CMBDHg1QxsXZhZ2Nphk48ACtT36ElSyekzpWYupT2HfoeTB3ShQdgQCxdmVAl2gu61rne+SskGOEsSAkXn8//n8/nuJVl2S7xuFarVbJYLJLhcOhhnSRo72UcjWIEDhSBlg8Aqnh9AKDi73Q6bHcGg0Eyn8/Frm42m+KZZG+KUbSP8fsFQCc0TkgoHgTA114n4AiAHmEO4JuLvDB6+0pLxtx9aj9er01zRvF81u0Wv1z7l4+vxnd8Ptyy9nm+9113pelfv6QJLB9/sK9IZ1el+2BfOwDv223R6HW7/a9xvIEzOAoefukFgFEg6p7B77P9gDw9l8WEvnHtv+SZOH536TMbA+w/xkp6gRRDNQP6AmArfh0ANuIH+yoAgD1CwMVfEj/GVIWgVgDoYNoAAE5y4kfnaZapEwAUvwsAOvFjH1QIqP8mAOhEcsgMgADg7G6YiIvHtH0EAAVueofr+GGGsAGAzvYIRiMAcANpAwCKH3+5ZZV6zzWAdEAke1X8PgDQmR7egXDoANAJhsukEYD/NQwndIhrowBAgz4ZIAQAqPhdANAJuGkAJF/U2kAFyGYJRLNDkxmAzv5cBpKEfhQAcABsagCfnSTIBHVlAPTdpwaQhGcLgGkZpGZSqf9YB3C+SADAf10h0AEg1QPq8shl/FwBkMahkSUQbXwymSTT6bR0GzsPN9Ui2LRubGIJdEgAaF1gWgLpALApgqX42ewC6WLP1Qg+AEAbUhEstc+JX8oA6mxP33eUXSBw4hwB0AkfB8ZlBrStAUIBgPODFsm2/XcBIJgaQA2ALQBgE8ouEPjiswSyEX4EgP8OwEEjiV/KAMEAAKLnLlwKSUsg3O+ntqfwHUAVP7cTRPtkOwOC3TlmAJ34gwZAEj8KACDgAKACOdaXYG4nCHyjH8SogEP4DlBlCXSoIlhXS7jUAFUAkHxgi2A4m7NcLk1+l56rRyGq2MNLQzsLFCoAdRfBJgBM26AwlqavwS67QD4AgA9ORyFGo9EOTnX6Xv1+vzgVWuWKh9n4w4CmmLosobh3Rfufs0C9Xs/rOLRpcOLzGIFTiMA3iwMNLeSNeBkAAAAASUVORK5CYII=\"}]}"],"hiddenFrames":[null]}} \ No newline at end of file diff --git a/assets/piskel/glyph.piskel b/assets/piskel/glyph.piskel new file mode 100644 index 0000000..c3e2713 --- /dev/null +++ b/assets/piskel/glyph.piskel @@ -0,0 +1 @@ +{"modelVersion":2,"piskel":{"name":"glyph","description":"","fps":12,"height":16,"width":16,"layers":["{\"name\":\"Layer 1\",\"opacity\":1,\"frameCount\":13,\"chunks\":[{\"layout\":[[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]],\"base64PNG\":\"data:image/png;base64,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\"}]}"],"hiddenFrames":[null]}} \ No newline at end of file diff --git a/data/fonts/font.ttf b/data/fonts/font.ttf new file mode 100644 index 0000000000000000000000000000000000000000..271a1c4413fd7736c1790918c5c6b55345d34c7c GIT binary patch literal 175644 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 literal 0 HcmV?d00001 diff --git a/data/sprites/glyph.png b/data/sprites/glyph.png new file mode 100644 index 0000000000000000000000000000000000000000..d3fa7c6aab247130077ce9aafd400090c3daec2d GIT binary patch literal 2466 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 literal 0 HcmV?d00001 diff --git a/data/sprites/tileset.png b/data/sprites/tileset.png new file mode 100644 index 0000000000000000000000000000000000000000..f3585b182a3f9d20ca73243a7d23f2e8c465fc46 GIT binary patch literal 849 zcmV-X1FrmuP)8kN* zuH)&<&VJa=#`Tg&v1fMwznza=UsYB0R78y9@mTEl`(m|PMOYUF+D938Xmk|=fG$1; z02e=-%|uDd<+9lAcBC`;a>@7}U{{p}@k>m&`M*y+*E&-ze@Z<5Z;rI6Xy2TLz zQUE9ze)#~v97xs?fWlFT4*+;q5|2K3lw}Kmiw}ta3PDOM`d_vHKtxOg;O^t^MFYUF z^{D|dodn=y9Rak6Z8n=?yWM&fL92CLObSc@2m#*+7)=)dAs|{BmnFI?#g4^d(cB7CM#^Qz1<+bka~Yb?=TX;T z%lV}|p8!AvoHGPdLpasGiGVQyc=xJqvhVxvvXzC>|1UK_1MsnWcJ}42?F>CjXYsFf zrKbOf@=oj|IKOm@qz2lRny$Yy04P2LfJ;0Ip%6Gg3jp|_5Tp(01OOEu1Ay-|_&_)= z0Itp<-70$lz{Q6Ea0wV1fVLJ|8+xe$+Qhy9tTeDv0OrRukk&Fd0A3fY6mS9XDT3Mt z4Aup30WRULE}{wWtpR5T;3Isr0H}DW6Y$*$`KC8$1W27g>IPgu4(EVQQXp3VgBL+p zUx#NQAuRdI!G5|9Pai}^b{)3TmOlUID17_y;AMY*bJM&h-zcn z?HXnI_iC=ykoxwg=%T!T)B3*!z*jtY&;a;|2m2HNV2=#Dgajz)Yc%0*CK%KHuvZ30$l@;{P7g=jermUNh#oh5E=np0no(v zQUh`W;1b^pfUb(5l}_40h})$Ah$?~>0ILncq}FLLqzl9V=&cA!M16~xwi`Lv|M%Ym b{s6x5I}Kiyi2eWo002ovPDHLkV1fVuJIHoJ literal 0 HcmV?d00001 diff --git a/include/engine/engine.h b/include/engine/engine.h new file mode 100644 index 0000000..8c76134 --- /dev/null +++ b/include/engine/engine.h @@ -0,0 +1,45 @@ +// Define once +#ifndef H_ENGINE +#define H_ENGINE + +// Includes +/// External +#include "externals.h" +/// Engine +#include "vectors.h" + +// Constants +#define SCR_WIDTH 512 +#define SCR_HEIGHT 562 + +#define SCR_H_BUFFER 50 + +// Classes +class Engine{ +private: + // Variables + SDL_Window* window; + Uint32 last; + +public: + // Variables + static double deltaTime; + static SDL_Renderer* renderer; + static Vector2 mousePos; + static int clicking; + bool running; + + // Constructor + Engine(); + + // Functions + void Update(); + + void Clear(); + void Display(); + + void Delete(); +}; + +// End definition +#endif \ No newline at end of file diff --git a/include/engine/externals.h b/include/engine/externals.h new file mode 100644 index 0000000..7941b09 --- /dev/null +++ b/include/engine/externals.h @@ -0,0 +1,20 @@ +// Define once +#ifndef H_EXTERNALS +#define H_EXTERNALS + +// Includes +/// System +#include +#include +#include +#include +#include +#include +#include +/// SDL2 +#include +#include +#include + +// End definition +#endif \ No newline at end of file diff --git a/include/engine/vectors.h b/include/engine/vectors.h new file mode 100644 index 0000000..af15204 --- /dev/null +++ b/include/engine/vectors.h @@ -0,0 +1,25 @@ +// Define once +#ifndef H_VECTORS +#define H_VECTORS + +// Includes +#include + +// Structure +typedef struct Vector2{ + // Variables + float x,y; + + // Constructor + Vector2(); + Vector2(float x, float y); + + // Operations + Vector2 operator+(Vector2 b); + Vector2 operator*(float b); + void operator+=(Vector2 b); + void operator*=(float b); +} Vector2; + +// End definition +#endif \ No newline at end of file diff --git a/include/game/message.h b/include/game/message.h new file mode 100644 index 0000000..9be4676 --- /dev/null +++ b/include/game/message.h @@ -0,0 +1,34 @@ +// Define once +#ifndef H_MESSAGE +#define H_MESSAGE + +// Includes +/// Externals +#include +/// Engine +#include +/// Game +#include "tilemap.h" + +// Classes +class Message{ +private: + // Variables + SDL_Texture* texture; + + int x,y; + int w,h; + +public: + // Variables + + // Constructors + Message(const char* msg); + + // Functions + void Update(); + void Draw(); +}; + +// End definition +#endif \ No newline at end of file diff --git a/include/game/navbar.h b/include/game/navbar.h new file mode 100644 index 0000000..36e669c --- /dev/null +++ b/include/game/navbar.h @@ -0,0 +1,42 @@ +// Define once +#ifndef H_NAVBAR +#define H_NAVBAR + +// Includes +/// Externals +#include +/// Engine +#include +/// Game +#include + +// Classes +class Navbar{ +private: + // Variables + Tilemap* tilemap; + SDL_Texture* texture; + + bool didClick; + + // Functions + void _drawBackground(); + void _drawFlagCounter(); + void _drawFace(); + void _drawTime(); + + Vector2 _getNumber(int number); + +public: + // Variables + + // Constructor + Navbar(Tilemap* tilemap); + + // Functions + void Update(); + void Draw(); +}; + +// End definition +#endif \ No newline at end of file diff --git a/include/game/tilemap.h b/include/game/tilemap.h new file mode 100644 index 0000000..31b8eb5 --- /dev/null +++ b/include/game/tilemap.h @@ -0,0 +1,65 @@ +// Define once +#ifndef H_TILEMAP +#define H_TILEMAP + +// Includes +/// Externals +#include +/// Engine +#include + +// Constants +#define GRID_W 10 +#define GRID_H 10 +#define GRID_B 10 + +// Classes +class Tilemap{ +private: + // Variables + std::vector grid_bomb; + std::vector grid_flag; + std::vector grid_show; + + SDL_Texture* texture; + + int savedClick = 0; + bool didClick; + bool gameBegan; + + bool cascading; + float timepassed; + + // Functions + void _init(); + void createGrid(Vector2 mousePos); + + int getSurrounding(Vector2 tilePos); + void revealTiles(Vector2 mousePos); + void spawnCascade(Vector2 position); + + void _leftClick(); + void _rightClick(); + + void winDetection(); + void clickDetection(); + +public: + // Variables + bool playing; + bool win; + int flags; + int gameTime; + + // Constructors + Tilemap(); + + // Functions + void Update(); + void Draw(); + + void Reset(); +}; + +// End definiton +#endif \ No newline at end of file diff --git a/source/engine/engine.cpp b/source/engine/engine.cpp new file mode 100644 index 0000000..672db52 --- /dev/null +++ b/source/engine/engine.cpp @@ -0,0 +1,85 @@ +// Header +#include + +// Variables +double Engine::deltaTime; +SDL_Renderer* Engine::renderer; +Vector2 Engine::mousePos; +int Engine::clicking; + +// Constructor +Engine::Engine(){ + // Init SDL2 + SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO); + + // Create a window + window = SDL_CreateWindow("Minesweeper", + SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, + SCR_WIDTH, SCR_HEIGHT, + SDL_WINDOW_SHOWN); + if(window == NULL){ + throw("Failed to create an SDL window.\n"); + } + + // Create a renderer + Engine::renderer = SDL_CreateRenderer(window, 0, SDL_RENDERER_ACCELERATED); + if(Engine::renderer == NULL){ + throw("Failed to create an SDL renderer.\n"); + } + + // Staring SDL2 subsystems + IMG_Init(IMG_INIT_PNG); + TTF_Init(); + + // We're running! + running = true; + clicking = false; +} + +// Functions +void Engine::Update(){ + // Getting events + SDL_Event event; + + // Polling + while(SDL_PollEvent(&event)){ + switch(event.type){ + case SDL_QUIT: + running = false; + break; + case SDL_MOUSEMOTION: + Engine::mousePos = Vector2(event.motion.x, event.motion.y); + break; + case SDL_MOUSEBUTTONDOWN: + if(event.button.button == SDL_BUTTON_LEFT){ + clicking = 1; + } + else if(event.button.button == SDL_BUTTON_RIGHT){ + clicking = 2; + } + break; + case SDL_MOUSEBUTTONUP: + clicking = 0; + break; + } + } + + // Calculate deltaTime + Uint32 now = SDL_GetTicks(); + Engine::deltaTime = (now - last) / 1000.0f; + last = now; +} + +void Engine::Clear(){ + SDL_SetRenderDrawColor(Engine::renderer, 0,0,0, 1); + SDL_RenderClear(Engine::renderer); +} +void Engine::Display(){ + SDL_RenderPresent(Engine::renderer); +} + +void Engine::Delete(){ + SDL_DestroyRenderer(Engine::renderer); + SDL_DestroyWindow(window); + SDL_Quit(); +} \ No newline at end of file diff --git a/source/engine/vectors.cpp b/source/engine/vectors.cpp new file mode 100644 index 0000000..f7eae03 --- /dev/null +++ b/source/engine/vectors.cpp @@ -0,0 +1,26 @@ +// Header +#include + +// Constructor +Vector2::Vector2(){ + x = 0; + y = 0; +} +Vector2::Vector2(float x, float y){ + this->x = x; + this->y = y; +} + +// Operations +Vector2 Vector2::operator+(Vector2 b){ + return Vector2(x + b.x, y + b.y); +} +Vector2 Vector2::operator*(float b){ + return Vector2(x * b, y * b); +} +void Vector2::operator+=(Vector2 b){ + x += b.x; y += b.y; +} +void Vector2::operator*=(float b){ + x *= b; y *= b; +} \ No newline at end of file diff --git a/source/game/message.cpp b/source/game/message.cpp new file mode 100644 index 0000000..791ecf1 --- /dev/null +++ b/source/game/message.cpp @@ -0,0 +1,38 @@ +// Header +#include + +// Constructors +Message::Message(const char* msg){ + // Loading fonts + TTF_Font* font = TTF_OpenFont("data/fonts/font.ttf", 64); + if(font == NULL){ + throw("Failed to load font.\n"); + } + + // Surface to texture + SDL_Surface* surf = TTF_RenderText_Blended(font, msg, {255,255,255}); + texture = SDL_CreateTextureFromSurface(Engine::renderer, surf); + + // Variables + this->x = (SCR_WIDTH/2) - (surf->w / 2); + this->y = (SCR_HEIGHT/2) - (surf->h / 2); + this->w = surf->w; + this->h = surf->h; + + // Cleanup + SDL_FreeSurface(surf); +} + +// Functions +void Message::Update(){ + +} +void Message::Draw(){ + SDL_SetRenderDrawColor(Engine::renderer, 255,255,255, 1); + + SDL_Rect rect; + rect.x = x; rect.y = y; + rect.w = w; rect.h = h; + + SDL_RenderCopy(Engine::renderer, texture, NULL, &rect); +} \ No newline at end of file diff --git a/source/game/navbar.cpp b/source/game/navbar.cpp new file mode 100644 index 0000000..1aabb50 --- /dev/null +++ b/source/game/navbar.cpp @@ -0,0 +1,359 @@ +// Header +#include + +// Constructor +Navbar::Navbar(Tilemap* tilemap){ + // Setting variables + this->tilemap = tilemap; + didClick = false; + + // Getting texture + SDL_Surface* surf = IMG_Load("data/sprites/glyph.png"); + if(surf == NULL){ + throw("Failed to load Glyph surface.\n"); + } + + texture = SDL_CreateTextureFromSurface(Engine::renderer, surf); + SDL_FreeSurface(surf); +} + +// Functions +/// Private +void Navbar::_drawBackground(){ + // Making a rect for the top + SDL_Rect rect; + rect.x = 0; + rect.y = 0; + rect.w = SCR_WIDTH; + rect.h = SCR_H_BUFFER; + + // Color + SDL_SetRenderDrawColor(Engine::renderer, 190,190,190, 1); + SDL_RenderFillRect(Engine::renderer, &rect); +} +void Navbar::_drawFlagCounter(){ + if(tilemap->flags < 10){ + // Positional rect + SDL_Rect rect; + rect.x = SCR_WIDTH / 10; + rect.y = 0; + rect.w = 50; rect.h = 50; + + // Frame + SDL_Rect frame; + frame.x = 0; frame.y = 0; + frame.w = 16; frame.h = 16; + + // What number? + switch(tilemap->flags){ + case 0: + frame.x = 0; + frame.y = 0; + break; + case 1: + frame.x = 1; + frame.y = 0; + break; + case 2: + frame.x = 2; + frame.y = 0; + break; + case 3: + frame.x = 3; + frame.y = 0; + break; + case 4: + frame.x = 4; + frame.y = 0; + break; + case 5: + frame.x = 0; + frame.y = 1; + break; + case 6: + frame.x = 1; + frame.y = 1; + break; + case 7: + frame.x = 2; + frame.y = 1; + break; + case 8: + frame.x = 3; + frame.y = 1; + break; + case 9: + frame.x = 4; + frame.y = 1; + break; + } + + // Scaling to size + frame.x *= 16; + frame.y *= 16; + + // Drawing + SDL_SetRenderDrawColor(Engine::renderer, 255,255,255, 1); + SDL_RenderCopy(Engine::renderer, texture, &frame, &rect); + } + else{ + // Positional rect + SDL_Rect rect; + rect.x = SCR_WIDTH / 10; + rect.y = 0; + rect.w = 50; rect.h = 50; + + // Frame + SDL_Rect frame; + frame.x = 0; frame.y = 0; + frame.w = 16; frame.h = 16; + + Vector2 fPos = _getNumber(tilemap->flags%10); + frame.x = fPos.x; + frame.y = fPos.y; + + // Drawing + SDL_SetRenderDrawColor(Engine::renderer, 255,255,255, 1); + SDL_RenderCopy(Engine::renderer, texture, &frame, &rect); + + // The second one + rect.x -= 50; + + fPos = _getNumber((tilemap->flags / 10)%10); + frame.x = fPos.x; + frame.y = fPos.y; + + // Drawing + SDL_SetRenderDrawColor(Engine::renderer, 255,255,255, 1); + SDL_RenderCopy(Engine::renderer, texture, &frame, &rect); + } +} +void Navbar::_drawFace(){ + // Shapes + SDL_Rect rect; + SDL_Rect frame; + + rect.x = (SCR_WIDTH / 2) - (25); + rect.y = 0; + rect.w = 50; rect.h = 50; + + frame.w = 16; + frame.h = 16; + + // This face is gonna be weird to draw.. + if(Engine::clicking){ + // Anxious face + frame.x = 1; + frame.y = 2; + } + else if(!tilemap->playing && !tilemap->win){ + // Sad face + frame.x = 2; + frame.y = 2; + } + else{ + // Happy face + frame.x = 0; + frame.y = 2; + } + + // Scaling to size + frame.x *= 16; + frame.y *= 16; + + // Drawing + SDL_SetRenderDrawColor(Engine::renderer, 255,255,255, 1); + SDL_RenderCopy(Engine::renderer, texture, &frame, &rect); +} +void Navbar::_drawTime(){ + if(tilemap->gameTime < 10){ + // Positional rect + SDL_Rect rect; + rect.x = SCR_WIDTH / 1.2f; + rect.y = 0; + rect.w = 50; rect.h = 50; + + // Frame + SDL_Rect frame; + frame.x = 0; frame.y = 0; + frame.w = 16; frame.h = 16; + + // What number? + switch(tilemap->gameTime){ + case 0: + frame.x = 0; + frame.y = 0; + break; + case 1: + frame.x = 1; + frame.y = 0; + break; + case 2: + frame.x = 2; + frame.y = 0; + break; + case 3: + frame.x = 3; + frame.y = 0; + break; + case 4: + frame.x = 4; + frame.y = 0; + break; + case 5: + frame.x = 0; + frame.y = 1; + break; + case 6: + frame.x = 1; + frame.y = 1; + break; + case 7: + frame.x = 2; + frame.y = 1; + break; + case 8: + frame.x = 3; + frame.y = 1; + break; + case 9: + frame.x = 4; + frame.y = 1; + break; + } + + // Scaling to size + frame.x *= 16; + frame.y *= 16; + + // Drawing + SDL_SetRenderDrawColor(Engine::renderer, 255,255,255, 1); + SDL_RenderCopy(Engine::renderer, texture, &frame, &rect); + } + else{ + // Positional rect + SDL_Rect rect; + rect.x = SCR_WIDTH / 1.2f; + rect.y = 0; + rect.w = 50; rect.h = 50; + + // Frame + SDL_Rect frame; + frame.x = 0; frame.y = 0; + frame.w = 16; frame.h = 16; + + Vector2 fPos = _getNumber(tilemap->gameTime%10); + frame.x = fPos.x; + frame.y = fPos.y; + + // Drawing + SDL_SetRenderDrawColor(Engine::renderer, 255,255,255, 1); + SDL_RenderCopy(Engine::renderer, texture, &frame, &rect); + + // The second one + rect.x -= 50; + + fPos = _getNumber((tilemap->gameTime / 10)%10); + frame.x = fPos.x; + frame.y = fPos.y; + + // Drawing + SDL_SetRenderDrawColor(Engine::renderer, 255,255,255, 1); + SDL_RenderCopy(Engine::renderer, texture, &frame, &rect); + } +} +Vector2 Navbar::_getNumber(int number){ + // Result + Vector2 frame(0,0); + + // What number? + switch(number){ + case 0: + frame.x = 0; + frame.y = 0; + break; + case 1: + frame.x = 1; + frame.y = 0; + break; + case 2: + frame.x = 2; + frame.y = 0; + break; + case 3: + frame.x = 3; + frame.y = 0; + break; + case 4: + frame.x = 4; + frame.y = 0; + break; + case 5: + frame.x = 0; + frame.y = 1; + break; + case 6: + frame.x = 1; + frame.y = 1; + break; + case 7: + frame.x = 2; + frame.y = 1; + break; + case 8: + frame.x = 3; + frame.y = 1; + break; + case 9: + frame.x = 4; + frame.y = 1; + break; + } + + // Scaling to size + frame.x *= 16; + frame.y *= 16; + + // Return result + return frame; +} +/// Public +void Navbar::Update(){ + // Did we click on the face? + if(Engine::clicking + && !didClick){ + // Clicking! + didClick = true; + + // Getting the mouse position + Vector2 mPos = Engine::mousePos; + + // Constant + const int mid_w = SCR_WIDTH / 2; + + // Face clicking? + if(mPos.x >= mid_w - 50 + && mPos.x <= mid_w + 50 + && mPos.y <= SCR_H_BUFFER){ + // Restart game + tilemap->Reset(); + } + } + if(!Engine::clicking){ + didClick = false; + } +} +void Navbar::Draw(){ + // Drawing stuff in order + /// Background + _drawBackground(); + + /// Flags counter + _drawFlagCounter(); + + /// Smiley face + _drawFace(); + + /// Time + _drawTime(); +} \ No newline at end of file diff --git a/source/game/tilemap.cpp b/source/game/tilemap.cpp new file mode 100644 index 0000000..ff7ce31 --- /dev/null +++ b/source/game/tilemap.cpp @@ -0,0 +1,453 @@ +// Header +#include + +// Constructors +Tilemap::Tilemap(){ + _init(); +} + +// Functions +/// Private +void Tilemap::_init(){ + // Reset all of our grids + grid_bomb.clear(); + grid_flag.clear(); + grid_show.clear(); + + // Adding all tiles to the map + for(int y = 0; y < GRID_H; y++){ + for(int x = 0; x < GRID_W; x++){ + grid_bomb.push_back(0); + grid_flag.push_back(0); + grid_show.push_back(0); + } + } + + // Loading texture + SDL_Surface* surf = IMG_Load("data/sprites/tileset.png"); + if(surf == NULL){ + printf("ERROR: %s\n", IMG_GetError()); + throw("Failed to load tiles.\n"); + } + + texture = SDL_CreateTextureFromSurface(Engine::renderer, surf); + SDL_FreeSurface(surf); + + // Variables + playing = true; + flags = GRID_B; + savedClick = 0; + didClick = true; + cascading = false; + win = true; + gameTime = 0; + timepassed = 0; + gameBegan = false; +} +void Tilemap::createGrid(Vector2 mousePos){ + for(int i = 0; i < GRID_B; i++){ + // Completly random number + srand(time(NULL)); + + // Placeholder position + Vector2 _bombPos = Vector2(0,0); + + // Loop! + while(true){ + _bombPos = Vector2( + floor(rand() % GRID_W), + floor(rand() % GRID_H) + ); + + if(!grid_bomb[_bombPos.y*GRID_H+_bombPos.x] + && _bombPos.x != mousePos.x + && _bombPos.y != mousePos.y){ + break; + } + } + + // Apply position + grid_bomb[_bombPos.y*GRID_H+_bombPos.x] = 1; + } + + gameBegan = true; +} +int Tilemap::getSurrounding(Vector2 tilePos){ + // Result + int result = 0; + + // Finding surrounding tiles + for(int y = -1; y < 2; y++){ + for(int x = -1; x < 2; x++){ + // Out of bounds? + if(tilePos.x + x < 0 + || tilePos.x + x >= GRID_W + || tilePos.y + y < 0 + || tilePos.y + y >= GRID_H){ + continue; + } + + // Otherwise good to go! + result += grid_bomb[(y+tilePos.y)*GRID_H+(x+tilePos.x)]; + } + } + + // Return result + return result; +} +void Tilemap::revealTiles(Vector2 mousePos){ + // What's the mouse position + int _gridPos = mousePos.y*GRID_H+mousePos.x; + printf("Grid Position: %i\n", _gridPos); // Debug + + // Was it a flag? + if(grid_flag[_gridPos]) {return;} + + // Setting the grid position to VISIBLE + grid_show[_gridPos] = 1; + + // Rippling + cascading = true; + while(cascading){ + spawnCascade(mousePos); + } + + // Clicked on a bomb? + // TODO: Add game over functionality + if(grid_bomb[_gridPos]){ + win = false; + playing = false; + } +} +void Tilemap::spawnCascade(Vector2 position){ + // For clicking on a tile with a bomb next to it, + // it gets annoying when it clears everything + // when you're trying to click on a tile right next + // to the bomb. + if(getSurrounding(position) != 0){ + cascading = false; + return; + } + + // Checking if there is a bomb near the current tile + // And duplication + for(int y = -1; y < 2; y++){ + for(int x = -1; x < 2; x++){ + // Checking for failure cases + if(x == 0 && y == 0){ + // Center + continue; + } + if(x + position.x < 0 || x + position.x > GRID_W + || y + position.y < 0 || y + position.y > GRID_H){ + // Out of bounds + continue; + } + + // Diagonal + if(x == -1 && y == -1 + && x == -1 && y == +1 + && x == +1 && y == +1 + && x == +1 && y == -1){ + continue; + } + + // Flag near? + if(grid_flag[(position.y+y)*GRID_W+(position.x+x)]){ + continue; + } + + // Bombs near? + if(getSurrounding(position + Vector2(x,y)) != 0){ + grid_show[(position.y+y)*GRID_W+(position.x+x)] = 1; + continue; + } + + // Duplication + if(!grid_show[(position.y+y)*GRID_W+(position.x+x)] + && !grid_bomb[(position.y+y)*GRID_W+(position.x+x)]){ + grid_show[(position.y+y)*GRID_W+(position.x+x)] = 1; + spawnCascade(Vector2(position.x + x, position.y + y)); + } + } + } + + // Checking for a failure + for(int y = -1; y < 2; y++){ + for(int x = -1; x < 2; x++){ + // Checking for failure cases + if(x == 0 && y == 0){ + // Center + continue; + } + if(x + position.x < 0 || x + position.x > GRID_W + || y + position.y < 0 || y + position.y > GRID_H){ + // Out of bounds + continue; + } + + // Checking if there is a space that needs to be filled + if(!grid_show[(position.y+y)*GRID_W+(position.x+x)] + && !grid_bomb[(position.y+y)*GRID_W+(position.x+x)]){ + return; + } + } + } + + // Failing + cascading = false; +} +void Tilemap::_leftClick(){ + // Convert mouse position into local grid position + Vector2 _mGridPos = Vector2( + floor(Engine::mousePos.x / (SCR_WIDTH / GRID_W)), + floor( + (Engine::mousePos.y + SCR_H_BUFFER) / ((SCR_HEIGHT - SCR_H_BUFFER) / GRID_H)) + - ((SCR_H_BUFFER / ((SCR_HEIGHT - SCR_H_BUFFER) / GRID_H)) + 2) + ); + + // Do we need a new grid? + int _totalBombs = 0; + for(int i = 0; i < grid_bomb.size(); i++){ + _totalBombs += grid_bomb[i]; + } + + if(_totalBombs == 0){ + createGrid(_mGridPos); + } + + // Reveal the tiles! + revealTiles(_mGridPos); +} +void Tilemap::_rightClick(){ + // Convert mouse position into local grid position + Vector2 _mGridPos = Vector2( + floor(Engine::mousePos.x / (SCR_WIDTH / GRID_W)), + floor( + (Engine::mousePos.y + SCR_H_BUFFER) / ((SCR_HEIGHT - SCR_H_BUFFER) / GRID_H)) + - ((SCR_H_BUFFER / ((SCR_HEIGHT - SCR_H_BUFFER) / GRID_H)) + 2) + ); + int _gridPos = _mGridPos.y*GRID_H+_mGridPos.x; + + // Are we clicking on an existing tile? + if(grid_show[_gridPos]) {return;} + + // Do we want to add or remove? + if(grid_flag[_gridPos]){ + // Remove + flags++; + grid_flag[_gridPos] = 0; + } + else{ + // Add + if(flags <= 0) {return;} + flags--; + grid_flag[_gridPos] = 1; + } +} +void Tilemap::winDetection(){ + // How many bombs are there, and do they match + // Up with our flag positions? + int _matchedBombs = 0; + + for(int y = 0; y < GRID_H; y++){ + for(int x = 0; x < GRID_W; x++){ + if(grid_bomb[y*GRID_H+x] + && grid_flag[y*GRID_H+x]){ + _matchedBombs++; + } + } + } + + // Matched bombs == Bombs? + if(_matchedBombs == GRID_B){ + playing = false; + win = true; + } +} +void Tilemap::clickDetection(){ + // Are we even playing? + if(!playing) {return;} + + // Left clicking + if(!didClick + && Engine::clicking == 1){ + // One click at a time! + savedClick = 1; + didClick = true; + } + // Right clicking + else if(!didClick + && Engine::clicking == 2){ + // One click at a time! + savedClick = 2; + didClick = true; + + // Right click + _rightClick(); + } + // Allow new click (LEFT) + else if(didClick + && savedClick == 1 + && Engine::clicking == 0){ + // Allow new click + didClick = false; + + // Left click + _leftClick(); + + savedClick = 0; + } + else if(didClick + && Engine::clicking == 0){ + didClick = false; + savedClick = 0; + } +} + +/// Public +void Tilemap::Update(){ + // Win detection + winDetection(); + + // Click detection + clickDetection(); + + // Time passing + if(gameBegan + && playing){ + if(timepassed >= 1.0f){ + timepassed = 0; + gameTime++; + + if(gameTime > 99) {gameTime = 99;} + } + else{ + timepassed += (float)Engine::deltaTime; + } + } +} +void Tilemap::Draw(){ + // Getting sizes + int tileWidth = (int)(SCR_WIDTH / GRID_W); + int tileHeight = (int)((SCR_HEIGHT - SCR_H_BUFFER) / GRID_H); + + // Going through all tiles + for(int y = 0; y < GRID_H; y++){ + for(int x = 0; x < GRID_W; x++){ + // Global Tile + SDL_Rect rect; + + rect.x = x * tileWidth; + rect.y = (y * tileHeight) + SCR_H_BUFFER; + + rect.w = tileWidth; + rect.h = tileHeight; + + // Frame + SDL_Rect frame_rect; + frame_rect.w = 16; + frame_rect.h = 16; + + int frame = 0; + + // Shown tile, not a bomb + if(!playing + && grid_bomb[y*GRID_H+x]){ + frame = 2; + } + else if(grid_show[y*GRID_W+x] + && !grid_bomb[y*GRID_H+x]){ + frame = 0; + } + else if(grid_flag[y*GRID_H+x]){ + frame = 1; + } + else{ + frame = 3; + } + + // Setting frame rect + switch(frame){ + case 0: + switch(getSurrounding(Vector2(x,y))){ + case 0: + frame_rect.x = 3; + frame_rect.y = 0; + break; + case 1: + frame_rect.x = 0; + frame_rect.y = 1; + break; + case 2: + frame_rect.x = 1; + frame_rect.y = 1; + break; + case 3: + frame_rect.x = 2; + frame_rect.y = 1; + break; + case 4: + frame_rect.x = 3; + frame_rect.y = 1; + break; + case 5: + frame_rect.x = 0; + frame_rect.y = 2; + break; + case 6: + frame_rect.x = 1; + frame_rect.y = 2; + break; + case 7: + frame_rect.x = 2; + frame_rect.y = 2; + break; + case 8: + frame_rect.x = 3; + frame_rect.y = 2; + break; + default: + printf("Something went very wrong while checking for SURROUNDING.\n"); + break; + } + break; + case 1: + frame_rect.x = 1; + frame_rect.y = 0; + break; + case 2: + frame_rect.x = 2; + frame_rect.y = 0; + break; + case 3: + frame_rect.x = 0; + frame_rect.y = 0; + break; + default: + printf("TILESET RENDERING ERROR.\n"); + break; + } + + // Multiplying + frame_rect.x *= 16; + frame_rect.y *= 16; + + // Drawing + SDL_SetRenderDrawColor(Engine::renderer, 255, 255,255, 1); + SDL_RenderFillRect(Engine::renderer, &rect); + + SDL_RenderCopy(Engine::renderer, texture, &frame_rect, &rect); + } + } + + // DEBUG +} + +void Tilemap::Reset(){ + // Resetting the game! (VERY DIFFICULT) + printf("Reset.\n"); + + // Reset! + _init(); +} \ No newline at end of file diff --git a/source/main.cpp b/source/main.cpp new file mode 100644 index 0000000..fa18757 --- /dev/null +++ b/source/main.cpp @@ -0,0 +1,60 @@ +// For windows +#define SDL_MAIN_HANDLED + +// Includes +/// External +#include +/// Engine +#include +/// Game +#include +#include +#include + +// Entry Point +int main(int argc, char* argv[]){ + // Creating an engine + Engine engine = Engine(); + Tilemap tilemap = Tilemap(); + Navbar navbar = Navbar(&tilemap); + + // Messages + Message gameOver("Game Over!"); + Message youWin("You Win!"); + + // Game loop + while(engine.running){ + // Update + engine.Update(); + + // Clear + engine.Clear(); + + // Game code.. + tilemap.Update(); + navbar.Update(); + + // Render code.. + tilemap.Draw(); + navbar.Draw(); + + /// Messages? + if(!tilemap.playing){ + if(tilemap.win){ + youWin.Draw(); + } + else{ + gameOver.Draw(); + } + } + + // Displaying + engine.Display(); + } + + // Cleanup + engine.Delete(); + + // Quit app + return 0; +} \ No newline at end of file