diff --git a/server/include/managers/GameManager.h b/server/include/managers/GameManager.h index 817c650..4c655c2 100644 --- a/server/include/managers/GameManager.h +++ b/server/include/managers/GameManager.h @@ -58,6 +58,7 @@ class GameManager { void updateInvincibility(); void addSnakeToOccupancy(const Snake& snake); void removeSnakeFromOccupancy(const Snake& snake); + void createSnakeDeathDrops(std::vector pos); std::shared_ptr mapManager_; std::shared_ptr playerManager_; diff --git a/server/sqlite3.dll b/server/sqlite3.dll new file mode 100644 index 0000000..9368cf2 Binary files /dev/null and b/server/sqlite3.dll differ diff --git a/server/src/managers/GameManager.cpp b/server/src/managers/GameManager.cpp index 2e3967d..4e510a6 100644 --- a/server/src/managers/GameManager.cpp +++ b/server/src/managers/GameManager.cpp @@ -606,6 +606,8 @@ void GameManager::removeSnakeFromOccupancy(const Snake& snake) { return; } + createSnakeDeathDrops(snake.getBlocks()); // 添加蛇被移除时掉落的食物 + for (const auto& block : snake.getBlocks()) { auto it = occupiedCounts_.find(block); if (it != occupiedCounts_.end()) { @@ -635,4 +637,16 @@ void GameManager::updateInvincibility() { } } +void GameManager::createSnakeDeathDrops(std::vector pos) +{ + for (auto p : pos) + { + if (!gameState_.hasFoodAt(p)) + { + gameState_.trackFoodAdded(p); + gameState_.addFood(Food(p)); + } + } +} + } // namespace snake