feat: 5种不同类型敌人子类实现
This commit is contained in:
parent
677a7d9a61
commit
c36594ca72
@ -141,10 +141,14 @@
|
||||
<ClInclude Include="enemy.h" />
|
||||
<ClInclude Include="enemy_type.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="map.h" />
|
||||
<ClInclude Include="resources_manager.h" />
|
||||
<ClInclude Include="route.h" />
|
||||
<ClInclude Include="skeleton_enemy.h" />
|
||||
<ClInclude Include="slime_enemy.h" />
|
||||
<ClInclude Include="tile.h" />
|
||||
<ClInclude Include="timer.h" />
|
||||
|
@ -74,5 +74,17 @@
|
||||
<ClInclude Include="slime_enemy.h">
|
||||
<Filter>头文件\enemy</Filter>
|
||||
</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>
|
||||
</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 "resources_manager.h"
|
||||
|
||||
class SlimeEnemy
|
||||
class SlimeEnemy : public Enemy
|
||||
{
|
||||
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