feat: 5种不同类型敌人子类实现
This commit is contained in:
parent
677a7d9a61
commit
c36594ca72
@ -141,10 +141,14 @@
|
|||||||
<ClInclude Include="enemy.h" />
|
<ClInclude Include="enemy.h" />
|
||||||
<ClInclude Include="enemy_type.h" />
|
<ClInclude Include="enemy_type.h" />
|
||||||
<ClInclude Include="game_manager.h" />
|
<ClInclude Include="game_manager.h" />
|
||||||
|
<ClInclude Include="goblin_enemy.h" />
|
||||||
|
<ClInclude Include="goblin_priest_enemy.h" />
|
||||||
|
<ClInclude Include="king_slime_enemy.h" />
|
||||||
<ClInclude Include="manager.h" />
|
<ClInclude Include="manager.h" />
|
||||||
<ClInclude Include="map.h" />
|
<ClInclude Include="map.h" />
|
||||||
<ClInclude Include="resources_manager.h" />
|
<ClInclude Include="resources_manager.h" />
|
||||||
<ClInclude Include="route.h" />
|
<ClInclude Include="route.h" />
|
||||||
|
<ClInclude Include="skeleton_enemy.h" />
|
||||||
<ClInclude Include="slime_enemy.h" />
|
<ClInclude Include="slime_enemy.h" />
|
||||||
<ClInclude Include="tile.h" />
|
<ClInclude Include="tile.h" />
|
||||||
<ClInclude Include="timer.h" />
|
<ClInclude Include="timer.h" />
|
||||||
|
@ -74,5 +74,17 @@
|
|||||||
<ClInclude Include="slime_enemy.h">
|
<ClInclude Include="slime_enemy.h">
|
||||||
<Filter>头文件\enemy</Filter>
|
<Filter>头文件\enemy</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="king_slime_enemy.h">
|
||||||
|
<Filter>头文件\enemy</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="goblin_enemy.h">
|
||||||
|
<Filter>头文件\enemy</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="goblin_priest_enemy.h">
|
||||||
|
<Filter>头文件\enemy</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="skeleton_enemy.h">
|
||||||
|
<Filter>头文件\enemy</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
61
TdGame/TdGame/goblin_enemy.h
Normal file
61
TdGame/TdGame/goblin_enemy.h
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
#pragma once
|
||||||
|
#ifndef _GOBLIN_ENEMY_H_
|
||||||
|
#define _GOBLIN_ENEMY_H_
|
||||||
|
|
||||||
|
#include "enemy.h"
|
||||||
|
#include "config_manager.h"
|
||||||
|
#include "resources_manager.h"
|
||||||
|
|
||||||
|
class GoblinEnemy : public Enemy
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
GoblinEnemy()
|
||||||
|
{
|
||||||
|
|
||||||
|
static const ResourcesManager::TexturePool& texture_pool
|
||||||
|
= ResourcesManager::instance()->get_texture_pool();
|
||||||
|
static SDL_Texture* tex_goblin = texture_pool.find(ResID::Tex_Goblin)->second;
|
||||||
|
static SDL_Texture* tex_goblin_sketch = texture_pool.find(ResID::Tex_GoblinSketch)->second;
|
||||||
|
|
||||||
|
static ConfigManager::EnemyTemplate& goblin_template = ConfigManager::instance()->goblin_template;
|
||||||
|
|
||||||
|
|
||||||
|
static const std::vector<int> idx_list_up = { 6,7,8,9,10,11 };
|
||||||
|
static const std::vector<int> idx_list_down = { 0,1,2,3,4,5 };
|
||||||
|
static const std::vector<int> idx_list_left = { 18,19,20,21,22,23 };
|
||||||
|
static const std::vector<int> idx_list_right = { 12,13,14,15,16,17 };
|
||||||
|
|
||||||
|
anim_up.set_loop(true); anim_up.set_interval(0.1);
|
||||||
|
anim_up.set_frame_data(tex_goblin, 6, 4, idx_list_up);
|
||||||
|
anim_down.set_loop(true); anim_down.set_interval(0.1);
|
||||||
|
anim_down.set_frame_data(tex_goblin, 6, 4, idx_list_down);
|
||||||
|
anim_left.set_loop(true); anim_left.set_interval(0.1);
|
||||||
|
anim_left.set_frame_data(tex_goblin, 6, 4, idx_list_left);
|
||||||
|
anim_right.set_loop(true); anim_right.set_interval(0.1);
|
||||||
|
anim_right.set_frame_data(tex_goblin, 6, 4, idx_list_right);
|
||||||
|
|
||||||
|
anim_up_sketch.set_loop(true); anim_up_sketch.set_interval(0.1);
|
||||||
|
anim_up_sketch.set_frame_data(tex_goblin_sketch, 6, 4, idx_list_up);
|
||||||
|
anim_down_sketch.set_loop(true); anim_down_sketch.set_interval(0.1);
|
||||||
|
anim_down_sketch.set_frame_data(tex_goblin_sketch, 6, 4, idx_list_down);
|
||||||
|
anim_left.set_loop(true); anim_left.set_interval(0.1);
|
||||||
|
anim_left.set_frame_data(tex_goblin_sketch, 6, 4, idx_list_left);
|
||||||
|
anim_right_sketch.set_loop(true); anim_right_sketch.set_interval(0.1);
|
||||||
|
anim_right_sketch.set_frame_data(tex_goblin_sketch, 6, 4, idx_list_right);
|
||||||
|
|
||||||
|
max_hp = king_slime_template.hp;
|
||||||
|
max_speed = king_slime_template.speed;
|
||||||
|
damage = king_slime_template.damage;
|
||||||
|
reward_ratio = king_slime_template.reward_ratio;
|
||||||
|
recover_interval = king_slime_template.recover_interval;
|
||||||
|
recover_range = king_slime_template.recover_range;
|
||||||
|
recover_intensity = king_slime_template.recover_intensity;
|
||||||
|
|
||||||
|
size.x = 48, size.y = 48;
|
||||||
|
hp = max_hp;
|
||||||
|
speed = max_speed;
|
||||||
|
}
|
||||||
|
|
||||||
|
~GoblinEnemy() = default;
|
||||||
|
};
|
||||||
|
#endif // !_GOBLIN_ENEMY_H_
|
62
TdGame/TdGame/goblin_priest_enemy.h
Normal file
62
TdGame/TdGame/goblin_priest_enemy.h
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
#pragma once
|
||||||
|
#ifndef _GOBLIN_PRIEST_ENEMY_H_
|
||||||
|
#define _GOBLIN_PRIEST_ENEMY_H_
|
||||||
|
|
||||||
|
|
||||||
|
#include "enemy.h"
|
||||||
|
#include "config_manager.h"
|
||||||
|
#include "resources_manager.h"
|
||||||
|
|
||||||
|
class GoblinPriestEnemy : public Enemy
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
GoblinPriestEnemy()
|
||||||
|
{
|
||||||
|
|
||||||
|
static const ResourcesManager::TexturePool& texture_pool
|
||||||
|
= ResourcesManager::instance()->get_texture_pool();
|
||||||
|
static SDL_Texture* tex_goblin_priest = texture_pool.find(ResID::Tex_GoblinPriest)->second;
|
||||||
|
static SDL_Texture* tex_goblin_priest_sketch = texture_pool.find(ResID::Tex_GoblinPriestSketch)->second;
|
||||||
|
|
||||||
|
static ConfigManager::EnemyTemplate& goblin_priest_template = ConfigManager::instance()->goblin_priest_template;
|
||||||
|
|
||||||
|
|
||||||
|
static const std::vector<int> idx_list_up = { 6,7,8,9,10,11 };
|
||||||
|
static const std::vector<int> idx_list_down = { 0,1,2,3,4,5 };
|
||||||
|
static const std::vector<int> idx_list_left = { 18,19,20,21,22,23 };
|
||||||
|
static const std::vector<int> idx_list_right = { 12,13,14,15,16,17 };
|
||||||
|
|
||||||
|
anim_up.set_loop(true); anim_up.set_interval(0.1);
|
||||||
|
anim_up.set_frame_data(tex_goblin_priest, 6, 4, idx_list_up);
|
||||||
|
anim_down.set_loop(true); anim_down.set_interval(0.1);
|
||||||
|
anim_down.set_frame_data(tex_goblin_priest, 6, 4, idx_list_down);
|
||||||
|
anim_left.set_loop(true); anim_left.set_interval(0.1);
|
||||||
|
anim_left.set_frame_data(tex_goblin_priest, 6, 4, idx_list_left);
|
||||||
|
anim_right.set_loop(true); anim_right.set_interval(0.1);
|
||||||
|
anim_right.set_frame_data(tex_goblin_priest, 6, 4, idx_list_right);
|
||||||
|
|
||||||
|
anim_up_sketch.set_loop(true); anim_up_sketch.set_interval(0.1);
|
||||||
|
anim_up_sketch.set_frame_data(tex_goblin_priest_sketch, 6, 4, idx_list_up);
|
||||||
|
anim_down_sketch.set_loop(true); anim_down_sketch.set_interval(0.1);
|
||||||
|
anim_down_sketch.set_frame_data(tex_goblin_priest_sketch, 6, 4, idx_list_down);
|
||||||
|
anim_left.set_loop(true); anim_left.set_interval(0.1);
|
||||||
|
anim_left.set_frame_data(tex_goblin_priest_sketch, 6, 4, idx_list_left);
|
||||||
|
anim_right_sketch.set_loop(true); anim_right_sketch.set_interval(0.1);
|
||||||
|
anim_right_sketch.set_frame_data(tex_goblin_priest_sketch, 6, 4, idx_list_right);
|
||||||
|
|
||||||
|
max_hp = goblin_priest_template.hp;
|
||||||
|
max_speed = goblin_priest_template.speed;
|
||||||
|
damage = goblin_priest_template.damage;
|
||||||
|
reward_ratio = goblin_priest_template.reward_ratio;
|
||||||
|
recover_interval = goblin_priest_template.recover_interval;
|
||||||
|
recover_range = goblin_priest_template.recover_range;
|
||||||
|
recover_intensity = goblin_priest_template.recover_intensity;
|
||||||
|
|
||||||
|
size.x = 48, size.y = 48;
|
||||||
|
hp = max_hp;
|
||||||
|
speed = max_speed;
|
||||||
|
}
|
||||||
|
~GoblinPriestEnemy() = default;
|
||||||
|
|
||||||
|
};
|
||||||
|
#endif // !_GOBLIN_PRIEST_ENEMY_H_
|
61
TdGame/TdGame/king_slime_enemy.h
Normal file
61
TdGame/TdGame/king_slime_enemy.h
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
#pragma once
|
||||||
|
#ifndef _KING_SLIME_ENEMY_H_
|
||||||
|
#define _KING_SLIME_ENEMY_H_
|
||||||
|
|
||||||
|
#include "enemy.h"
|
||||||
|
#include "config_manager.h"
|
||||||
|
#include "resources_manager.h"
|
||||||
|
|
||||||
|
class KingSlimeEnemy : public Enemy
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
KingSlimeEnemy()
|
||||||
|
{
|
||||||
|
|
||||||
|
static const ResourcesManager::TexturePool& texture_pool
|
||||||
|
= ResourcesManager::instance()->get_texture_pool();
|
||||||
|
static SDL_Texture* tex_king_slime = texture_pool.find(ResID::Tex_KingSlime)->second;
|
||||||
|
static SDL_Texture* tex_king_slime_sketch = texture_pool.find(ResID::Tex_KingSlimeSketch)->second;
|
||||||
|
|
||||||
|
static ConfigManager::EnemyTemplate& king_slime_template = ConfigManager::instance()->king_slime_template;
|
||||||
|
|
||||||
|
|
||||||
|
static const std::vector<int> idx_list_up = { 6,7,8,9,10,11 };
|
||||||
|
static const std::vector<int> idx_list_down = { 0,1,2,3,4,5 };
|
||||||
|
static const std::vector<int> idx_list_left = { 18,19,20,21,22,23 };
|
||||||
|
static const std::vector<int> idx_list_right = { 12,13,14,15,16,17 };
|
||||||
|
|
||||||
|
anim_up.set_loop(true); anim_up.set_interval(0.1);
|
||||||
|
anim_up.set_frame_data(tex_king_slime, 6, 4, idx_list_up);
|
||||||
|
anim_down.set_loop(true); anim_down.set_interval(0.1);
|
||||||
|
anim_down.set_frame_data(tex_king_slime, 6, 4, idx_list_down);
|
||||||
|
anim_left.set_loop(true); anim_left.set_interval(0.1);
|
||||||
|
anim_left.set_frame_data(tex_king_slime, 6, 4, idx_list_left);
|
||||||
|
anim_right.set_loop(true); anim_right.set_interval(0.1);
|
||||||
|
anim_right.set_frame_data(tex_king_slime, 6, 4, idx_list_right);
|
||||||
|
|
||||||
|
anim_up_sketch.set_loop(true); anim_up_sketch.set_interval(0.1);
|
||||||
|
anim_up_sketch.set_frame_data(tex_king_slime_sketch, 6, 4, idx_list_up);
|
||||||
|
anim_down_sketch.set_loop(true); anim_down_sketch.set_interval(0.1);
|
||||||
|
anim_down_sketch.set_frame_data(tex_king_slime_sketch, 6, 4, idx_list_down);
|
||||||
|
anim_left.set_loop(true); anim_left.set_interval(0.1);
|
||||||
|
anim_left.set_frame_data(tex_king_slime_sketch, 6, 4, idx_list_left);
|
||||||
|
anim_right_sketch.set_loop(true); anim_right_sketch.set_interval(0.1);
|
||||||
|
anim_right_sketch.set_frame_data(tex_king_slime_sketch, 6, 4, idx_list_right);
|
||||||
|
|
||||||
|
max_hp = king_slime_template.hp;
|
||||||
|
max_speed = king_slime_template.speed;
|
||||||
|
damage = king_slime_template.damage;
|
||||||
|
reward_ratio = king_slime_template.reward_ratio;
|
||||||
|
recover_interval = king_slime_template.recover_interval;
|
||||||
|
recover_range = king_slime_template.recover_range;
|
||||||
|
recover_intensity = king_slime_template.recover_intensity;
|
||||||
|
|
||||||
|
size.x = 48, size.y = 48;
|
||||||
|
hp = max_hp;
|
||||||
|
speed = max_speed;
|
||||||
|
}
|
||||||
|
|
||||||
|
~KingSlimeEnemy() = default;
|
||||||
|
};
|
||||||
|
#endif
|
62
TdGame/TdGame/skeleton_enemy.h
Normal file
62
TdGame/TdGame/skeleton_enemy.h
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
#pragma once
|
||||||
|
#ifndef _SKELETON_ENEMY_H
|
||||||
|
#define _SKELETON_ENEMY_H
|
||||||
|
|
||||||
|
#include "enemy.h"
|
||||||
|
#include "config_manager.h"
|
||||||
|
#include "resources_manager.h"
|
||||||
|
|
||||||
|
class SkeletonEnemy : public Enemy
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SkeletonEnemy()
|
||||||
|
{
|
||||||
|
//skeleton纹理
|
||||||
|
static const ResourcesManager::TexturePool& texture_pool
|
||||||
|
= ResourcesManager::instance()->get_texture_pool();
|
||||||
|
static SDL_Texture* tex_skeleton = texture_pool.find(ResID::Tex_Skeleton)->second;
|
||||||
|
static SDL_Texture* tex_skeleton_sketch = texture_pool.find(ResID::Tex_SkeletonSketch)->second;
|
||||||
|
//skeleton数据
|
||||||
|
static ConfigManager::EnemyTemplate& skeleton_template = ConfigManager::instance()->skeleton_template;
|
||||||
|
|
||||||
|
//向上行动的动画帧索引(根据resource中skeleton的资源图)
|
||||||
|
static const std::vector<int> idx_list_up = { 6,7,8,9,10,11 };
|
||||||
|
static const std::vector<int> idx_list_down = { 0,1,2,3,4,5 };
|
||||||
|
static const std::vector<int> idx_list_left = { 18,19,20,21,22,23 };
|
||||||
|
static const std::vector<int> idx_list_right = { 12,13,14,15,16,17 };
|
||||||
|
|
||||||
|
anim_up.set_loop(true); anim_up.set_interval(0.1);
|
||||||
|
anim_up.set_frame_data(tex_skeleton, 6, 4, idx_list_up);
|
||||||
|
anim_down.set_loop(true); anim_down.set_interval(0.1);
|
||||||
|
anim_down.set_frame_data(tex_skeleton, 6, 4, idx_list_down);
|
||||||
|
anim_left.set_loop(true); anim_left.set_interval(0.1);
|
||||||
|
anim_left.set_frame_data(tex_skeleton, 6, 4, idx_list_left);
|
||||||
|
anim_right.set_loop(true); anim_right.set_interval(0.1);
|
||||||
|
anim_right.set_frame_data(tex_skeleton, 6, 4, idx_list_right);
|
||||||
|
|
||||||
|
anim_up_sketch.set_loop(true); anim_up_sketch.set_interval(0.1);
|
||||||
|
anim_up_sketch.set_frame_data(tex_skeleton_sketch, 6, 4, idx_list_up);
|
||||||
|
anim_down_sketch.set_loop(true); anim_down_sketch.set_interval(0.1);
|
||||||
|
anim_down_sketch.set_frame_data(tex_skeleton_sketch, 6, 4, idx_list_down);
|
||||||
|
anim_left.set_loop(true); anim_left.set_interval(0.1);
|
||||||
|
anim_left.set_frame_data(tex_skeleton_sketch, 6, 4, idx_list_left);
|
||||||
|
anim_right_sketch.set_loop(true); anim_right_sketch.set_interval(0.1);
|
||||||
|
anim_right_sketch.set_frame_data(tex_skeleton_sketch, 6, 4, idx_list_right);
|
||||||
|
|
||||||
|
max_hp = skeleton_template.hp;
|
||||||
|
max_speed = skeleton_template.speed;
|
||||||
|
damage = skeleton_template.damage;
|
||||||
|
reward_ratio = skeleton_template.reward_ratio;
|
||||||
|
recover_interval = skeleton_template.recover_interval;
|
||||||
|
recover_range = skeleton_template.recover_range;
|
||||||
|
recover_intensity = skeleton_template.recover_intensity;
|
||||||
|
|
||||||
|
size.x = 48, size.y = 48;
|
||||||
|
hp = max_hp;
|
||||||
|
speed = max_speed;
|
||||||
|
}
|
||||||
|
|
||||||
|
~SkeletonEnemy() = default;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // !_SKELETON_ENEMY_H
|
@ -6,13 +6,56 @@
|
|||||||
#include "config_manager.h"
|
#include "config_manager.h"
|
||||||
#include "resources_manager.h"
|
#include "resources_manager.h"
|
||||||
|
|
||||||
class SlimeEnemy
|
class SlimeEnemy : public Enemy
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SlimeEnemy();
|
SlimeEnemy()
|
||||||
~SlimeEnemy();
|
{
|
||||||
|
//slime纹理
|
||||||
|
static const ResourcesManager::TexturePool& texture_pool
|
||||||
|
= ResourcesManager::instance()->get_texture_pool();
|
||||||
|
static SDL_Texture* tex_slime = texture_pool.find(ResID::Tex_Slime)->second;
|
||||||
|
static SDL_Texture* tex_slime_sketch = texture_pool.find(ResID::Tex_SlimeSketch)->second;
|
||||||
|
//slime数据
|
||||||
|
static ConfigManager::EnemyTemplate& slime_template = ConfigManager::instance()->slime_template;
|
||||||
|
|
||||||
|
//向上行动的动画帧索引(根据resource中slime的资源图)
|
||||||
|
static const std::vector<int> idx_list_up = { 6,7,8,9,10,11 };
|
||||||
|
static const std::vector<int> idx_list_down = { 0,1,2,3,4,5 };
|
||||||
|
static const std::vector<int> idx_list_left = { 18,19,20,21,22,23 };
|
||||||
|
static const std::vector<int> idx_list_right = { 12,13,14,15,16,17 };
|
||||||
|
|
||||||
private:
|
anim_up.set_loop(true); anim_up.set_interval(0.1);
|
||||||
|
anim_up.set_frame_data(tex_slime, 6, 4, idx_list_up);
|
||||||
|
anim_down.set_loop(true); anim_down.set_interval(0.1);
|
||||||
|
anim_down.set_frame_data(tex_slime, 6, 4, idx_list_down);
|
||||||
|
anim_left.set_loop(true); anim_left.set_interval(0.1);
|
||||||
|
anim_left.set_frame_data(tex_slime, 6, 4, idx_list_left);
|
||||||
|
anim_right.set_loop(true); anim_right.set_interval(0.1);
|
||||||
|
anim_right.set_frame_data(tex_slime, 6, 4, idx_list_right);
|
||||||
|
|
||||||
|
anim_up_sketch.set_loop(true); anim_up_sketch.set_interval(0.1);
|
||||||
|
anim_up_sketch.set_frame_data(tex_slime_sketch, 6, 4, idx_list_up);
|
||||||
|
anim_down_sketch.set_loop(true); anim_down_sketch.set_interval(0.1);
|
||||||
|
anim_down_sketch.set_frame_data(tex_slime_sketch, 6, 4, idx_list_down);
|
||||||
|
anim_left.set_loop(true); anim_left.set_interval(0.1);
|
||||||
|
anim_left.set_frame_data(tex_slime_sketch, 6, 4, idx_list_left);
|
||||||
|
anim_right_sketch.set_loop(true); anim_right_sketch.set_interval(0.1);
|
||||||
|
anim_right_sketch.set_frame_data(tex_slime_sketch, 6, 4, idx_list_right);
|
||||||
|
|
||||||
|
max_hp = slime_template.hp;
|
||||||
|
max_speed = slime_template.speed;
|
||||||
|
damage = slime_template.damage;
|
||||||
|
reward_ratio = slime_template.reward_ratio;
|
||||||
|
recover_interval = slime_template.recover_interval;
|
||||||
|
recover_range = slime_template.recover_range;
|
||||||
|
recover_intensity = slime_template.recover_intensity;
|
||||||
|
|
||||||
|
size.x = 48, size.y = 48;
|
||||||
|
hp = max_hp;
|
||||||
|
speed = max_speed;
|
||||||
|
}
|
||||||
|
~SlimeEnemy() = default;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user