【游戏设计原理】21 - 解谜游戏的设计

你想象一下,刚坐下准备玩游戏,想着“今天得挑战一下我的智商极限!”可结果碰上一个谜题,傻眼了,心里默念:“这啥玩意儿?这游戏是在玩我吗?”如果这个谜题太简单了,你可能会开始怀疑自己智商正常不正常;要是又太难,那你可能会忍不住把手机扔一边,嘀咕:“这游戏是不是不给我活路?”
一个好的解谜游戏就得让玩家既不觉得自己是天才,也不至于被难题搞得怀疑人生。谜题的难度得合适,不能让你觉得“一秒钟就解了”,也不能让你卡得喘不过气。最重要的是,谜题要考验你的脑袋,不是靠“随便点点,试试运气”解决的那种低级操作。
而且,最关键的是,谜题得告诉你:目标是什么? 你得清楚自己要做啥,不然你就会觉得“这游戏到底是在玩我,还是我被它玩了?”这种感觉。
怎么在游戏设计中用上这个原理
- 难度适中,不能太简单也不能太难
游戏的谜题难度得循序渐进,不可能一上来就让玩家觉得“哎呦,咋这么简单啊,我都能瞎猜”。如果一开始就简单的让人想打人,那就不行。关卡得有点挑战,能让玩家有种“哇,难度提升了,但我还能搞定”的感觉。 - 面包屑式引导,给玩家点线索
面包屑是什么?就像是《哈利波特》里的赫敏,时不时给你丢点线索,告诉你该往哪个方向走。游戏中,可以通过小提示慢慢引导玩家,不至于让他们觉得“这到底是啥鬼?”给个小线索,能让玩家自己慢慢发现谜题的解法。 - 智慧为主,不是蛮力
“这关能过吗?”“乱点几下试试看,能行就行。”这种操作方式绝对不适合解谜游戏。好的谜题要让玩家动脑筋,用智慧去解决,而不是靠乱试。游戏要设计得让玩家明白,解决问题靠的是聪明才智,而不是“死磕”或者“碰运气”。 - 目标明确,不能搞不清楚
设计谜题时,给玩家一个明确的目标——“该做啥才行”。不能让玩家一直懵逼,想:“我是不是漏了什么线索?我该做啥?”这样太不爽了。目标得清晰,玩家知道“我得干这个,才能过关”。 - 公平和确定性
解谜游戏可不能随便让你猜。谜题的答案应该是确定的,玩家只要按照正确的方法解决,结果就该是一样的。而不是“今天好运解了,明天坏运就过不去了”这种随机因素。得有规律可循,让玩家知道“只要做对了就能过关”。
小结
设计解谜游戏时,难度要适中,让玩家既能挑战自我,又不至于卡住放弃;要有面包屑式的引导,让玩家逐步获得线索,避免迷失方向;谜题的解答要靠智慧而非“碰运气”;目标明确,让玩家知道自己要做什么,避免困惑;公平性和确定性是必须的,让每个玩家都能通过智慧解决问题,而不是靠随机因素。这些都是设计一个既有挑战性又能让玩家享受的解谜游戏的重要因素。
原理21:解谜游戏的设计
解谜游戏(Puzzles)是游戏中很有意思的一类。设计师斯科特·金(Scott Kim)这样定义“谜题”(puzzle):“有趣的东西,并且有一个正确的解答”。这个定义尽管模糊,却至少提出了一个定义谜题的有用元素:它是有解的。而一个谜题要想达到效果,还有一些其他的要求。
一个好的谜题对它的受众而言既不能太容易,也不能太难。一个完美的谜题应该有恰到好处的难度,让玩家感到挑战,又不会因为太过困难而受挫放弃。要让一个谜题游戏做到这一点,一个好的方式就是面包屑式(breadcrumbs)的引导。这些谜题内或谜题外的提示一步一步引导用户接近答案。例如,在数独(Sudoku)或纵横填字(crossword)游戏中,随着一个一个空格被填上,玩家也就得到了对剩下的空格更多的提示,那些剩下的空格也就变得越来越好填了。在玩纵横填字时,尽管一个玩家在刚开始并不知道其中的一个单词,随着其他单词的填入,这个未知单词的其中一些字母会被陆续填上。面包屑式的引导将游戏中的线索渐进式地提供给玩家,一步一步地降低难度,接近玩家对困难的容忍度。
一个好的谜题应该需要一个聪明、智慧的解决方法,而不是通过简单的蛮力就能解决。看这个例子:“我现在想的是1到10中的一个数字。你猜是哪个?”“1?”“不是。”“2?”“不是。”“3?”“不是。”这就不是一个好的谜题。一个仅有寥寥数条错误路径的迷宫不是一个好迷宫。因此,一些小测试和谜语都不是好的谜题,因为答题者要不就知道答案,要不就不知道,没法把这些谜题分解成一步一步来进行解答。
一个谜题的产生可以是随机的,但当玩家开始解答它时,它必须是确定的。例如,一个数独题可以被随机生成,但当玩家开始解答这道题时,任何两个填了同样数字的玩家都会得到完全相同的结果。如果两个玩家在玩同一个扫雷游戏,当他们以同样的顺序点了同样的方格,他们的经历将是一样的。相反,如果两个人在打网球,当他们做了完全一样的动作,他们的经历会完全不一样。国际象棋,除非你的对手是专门为这个目的而设计的人工智能,也是不确定的。如果一个玩家走了5次相同的棋,他的5个不同对手会有5个(甚至以上)的应对方式。如果规定好确定的几步棋和一些明确的规则,我们也可以设计一个与国际象棋有关的谜题。比如一些解谜杂志中的国际象棋问题,会规定对手的走棋规则,要求在这种情况下在X回合后将死对手。
最后,一个好的谜题必须让玩家知道目标是什么,他们需要进行怎样的操作来达成这个目标。有些谜题让人困扰,就是因为玩家不知道规则。一些老的探险游戏就有这样的问题——像是二个房间里有一些元素很明显是一个谜题,但是这个谜题的目标是什么、需要操作哪些东西、如何操作这样的信息却不展示给玩家。这些“谜题”的设计师通过模糊化规则来增加解谜的难度,但是这样的谜题是不公平的。“玩家需要解决‘如何解决这个问题’的问题”只是一个自以为聪明的借口,让我们不能设计出真正有趣的谜题。
总而言之,当我们设计一个谜题时,要确保:
- 在难度上要让玩家保持在一个“心流”(参见原理38“心流”)的状态;
- 需要一个聪明、智慧的解决方法;
- 是确定的;
- 从其目标和机制上来说是明确而公平的。
相关文章:
【游戏设计原理】21 - 解谜游戏的设计
你想象一下,刚坐下准备玩游戏,想着“今天得挑战一下我的智商极限!”可结果碰上一个谜题,傻眼了,心里默念:“这啥玩意儿?这游戏是在玩我吗?”如果这个谜题太简单了,你可能…...
【漏洞复现】Wordpress GutenKit 插件 远程文件写入致RCE漏洞复现(CVE-2024-9234)
🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦 一、漏洞概述 1.1漏洞简介 漏洞名称:Wordpress GutenKit 插件 远程文件写入致RCE漏洞复现漏洞编号:CVE-2024-9234漏洞威胁等级:超危影响范围:GutenKit <= 2.1.0…...
深度学习任务简介:分类、回归和生成
深度学习任务简介:分类、回归和生成 文章目录 深度学习任务简介:分类、回归和生成一、分类任务(Classification Task)什么是分类任务?**分类任务的常见应用**分类任务的输出主要算法 二、回归任务(Regressi…...
【测试】Unittest
近期更新完毕,建议关注收藏! 目录 简介TestCaseTestSuiteTestRunnerTestLoaderFixture tips:ctrl? 可以看方法的help文档 简介 python自带的单元测试框架,也可以做自动化测试 组织多个用例去执行,用例都是用单独的目录存放的 丰…...
java 根据路径下载文件转换为MultipartFile,并且上传到服务器
直接上代码 controller层 GetMapping("/downloadAndUploadAttachment")UpdateOperationLogging(msg "根据路径下载文件转换为MultipartFile,并且上传到服务器")Operation(summary "根据路径下载文件转换为MultipartFile,并且上传到服务器", de…...
Onvif服务端开发
实现了Onvif服务端的设备搜索和RTSP流的功能。用 ONVIF Device Manager 测试工具可以成功搜索到设备和获取到RTSP流,有的路由器可能不支持239.255.255.250组播,我一开始用的电信的那种光猫路由器二合一的,一直搜不到设备,后面用So…...
【jvm】主要参数
Java 虚拟机(JVM)有许多参数用于控制其行为和性能,下面是一些 主要的 JVM 启动参数,这些参数通常分为以下几类: 内存管理相关参数 这些参数主要用来配置 JVM 的内存分配策略、堆内存、栈内存等。 -Xms 设置 JVM 启动…...
【优选算法】—移动零(双指针算法)
云边有个稻草人-CSDN博客 想当一名牛的程序员怎么能少的了练习算法呢?! 今天就立即开启一个新专栏,专干算法,提高算法能力(废柴的我也在准备蓝桥杯哈哈)—— 目录 1.【 283. 移动零 - 力扣(Lee…...
PostgreSQL标识符长度限制不能超过63字节
文章目录 问题:标识符太长会被截断分析相关源码可以尝试以下案例 问题:标识符太长会被截断 在创建表时,发现表名太长会自动被截断,导致查询表时报错了。 分析 参考:https://www.postgresql.org/docs/current/limits…...
嵌入式硬件面试题
1、请问什么是通孔、盲孔和埋孔?孔径多大可以做机械孔,孔径多小必须做激光孔?请问激光微型孔可以直接打在元件焊盘上吗,为什么? 通孔是贯穿整个PCB的过孔,盲孔是从PCB表层连接到内层的过孔,埋孔…...
深度解析 OneCode 混合编译:创新驱动的开发变革
前言 在软件开发领域,不断追求高效、灵活与强大的开发模式是永恒的主题。OneCode 作为一款引领潮流的开发工具,其混合编译特性正逐渐成为开发界瞩目的焦点。本文将深入剖析 OneCode 的混合编译机制,揭示它如何为软件开发带来前所未有的变革与…...
[文献阅读] Unsupervised Deep Embedding for Clustering Analysis (无监督的深度嵌入式聚类)
文章目录 Abstract:摘要聚类深度聚类 KL散度深度嵌入式聚类(DEC)KL散度聚类软分配(soft assignment)KL散度损失训练编码器的初始化聚类中心的初始化 实验评估总结 Abstract: This week I read Unsupervised Deep Embedding for Clustering Analysis .It…...
ajax中get和post的区别,datatype返回的数据类型有哪些?web开发中数据提交的几种方式,有什么区别。
在 Web 开发中,GET 和 POST 是两种常见的 HTTP 请求方法,它们有一些显著的区别。此外,datatype 参数在 jQuery 的 ajax() 请求中指定了预期的响应数据类型。接下来,我会详细解释这些问题。 1. GET 和 POST 请求的区别 GET 请求 和…...
网络七层杀伤链
声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&…...
GAN网络详解及涨点大全总结(源码)
(需要源码请私信或评论) GAN原理 GAN的基本原理建立在 生成模型和判别模型的博弈过程 上。这种独特的机制使得GAN能够在复杂的分布上实现高效的无监督学习。在这个过程中,生成器G和判别器D相互竞争,最终达到一种平衡状态,在此状态下,G能够产生高质量的合成样本,而D则无…...
【自动化】Python SeleniumUtil 工具 开启开发者模式 自动安装油猴用户脚本等
【自动化】Python SeleniumUtil 工具 【Python】使用Selenium 操作浏览器 自动化测试 记录-CSDN博客文章浏览阅读58次。文章浏览阅读42次。【附件】Selenium chromedriver 驱动及浏览器下载。【附件】Selenium chromedriver 驱动及浏览器下载-CSDN博客。3.安装Chrome浏览器驱动…...
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
🗺️博客地图 📍方法一、timedatectl 命令 📍方法二、手动链接 /etc/localtime 📍方法三、修改时区变量 在 Linux 系统中,可以通过以下3种方式将系统时区修改为 CST(中国标准时间,GMT8 或称 …...
android:sharedUserId 应用进程声明介绍
背景 adb install 安装系统软件报错,原因是签名不一致,进程改变。 代码分析 AndroidManifest.xml 定义的 android:sharedUserId 应用归属进程不同,从phone切换到system。 初始配置 <manifest xmlns:android="http://schemas.android.com/apk/res/android"c…...
解锁ApplicationContext vs BeanFactory: 谁更具选择性?
目录 一、聚焦源码回顾 (一)源码分析和理解 (二)简短的回顾对比建议 二、ApplicationContext vs BeanFactory特性对比 (一)主要特性总结 (二)直接建议 三、案例简单说明 &am…...
一篇梳理清楚http请求知识点
HTTP请求是Web开发中的重要组成部分,它涉及到客户端和服务器之间的通信。掌握HTTP请求的知识点对于前端开发和后端开发都至关重要。以下是关于HTTP请求的详细梳理,结合代码进行说明。 1. HTTP请求概述 HTTP(超文本传输协议)是一个…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
