From 12721e6021c1f4d393f730ae8ea07a1a6539a615 Mon Sep 17 00:00:00 2001 From: Yann MAGNIN Date: Sat, 20 Aug 2022 16:32:37 +0200 Subject: [PATCH] add basic level gen blblblbl --- CMakeLists.txt | 4 ++- assets-cg/player0.png | Bin 0 -> 2954 bytes src/generator.h | 40 ++++++++++++++++++++++ src/{generator.cpp => generator/gen1.cpp} | 3 +- src/generator/gen2.cpp | 25 ++++++++++++++ src/generator/gen3.cpp | 31 +++++++++++++++++ src/level.cpp | 17 +++++++-- src/{bosonx.h => level.h} | 30 ++++------------ src/main.cpp | 6 +++- 9 files changed, 127 insertions(+), 29 deletions(-) create mode 100644 assets-cg/player0.png create mode 100644 src/generator.h rename src/{generator.cpp => generator/gen1.cpp} (88%) create mode 100644 src/generator/gen2.cpp create mode 100644 src/generator/gen3.cpp rename src/{bosonx.h => level.h} (63%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6bf9714..02ec700 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,9 @@ find_package(LibProf 2.1 REQUIRED) set(SOURCES src/main.cpp - src/generator.cpp + src/generator/gen1.cpp + src/generator/gen2.cpp + src/generator/gen3.cpp src/level.cpp) set(ASSETS) diff --git a/assets-cg/player0.png b/assets-cg/player0.png new file mode 100644 index 0000000000000000000000000000000000000000..b7fde27421f2bc106de935421bc977a46f83954a GIT binary patch literal 2954 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 AC;$Ke literal 0 HcmV?d00001 diff --git a/src/generator.h b/src/generator.h new file mode 100644 index 0000000..7d9a8f6 --- /dev/null +++ b/src/generator.h @@ -0,0 +1,40 @@ +#ifndef GENERATOR +# define GENERATOR + +struct level; +typedef struct level level_t; + +struct generator +{ + virtual void generate(level_t *) = 0; + virtual ~generator() = default; +}; + +struct gen1 : public generator +{ + gen1(); + void generate(level_t *) override; + ~gen1() override = default; + + int last_pos; +}; + +struct gen2 : public generator +{ + gen2(); + void generate(level_t *) override; + ~gen2() override = default; + + int last_pos; +}; + +struct gen3 : public generator +{ + gen3(); + void generate(level_t *) override; + ~gen3() override = default; + + int last_pos[3]; +}; + +#endif /* GENERATOR */ diff --git a/src/generator.cpp b/src/generator/gen1.cpp similarity index 88% rename from src/generator.cpp rename to src/generator/gen1.cpp index 160b066..3a151b6 100644 --- a/src/generator.cpp +++ b/src/generator/gen1.cpp @@ -1,4 +1,5 @@ -#include "bosonx.h" +#include "../generator.h" +#include "../level.h" gen1::gen1() : last_pos{0} { } diff --git a/src/generator/gen2.cpp b/src/generator/gen2.cpp new file mode 100644 index 0000000..ed1617a --- /dev/null +++ b/src/generator/gen2.cpp @@ -0,0 +1,25 @@ +#include "../generator.h" +#include "../level.h" + +#include + +gen2::gen2() : last_pos{0} { srand(123456); } + +void gen2::generate(level_t *level) +{ + struct section section; + + this->last_pos += (rand() % 3) - 1; + if (this->last_pos < 0) + this->last_pos = PLATFORM_COUNT - 1; + if (this->last_pos >= PLATFORM_COUNT) + this->last_pos = 0; + + for (int i = 0; i < PLATFORM_COUNT; ++i) { + section.platforms[i].type = PLATFORM_EMPTY; + if (i == this->last_pos) + section.platforms[i].type = PLATFORM_WHITE; + } + + level->section_buffer.push_back(section); +} diff --git a/src/generator/gen3.cpp b/src/generator/gen3.cpp new file mode 100644 index 0000000..4a83232 --- /dev/null +++ b/src/generator/gen3.cpp @@ -0,0 +1,31 @@ +#include "../generator.h" +#include "../level.h" + +#include + +gen3::gen3() : last_pos{0, 1, 2} { srand(123456); } + +void gen3::generate(level_t *level) +{ + struct section section; + + for (int i = 0; i < 3; ++i) { + this->last_pos[i] += (rand() % 3) - 1; + if (this->last_pos[i] < 0) + this->last_pos[i] = PLATFORM_COUNT - 1; + if (this->last_pos[i] >= PLATFORM_COUNT) + this->last_pos[i] = 0; + } + + for (int i = 0; i < PLATFORM_COUNT; ++i) { + section.platforms[i].type = PLATFORM_EMPTY; + if (i == this->last_pos[0] + || i == this->last_pos[1] + || i == this->last_pos[2] + ) { + section.platforms[i].type = PLATFORM_WHITE; + } + } + + level->section_buffer.push_back(section); +} diff --git a/src/level.cpp b/src/level.cpp index 783af92..3c4f4f7 100644 --- a/src/level.cpp +++ b/src/level.cpp @@ -1,4 +1,5 @@ -#include "bosonx.h" +#include "level.h" +#include "generator.h" #include level_t level_create(int level) @@ -6,6 +7,12 @@ level_t level_create(int level) level_t l; switch(level) { + case 2: + l.gen = std::make_unique(); + break; + case 3: + l.gen = std::make_unique(); + break; default: l.gen = std::make_unique(); } @@ -34,7 +41,13 @@ void level_display(level_t *level) dsize("@", NULL, &w, &h); sx = (DWIDTH - (PLATFORM_COUNT * w)) / 2; - sy = (DHEIGHT - (PLATFORM_COUNT * h)) / 2; + sy = (DHEIGHT - (5 * h)) / 2; + + drect_border( + sx, sy, + sx + (PLATFORM_COUNT * w), sy + (5 * h), + C_NONE, 2, C_BLACK + ); for (int i = 4; i >= 0; --i) { for (int j = 0; j < PLATFORM_COUNT; ++j) { diff --git a/src/bosonx.h b/src/level.h similarity index 63% rename from src/bosonx.h rename to src/level.h index 0090c21..095d261 100644 --- a/src/bosonx.h +++ b/src/level.h @@ -1,5 +1,5 @@ -#ifndef __BOSONX__ -# define __BOSONX__ +#ifndef LEVEL +# define LEVEL #include #include @@ -26,30 +26,12 @@ struct section { //... }; +struct generator; -struct level; -typedef struct level level_t; - -struct generator -{ - virtual void generate(level_t *) = 0; - virtual ~generator() = default; -}; - -struct gen1 : public generator -{ - gen1(); - void generate(level_t *) override; - ~gen1() override = default; - - int last_pos; -}; - - -struct level { +typedef struct level { std::vector section_buffer; std::unique_ptr gen; -}; +} level_t; @@ -58,4 +40,4 @@ extern level_t level_create(int level); extern void level_display(level_t *level); extern void level_advance(level_t *level); -#endif /* __BOSONX__ */ +#endif /* LEVEL */ diff --git a/src/main.cpp b/src/main.cpp index aec8991..bf5d728 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,4 +1,5 @@ -#include "bosonx.h" +#include "level.h" +#include "generator.h" #include #include @@ -19,6 +20,9 @@ int main(void) if(keydown(KEY_EXE)) { level_advance(&level); } + if (keydown(KEY_F1)) level = level_create(1); + if (keydown(KEY_F2)) level = level_create(2); + if (keydown(KEY_F3)) level = level_create(3); } return 0;