feat:ConfigManager游戏配置管理器类;Wave波次类相关定义;ConfigManager成员类定义;Map类新增一些接口

This commit is contained in:
sjm
2024-06-11 21:29:08 +08:00
parent 7f5129c48c
commit 13c5b15b99
8 changed files with 184 additions and 1 deletions

View File

@@ -134,11 +134,14 @@
<ClCompile Include="main.cpp" /> <ClCompile Include="main.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="config_manager.h" />
<ClInclude Include="enemy_type.h" />
<ClInclude Include="game_manager.h" /> <ClInclude Include="game_manager.h" />
<ClInclude Include="manager.h" /> <ClInclude Include="manager.h" />
<ClInclude Include="map.h" /> <ClInclude Include="map.h" />
<ClInclude Include="route.h" /> <ClInclude Include="route.h" />
<ClInclude Include="tile.h" /> <ClInclude Include="tile.h" />
<ClInclude Include="wave.h" />
</ItemGroup> </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">

View File

@@ -16,6 +16,9 @@
<Filter Include="头文件\manager"> <Filter Include="头文件\manager">
<UniqueIdentifier>{f50376ab-e971-4317-8a3c-da0f2703263e}</UniqueIdentifier> <UniqueIdentifier>{f50376ab-e971-4317-8a3c-da0f2703263e}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="头文件\enemy">
<UniqueIdentifier>{d16b420a-6329-4705-af2a-57caf4eee0e9}</UniqueIdentifier>
</Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="main.cpp"> <ClCompile Include="main.cpp">
@@ -38,5 +41,14 @@
<ClInclude Include="route.h"> <ClInclude Include="route.h">
<Filter>头文件</Filter> <Filter>头文件</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="config_manager.h">
<Filter>头文件\manager</Filter>
</ClInclude>
<ClInclude Include="wave.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="enemy_type.h">
<Filter>头文件\enemy</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
</Project> </Project>

107
TdGame/config_manager.h Normal file
View File

@@ -0,0 +1,107 @@
#pragma once
#ifndef _CONFIG_MANAGER_H_
#define _CONFIG_MANAGER_H_
#include "map.h"
#include "wave.h"
#include "manager.h"
#include <SDL.h>
#include <string>
#include <cJSON.h>
#include <fstream>
#include <sstream>
//<2F><>Ϊȫ<CEAA><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class ConfigManager : public Manager<ConfigManager>
{
friend class Manager<ConfigManager>;
public:
struct BasicTemplate
{
std::string window_title = u8"<EFBFBD><EFBFBD>ׯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս!";
int window_width = 1280;
int window_height = 720;
};
struct PlayerTemplate
{
double speed = 3;
double normal_attack_interval = 0.5;
double normal_attack_damage = 0;
double skill_interval = 10;
double skill_damage = 1;
};
struct TowerTemplate
{
double interval[10] = { 1 };
double damage[10] = { 25 };
double view_range[10] = { 5 };
double cost[9] = { 50 };
double upgrade_cost[9] = { 75 };
};
struct EnemyTemplate
{
double hp = 100;
double speed = 1;
double damage = 1;
double reward_ratio = 0.5;
double recover_interval = 10;
double recover_range = 0;
double recover_intensity = 25;
};
public:
Map map;
std::vector<Wave> wave_list;
int level_archer = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD>ֵȼ<D6B5>
int level_axeman = 0;//<2F><>ͷ<EFBFBD><CDB7><EFBFBD>ȼ<EFBFBD>
int level_gunner = 0;//ǹ<><C7B9><EFBFBD>ȼ<EFBFBD>
bool is_game_win =true;//<2F><>Ϸ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʤ
bool is_game_over = false;//<2F><>Ϸ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
SDL_Rect rect_tile_map = { 0 };
BasicTemplate basci_template;
PlayerTemplate player_template;
TowerTemplate archer_template;
TowerTemplate axeman_template;
TowerTemplate gunner_template;
EnemyTemplate slim_template;
EnemyTemplate king_slim_template;
EnemyTemplate skeleton_template;
EnemyTemplate goblin_template;
EnemyTemplate goblin_priest_template;
const double num_initial_hp = 10;//<2F><><EFBFBD>ݳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
const double num_initial_coin = 100;//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
const double num_coin_per_prop = 10;//ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool load_level_config(const std::string& path)
{
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
bool load_game_config(const std::string& path)
{
}
protected:
ConfigManager() = default;
~ConfigManager() = default;
};
#endif // !_CONFIG_MANAGER_H_

14
TdGame/enemy_type.h Normal file
View File

@@ -0,0 +1,14 @@
#pragma once
#ifndef _ENEMY_TYPE_H_
#define _ENEMY_TYPE_H_
enum class EnemyType
{
Slim,
KingSlim,
Skeleton,
Goblin,
GoblinPriest
};
#endif

View File

@@ -2,6 +2,8 @@
#ifndef _MANAGER_H_ #ifndef _MANAGER_H_
#define _MANAGER_H_ #define _MANAGER_H_
//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>
template <typename T> template <typename T>
class Manager class Manager
{ {

View File

@@ -79,6 +79,27 @@ public:
return tile_map.size();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶ȣ<DFB6> return tile_map.size();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶ȣ<DFB6>
} }
const TileMap& get_tile_map() const
{
return tile_map;
}
const SDL_Point& get_idx_home() const
{
return idx_home;
}
const SpawnerRoutePool& get_idx_spawner_pool() const
{
return spawner_route_pool;
}
void place_tower(const SDL_Point& idx_tile)
{
tile_map[idx_tile.y][idx_tile.x].has_tower = true;
}
private: private:
TileMap tile_map; TileMap tile_map;
SDL_Point idx_home = { 0 };//<2F><><EFBFBD>ݵ<EFBFBD> SDL_Point idx_home = { 0 };//<2F><><EFBFBD>ݵ<EFBFBD>

View File

@@ -21,7 +21,7 @@ struct Tile
int terrian = 0; int terrian = 0;
int decoration = -1; int decoration = -1;
int special_flag = -1; int special_flag = -1;
bool has_tower = false; bool has_tower = false;//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
Direction direction = Direction::None; Direction direction = Direction::None;
}; };

24
TdGame/wave.h Normal file
View File

@@ -0,0 +1,24 @@
#pragma once
#ifndef _WAVE_H_
#define _WAVE_H_
#include "enemy_type.h"
#include <vector>
struct Wave
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
struct SpawnEvent
{
double interval = 0;
int spawn_point = 1;
EnemyType enemy_type = EnemyType::Slim;//<2F><>level.json<6F>ļ<EFBFBD><C4BC>м<EFBFBD><D0BC><EFBFBD>ʽ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
};
double rewards = 0;
double interval = 0;
std::vector<SpawnEvent> spawn_event_list;
};
#endif // !_WAVE_H_