UNPKG

automatic-assessments

Version:

Automatic assessment of Marty and Scratch 3.0 projects

56 lines (55 loc) 1.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DEFINITION_OF_BLOCK_OPCODE = exports.CLONE_OPCODE = void 0; const Analyzer_1 = require("../Analyzer"); exports.CLONE_OPCODE = 'control_start_as_clone'; exports.DEFINITION_OF_BLOCK_OPCODE = 'procedures_definition'; class Abstraction extends Analyzer_1.default { constructor(targets) { super(); this.targets = targets; this.score = 0; } execute() { this.firstPointNumberOfScripts(); this.twoPointsNewBlocks(); this.threePointsClones(); return this.score; } firstPointNumberOfScripts() { // 1 point for more than 1 script in the whole program let scriptCounter = 0; for (const target of this.targets) { scriptCounter += target.blocks._scripts.length; if (scriptCounter > 1) { this.score = 1; break; } } } twoPointsNewBlocks() { // 2 points for at least one defined block for (const target of this.targets) { for (const _blockKey of Object.keys(target.blocks._blocks)) { const _block = target.blocks._blocks[_blockKey]; if (_block.opcode === exports.DEFINITION_OF_BLOCK_OPCODE) { this.score = 2; break; } } } } threePointsClones() { // 3 points for at least one clone for (const target of this.targets) { for (const _blockKey of Object.keys(target.blocks._blocks)) { const _block = target.blocks._blocks[_blockKey]; if (_block.opcode === exports.CLONE_OPCODE) { this.score = 3; break; } } } } } exports.default = Abstraction;