UNPKG

automatic-assessments

Version:

Automatic assessment of Marty and Scratch 3.0 projects

60 lines (59 loc) 2.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.REPEAT_UNTIL_BLOCK_OPCODE = exports.FOREVER_BLOCK_OPCODE = exports.REPEAT_BLOCK_OPCODE = void 0; const Analyzer_1 = require("../Analyzer"); exports.REPEAT_BLOCK_OPCODE = 'control_repeat'; exports.FOREVER_BLOCK_OPCODE = 'control_forever'; exports.REPEAT_UNTIL_BLOCK_OPCODE = 'control_repeat_until'; class FlowControl extends Analyzer_1.default { constructor(targets) { super(); this.score = 0; this.targets = targets; } execute() { this.firstPointSequenceBlocks(); this.twoPointsRepeatOrForever(); this.threePointsRepeatUntil(); return this.score; } firstPointSequenceBlocks() { // one point when there is a sequence of blocks (there is at least a block with a next) for (const target of this.targets) { for (const _blockKey of Object.keys(target.blocks._blocks)) { const _block = target.blocks._blocks[_blockKey]; if (_block.next) { this.score = 1; break; } } } } twoPointsRepeatOrForever() { // two points when a repeat or a forever block is used (with at least an input) for (const target of this.targets) { for (const _blockKey of Object.keys(target.blocks._blocks)) { const _block = target.blocks._blocks[_blockKey]; const inputsLength = Object.keys(_block.inputs).length; if ((_block.opcode === exports.REPEAT_BLOCK_OPCODE || _block.opcode === exports.FOREVER_BLOCK_OPCODE) && inputsLength) { this.score = 2; break; } } } } threePointsRepeatUntil() { // three points when a repeat until block is used for (const target of this.targets) { for (const _blockKey of Object.keys(target.blocks._blocks)) { const _block = target.blocks._blocks[_blockKey]; const inputsLength = Object.keys(_block.inputs).length; if (_block.opcode === exports.REPEAT_UNTIL_BLOCK_OPCODE && inputsLength) { this.score = 3; break; } } } } } exports.default = FlowControl;