如何编写危险感知考试代码

How to a code a hazard perception exam

我一直在网上寻找有关如何对危险感知考试进行编码的示例,但无济于事。谁能告诉我危险感知考试编码的要点?或者网上有没有类似的例子?

在英国,危险感知考试是获得驾驶执照的必修考试。它涉及从驾驶员的角度观看视频,如果您发现危险,请点击视频。考试会记录您注意到的危险数量,并会给您一个分数,例如45 分中的 40 分。这里有一个示例:http://theory-test-online.co.uk/free-hazard-perception-test-demo.htm 我想了解如何记录针对视频的点击次数。咔嗒声还必须在危险周围的特定时间范围内击中才能算作正确。

这个问题既很笼统又很具体。它是通用的,因为您的目标可以通过多种方式实现,而具体是因为您询问的是一种非常具体的考试类型。以下是一些帮助您入门的信息:

您可以使用HTML5 video or something like Video.js播放视频并控制其位置。

您可以使用 addEventListener or jQuery .click() 监听点击事件,并在每次点击时检查当前视频位置,看看它是否在点击应该出现的范围之一,并相应地计算点数(添加用户应该单击并减去的点,确保你不会为每个危险获得超过 1 分)。

计算点数可能具有挑战性,但这是如何完成的:

假设您有一系列正确的危险开始-停止间隔,以及是否点击了其中任何一个的信息,以及在没有危险时点击的罚分数:

var harards, penalties;

hazards = [
  {
    start: 1,
    stop: 2,
    passed: false
  },
  {
    start: 4,
    stop: 5,
    passed: false
  },
  {
    start: 8,
    stop: 10,
    passed: false
  }
];

penalties = 0;

(当然,对于真实数据,它更像是:start: 38.8, stop: 42.3 等)现在每次点击你都可以检查视频位置并用这样的东西测试它:

function testHazard(time) {
  var i;
  for (i = 0; i < hazards.length; i++) {
    if (time >= hazards[i].start && time <= hazards[i].stop) {
      hazards[i].passed = true;
      return;
    }
  }
  penalties++;
}

如果点击在其持续时间内,它将把所有危险标记为已通过,否则会增加惩罚。

现在点数很简单:

function countPoints() {
  var i, points = 0;
  for (i = 0; i < hazards.length; i++) {
    if (hazards[i].passed) {
      points++;
    }
  }
  return (points - penalties);
}

参见:DEMO 关于 JS Bin。

一个额外的提示:您可能想要使用 mousedown event (or jQuery .mousedown()) instead of the click event to make it work nicely with double clicks etc. For example the exam from your comment 似乎不能很好地处理双击和多次点击并打印:"You responded to this clip in an unacceptable manner!" 另外我不确定该考试是否重要正确的点击。我上面写的代码对于任意数量的点击都可以正常工作,并且当人们在不应该点击时点击时只会导致较低(甚至负)的点数,同时将一次危险期间的任意点击次数计为一分。

一些有用的资源: