文本是否应使用C++;基于文本的游戏是在代码中还是在外部文件中? 我正在用C++编写一个基于文本的游戏,用于学校项目,游戏允许用户从每个场景中的选项列表中选择一个选项;类似于奥运会主办单位的工作方式。因此,我的游戏中必须显示大量的文本,但我不确定在程序中处理大量文本时的适当约定。我应该简单地使用std::cout并将文本直接写入代码,还是应该将使用过的std::ifstream写入文本文件以读取文本

文本是否应使用C++;基于文本的游戏是在代码中还是在外部文件中? 我正在用C++编写一个基于文本的游戏,用于学校项目,游戏允许用户从每个场景中的选项列表中选择一个选项;类似于奥运会主办单位的工作方式。因此,我的游戏中必须显示大量的文本,但我不确定在程序中处理大量文本时的适当约定。我应该简单地使用std::cout并将文本直接写入代码,还是应该将使用过的std::ifstream写入文本文件以读取文本,c++,text,C++,Text,关于使用文件保存文本,我唯一关心的是,用户做出的每个选择都会导致显示不同的段落,因此我认为我需要为每个段落创建一个文本文件,这似乎会导致更多问题(例如使用错误的文件名或键入错误的代码导致游戏读取错误的文件)如果有一种方法可以读取文本文件的特定部分,那么这将是有益的,但是我目前并不知道任何这样的方法。但是我对C++是新的,我确信有很多我还没有学习,所以如果这样的方法确实存在,我不会感到惊讶。 非常感谢您的帮助,无论是简单地告诉我是否应该在代码或文件中输入文本,还是告诉我是否有办法从文本文件的特定部

关于使用文件保存文本,我唯一关心的是,用户做出的每个选择都会导致显示不同的段落,因此我认为我需要为每个段落创建一个文本文件,这似乎会导致更多问题(例如使用错误的文件名或键入错误的代码导致游戏读取错误的文件)如果有一种方法可以读取文本文件的特定部分,那么这将是有益的,但是我目前并不知道任何这样的方法。但是我对C++是新的,我确信有很多我还没有学习,所以如果这样的方法确实存在,我不会感到惊讶。
非常感谢您的帮助,无论是简单地告诉我是否应该在代码或文件中输入文本,还是告诉我是否有办法从文本文件的特定部分读取文本。再一次,我非常感谢您提供的任何帮助。

我建议使用外部文件。这使更改内容变得更加容易更简单,不需要为简单的打字错误重新编译整个程序

你可以使用一个文件,只需用一个空行分隔每个段落。在这一点上抓取“空行之间的所有文本”是很简单的

如果这些选项导致段落选项在文件中跳跃,您可以为它们指定ID,并通过在文件中线性搜索给定ID来动态加载它们

--编辑--

根据请求,这里有一个或两个算法:

算法1:

  • 给每个段落一个ID,通常在段落正上方的一行上有一个简单的数字
  • 用空行分隔每个数字段落对
  • 逐行分析文件,查找只包含数字的“行”
  • 从这一点上,你找到了你正在寻找的段落,所有行直到下一个空白是该段落的内容
  • 显示给用户
  • 算法2(推荐):

  • 使用XML存储段落及其ID
  • 使用TinyXML2解析文件:

  • 请不要将显示的文本放入代码中。这是一种反模式。对于每一个小的文本更改(如修复打字错误)和重大更改(如翻译成其他语言),您都必须重新编译游戏


    大多数编程语言的惯例是将所有显示的文本作为键值对放入(少数)资源文件或属性文件中,其中代码仅引用要显示的段落的键值,值将从该外部文件加载(通常在启动期间加载一次)每个段落不需要使用一个文件,但必须解析kv对。有一些实用程序可供您重用。

    如果您不打算将游戏翻译为其他语言,则需要您自己,这两种方法各有优缺点:

    • 源代码中的文本:易于编写,文本位于使用位置附近
    • 资源文件中的文本:更容易删除重复字符串,强制文本数据具有更好的结构

    如果您只是简单地设想您的应用程序可以翻译,那么您应该将所有文本放在ressource文件中。您甚至可以找到有助于您进行翻译的框架,但您也可以找到其他框架,例如有自己的翻译工具。

    将文本存储在程序文件中不是一种好的编码做法。这将导致不必要的代码膨胀(甚至不是代码),如果需要更改文本,则需要重新编译

    一个简单的解决方案是创建一个文本文件,使用诸如行号或空格之类的精心格式,以允许您提取所需的文本

    一个更优雅的解决方案是将必要的文本放入xml或json文件中,并在必要时将其读入程序。这将是一个很好的选择。

    关于如何选择阅读哪一段,您是否有解释(或链接)?