1. 实际应用场景描述

 

在剧本杀游戏中,主持人(DM)经常遇到以下问题:

 

- 玩家人数不确定,导致角色分配困难

- 不同剧本类型(推理、情感、阵营、欢乐)对角色性格、技能要求不同

- 玩家偏好不明确,容易出现“角色不适合玩家性格”的情况,影响游戏体验

- 新手玩家不知道自己适合什么角色,选角耗时长

 

剧本杀角色匹配工具的目标是:

 

- 输入玩家人数和剧本类型

- 自动推荐适配角色,并标注角色特点

- 帮助玩家快速选角,提升游戏沉浸感和流畅度

 

2. 痛点分析

 

1. 人数与角色数不匹配 → 需要动态调整推荐

2. 剧本类型与角色特性关联复杂 → 人工记忆难

3. 玩家偏好多样 → 需要多维度匹配(性格、推理能力、表演欲等)

4. 选角过程冗长 → 影响开局氛围

 

3. 核心逻辑讲解

 

处理流程:

 

1. 输入:玩家人数、剧本类型(推理/情感/阵营/欢乐)

2. 角色库:预设角色(含剧本类型适配度、性格标签、技能特点)

3. 匹配算法:

   - 根据剧本类型筛选高适配角色

   - 按人数截取推荐列表

   - 标注每个角色的特点(性格、技能、适合人群)

4. 输出:推荐角色列表 + 特点说明

 

数据结构:

 

"roles":角色字典(角色名 → 属性)

"script_types":剧本类型与角色适配度映射

"recommendations":最终推荐列表

 

4. Python 模块化代码

 

文件结构

 

murder_mystery_matcher/

├── data.py # 角色库与剧本类型数据

├── matcher.py # 匹配逻辑

├── utils.py # 工具函数

└── README.md # 使用说明

 

"data.py"

 

# data.py

# 角色库:角色名 -> {剧本类型适配度, 性格标签, 技能特点, 适合人群}

ROLES = {

    "侦探": {"types": ["推理"], "traits": ["冷静", "观察力强"], "skills": "线索分析", "fit_for": "逻辑思维强的玩家"},

    "女巫": {"types": ["阵营", "欢乐"], "traits": ["神秘", "掌控全局"], "skills": "特殊能力", "fit_for": "喜欢策略的玩家"},

    "恋人": {"types": ["情感"], "traits": ["感性", "深情"], "skills": "情感演绎", "fit_for": "表演欲强的玩家"},

    "杀手": {"types": ["阵营", "推理"], "traits": ["冷静", "果断"], "skills": "隐藏身份", "fit_for": "喜欢潜伏的玩家"},

    "富商": {"types": ["欢乐", "阵营"], "traits": ["自信", "幽默"], "skills": "资源调配", "fit_for": "外向型玩家"},

    "记者": {"types": ["推理", "情感"], "traits": ["好奇", "善于提问"], "skills": "信息搜集", "fit_for": "喜欢交流的玩家"},

    "医生": {"types": ["推理", "情感"], "traits": ["细心", "善良"], "skills": "急救知识", "fit_for": "稳重型玩家"},

    "警察": {"types": ["推理", "阵营"], "traits": ["正义", "果断"], "skills": "审讯", "fit_for": "领导力强的玩家"}

}

 

# 剧本类型列表

SCRIPT_TYPES = ["推理", "情感", "阵营", "欢乐"]

 

"utils.py"

 

# utils.py

def normalize_input(text):

    """标准化输入"""

    return text.strip().lower()

 

def validate_number_input(value, min_val, max_val):

    """验证数字输入范围"""

    try:

        num = int(value)

        if min_val <= num <= max_val:

            return num

        return None

    except ValueError:

        return None

 

"matcher.py"

 

# matcher.py

from data import ROLES, SCRIPT_TYPES

from utils import normalize_input, validate_number_input

 

class MurderMysteryMatcher:

    def __init__(self):

        self.roles = ROLES

        self.script_types = SCRIPT_TYPES

 

    def recommend_roles(self, player_count, script_type):

        """推荐角色"""

        script_type = normalize_input(script_type)

        if script_type not in [t.lower() for t in self.script_types]:

            return [], f"不支持的剧本类型: {script_type}"

 

        # 筛选适配角色

        suitable_roles = []

        for role, attr in self.roles.items():

            if script_type in [t.lower() for t in attr["types"]]:

                suitable_roles.append({

                    "name": role,

                    "traits": attr["traits"],

                    "skills": attr["skills"],

                    "fit_for": attr["fit_for"]

                })

 

        # 按人数截取

        recommended = suitable_roles[:player_count]

        return recommended, None

 

    def print_recommendations(self, recommendations):

        """打印推荐结果"""

        if not recommendations:

            print("没有找到合适的角色推荐。")

            return

        print("\n=== 推荐角色列表 ===")

        for idx, role in enumerate(recommendations, 1):

            print(f"{idx}. {role['name']}")

            print(f" 性格: {', '.join(role['traits'])}")

            print(f" 技能: {role['skills']}")

            print(f" 适合: {role['fit_for']}\n")

 

# 示例

if __name__ == "__main__":

    matcher = MurderMysteryMatcher()

    while True:

        try:

            num_input = input("请输入玩家人数 (2-8): ")

            player_count = validate_number_input(num_input, 2, 8)

            if player_count is None:

                print("人数必须在2-8之间,请重新输入。")

                continue

            script_type = input("请输入剧本类型 (推理/情感/阵营/欢乐): ")

            recs, err = matcher.recommend_roles(player_count, script_type)

            if err:

                print(err)

            else:

                matcher.print_recommendations(recs)

            break

        except KeyboardInterrupt:

            print("\n退出程序。")

            break

 

5. README.md

 

# 剧本杀角色匹配工具

 

## 简介

本工具根据玩家人数和剧本类型,自动推荐适配角色并标注特点,帮助玩家快速选角,提升剧本杀游戏体验。

 

## 使用方法

1. 安装 Python 3.x

2. 下载本项目文件

3. 运行:

 

bash

 

python matcher.py

 

4. 输入玩家人数和剧本类型,查看推荐角色

 

## 功能特点

- 支持多种剧本类型

- 角色特点标注

- 人数自适应推荐

- 简单易用

 

## 适用场景

剧本杀主持人、玩家、桌游店

 

6. 使用说明

 

1. 运行 

"matcher.py"

2. 输入玩家人数(2-8人)

3. 输入剧本类型(推理/情感/阵营/欢乐)

4. 查看推荐角色及其特点

5. 可根据推荐结果进行选角

 

7. 核心知识点卡片

 

知识点 说明

数据建模 角色属性结构化存储

输入验证 数字范围与类型检查

匹配算法 基于剧本类型的筛选

列表切片 按人数截取推荐

模块化设计 数据、逻辑、工具分离

用户交互 命令行输入输出

 

8. 总结

 

本工具实现了剧本杀角色的快速匹配,解决了人数不确定、剧本类型与角色特性关联复杂、选角耗时长等痛点。

 

它的价值:

 

- 提升效率:秒级生成推荐

- 增强体验:角色特点明确,选角更精准

- 可扩展:可加入玩家偏好问卷、AI 推荐等

 

后续可扩展方向:

 

- 增加玩家偏好问卷,做个性化推荐

- 接入图形界面(Tkinter/Web)

- 加入角色图片与背景故事展示

- 支持自定义角色库

 

这个工具是高绩效创新团队在游戏化活动设计中的实用案例,能帮助团队提升活动组织效率与参与者满意度。

 

如果你愿意,可以下一步加上 图形界面(Tkinter) 和 玩家偏好问卷,让匹配更精准、体验更好。

 

利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐