From c36594ca72cb6081cd7e35a15d40a117d271f268 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BB=BA=E6=98=8E=20=E6=B2=88?= <2431685932@qq.com> Date: Wed, 26 Jun 2024 16:31:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=205=E7=A7=8D=E4=B8=8D=E5=90=8C=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E6=95=8C=E4=BA=BA=E5=AD=90=E7=B1=BB=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TdGame/TdGame/TdGame.vcxproj | 4 ++ TdGame/TdGame/TdGame.vcxproj.filters | 12 ++++++ TdGame/TdGame/goblin_enemy.h | 61 +++++++++++++++++++++++++++ TdGame/TdGame/goblin_priest_enemy.h | 62 ++++++++++++++++++++++++++++ TdGame/TdGame/king_slime_enemy.h | 61 +++++++++++++++++++++++++++ TdGame/TdGame/skeleton_enemy.h | 62 ++++++++++++++++++++++++++++ TdGame/TdGame/slime_enemy.h | 51 +++++++++++++++++++++-- 7 files changed, 309 insertions(+), 4 deletions(-) create mode 100644 TdGame/TdGame/goblin_enemy.h create mode 100644 TdGame/TdGame/goblin_priest_enemy.h create mode 100644 TdGame/TdGame/king_slime_enemy.h create mode 100644 TdGame/TdGame/skeleton_enemy.h diff --git a/TdGame/TdGame/TdGame.vcxproj b/TdGame/TdGame/TdGame.vcxproj index e1fbe71..f1fe6d0 100644 --- a/TdGame/TdGame/TdGame.vcxproj +++ b/TdGame/TdGame/TdGame.vcxproj @@ -141,10 +141,14 @@ + + + + diff --git a/TdGame/TdGame/TdGame.vcxproj.filters b/TdGame/TdGame/TdGame.vcxproj.filters index 0a681fd..88d2d04 100644 --- a/TdGame/TdGame/TdGame.vcxproj.filters +++ b/TdGame/TdGame/TdGame.vcxproj.filters @@ -74,5 +74,17 @@ 头文件\enemy + + 头文件\enemy + + + 头文件\enemy + + + 头文件\enemy + + + 头文件\enemy + \ No newline at end of file diff --git a/TdGame/TdGame/goblin_enemy.h b/TdGame/TdGame/goblin_enemy.h new file mode 100644 index 0000000..5abdf2a --- /dev/null +++ b/TdGame/TdGame/goblin_enemy.h @@ -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 idx_list_up = { 6,7,8,9,10,11 }; + static const std::vector idx_list_down = { 0,1,2,3,4,5 }; + static const std::vector idx_list_left = { 18,19,20,21,22,23 }; + static const std::vector 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_ diff --git a/TdGame/TdGame/goblin_priest_enemy.h b/TdGame/TdGame/goblin_priest_enemy.h new file mode 100644 index 0000000..a87e369 --- /dev/null +++ b/TdGame/TdGame/goblin_priest_enemy.h @@ -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 idx_list_up = { 6,7,8,9,10,11 }; + static const std::vector idx_list_down = { 0,1,2,3,4,5 }; + static const std::vector idx_list_left = { 18,19,20,21,22,23 }; + static const std::vector 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_ diff --git a/TdGame/TdGame/king_slime_enemy.h b/TdGame/TdGame/king_slime_enemy.h new file mode 100644 index 0000000..b47dd78 --- /dev/null +++ b/TdGame/TdGame/king_slime_enemy.h @@ -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 idx_list_up = { 6,7,8,9,10,11 }; + static const std::vector idx_list_down = { 0,1,2,3,4,5 }; + static const std::vector idx_list_left = { 18,19,20,21,22,23 }; + static const std::vector 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 \ No newline at end of file diff --git a/TdGame/TdGame/skeleton_enemy.h b/TdGame/TdGame/skeleton_enemy.h new file mode 100644 index 0000000..aafdeaa --- /dev/null +++ b/TdGame/TdGame/skeleton_enemy.h @@ -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 idx_list_up = { 6,7,8,9,10,11 }; + static const std::vector idx_list_down = { 0,1,2,3,4,5 }; + static const std::vector idx_list_left = { 18,19,20,21,22,23 }; + static const std::vector 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 diff --git a/TdGame/TdGame/slime_enemy.h b/TdGame/TdGame/slime_enemy.h index cbc4856..7949f43 100644 --- a/TdGame/TdGame/slime_enemy.h +++ b/TdGame/TdGame/slime_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 idx_list_up = { 6,7,8,9,10,11 }; + static const std::vector idx_list_down = { 0,1,2,3,4,5 }; + static const std::vector idx_list_left = { 18,19,20,21,22,23 }; + static const std::vector 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; };