add basic level gen blblblbl

This commit is contained in:
Yann MAGNIN 2022-08-20 16:32:37 +02:00
parent 0abeeaa835
commit 12721e6021
9 changed files with 127 additions and 29 deletions

View File

@ -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)

BIN
assets-cg/player0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

40
src/generator.h Normal file
View File

@ -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 */

View File

@ -1,4 +1,5 @@
#include "bosonx.h"
#include "../generator.h"
#include "../level.h"
gen1::gen1() : last_pos{0} { }

25
src/generator/gen2.cpp Normal file
View File

@ -0,0 +1,25 @@
#include "../generator.h"
#include "../level.h"
#include <stdlib.h>
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);
}

31
src/generator/gen3.cpp Normal file
View File

@ -0,0 +1,31 @@
#include "../generator.h"
#include "../level.h"
#include <stdlib.h>
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);
}

View File

@ -1,4 +1,5 @@
#include "bosonx.h"
#include "level.h"
#include "generator.h"
#include <gint/display.h>
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<struct gen2>();
break;
case 3:
l.gen = std::make_unique<struct gen3>();
break;
default:
l.gen = std::make_unique<struct gen1>();
}
@ -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) {

View File

@ -1,5 +1,5 @@
#ifndef __BOSONX__
# define __BOSONX__
#ifndef LEVEL
# define LEVEL
#include <vector>
#include <memory>
@ -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<struct section> section_buffer;
std::unique_ptr<struct generator> 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 */

View File

@ -1,4 +1,5 @@
#include "bosonx.h"
#include "level.h"
#include "generator.h"
#include <gint/keyboard.h>
#include <gint/display.h>
@ -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;