酷代码 AI
菜单
服务商

①游戏开始时,你从九个随机的技能中选择三个获得之,然后选择你的性别和势力属性)。②出牌阶段,回合开始时或回合结束时,你可以选择一项:1.从三个随机的技能中选择一个,然后令一名角色获得之;2.更换一名角色的性别和势力属性并复原武将牌。3.令一名角色失去一个技能,然后令一名角色获得之。4.令一名角色所有技能视为未发动过(不会失去已经获得的技能和效果)。(随机的技能池为除本技能的全技能,随机的技能不会是场上有的技能) 语言方向:C++

#include <vector> #include <string> #include <algorithm> #include <random> #include <unordered_set> class Player { public: std::string gender; std::string faction; std::vector<std::string> skills; bool isActive; // For tracking if skills are considered triggered }; class Game { private: std::vector<std::string> allSkills; // All available skills in the game std::vector<Player> players; std::default_random_engine rng; // Helper to get random skills not present on the field std::vector<std::string> getRandomSkills(int count, const std::unordered_set<std::string>& fieldSkills) { std::vector<std::string> available; for (const auto& skill : allSkills) { if (fieldSkills.find(skill) == fieldSkills.end()) { available.push_back(skill); } } std::shuffle(available.begin(), available.end(), rng); if (available.size() < count) { return available; // Return all available if not enough } return std::vector<std::string>(available.begin(), available.begin() + count); } public: Game(const std::vector<std::string>& skillsPool) : allSkills(skillsPool) { std::random_device rd; rng.seed(rd()); } // Initialize a player with three random skills at game start void initializePlayer(Player& player, const std::unordered_set<std::string>& fieldSkills) { auto skillsToGet = getRandomSkills(3, fieldSkills); player.skills.insert(player.skills.end(), skillsToGet.begin(), skillsToGet.end()); // Player then chooses gender and faction (simulated here, actual choice would be input-based) player.gender = "Male"; // Example default player.faction = "Wei"; // Example default player.isActive = true; } // During turn phase: execute one of the four actions void executeAction(int actionType, Player& target, Player* additionalTarget = nullptr, const std::string& skillToLose = "") { std::unordered_set<std::string> currentFieldSkills; for (const auto& p : players) { for (const auto& s : p.skills) { currentFieldSkills.insert(s); } } switch (actionType) { case 1: { // Give a random skill to a target player auto newSkillOptions = getRandomSkills(3, currentFieldSkills); if (!newSkillOptions.empty()) { std::string chosenSkill = newSkillOptions[0]; // Simplistic choice; could be randomized or selected target.skills.push_back(chosenSkill); } break; } case 2: // Change gender and faction, reset player card (simplified) target.gender = (target.gender == "Male") ? "Female" : "Male"; target.faction = (target.faction == "Wei") ? "Shu" : "Wei"; // Example alternation target.isActive = true; // Reset activation state break; case 3: // Make a player lose a skill and another gain it if (additionalTarget && !skillToLose.empty()) { auto it = std::find(target.skills.begin(), target.skills.end(), skillToLose); if (it != target.skills.end()) { target.skills.erase(it); additionalTarget->skills.push_back(skillToLose); } } break; case 4: // Reset skill activation states without removing skills target.isActive = true; break; default: break; } } }; // Example usage int main() { std::vector<std::string> skillPool = {"Skill1", "Skill2", "Skill3", "Skill4", "Skill5", "Skill6", "Skill7", "Skill8", "Skill9"}; Game game(skillPool); Player newPlayer; std::unordered_set<std::string> initialFieldSkills; // Initially empty game.initializePlayer(newPlayer, initialFieldSkills); // During a turn, execute an action (e.g., action 1 on newPlayer) game.executeAction(1, newPlayer); return 0; } 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 随机数生成需要足够随机以避免可预测性。 技能转移时确保目标存在且有效。 容器操作中注意迭代器失效问题。 [2025-09-19 23:59:32 | AI写代码神器 | 996点数解答]

相关提问
请收藏新域名:pdcd.cn
发财导航,免费问AI
实用工具查看更多
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]
数独游戏 [娱乐类]
经典推箱子 [娱乐类]
AI摸鱼五子棋 [娱乐类]