极点宏观|Financial Cloud Cloud · 挑战
周末创意挑战:领导力卡牌游戏
周末创意挑战:领导力卡牌游戏
#创意表达
在线应用程序: https://vertexmacro.com/cloud_club/demo/leadership_card_game/index.html
GitHub 代码仓库: https://github.com/dchan-dev/Leadership-Card-Game
愿景与应用程序功能
领导力卡牌游戏是一款基于浏览器的创意引导工具,能够把棘手的职场对话转化为结构化的卡牌游戏体验。我希望打造一个比参考页面更有表现力、也比领导建议清单更实用的工具。最终成果是一套互动式牌组,可帮助团队、社区负责人、开发者与活动引导者练习在情况变得模糊、充满权力博弈、紧张或事关重大结果时,实际可以说些什么。
应用程序包含600张领导力练习卡。每张卡片都是一个小型创意作品,包含编号、标题、角色、领导原则、技能评级、对话句、附带影响、优势,以及与其他卡片搭配使用的建议。卡片不只是告诉玩家要“改善沟通”,而是提供可以直接说出口、调整、质疑与讨论的语句。因此,应用程序的输出兼具创意与实用性,可针对真实的领导情境产生提示组合、对话、角色扮演、反思与协作式故事叙述。
卡片分为三个主要范围。第001至150张聚焦社区经理角色,第151至300张聚焦开发者角色,第301至600张则涵盖高级情境。高级牌组包括高管冲突、愤怒的利益相关者、公开问责、无法安全表达异议、不可逆转的决策、信任修复,以及困难的跨职能协作等挑战。一至五星的技能指标可帮助玩家了解每张卡片的相对使用难度。
网站提供两种互补的内容使用方式。在浏览模式中,用户可以搜索标题、对话句、原则、优势及附带影响。卡片可按角色或编号范围筛选,也可按编号或技能等级排序。精简视图让大型牌组更容易快速浏览,完整卡片选项则会显示所有字段。选择卡片后,会打开聚焦的详细信息视图。
在游戏模式中,二至六位玩家可以输入姓名,并选择基础或高级牌组。每位玩家会随机获得三张卡片。当前发言者可以讨论卡片或根据卡片采取行动,随后切换至下一位发言者,并通过重新发牌开始新回合。这种设计把静态数据集转化为社交活动。活动引导者可将其用于研讨会,团队可以借此讨论当前面对的挑战,个人也能抽取卡片,作为反思决策的写作提示。
语言可访问性也是愿景的一部分。界面可加载英语、繁体中文与简体中文的独立JSON文件。由于界面与创意内容彼此分离,因此无需重新构建应用程序,就能将牌组扩展到新的语言。
游戏方式:分步说明
本游戏可用于个人反思、小型团队对话,或由活动引导者带领的研讨会。一般流程如下:
● 打开应用程序并选择语言。 在浏览器中启动领导力卡牌游戏。使用语言选择器选择英语、繁体中文或简体中文,界面与卡片内容会切换为所选语言。
● 浏览牌组或开始游戏。 想探索特定领导情境时,请使用浏览模式。若想进行随机发牌且结构明确的团体活动,请选择开始游戏。
● 选择玩家人数。 每场游戏可有二至六位玩家。输入每位参与者的姓名,让应用程序显示个人手牌,并清楚标示当前发言者。
● 选择难度。 基础牌组包含第001至300张卡片,聚焦社区经理与开发者情境。高级牌组包含第301至600张卡片,涵盖更困难的领导与冲突情境。
● 每位玩家发三张牌。 游戏开始后,应用程序会打乱所选卡池,并向每位玩家发放三张卡片。每组手牌都提供多种处理对话的方式,而不是迫使玩家只能采用单一答案。
● 由当前玩家选择卡片。 当前发言者查看手中的三张卡片,并选择最适合真实或假设职场挑战的一张。选择后会打开完整的卡片详细信息。
● 朗读或调整对话句。 玩家可大声朗读卡片上的对话句,或根据情境自然调整。目标是练习可在真实对话中使用的语言,而不是只抽象描述领导原则。
● 讨论行动与权衡。 查看卡片上的领导原则、附带影响及优势。玩家说明自己会采取的行动、预期收益,以及必须接受的成本或风险。其他玩家可提出问题、提供证据,或描述利益相关者可能如何回应。
● 探索卡片组合。 使用卡片的搭配指南,将其与另一张卡片或领导方法连接。这能鼓励玩家形成更完整的策略,也说明困难情境通常无法仅凭一张卡片解决。
● 切换至下一位发言者。 当前玩家完成讨论后,选择下一位发言者。应用程序会轮换当前角色,让每位参与者都有贡献的机会。
● 结束回合并重新发牌。 所有玩家都发言后,选择结束回合并重新发牌。当前手牌会移至弃牌堆,回合计数增加,且每位玩家会获得三张新卡片。
● 反思发生了哪些改变。 活动结束时,讨论哪些对话句最实用、哪些附带影响最难接受,以及提出的行动是否为他人创造了可重复的机会。活动引导者可把最重要的想法记录为团队后续行动。
若要进行较短的个人体验,用户可留在浏览模式,按角色或难度筛选牌组,打开一张卡片,并针对其中的对话句、优势与附带影响撰写回应。因此,同一应用程序既可作为多人引导游戏,也可作为个人创意反思工具。
构建方式
从最小但实用的体验开始
我先从聚焦的最小可行产品入手:加载JSON文件、呈现卡片网格,并允许用户打开一张卡片查看完整详细信息。这项设计刻意保持简单。挑战鼓励开发者先让一个创意概念稳定运行,而不是过度设计整个平台。静态前端也让我无需等待复杂的部署流程,就能快速反复改进。
我使用语义化HTML、CSS与原生JavaScript构建界面。不采用前端框架是有意为之。应用程序不需要服务器端渲染,也不需要庞大的客户端依赖包。单页静态网站可保持较小的下载量、降低维护成本,并自然适配Amazon S3静态网站托管。
基本呈现功能完成后,我加入内容探索功能。客户端搜索会根据卡片编号、标题、角色、领导原则、对话句、优势、附带影响与搭配指南建立可搜索的文本值。角色与范围筛选器可让用户缩小牌组范围,而不必向后端发送请求。排序功能支持卡号升序、卡号降序,以及技能评级从高到低。JSON文件加载后,所有交互都在本地执行,因此响应十分迅速。
下一次迭代加入游戏机制。我建立了类似Fisher-Yates的洗牌算法,分离基础与高级卡池,并实现抽牌堆与弃牌堆。每位玩家每回合获得三张卡片。回合结束后,当前手牌会移至弃牌堆,再发出新手牌。必要时,也可将弃牌重新洗入抽牌堆。由于挑战版本不需要账户、保存会话或实时多人同步,因此游戏状态保留在浏览器中。
分离真实数据源与发布成品
最重要的架构决策,是避免把网站存储桶中的JSON文件当作编辑数据库。网站需要容易获取且经过优化的资源,但内容工作流需要可安全更新的单独记录。因此,我使用Amazon DynamoDB作为卡片信息的权威数据源。每张卡片都以类似JSON的DynamoDB项目存储,包含稳定的卡片标识符及前端需要的字段。
按计划运行的AWS Lambda函数会从DynamoDB读取当前卡片记录,进行验证与排序,将其封装为网站所需的JSON结构,再把最新生成的文件写入S3网站存储桶。Amazon EventBridge Scheduler会按固定计划调用Lambda函数。这种方式可将内容管理与内容交付分离,同时持续为静态网站提供最新且可预测的数据文件。
这种模式很实用,因为浏览器不需要直接查询DynamoDB的权限。浏览器只会通过HTTP请求读取同一网站中的静态JSON对象。这不仅降低前端复杂度,也避免向访问者暴露数据库凭据或写入操作。
关键决策
● 使用S3提供前端。 应用程序完全由静态资源组成,因此我选择S3静态网站托管,而不是运行网站服务器。
● 使用DynamoDB存储可编辑的卡片记录。 可单独新增或更新卡片,无需手动编辑庞大的生产文件。
● 发布自动生成的快照。 Lambda将数据库记录转换为适合浏览器快速交付的版本。
● 计划发布。 EventBridge Scheduler可重复执行更新流程,并移除手动导出步骤。
● 把交互保留在浏览器中。 搜索、筛选、排序、洗牌、发牌、语言切换及对话框视图,不需要每次操作都发送请求。
● 以数据驱动方式处理本地化。 前端会将每种语言映射到各自的卡片JSON文件,让新增语言版本变得直接。
● 面向移动设备与无障碍使用进行设计。 从一开始就纳入响应式布局、清晰标签、键盘友好按钮、对话框语义、Esc键处理、易读字号及减少动态效果等设计。
挑战与解决方式
第一项挑战是牌组的规模与一致性。600张卡片包含许多重复字段,任何格式错误的记录都可能导致呈现失败或造成混淆。我通过定义一致的项目结构来处理此问题,并让Lambda导出步骤负责验证。导出流程应拒绝或报告缺少必要标识符的记录、规范化可选文本值、以确定性方式排序卡片,并生成有效的UTF-8 JSON。这在可编辑数据与公开网站之间建立了质量关卡。
第二项挑战是在不把网站改造成动态网站的情况下保持内容新鲜。静态网站成本低且可靠,但静态文件可能过时。按计划运行的Lambda任务会根据DynamoDB重新生成公开JSON快照,因此解决了这个问题。上传到固定的S3对象键,意味着前端无需知道当前使用的是哪个数据库修订版本。若要强化生产环境,可先将输出写入临时键,验证后再复制到最终键,避免访问者收到只写入一部分的内容。
第三项挑战是客户端性能。在较小型设备上呈现数百张内容丰富的卡片,可能带来较高负担。我保持卡片标记精简、在内存中执行筛选、只呈现当前结果集,并使用对话框显示展开的详细信息,而不是默认把所有字段放在每张卡片中。精简与完整卡片切换功能让用户可自行控制信息密度。
第四项挑战与AWS权限有关。Lambda函数需要读取DynamoDB表,并将特定生成对象写入S3,但不应拥有广泛的管理权限。我使用专用IAM执行角色及最小权限策略,将权限限制在必要的表与存储桶前缀。Lambda运行期间生成的CloudWatch Logs,可为导出数量、验证失败与上传错误提供审计轨迹。
最后,创意设计本身也是一项挑战。卡片必须足够精炼,适合在实时对话中使用,同时仍要呈现权衡。对话句、附带影响、优势与卡片搭配建议的组合,可避免建议流于单一方面,并邀请玩家同时思考行动与后果。
使用的AWS服务与架构概览
Amazon S3
Amazon S3用于托管index.html、样式表、浏览器端JavaScript、图片,以及自动生成的多语言卡片文件,例如card_en.json。S3静态网站托管提供公开入口点,并交付浏览器请求的资源。该存储桶专门用于内容交付,而不是内容编辑。
Amazon DynamoDB
DynamoDB将每张卡片存储为独立项目。稳定的标识符作为分区键,其他属性则存储编号、标题、角色、领导原则、对话句、附带影响、优势、搭配指南与技能评级。此模型支持指定项目更新,也能在未来加入状态、语言、牌组版本或审查元数据。
AWS Lambda
用于导出的Lambda函数会读取表、在扫描或查询时处理分页、验证记录、进行排序、组合预期的JSON有效负载,并将最新输出写入S3。它也会记录导出的卡片数量及任何验证问题。将此转换任务放在Lambda中,意味着不需要持续运行服务器。
Amazon EventBridge Scheduler
EventBridge Scheduler会按照指定间隔调用导出函数。计划可设置为每小时、每日运行,或按内容更新频率调整。由于卡片变更不需要在一秒内发布,因此计划快照非常适合此场景。
AWS Identity and Access Management
IAM可安全连接各项服务。调度器只获得调用导出Lambda函数的权限。Lambda执行角色则获得特定DynamoDB表的读取权限、生成S3对象前缀的写入权限,以及创建运行日志的权限。
Amazon CloudWatch
Lambda会将运行日志写入CloudWatch Logs。这些记录可帮助诊断记录缺失、权限问题、JSON生成失败及S3上传失败。还可加入指标与警报,通知函数错误或重复调用失败。
架构图
请求与发布流程
● 在DynamoDB中新增或更新卡片。
● EventBridge Scheduler在设定时间调用Lambda导出函数。
● Lambda读取所有符合条件的卡片项目,必要时包括其他分页的结果。
● 函数验证必填字段,并建立已排序的JSON文档。
● Lambda使用前端预期的对象键,将生成的文件上传到S3网站存储桶。
● 访问者打开网站,并从S3获取index.html。
● 浏览器从同一存储桶获取当前语言文件,例如card_en.json。
● JavaScript呈现牌组,后续游戏交互则在本地执行。
此架构提供清晰的职责分离。DynamoDB针对记录维护进行优化;Lambda负责转换与发布;S3针对低成本静态内容交付进行优化;EventBridge Scheduler控制内容新鲜度;浏览器则提供互动式创意体验。
学习心得
最大的心得是,创意应用程序不一定需要复杂的后端。这个项目的创意价值,来自卡片内容与围绕卡片建立的互动关系。只要内容模型与用户流程经过仔细设计,轻量级静态前端仍能支持丰富的活动。
我也学会把自动生成的JSON视为发布成品,而不是真实数据源。在这个项目之前,每次牌组变更时,手动上传大型JSON文件可能是很直观的做法。将卡片单独存储在DynamoDB中并生成干净的快照,则可建立更安全的工作流程。它支持验证、可预测排序、自动更新及未来的编辑工具,同时不会让公开应用程序直接向数据库发送请求。
这项挑战加深了我对计划式无服务器工作负载的理解。Lambda常被用于API后端示例,但本项目将它作为可靠的发布工作器。EventBridge Scheduler负责运行时机,Lambda执行范围明确的转换任务,S3则接收结果。这种简单模式也适用于目录、信息流、报告、配置快照及本地化内容包。
我也积累了IAM权限边界的实践经验。早期原型很容易通过广泛授权而顺利运行,但当每项权限都映射到明确的数据流时,最终架构会更清晰。调度器调用一个函数;函数读取一个表、写入一个存储桶前缀,并输出日志。思考这些边界,不仅提高安全性,也加深我对系统的理解。
在前端方面,我体会到渐进增加复杂度的价值。我并未一开始就实现支持六位玩家的多语言游戏,而是先让一张卡片正确呈现。随后加入搜索与筛选,再加入详细信息视图、语言切换、完整牌组显示,最后才完成多人回合流程。每一层功能都重复使用相同的规范化卡片对象,因此应用程序能够持续成长,而无需重写。
我也了解到,无障碍与响应式设计是创意约束,而不是事后整理工作。只能使用鼠标操作,或只能在台式电脑上运行的卡牌游戏,会排除许多可能的研讨会场景。响应式单栏布局、适合触控的目标区域、键盘操作、清晰且可聚焦的控件、对话框标签及减少动态效果支持,都让体验更具适应性。
最重要的是,我理解到内容结构如何塑造对话。“对话句”让建议变得具体;“附带影响”承认领导行动有其成本;“优势”说明可能的回报;“搭配”字段则鼓励玩家连接不同想法,而不是把每张卡片视为孤立规则。技术负责交付牌组,但真正让应用程序发挥作用的,是这组反复出现的创意结构。
应用程序链接
请从此处体验已部署的应用程序:
在线应用程序: https://vertexmacro.com/cloud_club/demo/leadership_card_game/index.html
在线应用程序是主要的提交链接。它展示可搜索的卡片库、卡片详细视图、语言切换、基础与高级牌组、玩家设置、随机发牌、发言者轮换及新回合流程。
结语
领导力卡牌游戏起源于一个周末创意:把领导指南转化为人们可以真正说出口并实际游玩的卡片。保持第一个版本聚焦,让我能把精力投入体验,而不是基础设施。S3提供静态网站,DynamoDB存储结构化卡片记录,Lambda将这些记录转换为最新且可供网站使用的JSON,EventBridge Scheduler则保持自动发布。
项目也保留了成长空间。未来版本可加入需要身份验证的编辑界面、草稿与已发布状态、牌组版本控制、其他语言、尊重玩家隐私的使用分析,或使用CloudFront提供HTTPS交付与全球缓存。核心架构无需因这些新增功能而改变。重要的基础已经存在:清晰的权威数据源、自动化发布路径、快速的静态体验,以及帮助人们练习更好对话的创意格式。
如果玩家抽出一张卡片后,能找到更周全的方法处理困难讨论,这套应用程序就已经实现目标。如果活动引导者使用这副牌,帮助团队为他人创造可重复的机会,那么它所做到的就更多了。