{"skill":{"slug":"mud-adventure","displayName":"mud-adventure","summary":"文字冒险型 MUD 游戏创作助手。用于快速搭建文字冒险游戏的世界观、地图、NPC、物品、任务与对话树。当用户说\"做 MUD\"、\"写文字冒险\"、\"创建mud游戏\"、\"搭建mud世界\"时触发。","description":"---\nname: mud-adventure\ndescription: 文字冒险型 MUD 游戏创作助手。用于快速搭建文字冒险游戏的世界观、地图、NPC、物品、任务与对话树。当用户说\"做 MUD\"、\"写文字冒险\"、\"创建mud游戏\"、\"搭建mud世界\"时触发。\n---\n\n# MUD Adventure Skill\n\n文字冒险型 MUD 游戏创作技能包。帮你从零构建可运行的单文件 Python MUD 游戏。\n\n## 快速开始\n\n游戏核心只需一个 Python 文件（`game.py`），运行方式：\n\n```bash\npython game.py\n```\n\n首次使用，按以下流程构建游戏：\n\n```\n世界观设计 → 地图建模 → 人物/物品 → 对话/任务 → 合并到 game.py\n```\n\n详细设计指南见 `references/world-design.md`（世界观、故事结构）\n详细系统指南见 `references/game-systems.md`（战斗、物品、任务）\n示例代码见 `references/examples.md`\n\n## 默认游戏模板\n\n以下模板可直接复制到 `game.py` 运行，内含 3 个房间、1 个 NPC、1 个战斗场景：\n\n```python\nimport random\n\n# ============ 世界设定 ============\nTITLE = \"迷雾森林\"\nAUTHOR = \"石头龙虾二号\"\n\n# ============ 房间定义 ============\nrooms = {\n    \"入口\": {\n        \"name\": \"森林入口\",\n        \"desc\": \"你站在一棵巨大的古橡树下，晨雾弥漫，四周静得只能听见自己的呼吸。\",\n        \"exits\": {\"北\": \"大厅\", \"东\": \"小屋\"},\n        \"items\": [],\n        \"npcs\": [],\n    },\n    \"大厅\": {\n        \"name\": \"迷雾大厅\",\n        \"desc\": \"雾气中隐约可见一座石制大厅，墙壁上刻着模糊的文字。\",\n        \"exits\": {\"南\": \"入口\", \"北\": \"宝藏室\"},\n        \"items\": [\"古老的钥匙\"],\n        \"npcs\": [\"守卫\"],\n    },\n    \"小屋\": {\n        \"name\": \"林间小屋\",\n        \"desc\": \"一间破旧的小木屋，窗户透出微弱的烛光。\",\n        \"exits\": {\"西\": \"入口\"},\n        \"items\": [\"治疗药水\"],\n        \"npcs\": [\"隐士\"],\n    },\n    \"宝藏室\": {\n        \"name\": \"隐藏宝藏室\",\n        \"desc\": \"你推开门，金光闪闪的宝物堆满了整个房间！\",\n        \"exits\": {\"南\": \"大厅\"},\n        \"items\": [\"黄金剑\"],\n        \"npcs\": [],\n        \"locked\": True,\n    },\n}\n\n# ============ NPC 定义 ============\nnpcs = {\n    \"守卫\": {\n        \"name\": \"石甲守卫\",\n        \"desc\": \"一个身披石甲的沉默战士，目光警惕地盯着你。\",\n        \"hp\": 30,\n        \"attack\": 8,\n        \"dialogue\": {\n            \"你好\": \"守卫冷哼一声：'想过去？先证明你的实力！'\",\n            \"挑战\": \"守卫举起巨剑：'那就来吧！'\",\n            \"离开\": \"守卫退回阴影中，不再说话。\",\n        },\n        \"hostile\": True,\n    },\n    \"隐士\": {\n        \"name\": \"森林隐士\",\n        \"desc\": \"一位白发苍苍的老人，正对着烛火沉思。\",\n        \"hp\": 20,\n        \"attack\": 0,\n        \"dialogue\": {\n            \"你好\": \"隐士微微一笑：'旅人，这片森林藏着许多秘密。'\",\n            \"帮助\": \"隐士点点头：'在大厅的墙壁上，有打开宝藏室的提示。'\",\n            \"离开\": \"隐士挥挥手：'愿森林保佑你。'\",\n        },\n        \"hostile\": False,\n    },\n}\n\n# ============ 物品定义 ============\nitems = {\n    \"古老的钥匙\": {\"name\": \"古老的钥匙\", \"desc\": \"一把生锈但依然坚固的钥匙。\", \"effect\": None},\n    \"治疗药水\": {\"name\": \"治疗药水\", \"desc\": \"散发淡蓝色光芒的恢复药剂。\", \"effect\": \"heal\"},\n    \"黄金剑\": {\"name\": \"黄金剑\", \"desc\": \"传说中的宝剑，剑身流淌着金色的光芒。\", \"effect\": \"power\"},\n}\n\n# ============ 玩家状态 ============\nplayer = {\n    \"hp\": 100,\n    \"max_hp\": 100,\n    \"attack\": 10,\n    \"inventory\": [],\n    \"location\": \"入口\",\n    \"flags\": {\"大厅_交谈过\": False, \"击败守卫\": False},\n}\n\n# ============ 核心函数 ============\ndef print_intro():\n    print(f\"\\n{'='*50}\")\n    print(f\"  🎮 {TITLE}\")\n    print(f\"  作者：{AUTHOR}\")\n    print(f\"{'='*50}\\n\")\n    print(\"输入 'help' 查看所有命令。\\n\")\n\ndef show_room():\n    room = rooms[player[\"location\"]]\n    locked_msg = \" [门被锁住了]\" if room.get(\"locked\") and not player[\"flags\"].get(\"有钥匙\") else \"\"\n    print(f\"\\n📍 【{room['name']}】{locked_msg}\")\n    print(f\"  {room['desc']}\")\n    exits = \"、\".join(room[\"exits\"].keys())\n    print(f\"  出口：{exits}\")\n    if room.get(\"items\"):\n        print(f\"  物品：{', '.join(room['items'])}\")\n    if room.get(\"npcs\"):\n        print(f\"  NPC：{', '.join(room['npcs'])}\")\n\ndef show_help():\n    print(\"\"\"\n  help     - 显示此帮助\n  look     - 环顾四周\n  go <方向> - 向指定方向移动（北/南/东/西/前/后）\n  look <物品>- 查看物品\n  take <物品> - 拾取物品\n  inventory - 查看背包\n  use <物品> - 使用物品\n  talk <NPC> - 与NPC交谈\n  attack <NPC>- 攻击敌人\n  status    - 查看角色状态\n  quit      - 退出游戏\n  \"\"\")\n\ndef move(direction):\n    room = rooms[player[\"location\"]]\n    if direction not in room[\"exits\"]:\n        print(\"  你无法往那个方向走。\")\n        return\n    target = room[\"exits\"][direction]\n    if rooms[target].get(\"locked\") and not player[\"flags\"].get(\"有钥匙\"):\n        print(f\"  {rooms[target]['name']}的门是锁着的。你需要找到钥匙。\")\n        return\n    player[\"location\"] = target\n    show_room()\n\ndef take_item(item_name):\n    room = rooms[player[\"location\"]]\n    for i, item in enumerate(room.get(\"items\", [])):\n        if item_name in item or item in item_name:\n            player[\"inventory\"].append(item)\n            room[\"items\"].pop(i)\n            if item == \"古老的钥匙\":\n                player[\"flags\"][\"有钥匙\"] = True\n            print(f\"  你拾取了「{item}」。\")\n            return\n    print(\"  这里没有这个东西。\")\n\ndef use_item(item_name):\n    for i, item in enumerate(player[\"inventory\"]):\n        if item_name in item or item in item_name:\n            if items[item][\"effect\"] == \"heal\":\n                heal = min(30, player[\"max_hp\"] - player[\"hp\"])\n                player[\"hp\"] += heal\n                player[\"inventory\"].pop(i)\n                print(f\"  你喝下了「{item}」，恢复了 {heal} 点生命！\")\n            elif items[item][\"effect\"] == \"power\":\n                player[\"attack\"] += 5\n                player[\"inventory\"].pop(i)\n                print(f\"  你装备了「{item}」，攻击力提升！\")\n            else:\n                print(f\"  你使用了「{item}」。\")\n            return\n    print(\"  你的背包里没有这个东西。\")\n\ndef talk_to(target):\n    room = rooms[player[\"location\"]]\n    if target not in room.get(\"npcs\", []):\n        print(\"  这里没有这个人。\")\n        return\n    npc = npcs[target]\n    print(f\"\\n  👤 {npc['name']}：{npc['desc']}\")\n    print(\"\\n  你想说什么？（输入选项前的关键词）\")\n    for key in npc[\"dialogue\"]:\n        print(f\"    - {key}\")\n    choice = input(\"\\n  > \").strip()\n    if choice in npc[\"dialogue\"]:\n        print(f\"\\n  {npc['dialogue'][choice]}\")\n        if choice == \"帮助\" and target == \"隐士\":\n            player[\"flags\"][\"大厅_交谈过\"] = True\n    else:\n        print(\"  对方没有回应……\")\n\ndef combat(enemy_id):\n    if enemy_id not in npcs:\n        print(\"  这里没有这个敌人。\")\n        return\n    enemy = npcs[enemy_id]\n    print(f\"\\n  ⚔️  你向 {enemy['name']} 发起了战斗！\")\n    while enemy[\"hp\"] > 0 and player[\"hp\"] > 0:\n        dmg_to_enemy = random.randint(max(1, player[\"attack\"]-3), player[\"attack\"]+3)\n        enemy[\"hp\"] -= dmg_to_enemy\n        print(f\"  你造成了 {dmg_to_enemy} 点伤害。\")\n        if enemy[\"hp\"] <= 0:\n            print(f\"\\n  🎉 你击败了 {enemy['name']}！\")\n            player[\"flags\"][\"击败守卫\"] = True\n            rooms[player[\"location\"]][\"npcs\"].remove(enemy_id)\n            if \"守卫\" in enemy_id:\n                rooms[\"宝藏室\"][\"locked\"] = False\n            return\n        dmg_to_player = random.randint(max(1, enemy[\"attack\"]-2), enemy[\"attack\"]+2)\n        player[\"hp\"] -= dmg_to_player\n        print(f\"  {enemy['name']} 对你造成了 {dmg_to_player} 点伤害！\")\n        print(f\"  你的生命值：{player['hp']}/{player['max_hp']}\")\n        if player[\"hp\"] <= 0:\n            print(\"\\n  💀 你倒下了……游戏结束。\")\n            return\n    print(f\"\\n  敌人生命值：{enemy['hp']}\")\n\ndef main():\n    print_intro()\n    show_room()\n    while True:\n        cmd = input(\"\\n> \").strip()\n        if not cmd:\n            continue\n        parts = cmd.split(maxsplit=1)\n        verb = parts[0].lower()\n        arg = parts[1] if len(parts) > 1 else \"\"\n        if verb in (\"q\", \"quit\", \"exit\"):\n            print(\"\\n  再见，旅人！👋\\n\")\n            break\n        elif verb in (\"help\", \"h\", \"?\"):\n            show_help()\n        elif verb in (\"look\", \"l\"):\n            if arg:\n                for item in rooms[player[\"location\"]].get(\"items\", []):\n                    if arg in item:\n                        print(f\"  {items[item]['desc']}\")\n                        break\n                else:\n                    print(\"  你没有看到这个东西。\")\n            else:\n                show_room()\n        elif verb in (\"go\", \"walk\", \"移动\", \"走\"):\n            move(arg)\n        elif verb in (\"n\", \"s\", \"e\", \"w\", \"north\", \"south\", \"east\", \"west\", \"北\", \"南\", \"东\", \"西\"):\n            dir_map = {\"n\":\"北\",\"s\":\"南\",\"e\":\"东\",\"w\":\"西\",\"north\":\"北\",\"south\":\"南\",\"east\":\"东\",\"west\":\"西\"}\n            move(dir_map.get(verb, verb))\n        elif verb in (\"take\", \"get\", \"捡\", \"拿\"):\n            take_item(arg)\n        elif verb in (\"inv\", \"inventory\", \"i\", \"背包\", \"物品\"):\n            if player[\"inventory\"]:\n                print(\"  背包：\" + \"、\".join(player[\"inventory\"]))\n            else:\n                print(\"  背包是空的。\")\n        elif verb in (\"use\", \"use\", \"使用\"):\n            use_item(arg)\n        elif verb in (\"talk\", \"chat\", \"说\", \"谈\"):\n            talk_to(arg if arg else input(\"  和谁交谈？> \").strip())\n        elif verb in (\"attack\", \"kill\", \"打\", \"攻击\", \"fight\"):\n            room_npcs = rooms[player[\"location\"]].get(\"npcs\", [])\n            if not room_npcs:\n                print(\"  这里没有可以攻击的目标。\")\n            elif len(room_npcs) == 1:\n                combat(room_npcs[0])\n            else:\n                combat(arg if arg else input(\"  攻击谁？> \").strip())\n        elif verb in (\"status\", \"sta\", \"状态\"):\n            print(f\"  HP：{player['hp']}/{player['max_hp']} | 攻击：{player['attack']}\")\n\nif __name__ == \"__main__\":\n    main()\n```\n\n## 扩展指南\n\n### 添加新房间\n在 `rooms` 字典中新增键值对，定义 `name`、`desc`、`exits`、`items`、`npcs`。\n\n### 添加新 NPC\n在 `npcs` 字典中定义，设置 `name`、`desc`、`hp`、`attack`、`dialogue`、`hostile`。\n\n### 添加新物品\n在 `items` 字典中定义，设置 `name`、`desc`、`effect`（None/heal/power/custom）。\n\n### 添加战斗系统\n参考 `references/game-systems.md` 中的战斗系统设计，可扩展：经验值、等级、怪物掉落、魔法技能。\n\n### 添加任务系统\n参考 `references/game-systems.md` 中的任务系统，用 `player[\"flags\"]` 跟踪任务进度。\n","topics":["游戏","创作"],"tags":{"chinese":"1.0.0","game":"1.0.0","latest":"1.0.0","mud":"1.0.0","text-adventure":"1.0.0","wuxia":"1.0.0"},"stats":{"comments":0,"downloads":405,"installsAllTime":16,"installsCurrent":1,"stars":0,"versions":1},"createdAt":1774405378879,"updatedAt":1778492171908},"latestVersion":{"version":"1.0.0","createdAt":1774405378879,"changelog":"Initial release: Gu Long style wuxia MUD game builder with world design guide, game systems reference, and playable template.","license":"MIT-0"},"metadata":null,"owner":{"handle":"weistiger","userId":"s179943dt1sesa833xm2xtd5vn83jagt","displayName":"weistiger","image":"https://avatars.githubusercontent.com/u/13916939?v=4"},"moderation":null}