# 自定义 ChoiceScript 的属性界面

> <https://www.choiceofgames.com/make-your-own-games/customizing-the-choicescript-stats-screen/>

我们的游戏设有一个“显示属性 (Show Stats)”按钮，用于展示适用于您角色的部分状态数据。

<img src="http://www.choiceofgames.com/wp-content/uploads/2010/12/Screen-Shot-2013-04-15-at-18.02.52-.png" alt="Screen-Shot-2013-04-15-at-18.02.52-" height="253" width="317">

本文档将介绍如何在您使用 ChoiceScript 编写的游戏中构建状态界面。

## 初学者请不要直接从这里开始学习！

在阅读这份高级进阶文档之前，请务必先阅读我们的[基础 ChoiceScript 介绍](/zh-hans_choicescript-guide/guan-fang-zhi-nan/choicescript-jian-jie.md)页面。

### 创建属性图表

**太长不看版：请尝试对“choicescript\_stats.txt”文件进行实验。**

属性界面的核心是“属性图表”，您可以使用 `*stat_chart` 指令创建。该图表可显示任意数量的 ChoiceScript 变量值；若变量值为 1 到 100 之间的数字，则可将其显示为图表上的条形图。

假设您有三个变量：

* 包含玩家姓名的“name”变量（例如“Dan”）
* 包含 1-100 之间领导力数值的“leadership”变量
* 包含 1-100 之间力量数值的“strength”变量

您可以像这样使用 `*stat_chart`命令：

```
*stat_chart
  text name
  percent leadership
  percent strength
```

这将显示一个如下的属性图表：

<img src="http://www.choiceofgames.com/wp-content/uploads/2010/12/Screen-Shot-2013-04-15-at-18.04.16-.png" alt="" height="107" width="319">

请注意，当我们想要以文本形式显示变量的值时，我们在变量前写上 `text`；当我们想要以百分比条形式显示变量时，我们在变量前写上 `percent`。

如果你不喜欢百分比条，你可以对所有内容都使用文本，在这种情况下，我们将以数字形式显示数值：

```
*stat_chart
  text name
  text leadership
  text strength
```

<img src="http://www.choiceofgames.com/wp-content/uploads/2010/12/Screen-Shot-2013-04-15-at-18.04.48-.png" alt="" height="77" width="312">

### “显示属性”按钮

你可以在任何 ChoiceScript 场景中使用 `*stat_chart` 命令；它就像其他指令一样。例如，在游戏结束时显示状态图表就很好，能让玩家感受到结局的圆满与成就感。

但使用 `*stat_chart` 最有趣的地方，是在一个名为 `choicescript_stats.txt` 的特殊文件中。

`choicescript_stats.txt` 是一个 ChoiceScript 场景文件，就像 `startup.txt` 或你创建的任何其他文件一样。当玩家点击“显示状态”按钮时，我们会暂停当前的 ChoiceScript 场景，转而显示 `choicescript_stats.txt` 场景；当你完成该场景后，我们会恢复之前正在进行的场景。

大多数情况下，`choicescript_stats.txt` 文件除了 `*stat_chart` 外几乎不包含其他内容，但你完全可以尝试在该文件中加入其他文本，特别是如果你想包含一些不应出现在数据图表中的角色信息。

### 诗意化标注状态值

在前一示例中，图表显示的“name”、“leadership”和“strength”均为小写形式；通常此类数值应采用“首字母大写格式”（类似新闻标题的书写规范）。

您可以根据喜好自由设定变量名称的大小写格式，例如：

```
*stat_chart
  text Name
  percent LEADERSHIP
  percent sTrEnGtH
```

<img src="http://www.choiceofgames.com/wp-content/uploads/2010/12/Screen-Shot-2013-04-15-at-18.05.27-.png" alt="" height="109" width="318">

这是因为**在 ChoiceScript 中，变量不区分大小写**，因此“strength”与“sTrEnGtH”具有完全相同的含义。

但你也可以为变量赋予不同的名称。也许你想使用更具诗意的标签，比如将“力量”改为“筋骨之力”；将“领导力”改为“蛇之舌”；将“姓名”改为“战斗代号”。你可以这样编写：

```
*stat_chart
  text name Nom de Guerre
  percent leadership Serpent's Tongue
  percent strength Thews and Sinews
```

<img src="http://www.choiceofgames.com/wp-content/uploads/2010/12/Screen-Shot-2013-04-15-at-18.05.56-.png" alt="" height="111" width="318">

### 在图表上显示对立配对

在我们的一些游戏中，我们会说两个变量是“对立的”；例如，残暴与灵巧对立，狡诈与荣誉对立，轻蔑与警觉对立。

然而，在我们的 ChoiceScript 代码中，实际上只有三个变量：“残暴 (Brutality)”、“狡诈 (Cunning)”和“轻蔑 (Disdain)”。当我们说“荣誉增加”时，实际上只是减少狡诈值。

我们可以利用这些变量在图表上显示对立配对，如下所示：

```
*stat_chart
  opposed_pair Brutality
    Finesse
  opposed_pair Cunning
    Honor
  opposed_pair Disdain
    Vigilance
```

<img src="http://www.choiceofgames.com/wp-content/uploads/2010/12/Screen-Shot-2013-04-15-at-18.06.45-.png" alt="" height="120" width="318">

再次注意，"Finesse"、"Honor"和"Vigilance"在 ChoiceScript 中并非真实存在的变量，因此我们可以在此处随意命名。例如，我们本可以将 Vigilance 命名为"龙之眼"。

然而，如果你需要为图表**左侧**使用诗意的标签，你需要稍微调整图表的编写方式：

```
*stat_chart
  opposed_pair strength
    Thews and Sinews
    Fragile Bones
  opposed_pair leadership
    Serpent's Tongue
    Minion's Obeisance
```

<img src="http://www.choiceofgames.com/wp-content/uploads/2010/12/Screen-Shot-2013-04-15-at-22.42.17-.png" alt="" height="71" width="315">

在这种情况下，第一个缩进行是左侧标签，第二个缩进行是右侧标签。如果只有一个缩进行，那么我们默认它是右侧标签。

让某些变量与其他非对立数值并存是完全可行的。例如，在《龙》中，"恶名 (Infamy)"没有任何对立项，因此我们可以这样编写图表：

```
*stat_chart
  opposed_pair Brutality
    Finesse
  opposed_pair Cunning
    Honor
  opposed_pair Disdain
    Vigilance
  percent Infamy
```

<img src="http://www.choiceofgames.com/wp-content/uploads/2010/12/Screen-Shot-2013-04-15-at-22.43.20-.png" alt="" height="159" width="313">

### 使用临时变量处理特殊数值

在《龙之抉择》中，我们使用 0-4 的简单数字记录伤势，但会将其显示为文本，例如：

* 伤势=0：未受伤
* 伤势=1：战痕累累
* 伤势=2：永久性受伤
* 伤势=3：永久性虚弱
* 伤势=4：濒临死亡

我们通过创建一个临时变量来保存描述你伤势的文本，就像这样：

```
*temp wound_text
*if wounds = 0
  *set wound_text "未受伤"
  *goto chart
*elseif wounds = 1
  *set wound_text "战痕累累"
  *goto chart
*elseif wounds = 2
  *set wound_text "永久性受伤"
  *goto chart
*elseif wounds = 3
  *set wound_text "永久性虚弱"
  *goto chart
*else
  *set wound_text "濒临死亡"
*label chart

*stat_chart
  text wound_text Wounds
```

### 变量状态标题

通常，您使用状态图表来显示变量值；状态的标题（例如“力量 (Strength)”）通常是固定的。但您也可以让状态的标题成为变量，如下所示：

```
*temp title "力量"
*if poetic
    *set title "筋骨之力"
*stat_chart
    percent strength ${title}
```

如果 `poetic` （诗意）变量为真，状态图表将显示“筋骨之力：50%”。否则，状态图表将显示“力量：50%”。

您可以使用此功能隐藏状态名称，直到玩家稍后发现它们。例如，您可以显示一个状态“未知：50%”，然后在玩家了解魔法后，将状态名称更改为“魔法：50%”。

### Frequently Asked Question: How Do I Hide Stats? 常见问题：如何隐藏状态？

状态图表只会显示你想要展示的内容。如果你 `*create` 创建了一百个变量，但只在 `*stat_chart` 中提及其中两个变量，那么其他 98 个变量将永久隐藏。

如果你只想暂时隐藏某个状态，你需要将 `*stat_chart`命令包裹在 `*if` 语句中，就像这样：

```
*if KnowsAboutMagic
    *stat_chart
        percent Magic
```

你可以将 `*stat_chart` 拆分为多个较小的 `*stat_chart` 命令，并使用 `*if` 语句来仅隐藏部分图表。

### 多个状态界面

你可以在一个文件中使用多个 `*stat_chart` 命令。例如，你可以创建具有独立标题的多个独立部分。

```
[b]Relationships[/b]
*stat_chart
    percent Alice
    percent Bob

[b]Skills[/b]
*stat_chart
    percent Acrobatics
    percent Leadership

[b]Virtues[/b]
*stat_chart
    percent Honesty
    percent Patience
```

您也可以在 `choicescript_stats.txt` 文件中使用 `*page_break` 命令分隔各个部分，或使用 `*choice` 命令让玩家选择查看哪个状态界面。

```
*label screen
*choice
    #Relationships.
        *stat_chart
            percent Alice
            percent Bob
        *goto screen
    #Skills.
        *stat_chart
            percent Acrobatics
            percent Leadership
        *goto screen
    #Virtues.
        *stat_chart
            percent Honesty
            percent Patience
        *goto screen
```

请注意，在构建多屏的 `choicescript_stats.txt` 文件时，您无需提供退出状态界面的 `*choice` 选项。屏幕顶部始终有一个按钮，用于退出状态界面并返回游戏。

### 打造美观的状态界面

以下是一些确保您的状态界面在所有尺寸屏幕上（从 iPhone 到电视）都显示美观的提示。

* 保持标题简洁。“力量”优于“你有多强壮？”。
* \
  确保你的“文本”行至少有五个字符长度。在带有进度条的属性图表中，如果出现像“7”这样的单个字符数，会显得很不协调。如果你的属性范围是 1-3，请为每个数字设置一个简短名称，例如“基础”、“中级”和“高级”。
* 某些文本属性在图表外显示效果更佳。对于可能长达一两句话的较长数值尤其如此；试图将这些内容塞进带有百分比进度条的表格中会显得非常难看。（请记住，你可以在 `choicescript_stats` 文件中放入任何内容，而不仅仅是 `*stat_chart`。）
* 尽量在每个图表中只使用一种数据类型。你可以在单个文件中使用多个 `*stat_chart` 命令。考虑为你的非对抗性百分比变量创建一个 `*stat_chart`，为对抗性变量创建另一个 `*stat_chart`，再为文本变量创建第三个 `*stat_chart`。

### 示例

以下是一些示例 `choicescript_stats.txt` 文件：

* [《海上霸业》](http://www.choiceofgames.com/broadsides/scenes/choicescript_stats.txt)状态界面
* [《浪漫抉择》](http://www.choiceofgames.com/romance/scenes/choicescript_stats.txt)状态界面
* [《吸血鬼抉择》](http://www.choiceofgames.com/vampire/scenes/choicescript_stats.txt)状态界面


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://raster.gitbook.io/zh-hans_choicescript-guide/guan-fang-zhi-nan/zi-ding-yi-choicescript-de-shu-xing-jie-mian.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
