Files
tactility_apps/Apps/PocketDungeon/main/Source/DungeonModel.h
T
aeroreyna d976595879
Main / Build (BookPlayer) (push) Has been cancelled
Main / Build (Brainfuck) (push) Has been cancelled
Main / Build (Breakout) (push) Has been cancelled
Main / Build (Calculator) (push) Has been cancelled
Main / Build (Diceware) (push) Has been cancelled
Main / Build (EpubReader) (push) Has been cancelled
Main / Build (GPIO) (push) Has been cancelled
Main / Build (GraphicsDemo) (push) Has been cancelled
Main / Build (HelloWorld) (push) Has been cancelled
Main / Build (M5UnitTest) (push) Has been cancelled
Main / Build (Magic8Ball) (push) Has been cancelled
Main / Build (MediaKeys) (push) Has been cancelled
Main / Build (MystifyDemo) (push) Has been cancelled
Main / Build (SerialConsole) (push) Has been cancelled
Main / Build (Snake) (push) Has been cancelled
Main / Build (TamaTac) (push) Has been cancelled
Main / Build (TodoList) (push) Has been cancelled
Main / Build (TwoEleven) (push) Has been cancelled
Main / Bundle (push) Has been cancelled
feat: add Pocket Dungeon game prototype
2026-07-16 22:31:55 -04:00

58 lines
1.6 KiB
C++

#pragma once
#include <GameKitGrid.h>
#include <cstdint>
namespace PocketDungeon {
static constexpr uint8_t DUNGEON_COLS = 9;
static constexpr uint8_t DUNGEON_ROWS = 7;
static constexpr uint8_t MAX_ENTITIES = 8;
enum class Tile : uint8_t { Floor, Wall, Stairs, Treasure };
enum class EntityType : uint8_t { Player, Slime, Bat };
enum class MoveResult : uint8_t { None, Moved, Blocked, Attacked, Treasure, Stairs, Dead };
struct Entity {
EntityType type = EntityType::Slime;
GameKit::GridPos pos {};
int8_t hp = 1;
bool alive = false;
};
struct DungeonState {
Tile tiles[DUNGEON_ROWS][DUNGEON_COLS] {};
Entity entities[MAX_ENTITIES] {};
uint8_t entityCount = 0;
GameKit::GridPos playerPos {1, 1};
uint16_t floor = 1;
uint16_t gold = 0;
int8_t hp = 5;
bool gameOver = false;
};
class DungeonModel {
DungeonState state {};
uint32_t seed = 0xC0FFEE;
uint16_t bestFloor = 1;
uint16_t bestGold = 0;
uint32_t nextRandom();
void addEnemy(EntityType type, GameKit::GridPos pos, int8_t hp);
int findEnemyAt(GameKit::GridPos pos) const;
bool isWalkable(GameKit::GridPos pos) const;
void moveMonsters();
public:
void reset(uint32_t seedValue = 0xC0FFEE);
void generateFloor();
MoveResult movePlayer(int dx, int dy);
const DungeonState& getState() const { return state; }
uint16_t getBestFloor() const { return bestFloor; }
uint16_t getBestGold() const { return bestGold; }
void setBests(uint16_t floor, uint16_t gold) { bestFloor = floor; bestGold = gold; }
};
} // namespace PocketDungeon