硬编码问答游戏是否需要数据库,或者只是一个列表就足够了

问题描述 投票:0回答:1

这只是我当前配置的示例代码,我现在有大约 750 个级别,最多是 1000 个。

class GameLevel {
  final int number;
  final String question;
  final int answer;
  final String? image;
  final int difficulty;
  final String hint;
  final String solution;

  const GameLevel({
    required this.number,
    required this.question,
    required this.answer,
    this.image,
    required this.difficulty,
    required this.hint,
    required this.solution,
  });
}

const List<GameLevel> gameLevels = [
  GameLevel(
    number: 1,
    question: 'whats 1 + 2',
    answer: 3,
    difficulty: 4,
    hint: '+2',
    solution: '3',
  ),
  GameLevel(
    number: 2,
    question: 'whats 3 + 7',
    answer: 10,
    difficulty: 4,
    hint: 'x3',
    solution: '3 + 7 = 10',
  ),

将所有级别存储在levels.dart 文件中是否足够好,或者我是否需要使用数据库。我发现的最佳选择是 sqflite。我已经构建了 apk,所有级别都保存在这个 dart 文件中,并且游戏运行良好。我想知道在较旧的设备上或在达到 750 级时是否会变慢。这些关卡只能在游戏中和离线状态下进行硬编码。这也是我的第一个 flutter 项目。欢迎任何建议。

android database flutter dart game-development
1个回答
0
投票

您的应用程序无需使用数据库来存储硬编码数据。如果你有一个清单,那就可以很好地达到目的。在现代设备上循环 1000 个项目并不是一个巨大的成本,但原则上我强烈建议您确保您的代码有效。

如果您想将游戏关卡存储在列表中,那么您应该始终跟踪当前项目索引以及当前

GameLevel
对象,这样您就不需要按位置搜索它。

但是,我想知道为什么您决定使用 List 而不是

GameLevel
对象数组。如果您有一个数组而不是列表,那么
GameLevel
对象的引用将存储在快速可追踪的内存部分中,而不是分配的列表项分散在内存中并且必须执行循环才能找到 n' th 元素(在幕后,你不是自己做这件事)。

您需要考虑的进一步问题是您是否需要更新您的此列表,以及每当游戏级别发生变化时是否要发布新的 apk。在您的 apk 外部拥有一个存储空间,您可以更新而无需每次发布新版本,这不是更有意义吗?

这并不一定意味着您有一个数据库,您也可以使用应用程序在初始化时加载的文件实现相同的功能。

然而,使用数据库非常优雅,尽管不是必需的。因为如果您有数据库,那么您可以编写更改脚本,而不必每次都覆盖文件,并且维护游戏级别数据变得更加容易。但是,您可以将所有这些改进推迟到更高版本,迟早您会感觉到缺少正确的数据处理,并且能够自己决定您想要哪些改进以及改进程度。

© www.soinside.com 2019 - 2024. All rights reserved.