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;
};