1

我正在开发一个基于 php 文本的游戏。我在游戏中组织任务。基本上任务增加了对游戏的理解。

任务是游戏中的一组小动作。

例如:

任务描述:你需要偷一辆自行车,修理它并运送到另一个城市。

它包括 3 个动作。

  1. 偷一辆自行车
  2. 修理自行车
  3. 将其运送到另一个城市(比如说伦敦)

这 3 个动作可以在一个不同的页面中进行。

我为 TASK(task_id, title, description (TASK Description Above),STATUS) 创建了一个表,但我不确定如何存储和执行任务的操作。

我有一个想法,使用相关表 TASK_ACTIONS (task_id, action_id,action(?),done)

但我不确定以哪种形式存储动作动作(?):

用于检查操作的 sql 语句 如下三点。

  1. 自行车是否被盗。如果是,将操作标记为 DONE
  2. 自行车已修复或仍然损坏。如果已修复,请将操作标记为 DONE
  3. 自行车是否已运往伦敦。如果已发货,请将操作标记为 DONE

如果以上都标记为 DONE,则将 TASK STATUS 标记为 COMPLETED,显示下一个任务。

4

1 回答 1

1

一种廉价的方法如下所示:

tasks
{
    user_id
    has_theft_bike
    has_repaired_bike
    ... 
}

但是,这并不容易扩展。更正确的方法是在动作表中定义所有动作

 actions // defines all possible actions (also actions not part of a task)
 {
      action_id
      description
 }

 user_actions // has one record for every action a user commits
 {
      user_id
      action_id
      date // possible extra
 }

 tasks // all possible tasks
 {
     task_id
     name
 }

 task_actions // all actions linked to a task
 {
     task_id
     action_id
 }

通过这种方式,您可以记录用户执行的每个操作。您可以进行偷自行车动作和修理自行车动作。

例如,现在您可以检索完成任务 5(偷一辆自行车并修理它)所需的所有操作。然后,如果所有这些操作 ID 都在您当前用户的 user_actions 表中。这意味着用户已经完成了任务。

只是如果您有几个用户,您的 user_actions 表不会增长得非常非常快。

于 2011-10-19T13:57:24.330 回答