diff --git a/.vscode/settings.json b/.vscode/settings.json index c739e9819..96ed1f0d2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,8 +1,7 @@ { "editor.formatOnSave": true, "editor.codeActionsOnSave": { - "source.organizeImports": "explicit" }, - "workbench.colorTheme": "Default Dark+" + "workbench.colorTheme": "Quiet Light" } \ No newline at end of file diff --git a/static/locales/en-US/how/animated-scene.txt b/static/locales/en-US/how/animated-scene.txt index 1f38eb672..2ef86fe81 100644 --- a/static/locales/en-US/how/animated-scene.txt +++ b/static/locales/en-US/how/animated-scene.txt @@ -24,7 +24,7 @@ Scene([ ]) \ -@Scene can also take a @Group of text too, and it will wait for all its content to finish animationg. +@Scene can also take a @Group of text too, and it will wait for all its content to finish animation. \ Scene([ diff --git a/static/locales/zh-CN/how/animate-phrase.txt b/static/locales/zh-CN/how/animate-phrase.txt index 376a7df12..d43e3aa0c 100644 --- a/static/locales/zh-CN/how/animate-phrase.txt +++ b/static/locales/zh-CN/how/animate-phrase.txt @@ -1,8 +1,8 @@ 使角色动画化 -角色可以拥有静止动画,该动画在角色不动时重复。 +角色可以设置静止动画,该动画在角色不动时循环。 -例如,让我们通过旋转和移动让这只猫跳一点舞: +例如,让我们通过旋转和移动让这只猫跳跳舞: \Phrase('🐈' resting: Sequence({ 0%: Pose(rotation: 0°) diff --git a/static/locales/zh-CN/how/animated-scene.txt b/static/locales/zh-CN/how/animated-scene.txt index 90b145a04..30d33f22c 100644 --- a/static/locales/zh-CN/how/animated-scene.txt +++ b/static/locales/zh-CN/how/animated-scene.txt @@ -1,27 +1,27 @@ 创建一系列动画场景 -有时我们想讲述故事、展示歌词或使诗歌生动起来。为此,我们可以使用 @Scene 和 @Phrase 一起来展现一个序列。 +有时我们想讲述故事、展示歌词或者制作诗歌动画。为此,我们可以使用 @Scene 和 @Phrase 一起来展现一组镜头。 -例如,假设我们想要将短小的童谣“Jack be Nimble”制作成动画。我们可以做一个 @Scene 每一行都是 @Phrase ,并通过设置 @Phrase/duration 每行, @Scene 每完成一个短语就会前进。 +例如,假设我们想要将童谣“Jack be Nimble”制作成动画。我们可以做一个每一行都是 @Phrase 的 @Scence,并通过设置每行的 @Phrase/duration, 让@Scene 每完成一个短语就会推进。 \Scene([ + Phrase('杰克很灵活' duration: 1s) Phrase('杰克很敏捷' duration: 1s) - Phrase('杰克快点' duration: 1s) Phrase('杰克跳过蜡烛杆' duration: 1s) ])\ -@Scene 将等待 @Sequence 也要做。让我们让蜡烛线跳起来! +@Scene 会等待 @Sequence 完成。让我们让蜡烛线跳起来! \Scene([ + Phrase('杰克很灵活' duration: 1s) Phrase('杰克很敏捷' duration: 1s) - Phrase('杰克快点' duration: 1s) Phrase('杰克跳过蜡烛杆' entering: Sequence(bounce() 1s)) ])\ -@Scene 还可以 @Group 文本也是如此,它将等待所有内容完成动画。 +@Scene 还可以用一个 @Group 的文本,它将等待所有内容来完成动画。 \Scene([ - Group(Stack() [Phrase('杰克很敏捷') Phrase('杰克快点')] duration: 2s) + Group(Stack() [Phrase('杰克很灵活') Phrase('杰克很敏捷')] duration: 2s) Phrase('杰克跳过蜡烛杆' entering: Sequence(bounce() 1s)) ])\ diff --git a/static/locales/zh-CN/how/choose-adventure.txt b/static/locales/zh-CN/how/choose-adventure.txt index be49fb299..61a26013b 100644 --- a/static/locales/zh-CN/how/choose-adventure.txt +++ b/static/locales/zh-CN/how/choose-adventure.txt @@ -1,27 +1,52 @@ 进行文字冒险 -一种有趣的游戏是/选择你自己的冒险/游戏中,玩家需要做出一系列选择,并尝试找到通往幸福结局的方法。 +一种有趣的游戏是/选择你自己的冒险/游戏,玩家需要做出一系列选择,并尝试找到通往幸福结局的方法。 -为了制作其中之一,我们可以使用 @Structure , @Key , @Reaction , 和 @List 共同做出一系列决定,每个决定都有一组选项,如下所示: +我们可以使用 @Structure , @Key , @Reaction , 和 @List 共同做出一系列决定,每个决定都有一组选项,如下所示: -\¶这就形成了一个数据结构,用于存储选择以及它将导航到哪个决策。¶•Option(text•'' decision•#) -¶此数据结构存储了选择列表¶•Decision(options: [Option]) -¶这就是游戏内容!更改选项中的文本,营造氛围,并做出艰难的选择。添加选项来创建一个棘手的选择网络。¶ +\¶这就形成了一个数据结构,用于存储选择以及它将导航到哪个决策。 +¶•Option(text•'' decision•#) + +¶这个数据结构存储了一个列表的选项¶ +•Decision(options: [Option]) + +¶这就是游戏内容!更改选项中的文本,营造氛围,并做出艰难的选择。 +添加选项来创造错综复杂的选择。¶ decisions: [ Decision([Option('开始' 2)]) Decision([Option('左边' 3) Option('直的' 4) Option('正确的' 4)]) Decision([Option('赢' 1)]) Decision([Option('失去' 1)]) ] -¶如果密钥是数字,则将其转换为数字¶ + +¶如果按键是数字,则将其转换为数字¶ key: Key() choice: key → # -¶该值代表上述列表中的当前决策。当按下该键时,我们会执行以下操作之一。如果这个决定只有一个选择,那么我们改变当前的决定无论按下什么键,都会做出选项的目标决定。如果按下的键介于 1 和选项数量之间,那么我们将转到该选项的目标决策。否则,我们就维持当前的决定。¶ -current•#: 1 … ∆ key … decisions[current].options.length() = 1 ? decisions[current].options[1].decision ((choice ≥ 1) & (choice ≤ decisions[current].options.length())) ? decisions[current].options[choice].decision current -¶这只是将选项显示为一堆短语。您可以更改它以添加说明、动画和其他趣味内容!¶Stage([ - Group(Stack() decisions[current].options.translate(ƒ(option) Phrase(option.text))) - ])\ -这个模式看起来很复杂,但它实际上的作用是显示当前的选项集,并且每次按键改变时,都会跳转到所选选项的决策。游戏设计的关键在于改变顶部的内容! +¶这个值代表上方列表中的当前选中的决定。 +当按下该键时,我们会执行以下操作之一。 +如果这个决策只有一个可选项,则无论按下哪个按键,都会将当前决策切换到该选项所指向的目标决策。 +如果按下的按键在 1 到选项数量之间,就会跳转到对应选项的目标决策。 +不然,我们就维持当前的决策。¶ +current•#: 1 … + ∆ key … + decisions[current].options.length() = 1 ? + decisions[current].options[1].decision + ((choice ≥ 1) & (choice ≤ decisions[current].options.length())) ? + decisions[current].options[choice].decision + current + +¶这只是将选项显示为一堆短语。你可以更改它以添加说明、动画和其他趣味内容!¶ +Stage([ + Group( + Stack() + decisions[current].options.translate(ƒ(option) Phrase(option.text)) + ) + ]) + +\ + +这个模式看起来很复杂,但它本质上只是展示当前的选项,并在按键变化时跳转到你选择的决策。 +游戏设计的关键,其实就在于不断变化页面顶部的内容! offer-choices \ No newline at end of file diff --git a/static/locales/zh-CN/how/custom-characters.txt b/static/locales/zh-CN/how/custom-characters.txt index dc9f707c5..2bf421d91 100644 --- a/static/locales/zh-CN/how/custom-characters.txt +++ b/static/locales/zh-CN/how/custom-characters.txt @@ -2,14 +2,14 @@ 表情符号、字母和符号都很棒!但有时你想创建自己的角色。您如何创作并展示自己的作品? -首先,从在<人物@://characters> 页。 您可以使用像素、矩形、圆形和路径。给它起一个名字,描述它,然后你可以使用你的用户名和角色名称,像这样: +首先,在<人物@://characters> 页创造一个角色。 您可以使用像素、矩形、圆形和路径。给它起一个名字,描述它,然后你可以使用你的用户名和角色名称,像这样: \Phrase(`看看我的奇思妙想 @username/charactername !`)\ -该用户名和角色名称不存在,因此它将显示为一个空矩形。请务必使用您的真实用户名和角色名 +该用户名和角色名称不存在,因此它将显示为一个空框框。请务必使用您的真实用户名和角色名 -看到文本是如何使用反引号而不是引号的吗?这很重要。这告诉我们您正在使用富文本模式,并且需要引用自定义字符。 +看到文本是如何使用反引号而不是引号的吗?这很重要。这告诉我们您正在使用富文本模式,并且需要引用自定义角色。 -您可以从以下网址了解有关格式化文本的更多信息 @Phrase 。 +你可以在 @Phrase 里了解更多关于文本格式的内容。 animate-phrase \ No newline at end of file diff --git a/static/locales/zh-CN/how/interactive-scene.txt b/static/locales/zh-CN/how/interactive-scene.txt index 6c93b10b2..17d2822cf 100644 --- a/static/locales/zh-CN/how/interactive-scene.txt +++ b/static/locales/zh-CN/how/interactive-scene.txt @@ -1,8 +1,9 @@ 创建一系列交互式场景 -有时我们想讲述一些故事,等待观众采取一些行动,然后再进入下一个内容。 +有时候,我们希望讲述的故事在继续到下一段内容之前,先等待观众执行某个操作。 -为此,我们可以使用 @Scene ,但把 @Boolean 我们要显示的内容之间的值。例如,点击后会前进到下一个内容,使用 @Button : +为了实现这一点,我们可以使用一个 @Scene,并在要显示的内容之间插入 @Boolean 值。 +例如,下面的示例中,每次点击都会推进到下一段内容,这是通过 @Button 来实现的: \Scene([ Phrase('点击我') @@ -14,12 +15,15 @@ Phrase('你點擊我了嗎?' duration: 1s) ])\ -这 @Scene 显示第一个 @Phrase ,然后等待 @Button 是真的,一旦是真的,它就会进入下一个 @Phrase 。 +这个 @Scene 会先显示第一个 @Phrase,然后等待 @Button 变为 true。 +一旦条件满足,就会推进到下一个 @Phrase。 -您可以使用任何您想要推进的事情,只要它是真或假。例如,我们可以使用我们的声音!如果我们喊得足够大声,场景就会推进: +你可以使用任何方式来触发推进,只要它的结果是 true 或 false 即可。 +例如,我们也可以使用声音! +如果我们喊得足够大,场景就会继续推进: \Scene([ - Phrase('有人在嗎?') + Phrase('有人在吗?') Volume() > .5 Phrase("我听不见,再说一遍?" duration: 1s) Volume() > .7 diff --git a/static/locales/zh-CN/how/layering-images.txt b/static/locales/zh-CN/how/layering-images.txt index 6fdb86504..cd465ee44 100644 --- a/static/locales/zh-CN/how/layering-images.txt +++ b/static/locales/zh-CN/how/layering-images.txt @@ -1,12 +1,18 @@ 将图像层叠在一起 -有时我们希望对图像进行分层,以构建有趣的场景或富有创意的形状。 +有时候,我们会想通过叠加图像来构建有趣的场景或富有创意的形状。 -例如,您可以在您的项目上使用多个层 @Stage 按照您喜欢的方式堆叠和排列图像。 +例如,你可以在 @Stage 上为项目使用多个图层,自由地堆叠和排列图像。 -看!这是我用形状制作的乌龟!尝试更改每个形状的数字。你可以移动它们、调整它们的大小,甚至旋转它们。玩一玩,看看你能创造什么! +看!这是我只用基本形状制作的一只小乌龟! +试着修改每个形状对应的数字吧。你可以移动它们、调整大小,甚至进行旋转。 +多多尝试,看看你能创造出什么样的作品! -\¶注意:查看图库以了解另一个项目<例子@https://wordplay.dev/project/example-Layers?play>分层图像。¶Stage([ +¶提示:可以去看看图库中的另一个示例项目 +, +了解更多关于图像分层的用法。¶ + +Stage([ Shape(Circle(3m 0m 1m 0m)) Shape(Polygon(2m 3 0m -12m 0m) rotation: -30°) Shape(Polygon(7m 6 0m -6m 0m)) diff --git a/static/locales/zh-CN/how/move-phrase.txt b/static/locales/zh-CN/how/move-phrase.txt index f3299b121..48de013c8 100644 --- a/static/locales/zh-CN/how/move-phrase.txt +++ b/static/locales/zh-CN/how/move-phrase.txt @@ -1,14 +1,21 @@ 使角色可移动 -有时, @Phrase 可用键盘、鼠标或手指移动。 +有时候,让一个 @Phrase 可以通过键盘、鼠标或手指来移动会很有帮助。 -这样做,我们可以结合 @Phrase 和 @Placement : +我们可以结合 @Phrase 和 @Placement 来达成 : -\Stage([Phrase('让我动起来' place: Placement())] place: Place(0m 0m -10m))\ +\ +Stage( + [Phrase('move me' place: Placement())] + place: Place(0m 0m -10m) +) +\ -使用键盘箭头或点击 @Stage 将更新 @Placement ,导致 @Phrase 朝那个方向前进。 +使用键盘箭头或点击 @Stage 将更新 @Placement ,让 @Phrase 朝那个方向前进。 -但你知道吗, @Placement 可以与/任何事物/这需要 @Place ?例如 @Stage 有一个 @Place 这决定了相机指向的位置。让我们尝试设置一个 @Placement 对于 @Stage 的地方,看看会发生什么。 +你知道吗,其实 @Placement 可以用在任何需要 @Place 的地方。 +比如说,@Stage 也有一个 @Place,用来决定它的相机朝向哪里。 +我们来试试看:给一个 @Stage 的 @Place 设置一个 @Placement,然后看看会发生什么。 \Stage([ Phrase('🐈' place: Place(-2m 2m)) @@ -16,6 +23,5 @@ Phrase('🐈' place: Place(-1m 3m)) ] place: Placement(Place(0m 0m -10m)))\ -这会让相机移动!(注意:我们开始 @Placement 与\z\的价值\10m\这样相机就远离了一切。) - +这会让相机移动!(注意:我们把 @Placement 的 \z\ 值从 \10m\ 开始,这样相机会往后退一些,离所有东西更远。) animated-scene \ No newline at end of file diff --git a/static/locales/zh-CN/how/repeating-a-movement.txt b/static/locales/zh-CN/how/repeating-a-movement.txt index d5cf679ac..f4be83133 100644 --- a/static/locales/zh-CN/how/repeating-a-movement.txt +++ b/static/locales/zh-CN/how/repeating-a-movement.txt @@ -1,8 +1,8 @@ 重复动作 -有时我们想让一个角色以相同的方式移动几次!一遍又一遍地输入相同的行变得很乏味。 +有时我们想让一个角色以相同的方式移动几次!一遍又一遍地输入相同的指令变得很乏味。 -相反,我们可以使用 @Sequence 和 @Phrase 让某件事重复多次!具体来说,我们可以使用计数 @Sequence 并选择一组姿势出现的次数。例如,这是一个篮球上下弹跳两次。 +这时,我们可以使用 @Sequence 和 @Phrase 让某件事重复多次!具体来说,我们可以使用 @Sequence 的计数并选择一组姿势出现的次数。例如,这是一个篮球上下弹跳两次。 \Stage([ Phrase('🏀' entering: Sequence({ diff --git a/static/locales/zh-CN/how/shake-phrase.txt b/static/locales/zh-CN/how/shake-phrase.txt index cb715ae15..ba660e7f5 100644 --- a/static/locales/zh-CN/how/shake-phrase.txt +++ b/static/locales/zh-CN/how/shake-phrase.txt @@ -1,15 +1,15 @@ -让角色摇晃 +让字符产生抖动效果 -有时让角色看起来在颤抖是有帮助的。我们可以通过几种方法来实现这一点。 +有时候,让一个字符看起来在“抖动”会很有用。我们可以用几种不同的方法来实现这个效果。 -我们可以使用 @Phrase/offset 和 @Random 和 @Time 来实现这一点。 +我们可以使用 @Phrase/offset 结合 @Random 和 @Time 来实现这一点。 \offset: 0m … ∆ Time() … Random(-0.1m 0.1m) Phrase('你好' offset: Place(offset 0m))\ -这将创建一个名为\offset\每当时钟滴答作响时,它就会变成一个新的随机值。然后,它使用该偏移量来显示 @Phrase 抵消该金额。 +这段代码会创建一个名为 offset 的值,它会在每次时间变化时被更新为一个新的随机值。然后,这个 offset 会被用来控制 @Phrase 的偏移位置,从而让文字产生抖动效果。 -如果我们想更精确地控制震动,我们可以使用 @Sequence 制作重复的随机摇动动画。 +如果我们想更精确地控制震动的节奏和幅度,可以使用 @Sequence 制作重复播放的随机抖动动画。 \Phrase('你好' resting: Sequence({ 0%: Pose(offset: Place(Random(-.2m .2m))) @@ -18,6 +18,6 @@ Phrase('你好' offset: Place(offset 0m))\ 75%: Pose(offset: Place(Random(-.2m .2m))) } 0.1s))\ -此示例仅选择一次随机值,但将它们变成重复序列。 +在这个例子中,系统只在开始时生成一次随机值,但会将这些值组织成一个可重复播放的序列,从而形成持续的抖动动画效果。 move-phrase \ No newline at end of file diff --git a/static/locales/zh-CN/how/styling-text.txt b/static/locales/zh-CN/how/styling-text.txt index 7f7f40349..6f1f4fd7b 100644 --- a/static/locales/zh-CN/how/styling-text.txt +++ b/static/locales/zh-CN/how/styling-text.txt @@ -1,37 +1,37 @@ -文本样式 +设置文本样式 -有时我们希望文本脱颖而出。我们可以这样做/斜体/,*加粗*,还有更多! +有时我们希望文本更加醒目。我们可以通过/斜体/,*加粗*或者更多方式! 例如,要将文本设为斜体,可以用正斜杠 // 将其括起来,例如 //Hello//。例如: \Group(Stack() [ - Phrase(`想要展示一些/斜体/在你的文本中?`) - Phrase(`这对于强调或表达你的观点很有用/额外的爵士乐/。`) - Phrase(`只需在单词或短语前后加上斜线 (//),/像这样/。`) + Phrase(`想在文字里使用 /斜体/ 吗?`) + Phrase(`斜体很适合用来强调,或者给文字加点 /小花样/。`) + Phrase(`只要在单词或短语前后加一个斜杠 (//),/像这样/ 就行。`) ])\ @Phrase 还可以将文本加粗。你可以将文本用星号**括起来,例如**Hello**。例如: \Group(Stack() [ - Phrase(`想要让你的文字流行起来*大胆的*?`) - Phrase(`当你需要的时候,它是完美的*大声喊叫*。`) - Phrase(`只需在单词两边加上星号 (**),例如*嘿!*,并观察其击中效果的不同。`) + Phrase(`想用*粗体*让你的文字更显眼吗?`) + Phrase(`当你需要*大声强调*某句话的时候,粗体就很合适。`) + Phrase(`只需在单词两边加上星号 (**),例如*嘿!*,效果立马不一样了。`) ])\ -@Phrase 还可以将文本加粗。为此,请使用插入符号 ^^ 包裹文本,例如 ^^Hello^^。例如: +@Phrase 也可以将文字设置为超粗体。只需要在文字前后加上插入符号 ^^,比如 ^^Hello^^。例如: \Group(Stack() [ - Phrase(`特别大胆的是^山羊^当你需要将氛围调到最大时。`) - Phrase(`就像大胆但更^火^,通常用一根胡萝卜围绕着 (^^)`) - Phrase(`用它来弯曲^标题^ 或者 ^伟大的想法^。`) + Phrase(`当你需要将氛围拉到最大时,超粗体将是^最棒的^。`) + Phrase(`它和粗体类似,但更 ^炸^,通常用 ^^ 把文字包起来。`) + Phrase(`它很适合用在 ^标题^ 或 ^重要观点^ 上。`) ])\ -最后, @Phrase 可以为文本添加下划线。为此,请用下划线 __ 将文本括起来,例如 __Hello__。例如: +最后,@Phrase 可以为文本添加下划线。为此,将文本用下划线__括起来,就像 __Hello__。例如: \Group(Stack() [ - Phrase(`下划线是_低调的火_当您想让文本保持简洁但仍引人注目时。`) - Phrase(`在文本前后各添加一个下划线 (__),_像这样_,并且给予了清晰的强调。`) - Phrase(`它是 _完美的_表达你的观点,但又不会太_额外的_。`) + Phrase(`如果你想让文字看起来简洁又不失重点,下划线其实_很厉害_。`) + Phrase(`在文本前后各添加一个下划线 (__),_像这样_,这样强调的效果很清晰。`) + Phrase(`它_非常适合_用来表达重点,又不会显得太_用力_。`) ])\ custom-characters \ No newline at end of file diff --git a/static/locales/zh-CN/how/track-game-state.txt b/static/locales/zh-CN/how/track-game-state.txt index 93a5622a7..51b8d75ac 100644 --- a/static/locales/zh-CN/how/track-game-state.txt +++ b/static/locales/zh-CN/how/track-game-state.txt @@ -1,30 +1,36 @@ -跟踪游戏状态 +记录游戏状态 -大多数游戏在游戏进行过程中都会追踪多项事物:分数、玩家位置和其他细节都是关键。每次有输入时,状态就会发生变化,然后我们希望显示新的输出作为响应。 +大多数游戏在进行过程中都会跟踪多种信息:分数、玩家位置以及其他细节,这些都是游戏的关键组成部分。 +每次进行输入时,游戏状态就会发生变化,然后我们希望根据这些变化展示新的输出,并以此作为响应。 -任何游戏的通用模式都会做三件事: +任何游戏通常都会用一个通用模式,包含三个部分: -• 定义一个游戏状态数据结构,用于存储所有游戏状态• 定义一个反应,当有新的输入时,根据先前的游戏状态创建新的游戏状态• 制作 @Stage 和 @Group 和 @Phrase 显示游戏状态 +• 定义一个游戏状态的数据结构,用于存储所有游戏状态信息 +• 定义一个反应(reaction),当有新的输入时,根据先前的游戏状态创建一个新的游戏状态 +• 使用 @Stage , @Group 和 @Phrase 来显示游戏状态 -例如,让我们想象一个简单的游戏,其中需要在文本框中输入秘密单词,并且每次猜出一个秘密单词时都会获得一分: +例如,加入我们有一个简单的游戏,其中玩家需要在文本框中输入秘密单词,每次猜出一个秘密单词就会获得一分: \•Game(secrets•[''] points•#) state: Game(['猫' '狗'] 0) … state.secrets.has(Chat()) … state.points:state.points + 1 Stage(state.points = state.secrets.length() ? [Phrase("你赢了!")] [ Group(Stack() [ - Phrase("猜猜我的秘密") + Phrase("猜猜我的秘密单词") Phrase(`\state.secrets.length() - state.points\更多秘密`) ]) ])\ -让我们来分析一下。 +让我们来逐步分解一下。 -• 第一行,\•Game(secrets•[''] points•#)\说,/制作一个名为\Game\存储秘密和点的列表/• 第二行说/游戏状态以秘密列表和零分开始。每次\Chat\改变,如果输入的单词在秘密列表中,则创建一个新的游戏状态,并将分数增加一/。• 每次程序重新评估时(当\Chat\(根据变化),显示一个阶段。如果分数等于秘密数量,则显示获胜阶段。如果不相等,则显示提示和剩余秘密数量。 +• 第一行,\•Game(secrets•[''] points•#)\表示,/创建一个名为 \Game\ 的数据结构,用来存储秘密单词列表和分数/ +• 第二行表示/游戏状态从“包含一组秘密单词、分数为 0”开始。每当\Chat\改变时,如果输入的单词存在于秘密单词列表中,就创建一个新的游戏状态,并将分数增加1/。 +• 每次程序重新计算时(当\Chat\发生变化时),显示一个阶段(stage)。如果分数等于秘密单词的数量,则显示胜利界面。如果分数不相等,则显示提示信息和剩余未被猜中的秘密单词数量。 这个例子存在一些问题: -• 如果他们多次猜出同一个秘密单词,就能获得更多分数!我们的游戏状态可能还需要记住猜对的内容,所以每个单词只计算两次。• 如果玩家输入多个单词,是否应该计算在内? +• 如果他们多次猜出同一个秘密单词,就能获得更多分数!我们的游戏状态可能还需要记住已经猜对的秘密单词,所以每个单词只能被计算两次。 +• 如果玩家一次性输入多个单词,是否应该算作一次正确猜测? -更复杂的游戏状态和游戏更新将帮助我们处理这些情况。 +要处理这些情况,就需要设计更复杂的游戏状态和更完善的状态更新逻辑。 track-points \ No newline at end of file diff --git a/static/locales/zh-CN/how/track-points.txt b/static/locales/zh-CN/how/track-points.txt index 191413d66..5a58aab8d 100644 --- a/static/locales/zh-CN/how/track-points.txt +++ b/static/locales/zh-CN/how/track-points.txt @@ -1,19 +1,19 @@ -跟踪点 +记录点数(分数/积分) -有时在游戏中,记录事件发生时的点数会很有帮助。如果Wordplay不允许变量被赋予新值,我们该怎么做呢? +有时在游戏中,当某些事件发生时,记录当前的点数(分数)会很有帮助。但如果Wordplay不允许变量被赋予新值,我们可以怎么做呢? -诀窍是使用 @Reaction 定义一个 @Bind 的价值,并仔细思考什么事件应该导致新的价值 @Bind 。 +诀窍是使用 @Reaction 为定义一个 @Bind 的值,并仔细思考什么事件应该导致 @Bind 产生一个新值。 -例如,想象一个非常简单的游戏,玩家每次在键盘上键入一个秘密键时都会获得更多积分。 +例如,想象一个非常简单的游戏,玩家每次在键盘上键入一个“秘密按键”时都会获得更多点数。 -\points: 0 … ['一个' 'e' '我' '哦' '你'].has(Key()) … points + 1\ +\points: 0 … ['a' 'e' 'i' 'o' 'u'].has(Key()) … points + 1\ -这个例子表明,/点数从 0 开始,然后每次按下一个键时,如果该键在元音列表中,则点数变为当前点数加一。/每次\Key()\ @Stream 改变时,程序重新评估,检查条件,如果为真,则给出\points\一个新的值。 +这个例子表明,/点数(points)从 0 开始,然后每次按下一个按键时,如果该按键属于元音字母列表中,则点数在当前点数的值的基础上加一。/每当\Key()\ @Stream 改变时,程序就会重新计算该表达式,检查条件是否成立;如果条件为真,就会给 \points\ 赋予一个新的值。 -对此的反应分为三个部分: +这个反应分为三个部分: -• 点的初始值(\0\)• 当条件为真时,产生一个新值 (\['一个' 'e' '我' '哦' '你'].has(Key())\)• 如果条件成立,则为新值(\points + 1\) +• 点数的初始值(\0\)• 当条件为真时,产生一个新值 (\['a' 'e' 'i' 'o' 'u'].has(Key())\)• 如果条件成立,则赋予新值(\points + 1\) -要实现更复杂的点追踪,只需设置更复杂的条件或新值即可。花点时间思考这些条件和新值的规则,然后尝试用代码表达它们。 +如果你想实现更复杂的分数系统,只需要设置更复杂的条件或新的计算方式即可。花点时间思考这些条件和新值的规则,然后尝试用代码表达它们。 track-points \ No newline at end of file diff --git a/static/locales/zh-CN/how/video-grid.txt b/static/locales/zh-CN/how/video-grid.txt index 67c143d00..ea42ad485 100644 --- a/static/locales/zh-CN/how/video-grid.txt +++ b/static/locales/zh-CN/how/video-grid.txt @@ -1,9 +1,8 @@ 使用相机创建视频 -这 @Camera 流是从世界获取颜色网格的好方法。如果我们想看到这些颜色,重建图像 @Camera 看到了嗎? - -我们可以使用 @Grid 布局 @Group , 和 @List/combine 函数将颜色转换为列表 @Phrase 我们给予 @Grid 。 +@Camera 是一个从现实世界获取颜色网格的绝佳方法。那么,如果我们想要“看到”这些颜色,也就是重现 @Camera 所看到的图像,该怎么做呢? +我们可以在 @Group 中使用 @Grid 布局,并结合一个函数,将这些颜色转换为一个 @Phrase 列表,再把这个列表传递给 @Grid 来进行展示。 \width: 24 height: 24 colors: Camera(width · 1px height · 1px 33ms) @@ -14,8 +13,9 @@ Stage([ ])) ])\ -此示例构建了一个短语列表,将每种颜色转换为具有特定颜色的圆圈。 +这个示例构建了一个短语列表,将每种颜色转换为对应颜色的圆圈。 + +使用 @Camera 时需要特别注意:它们会产生大量的输入数据!因此,请务必将图像的宽度和高度控制得尽量小。 -小心 @Camera 流:它们会产生大量的输入!你需要保持图像的宽度和高度较小。 interactive-scene \ No newline at end of file