{"id":59431,"date":"2026-01-13T21:09:29","date_gmt":"2026-01-13T13:09:29","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/59431.html"},"modified":"2026-01-13T21:09:29","modified_gmt":"2026-01-13T13:09:29","slug":"%e6%88%91%e5%b0%86%e6%99%ba%e5%8f%96%e7%94%9f%e8%be%b0%e7%ba%b2%e6%94%b9%e7%bc%96%e6%88%90%e6%b8%b8%e6%88%8f%ef%bc%8c%e6%b8%b8%e6%88%8f%e6%83%85%e8%8a%82%e5%86%92%e9%99%a9%ef%bc%8c%e5%88%ba%e6%bf%80","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/59431.html","title":{"rendered":"\u6211\u5c06\u667a\u53d6\u751f\u8fb0\u7eb2\u6539\u7f16\u6210\u6e38\u620f\uff0c\u6e38\u620f\u60c5\u8282\u5192\u9669\uff0c\u523a\u6fc0\uff0c\u968f\u673a\u5e94\u53d8\uff0c\u4e2a\u6027\u9c9c\u660e\uff0c\u503c\u5f97\u73a9\u5bb6\u4e00\u8bd5\uff01"},"content":{"rendered":"<p>\u667a\u53d6\u751f\u8fb0\u7eb2\u6e38\u620f<\/p>\n<p>\u00a0<\/p>\n<p>&#x1f3ae; \u6e38\u620f\u6982\u8ff0<\/p>\n<p>\u00a0<\/p>\n<p>\u57fa\u4e8e\u300a\u6c34\u6d52\u4f20\u300b&#034;\u667a\u53d6\u751f\u8fb0\u7eb2&#034;\u6545\u4e8b\u60c5\u8282\u6539\u7f16\u7684\u7b56\u7565\u5192\u9669\u6e38\u620f\u3002\u73a9\u5bb6\u53ef\u4ee5\u626e\u6f14\u6768\u5fd7&#xff08;\u62bc\u8fd0\u65b9&#xff09;\u6216\u6641\u76d6&#xff08;\u667a\u53d6\u65b9&#xff09;&#xff0c;\u4f53\u9a8c\u62a4\u9001\u751f\u8fb0\u7eb2\u4e0e\u667a\u53d6\u751f\u8fb0\u7eb2\u7684\u53cc\u91cd\u89c6\u89d2&#xff0c;\u4f53\u9a8c\u53e4\u4ee3\u519b\u4e8b\u8c0b\u7565\u4e0e\u6c5f\u6e56\u667a\u6167\u7684\u78b0\u649e\u3002<\/p>\n<p>\u00a0<\/p>\n<p>&#x1f4c1; \u9879\u76ee\u7ed3\u6784<\/p>\n<p>\u00a0<\/p>\n<p>take_birthday_gifts\/<\/p>\n<p>\u251c\u2500\u2500 main.cpp # \u6e38\u620f\u4e3b\u7a0b\u5e8f<\/p>\n<p>\u251c\u2500\u2500 game_config.h # \u6e38\u620f\u914d\u7f6e\u6587\u4ef6<\/p>\n<p>\u251c\u2500\u2500 CMakeLists.txt # \u7f16\u8bd1\u914d\u7f6e\u6587\u4ef6<\/p>\n<p>\u251c\u2500\u2500 README.md # \u9879\u76ee\u8bf4\u660e\u6587\u6863<\/p>\n<p>\u251c\u2500\u2500 include\/ # \u5934\u6587\u4ef6\u76ee\u5f55<\/p>\n<p>\u2502 \u251c\u2500\u2500 characters.h # \u89d2\u8272\u5b9a\u4e49<\/p>\n<p>\u2502 \u251c\u2500\u2500 items.h # \u7269\u54c1\u7cfb\u7edf<\/p>\n<p>\u2502 \u251c\u2500\u2500 combat.h # \u6218\u6597\u7cfb\u7edf<\/p>\n<p>\u2502 \u251c\u2500\u2500 events.h # \u4e8b\u4ef6\u7cfb\u7edf<\/p>\n<p>\u2502 \u2514\u2500\u2500 ai.h # AI\u7cfb\u7edf<\/p>\n<p>\u251c\u2500\u2500 src\/ # \u6e90\u6587\u4ef6\u76ee\u5f55<\/p>\n<p>\u2502 \u251c\u2500\u2500 characters.cpp # \u89d2\u8272\u5b9e\u73b0<\/p>\n<p>\u2502 \u251c\u2500\u2500 items.cpp # \u7269\u54c1\u5b9e\u73b0<\/p>\n<p>\u2502 \u251c\u2500\u2500 combat.cpp # \u6218\u6597\u5b9e\u73b0<\/p>\n<p>\u2502 \u251c\u2500\u2500 events.cpp # \u4e8b\u4ef6\u5b9e\u73b0<\/p>\n<p>\u2502 \u251c\u2500\u2500 ai.cpp # AI\u5b9e\u73b0<\/p>\n<p>\u2502 \u2514\u2500\u2500 utils.cpp # \u5de5\u5177\u51fd\u6570<\/p>\n<p>\u251c\u2500\u2500 assets\/ # \u8d44\u6e90\u6587\u4ef6<\/p>\n<p>\u2502 \u251c\u2500\u2500 maps\/ # \u5730\u56fe\u6570\u636e<\/p>\n<p>\u2502 \u251c\u2500\u2500 dialogues\/ # \u5bf9\u8bdd\u6587\u672c<\/p>\n<p>\u2502 \u2514\u2500\u2500 config\/ # \u914d\u7f6e\u6587\u4ef6<\/p>\n<p>\u2514\u2500\u2500 docs\/ # \u6587\u6863<\/p>\n<p>\u00a0 \u00a0 \u251c\u2500\u2500 gameplay_guide.md # \u6e38\u620f\u6307\u5357<\/p>\n<p>\u00a0 \u00a0 \u2514\u2500\u2500 design_docs\/ # \u8bbe\u8ba1\u6587\u6863<\/p>\n<p>\u00a0<\/p>\n<p>&#x1f3af; \u6838\u5fc3\u6e38\u620f\u673a\u5236<\/p>\n<p>\u00a0<\/p>\n<p>1. \u53cc\u4e3b\u89d2\u7cfb\u7edf<\/p>\n<p>\u00a0<\/p>\n<p>&#8211; \u6768\u5fd7\u7ebf&#xff1a;\u62a4\u9001\u751f\u8fb0\u7eb2&#xff0c;\u8bc6\u7834\u9677\u9631&#xff0c;\u5b89\u5168\u9001\u8fbe<\/p>\n<p>&#8211; \u6641\u76d6\u7ebf&#xff1a;\u8bbe\u8ba1\u8ba1\u8c0b&#xff0c;\u667a\u53d6\u751f\u8fb0\u7eb2&#xff0c;\u8eb2\u907f\u8ffd\u6355<\/p>\n<p>\u00a0<\/p>\n<p>2. \u7b56\u7565\u7cfb\u7edf<\/p>\n<p>\u00a0<\/p>\n<p>&#8211; \u65f6\u95f4\u7ba1\u7406&#xff1a;\u767d\u5929\/\u9ed1\u591c\u7cfb\u7edf<\/p>\n<p>&#8211; \u8d44\u6e90\u7ba1\u7406&#xff1a;\u4f53\u529b\u3001\u58eb\u6c14\u3001\u7cae\u98df<\/p>\n<p>&#8211; \u8def\u5f84\u9009\u62e9&#xff1a;\u5927\u8def(\u5b89\u5168\u4f46\u6162) vs \u5c0f\u8def(\u5371\u9669\u4f46\u5feb)<\/p>\n<p>\u00a0<\/p>\n<p>3. \u5bf9\u8bdd\u7cfb\u7edf<\/p>\n<p>\u00a0<\/p>\n<p>&#8211; \u5206\u652f\u5bf9\u8bdd\u5f71\u54cd\u5267\u60c5\u8d70\u5411<\/p>\n<p>&#8211; \u6027\u683c\u7cfb\u7edf&#xff1a;\u4e0d\u540c\u9009\u62e9\u5f71\u54cd\u89d2\u8272\u5173\u7cfb<\/p>\n<p>&#8211; \u8bf4\u670d\u7cfb\u7edf&#xff1a;\u901a\u8fc7\u5bf9\u8bdd\u6539\u53d8NPC\u884c\u4e3a<\/p>\n<p>\u00a0<\/p>\n<p>4. \u6218\u6597\u7cfb\u7edf<\/p>\n<p>\u00a0<\/p>\n<p>&#8211; \u5373\u65f6\u6218\u672f\u6218\u6597<\/p>\n<p>&#8211; \u6280\u80fd\u7ec4\u5408\u7cfb\u7edf<\/p>\n<p>&#8211; \u73af\u5883\u4e92\u52a8&#xff1a;\u5229\u7528\u5730\u5f62\u4f18\u52bf<\/p>\n<p>\u00a0<\/p>\n<p>&#x1f3ae; \u6838\u5fc3\u4ee3\u7801\u5b9e\u73b0<\/p>\n<p>\u00a0<\/p>\n<p>1. \u6e38\u620f\u914d\u7f6e\u6587\u4ef6 (game_config.h)<\/p>\n<p>\u00a0<\/p>\n<p>\/**<\/p>\n<p>\u00a0* \u667a\u53d6\u751f\u8fb0\u7eb2\u6e38\u620f\u914d\u7f6e\u6587\u4ef6<\/p>\n<p>\u00a0* \u5b9a\u4e49\u6e38\u620f\u6838\u5fc3\u53c2\u6570\u548c\u5e38\u91cf<\/p>\n<p>\u00a0*\/<\/p>\n<p>#ifndef GAME_CONFIG_H<\/p>\n<p>#define GAME_CONFIG_H<\/p>\n<p>\u00a0<\/p>\n<p>#include &lt;string&gt;<\/p>\n<p>#include &lt;vector&gt;<\/p>\n<p>#include &lt;unordered_map&gt;<\/p>\n<p>#include &lt;memory&gt;<\/p>\n<p>\u00a0<\/p>\n<p>\/\/ \u6e38\u620f\u7248\u672c<\/p>\n<p>#define GAME_VERSION &#034;1.0.0&#034;<\/p>\n<p>#define GAME_TITLE &#034;\u667a\u53d6\u751f\u8fb0\u7eb2&#034;<\/p>\n<p>\u00a0<\/p>\n<p>\/\/ \u6e38\u620f\u96be\u5ea6\u7b49\u7ea7<\/p>\n<p>enum class GameDifficulty {<\/p>\n<p>\u00a0 \u00a0 EASY, \/\/ \u7b80\u5355<\/p>\n<p>\u00a0 \u00a0 NORMAL, \/\/ \u666e\u901a<\/p>\n<p>\u00a0 \u00a0 HARD, \/\/ \u56f0\u96be<\/p>\n<p>\u00a0 \u00a0 LEGENDARY \/\/ \u4f20\u5947<\/p>\n<p>};<\/p>\n<p>\u00a0<\/p>\n<p>\/\/ \u6e38\u620f\u6a21\u5f0f<\/p>\n<p>enum class GameMode {<\/p>\n<p>\u00a0 \u00a0 STORY, \/\/ \u6545\u4e8b\u6a21\u5f0f<\/p>\n<p>\u00a0 \u00a0 FREE_PLAY, \/\/ \u81ea\u7531\u6a21\u5f0f<\/p>\n<p>\u00a0 \u00a0 CHALLENGE, \/\/ \u6311\u6218\u6a21\u5f0f<\/p>\n<p>\u00a0 \u00a0 MULTIPLAYER \/\/ \u591a\u4eba\u6a21\u5f0f<\/p>\n<p>};<\/p>\n<p>\u00a0<\/p>\n<p>\/\/ \u65f6\u95f4\u7cfb\u7edf<\/p>\n<p>struct GameTime {<\/p>\n<p>\u00a0 \u00a0 int year; \/\/ \u5e74\u4efd<\/p>\n<p>\u00a0 \u00a0 int month; \/\/ \u6708\u4efd<\/p>\n<p>\u00a0 \u00a0 int day; \/\/ \u65e5\u671f<\/p>\n<p>\u00a0 \u00a0 int hour; \/\/ \u5c0f\u65f6(0-23)<\/p>\n<p>\u00a0 \u00a0 int minute; \/\/ \u5206\u949f<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 GameTime(int y, int m, int d, int h, int min)\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 : year(y), month(m), day(d), hour(h), minute(min) {}<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u8f6c\u6362\u4e3a\u5b57\u7b26\u4e32<\/p>\n<p>\u00a0 \u00a0 std::string toString() const {<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 char buffer[64];<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 snprintf(buffer, sizeof(buffer),\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#034;%04d\u5e74%02d\u6708%02d\u65e5 %02d:%02d&#034;,\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 year, month, day, hour, minute);<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return std::string(buffer);<\/p>\n<p>\u00a0 \u00a0 }<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u5224\u65ad\u662f\u5426\u662f\u767d\u5929<\/p>\n<p>\u00a0 \u00a0 bool isDaytime() const {<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return hour &gt;&#061; 6 &amp;&amp; hour &lt; 18;<\/p>\n<p>\u00a0 \u00a0 }<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u5224\u65ad\u662f\u5426\u662f\u9ed1\u591c<\/p>\n<p>\u00a0 \u00a0 bool isNight() const {<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return !isDaytime();<\/p>\n<p>\u00a0 \u00a0 }<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u65f6\u95f4\u6d41\u901d<\/p>\n<p>\u00a0 \u00a0 void advanceMinutes(int minutes) {<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 minute &#043;&#061; minutes;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 hour &#043;&#061; minute \/ 60;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 minute %&#061; 60;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 hour %&#061; 24;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \/\/ \u7b80\u5316\u5904\u7406&#xff0c;\u4e0d\u5904\u7406\u65e5\u671f\u53d8\u66f4<\/p>\n<p>\u00a0 \u00a0 }<\/p>\n<p>};<\/p>\n<p>\u00a0<\/p>\n<p>\/\/ \u5929\u6c14\u7cfb\u7edf<\/p>\n<p>enum class Weather {<\/p>\n<p>\u00a0 \u00a0 SUNNY, \/\/ \u6674\u5929<\/p>\n<p>\u00a0 \u00a0 CLOUDY, \/\/ \u591a\u4e91<\/p>\n<p>\u00a0 \u00a0 RAINY, \/\/ \u96e8\u5929<\/p>\n<p>\u00a0 \u00a0 STORMY, \/\/ \u66b4\u96e8<\/p>\n<p>\u00a0 \u00a0 FOGGY, \/\/ \u96fe\u5929<\/p>\n<p>\u00a0 \u00a0 WINDY \/\/ \u5927\u98ce<\/p>\n<p>};<\/p>\n<p>\u00a0<\/p>\n<p>\/\/ \u5730\u7406\u4f4d\u7f6e<\/p>\n<p>struct Location {<\/p>\n<p>\u00a0 \u00a0 std::string name; \/\/ \u5730\u70b9\u540d\u79f0<\/p>\n<p>\u00a0 \u00a0 std::string description; \/\/ \u5730\u70b9\u63cf\u8ff0<\/p>\n<p>\u00a0 \u00a0 double latitude; \/\/ \u7eac\u5ea6<\/p>\n<p>\u00a0 \u00a0 double longitude; \/\/ \u7ecf\u5ea6<\/p>\n<p>\u00a0 \u00a0 int altitude; \/\/ \u6d77\u62d4<\/p>\n<p>\u00a0 \u00a0 Weather weather; \/\/ \u5f53\u524d\u5929\u6c14<\/p>\n<p>\u00a0 \u00a0 int dangerLevel; \/\/ \u5371\u9669\u7b49\u7ea7(1-10)<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u5468\u8fb9\u5730\u70b9<\/p>\n<p>\u00a0 \u00a0 std::vector&lt;std::string&gt; connectedLocations;<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 Location(const std::string&amp; n, const std::string&amp; desc,\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0double lat, double lon, int alt, Weather w, int danger)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 : name(n), description(desc), latitude(lat), longitude(lon),\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 altitude(alt), weather(w), dangerLevel(danger) {}<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u83b7\u53d6\u5730\u70b9\u7c7b\u578b<\/p>\n<p>\u00a0 \u00a0 std::string getType() const {<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 if (name.find(&#034;\u5c97&#034;) !&#061; std::string::npos) return &#034;mountain_pass&#034;;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 if (name.find(&#034;\u6797&#034;) !&#061; std::string::npos) return &#034;forest&#034;;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 if (name.find(&#034;\u5e97&#034;) !&#061; std::string::npos) return &#034;inn&#034;;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 if (name.find(&#034;\u94fa&#034;) !&#061; std::string::npos) return &#034;shop&#034;;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 if (name.find(&#034;\u5e84&#034;) !&#061; std::string::npos) return &#034;village&#034;;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return &#034;unknown&#034;;<\/p>\n<p>\u00a0 \u00a0 }<\/p>\n<p>};<\/p>\n<p>\u00a0<\/p>\n<p>\/\/ \u6e38\u620f\u914d\u7f6e\u4e3b\u7c7b<\/p>\n<p>class GameConfig {<\/p>\n<p>private:<\/p>\n<p>\u00a0 \u00a0 static GameConfig* instance;<\/p>\n<p>\u00a0 \u00a0 GameConfig(); \/\/ \u79c1\u6709\u6784\u9020\u51fd\u6570<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u914d\u7f6e\u6570\u636e<\/p>\n<p>\u00a0 \u00a0 std::unordered_map&lt;std::string, Location&gt; locations;<\/p>\n<p>\u00a0 \u00a0 std::unordered_map&lt;Weather, std::string&gt; weatherDescriptions;<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>public:<\/p>\n<p>\u00a0 \u00a0 \/\/ \u5355\u4f8b\u6a21\u5f0f<\/p>\n<p>\u00a0 \u00a0 static GameConfig* getInstance() {<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 if (instance &#061;&#061; nullptr) {<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 instance &#061; new GameConfig();<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 }<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return instance;<\/p>\n<p>\u00a0 \u00a0 }<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u7981\u6b62\u62f7\u8d1d<\/p>\n<p>\u00a0 \u00a0 GameConfig(const GameConfig&amp;) &#061; delete;<\/p>\n<p>\u00a0 \u00a0 GameConfig&amp; operator&#061;(const GameConfig&amp;) &#061; delete;<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u521d\u59cb\u5316\u6e38\u620f\u914d\u7f6e<\/p>\n<p>\u00a0 \u00a0 void initialize();<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u83b7\u53d6\u5730\u70b9\u4fe1\u606f<\/p>\n<p>\u00a0 \u00a0 Location* getLocation(const std::string&amp; name) {<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 auto it &#061; locations.find(name);<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return (it !&#061; locations.end()) ? &amp;it-&gt;second : nullptr;<\/p>\n<p>\u00a0 \u00a0 }<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u83b7\u53d6\u6240\u6709\u5730\u70b9<\/p>\n<p>\u00a0 \u00a0 const std::unordered_map&lt;std::string, Location&gt;&amp; getAllLocations() const {<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return locations;<\/p>\n<p>\u00a0 \u00a0 }<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u83b7\u53d6\u5929\u6c14\u63cf\u8ff0<\/p>\n<p>\u00a0 \u00a0 std::string getWeatherDescription(Weather weather) const {<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 auto it &#061; weatherDescriptions.find(weather);<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return (it !&#061; weatherDescriptions.end()) ? it-&gt;second : &#034;\u672a\u77e5\u5929\u6c14&#034;;<\/p>\n<p>\u00a0 \u00a0 }<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u6e38\u620f\u53c2\u6570<\/p>\n<p>\u00a0 \u00a0 struct {<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \/\/ \u65f6\u95f4\u53c2\u6570<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 int dayDurationMinutes &#061; 1440; \/\/ \u4e00\u5929\u65f6\u957f(\u5206\u949f)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 int hourDurationMinutes &#061; 60; \/\/ \u4e00\u5c0f\u65f6\u65f6\u957f<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \/\/ \u4f53\u529b\u7cfb\u7edf<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 int maxStamina &#061; 100; \/\/ \u6700\u5927\u4f53\u529b<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 int staminaRecoveryRate &#061; 5; \/\/ \u4f53\u529b\u6062\u590d\u7387\/\u5c0f\u65f6<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 int walkingStaminaCost &#061; 1; \/\/ \u884c\u8d70\u4f53\u529b\u6d88\u8017\/\u5206\u949f<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 int runningStaminaCost &#061; 3; \/\/ \u8dd1\u6b65\u4f53\u529b\u6d88\u8017\/\u5206\u949f<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 int fightingStaminaCost &#061; 10; \/\/ \u6218\u6597\u4f53\u529b\u6d88\u8017\/\u6b21<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \/\/ \u58eb\u6c14\u7cfb\u7edf<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 int maxMorale &#061; 100; \/\/ \u6700\u5927\u58eb\u6c14<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 int moraleDecayRate &#061; 1; \/\/ \u58eb\u6c14\u8870\u51cf\u7387\/\u5c0f\u65f6<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 int winBattleMoraleBonus &#061; 20; \/\/ \u6218\u6597\u80dc\u5229\u58eb\u6c14\u52a0\u6210<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 int loseBattleMoralePenalty &#061; 30; \/\/ \u6218\u6597\u5931\u8d25\u58eb\u6c14\u60e9\u7f5a<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \/\/ \u8d44\u6e90\u7cfb\u7edf<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 int maxFood &#061; 1000; \/\/ \u6700\u5927\u7cae\u98df<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 int foodConsumptionRate &#061; 10; \/\/ \u7cae\u98df\u6d88\u8017\u7387\/\u4eba\/\u5929<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 int maxWater &#061; 1000; \/\/ \u6700\u5927\u996e\u6c34<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 int waterConsumptionRate &#061; 5; \/\/ \u996e\u6c34\u6d88\u8017\u7387\/\u4eba\/\u5929<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \/\/ \u6218\u6597\u7cfb\u7edf<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 int baseHitChance &#061; 70; \/\/ \u57fa\u7840\u547d\u4e2d\u7387<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 int baseDodgeChance &#061; 20; \/\/ \u57fa\u7840\u95ea\u907f\u7387<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 int criticalHitMultiplier &#061; 2; \/\/ \u66b4\u51fb\u500d\u6570<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \/\/ AI\u7cfb\u7edf<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 int aiUpdateInterval &#061; 1; \/\/ AI\u66f4\u65b0\u95f4\u9694(\u79d2)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 int npcSpawnRadius &#061; 100; \/\/ NPC\u751f\u6210\u534a\u5f84<\/p>\n<p>\u00a0 \u00a0 } parameters;<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u6839\u636e\u96be\u5ea6\u8c03\u6574\u53c2\u6570<\/p>\n<p>\u00a0 \u00a0 void applyDifficulty(GameDifficulty difficulty);<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u4fdd\u5b58\/\u52a0\u8f7d\u914d\u7f6e<\/p>\n<p>\u00a0 \u00a0 bool saveConfig(const std::string&amp; filename);<\/p>\n<p>\u00a0 \u00a0 bool loadConfig(const std::string&amp; filename);<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 ~GameConfig();<\/p>\n<p>};<\/p>\n<p>\u00a0<\/p>\n<p>#endif \/\/ GAME_CONFIG_H<\/p>\n<p>\u00a0<\/p>\n<p>2. \u89d2\u8272\u7cfb\u7edf (include\/characters.h)<\/p>\n<p>\u00a0<\/p>\n<p>\/**<\/p>\n<p>\u00a0* \u89d2\u8272\u7cfb\u7edf\u5b9a\u4e49<\/p>\n<p>\u00a0* \u5b9a\u4e49\u6e38\u620f\u4e2d\u6240\u6709\u89d2\u8272\u548c\u76f8\u5173\u7cfb\u7edf<\/p>\n<p>\u00a0*\/<\/p>\n<p>#ifndef CHARACTERS_H<\/p>\n<p>#define CHARACTERS_H<\/p>\n<p>\u00a0<\/p>\n<p>#include &lt;string&gt;<\/p>\n<p>#include &lt;vector&gt;<\/p>\n<p>#include &lt;memory&gt;<\/p>\n<p>#include &lt;functional&gt;<\/p>\n<p>#include &#034;items.h&#034;<\/p>\n<p>\u00a0<\/p>\n<p>\/\/ \u89d2\u8272\u5c5e\u6027<\/p>\n<p>struct CharacterAttributes {<\/p>\n<p>\u00a0 \u00a0 int strength; \/\/ \u529b\u91cf<\/p>\n<p>\u00a0 \u00a0 int agility; \/\/ \u654f\u6377<\/p>\n<p>\u00a0 \u00a0 int intelligence; \/\/ \u667a\u529b<\/p>\n<p>\u00a0 \u00a0 int endurance; \/\/ \u8010\u529b<\/p>\n<p>\u00a0 \u00a0 int charisma; \/\/ \u9b45\u529b<\/p>\n<p>\u00a0 \u00a0 int luck; \/\/ \u8fd0\u6c14<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 CharacterAttributes(int str &#061; 10, int agi &#061; 10, int intl &#061; 10,\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0int end &#061; 10, int cha &#061; 10, int lck &#061; 10)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 : strength(str), agility(agi), intelligence(intl),\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 endurance(end), charisma(cha), luck(lck) {}<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u603b\u5c5e\u6027\u70b9\u6570<\/p>\n<p>\u00a0 \u00a0 int total() const {<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return strength &#043; agility &#043; intelligence &#043; endurance &#043; charisma &#043; luck;<\/p>\n<p>\u00a0 \u00a0 }<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u5e8f\u5217\u5316<\/p>\n<p>\u00a0 \u00a0 std::string serialize() const;<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u53cd\u5e8f\u5217\u5316<\/p>\n<p>\u00a0 \u00a0 static CharacterAttributes deserialize(const std::string&amp; data);<\/p>\n<p>};<\/p>\n<p>\u00a0<\/p>\n<p>\/\/ \u89d2\u8272\u72b6\u6001<\/p>\n<p>struct CharacterStatus {<\/p>\n<p>\u00a0 \u00a0 int health; \/\/ \u751f\u547d\u503c<\/p>\n<p>\u00a0 \u00a0 int stamina; \/\/ \u4f53\u529b<\/p>\n<p>\u00a0 \u00a0 int morale; \/\/ \u58eb\u6c14<\/p>\n<p>\u00a0 \u00a0 int hunger; \/\/ \u9965\u997f\u5ea6<\/p>\n<p>\u00a0 \u00a0 int thirst; \/\/ \u53e3\u6e34\u5ea6<\/p>\n<p>\u00a0 \u00a0 int fatigue; \/\/ \u75b2\u52b3\u5ea6<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 CharacterStatus(int hp &#061; 100, int sta &#061; 100, int mor &#061; 100,\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0int hun &#061; 0, int thi &#061; 0, int fat &#061; 0)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 : health(hp), stamina(sta), morale(mor),\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 hunger(hun), thirst(thi), fatigue(fat) {}<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u68c0\u67e5\u662f\u5426\u5b58\u6d3b<\/p>\n<p>\u00a0 \u00a0 bool isAlive() const { return health &gt; 0; }<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u68c0\u67e5\u662f\u5426\u5065\u5eb7<\/p>\n<p>\u00a0 \u00a0 bool isHealthy() const { return health &gt;&#061; 50 &amp;&amp; morale &gt;&#061; 50; }<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u66f4\u65b0\u72b6\u6001<\/p>\n<p>\u00a0 \u00a0 void update(int deltaTime);<\/p>\n<p>};<\/p>\n<p>\u00a0<\/p>\n<p>\/\/ \u6280\u80fd\u7cfb\u7edf<\/p>\n<p>class Skill {<\/p>\n<p>private:<\/p>\n<p>\u00a0 \u00a0 std::string name;<\/p>\n<p>\u00a0 \u00a0 std::string description;<\/p>\n<p>\u00a0 \u00a0 int level;<\/p>\n<p>\u00a0 \u00a0 int maxLevel;<\/p>\n<p>\u00a0 \u00a0 int experience;<\/p>\n<p>\u00a0 \u00a0 SkillType type;<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>public:<\/p>\n<p>\u00a0 \u00a0 Skill(const std::string&amp; n, const std::string&amp; desc,\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 SkillType t, int maxLvl &#061; 10)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 : name(n), description(desc), level(1),\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 maxLevel(maxLvl), experience(0), type(t) {}<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u83b7\u53d6\u6280\u80fd\u540d\u79f0<\/p>\n<p>\u00a0 \u00a0 std::string getName() const { return name; }<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u83b7\u53d6\u6280\u80fd\u63cf\u8ff0<\/p>\n<p>\u00a0 \u00a0 std::string getDescription() const { return description; }<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u83b7\u53d6\u6280\u80fd\u7b49\u7ea7<\/p>\n<p>\u00a0 \u00a0 int getLevel() const { return level; }<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u83b7\u53d6\u6280\u80fd\u7c7b\u578b<\/p>\n<p>\u00a0 \u00a0 SkillType getType() const { return type; }<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u589e\u52a0\u7ecf\u9a8c<\/p>\n<p>\u00a0 \u00a0 void addExperience(int exp) {<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 experience &#043;&#061; exp;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \/\/ \u5347\u7ea7\u903b\u8f91<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 int requiredExp &#061; level * 100;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 while (experience &gt;&#061; requiredExp &amp;&amp; level &lt; maxLevel) {<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 experience -&#061; requiredExp;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 level&#043;&#043;;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 requiredExp &#061; level * 100;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 }<\/p>\n<p>\u00a0 \u00a0 }<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u4f7f\u7528\u6280\u80fd<\/p>\n<p>\u00a0 \u00a0 virtual bool use(Character* user, Character* target &#061; nullptr) &#061; 0;<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 virtual ~Skill() {}<\/p>\n<p>};<\/p>\n<p>\u00a0<\/p>\n<p>\/\/ \u6218\u6597\u6280\u80fd<\/p>\n<p>class CombatSkill : public Skill {<\/p>\n<p>private:<\/p>\n<p>\u00a0 \u00a0 int damage;<\/p>\n<p>\u00a0 \u00a0 int staminaCost;<\/p>\n<p>\u00a0 \u00a0 int cooldown;<\/p>\n<p>\u00a0 \u00a0 int currentCooldown;<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>public:<\/p>\n<p>\u00a0 \u00a0 CombatSkill(const std::string&amp; n, const std::string&amp; desc,\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 int dmg, int cost, int cd)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 : Skill(n, desc, SkillType::COMBAT),\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 damage(dmg), staminaCost(cost),\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 cooldown(cd), currentCooldown(0) {}<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 bool use(Character* user, Character* target &#061; nullptr) override;<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \/\/ \u66f4\u65b0\u51b7\u5374<\/p>\n<p>\u00a0 \u00a0 void updateCooldown(int deltaTime) {<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 if (currentCooldown &gt; 0) {<\/p>\n<p>\u5982\u679c\u4f60\u89c9\u5f97\u8fd9\u4e2a\u6e38\u620f\u597d\u73a9&#xff0c;\u6b22\u8fce\u5173\u6ce8\u6211&#xff01;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u667a\u53d6\u751f\u8fb0\u7eb2\u6e38\u620f&#x1f3ae; \u6e38\u620f\u6982\u8ff0\u57fa\u4e8e\u300a\u6c34\u6d52\u4f20\u300b\\&#8221;\u667a\u53d6\u751f\u8fb0\u7eb2\\&#8221;\u6545\u4e8b\u60c5\u8282\u6539\u7f16\u7684\u7b56\u7565\u5192\u9669\u6e38\u620f\u3002\u73a9\u5bb6\u53ef\u4ee5\u626e\u6f14\u6768\u5fd7&#xff08;\u62bc\u8fd0\u65b9&#xff09;\u6216\u6641\u76d6&#xff08;\u667a\u53d6\u65b9&#xff09;&#xff0c;\u4f53\u9a8c\u62a4\u9001\u751f\u8fb0\u7eb2\u4e0e\u667a\u53d6\u751f\u8fb0\u7eb2\u7684\u53cc\u91cd\u89c6\u89d2&#xff0c;\u4f53\u9a8c\u53e4\u4ee3\u519b\u4e8b\u8c0b\u7565\u4e0e\u6c5f\u6e56\u667a\u6167\u7684\u78b0\u649e\u3002&#x1f4c1; \u9879\u76ee\u7ed3\u6784take_birthday_gifts\/\u251c\u2500\u2500 main.cpp # \u6e38\u620f\u4e3b\u7a0b\u5e8f\u251c\u2500\u2500 game_config.h # \u6e38\u620f\u914d\u7f6e\u6587\u4ef6\u251c\u2500\u2500 CMakeLi<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[248],"topic":[],"class_list":["post-59431","post","type-post","status-publish","format-standard","hentry","category-server","tag-248"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u6211\u5c06\u667a\u53d6\u751f\u8fb0\u7eb2\u6539\u7f16\u6210\u6e38\u620f\uff0c\u6e38\u620f\u60c5\u8282\u5192\u9669\uff0c\u523a\u6fc0\uff0c\u968f\u673a\u5e94\u53d8\uff0c\u4e2a\u6027\u9c9c\u660e\uff0c\u503c\u5f97\u73a9\u5bb6\u4e00\u8bd5\uff01 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/59431.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u6211\u5c06\u667a\u53d6\u751f\u8fb0\u7eb2\u6539\u7f16\u6210\u6e38\u620f\uff0c\u6e38\u620f\u60c5\u8282\u5192\u9669\uff0c\u523a\u6fc0\uff0c\u968f\u673a\u5e94\u53d8\uff0c\u4e2a\u6027\u9c9c\u660e\uff0c\u503c\u5f97\u73a9\u5bb6\u4e00\u8bd5\uff01 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\u667a\u53d6\u751f\u8fb0\u7eb2\u6e38\u620f&#x1f3ae; \u6e38\u620f\u6982\u8ff0\u57fa\u4e8e\u300a\u6c34\u6d52\u4f20\u300b&quot;\u667a\u53d6\u751f\u8fb0\u7eb2&quot;\u6545\u4e8b\u60c5\u8282\u6539\u7f16\u7684\u7b56\u7565\u5192\u9669\u6e38\u620f\u3002\u73a9\u5bb6\u53ef\u4ee5\u626e\u6f14\u6768\u5fd7&#xff08;\u62bc\u8fd0\u65b9&#xff09;\u6216\u6641\u76d6&#xff08;\u667a\u53d6\u65b9&#xff09;&#xff0c;\u4f53\u9a8c\u62a4\u9001\u751f\u8fb0\u7eb2\u4e0e\u667a\u53d6\u751f\u8fb0\u7eb2\u7684\u53cc\u91cd\u89c6\u89d2&#xff0c;\u4f53\u9a8c\u53e4\u4ee3\u519b\u4e8b\u8c0b\u7565\u4e0e\u6c5f\u6e56\u667a\u6167\u7684\u78b0\u649e\u3002&#x1f4c1; \u9879\u76ee\u7ed3\u6784take_birthday_gifts\/\u251c\u2500\u2500 main.cpp # \u6e38\u620f\u4e3b\u7a0b\u5e8f\u251c\u2500\u2500 game_config.h # \u6e38\u620f\u914d\u7f6e\u6587\u4ef6\u251c\u2500\u2500 CMakeLi\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/59431.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-13T13:09:29+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/59431.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/59431.html\",\"name\":\"\u6211\u5c06\u667a\u53d6\u751f\u8fb0\u7eb2\u6539\u7f16\u6210\u6e38\u620f\uff0c\u6e38\u620f\u60c5\u8282\u5192\u9669\uff0c\u523a\u6fc0\uff0c\u968f\u673a\u5e94\u53d8\uff0c\u4e2a\u6027\u9c9c\u660e\uff0c\u503c\u5f97\u73a9\u5bb6\u4e00\u8bd5\uff01 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-01-13T13:09:29+00:00\",\"dateModified\":\"2026-01-13T13:09:29+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/59431.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/59431.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/59431.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u6211\u5c06\u667a\u53d6\u751f\u8fb0\u7eb2\u6539\u7f16\u6210\u6e38\u620f\uff0c\u6e38\u620f\u60c5\u8282\u5192\u9669\uff0c\u523a\u6fc0\uff0c\u968f\u673a\u5e94\u53d8\uff0c\u4e2a\u6027\u9c9c\u660e\uff0c\u503c\u5f97\u73a9\u5bb6\u4e00\u8bd5\uff01\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u6211\u5c06\u667a\u53d6\u751f\u8fb0\u7eb2\u6539\u7f16\u6210\u6e38\u620f\uff0c\u6e38\u620f\u60c5\u8282\u5192\u9669\uff0c\u523a\u6fc0\uff0c\u968f\u673a\u5e94\u53d8\uff0c\u4e2a\u6027\u9c9c\u660e\uff0c\u503c\u5f97\u73a9\u5bb6\u4e00\u8bd5\uff01 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/59431.html","og_locale":"zh_CN","og_type":"article","og_title":"\u6211\u5c06\u667a\u53d6\u751f\u8fb0\u7eb2\u6539\u7f16\u6210\u6e38\u620f\uff0c\u6e38\u620f\u60c5\u8282\u5192\u9669\uff0c\u523a\u6fc0\uff0c\u968f\u673a\u5e94\u53d8\uff0c\u4e2a\u6027\u9c9c\u660e\uff0c\u503c\u5f97\u73a9\u5bb6\u4e00\u8bd5\uff01 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\u667a\u53d6\u751f\u8fb0\u7eb2\u6e38\u620f&#x1f3ae; \u6e38\u620f\u6982\u8ff0\u57fa\u4e8e\u300a\u6c34\u6d52\u4f20\u300b\"\u667a\u53d6\u751f\u8fb0\u7eb2\"\u6545\u4e8b\u60c5\u8282\u6539\u7f16\u7684\u7b56\u7565\u5192\u9669\u6e38\u620f\u3002\u73a9\u5bb6\u53ef\u4ee5\u626e\u6f14\u6768\u5fd7&#xff08;\u62bc\u8fd0\u65b9&#xff09;\u6216\u6641\u76d6&#xff08;\u667a\u53d6\u65b9&#xff09;&#xff0c;\u4f53\u9a8c\u62a4\u9001\u751f\u8fb0\u7eb2\u4e0e\u667a\u53d6\u751f\u8fb0\u7eb2\u7684\u53cc\u91cd\u89c6\u89d2&#xff0c;\u4f53\u9a8c\u53e4\u4ee3\u519b\u4e8b\u8c0b\u7565\u4e0e\u6c5f\u6e56\u667a\u6167\u7684\u78b0\u649e\u3002&#x1f4c1; \u9879\u76ee\u7ed3\u6784take_birthday_gifts\/\u251c\u2500\u2500 main.cpp # \u6e38\u620f\u4e3b\u7a0b\u5e8f\u251c\u2500\u2500 game_config.h # \u6e38\u620f\u914d\u7f6e\u6587\u4ef6\u251c\u2500\u2500 CMakeLi","og_url":"https:\/\/www.wsisp.com\/helps\/59431.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-01-13T13:09:29+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"4 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/59431.html","url":"https:\/\/www.wsisp.com\/helps\/59431.html","name":"\u6211\u5c06\u667a\u53d6\u751f\u8fb0\u7eb2\u6539\u7f16\u6210\u6e38\u620f\uff0c\u6e38\u620f\u60c5\u8282\u5192\u9669\uff0c\u523a\u6fc0\uff0c\u968f\u673a\u5e94\u53d8\uff0c\u4e2a\u6027\u9c9c\u660e\uff0c\u503c\u5f97\u73a9\u5bb6\u4e00\u8bd5\uff01 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-01-13T13:09:29+00:00","dateModified":"2026-01-13T13:09:29+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/59431.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/59431.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/59431.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"\u6211\u5c06\u667a\u53d6\u751f\u8fb0\u7eb2\u6539\u7f16\u6210\u6e38\u620f\uff0c\u6e38\u620f\u60c5\u8282\u5192\u9669\uff0c\u523a\u6fc0\uff0c\u968f\u673a\u5e94\u53d8\uff0c\u4e2a\u6027\u9c9c\u660e\uff0c\u503c\u5f97\u73a9\u5bb6\u4e00\u8bd5\uff01"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/59431","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=59431"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/59431\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=59431"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=59431"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=59431"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=59431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}