Files
mixly3/boards/default_src/python_mixpy/generators/turtle.js
王立帮 7d0a87fc09 feat(boards): python_mixpy下更新Turtle模块
增加screen.update、turtle.title和turtle.setup接口对应图形块
2026-01-04 04:08:41 +08:00

422 lines
19 KiB
JavaScript

import * as Blockly from 'blockly/core';
export const turtle_create = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
//var size=window.parseFloat(this.getFieldValue('SIZE'));
//generator.definitions_['var_declare'+varName] = varName+'= '+ 'turtle.Turtle()\n';
var code = varName + ' = ' + 'turtle.Turtle()\n';
return code;
// return '';
}
export const turtle_done = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var code = 'turtle.done()\n';
return code;
}
export const turtle_exitonclick = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var code = 'turtle.exitonclick()\n';
return code;
}
export const turtle_move = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var direction = this.getFieldValue('DIR');
var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + direction + "(" + num + ')\n';
return code;
}
export const turtle_rotate = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var direction = this.getFieldValue('DIR');
var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + direction + "(" + num + ')\n';
return code;
}
export const turtle_setheading = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var argument = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.setheading(' + argument + ')\n';
return code;
}
export const turtle_screen_delay = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var argument = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.screen.delay(' + argument + ')\n';
return code;
}
export const turtle_goto = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var xnum = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var ynum = generator.valueToCode(this, 'val', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.goto(' + xnum + ',' + ynum + ')\n';
return code;
}
export const turtle_pos_shape = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var get = this.getFieldValue('DIR');
var code = varName + '.' + get + '()';
return [code, generator.ORDER_ATOMIC];
}
export const turtle_stamp = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.stamp()\n';
return code;
}
export const turtle_clear = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var clear = this.getFieldValue('DIR');
var code = varName + "." + clear + "(" + ')\n';
return code;
}
export const turtle_penup = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var penup = this.getFieldValue('DIR');
var code = varName + "." + penup + "(" + ')\n';
return code;
}
export const turtle_fill = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var penup = this.getFieldValue('DIR');
var code = varName + "." + penup + "_fill(" + ')\n';
return code;
}
export const turtle_size_speed = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = this.getFieldValue('TUR');
var size = this.getFieldValue('DIR');
var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + size + "(" + num + ')\n';
return code;
}
export const turtle_size = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var argument = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.pensize(' + argument + ')\n';
return code;
}
export const turtle_speed = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var argument = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.speed(' + argument + ')\n';
return code;
}
export const turtle_circle = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var circle = this.getFieldValue('DIR');
var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + circle + "(" + num + ')\n';
return code;
}
export const turtle_setxy = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var xy = this.getFieldValue('DIR');
var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + ".set" + xy + "(" + num + ')\n';
return code;
}
export const turtle_circle_advanced = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var argument = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + ".circle (" + num + ',' + argument + ')\n';
return code;
}
export const turtle_visible = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var visible = this.getFieldValue('DIR');
var code = varName + "." + visible + "(" + ')\n';
return code;
}
export const turtle_bgcolor = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var color = this.getFieldValue('FIELDNAME');
var code = "turtle." + 'bgcolor' + '("' + color + '")\n';
return code;
}
export const turtle_title = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
const TITLE = generator.valueToCode(this, 'TITLE', generator.ORDER_ASSIGNMENT) || 'Mixly';
var code = `turtle.title(${TITLE})\n`;
return code;
}
export const turtle_setup = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
const WIDTH = generator.valueToCode(this, 'WIDTH', generator.ORDER_ASSIGNMENT) || '1';
const HEIGHT = generator.valueToCode(this, 'HEIGHT', generator.ORDER_ASSIGNMENT) || 'None';
var code = `turtle.setup(width=${WIDTH}, height=${HEIGHT})\n`;
return code;
}
export const turtle_tracer = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
const STEP = generator.valueToCode(this, 'STEP', generator.ORDER_ASSIGNMENT) || '1';
const DELAY = generator.valueToCode(this, 'DELAY', generator.ORDER_ASSIGNMENT) || 'None';
var code = `turtle.tracer(${STEP}, delay=${DELAY})\n`;
return code;
}
export const turtle_pencolor = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color = this.getFieldValue('FIELDNAME');
var code = varName + "." + 'pencolor' + '("' + color + '")\n';
return code;
}
export const turtle_fillcolor = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color = this.getFieldValue('FIELDNAME');
var code = varName + "." + 'fillcolor' + '("' + color + '")\n';
return code;
}
export const turtle_clone = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.clone()';
return [code, generator.ORDER_ATOMIC];
}
export const turtle_bgcolor_hex = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = "turtle." + 'bgcolor' + '(' + color + ')\n';
return code;
}
export const turtle_pencolor_hex = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
//var color = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + "." + 'pencolor' + '(' + color + ')\n';
return code;
}
export const turtle_fillcolor_hex = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + 'fillcolor' + '(' + color + ')\n';
return code;
}
export const turtle_bgcolor_hex_new = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = "turtle." + 'bgcolor' + '(' + color + ')\n';
return code;
}
export const turtle_pencolor_hex_new = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
//var color = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + "." + 'pencolor' + '(' + color + ')\n';
return code;
}
export const turtle_fillcolor_hex_new = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + 'fillcolor' + '(' + color + ')\n';
return code;
}
export const turtle_color_hex = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
var color2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
var code = varName + "." + 'color' + '(' + color1 + ',' + color2 + ')\n';
return code;
}
export const turtle_color = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color1 = this.getFieldValue('FIELDNAME');
var color2 = this.getFieldValue('FIELDNAME2');
var code = varName + "." + 'color' + '("' + color1 + '","' + color2 + '")\n';
return code;
}
export const turtle_shape = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var direction = this.getFieldValue('DIR');
var code = varName + ".shape('" + direction + "')\n";
return code;
}
export const turtle_shapesize = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var argument1 = generator.valueToCode(this, 'WID', generator.ORDER_ASSIGNMENT) || '0';
var argument2 = generator.valueToCode(this, 'LEN', generator.ORDER_ASSIGNMENT) || '0';
var argument3 = generator.valueToCode(this, 'OUTLINE', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + ".shapesize(" + argument1 + ',' + argument2 + ',' + argument3 + ')\n';
return code;
}
export const turtle_textinput = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var title = generator.valueToCode(this, 'TITLE', generator.ORDER_ATOMIC);
var prompt = generator.valueToCode(this, 'PROMPT', generator.ORDER_ATOMIC);
var code = "turtle.textinput" + '(' + title + ',' + prompt + ')';
return [code, generator.ORDER_ATOMIC];
}
export const turtle_numinput = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var title = generator.valueToCode(this, 'TITLE', generator.ORDER_ATOMIC);
var prompt = generator.valueToCode(this, 'PROMPT', generator.ORDER_ATOMIC);
var data = generator.valueToCode(this, 'DEFAULT', generator.ORDER_ATOMIC);
var min = generator.valueToCode(this, 'MIN', generator.ORDER_ATOMIC);
var max = generator.valueToCode(this, 'MAX', generator.ORDER_ATOMIC);
var code = "turtle.numinput" + '(' + title + ',' + prompt + "," + data + ',minval = ' + min + ',maxval = ' + max + ')';
return [code, generator.ORDER_ATOMIC];
}
export const turtle_write = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var write = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
//var color = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + "." + 'write' + '(' + write + ')\n';
return code;
}
export const turtle_write_format = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var move = this.getFieldValue('MOVE');
var align = this.getFieldValue('ALIGN');
var fontname = generator.valueToCode(this, 'FONTNAME', generator.ORDER_ATOMIC);
var fontnum = generator.valueToCode(this, 'FONTNUM', generator.ORDER_ASSIGNMENT) || '0';
var fonttype = this.getFieldValue('FONTTYPE');
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var write = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + 'write' + '(' + write + ',' + move + ',align="' + align + '",font=(' + fontname + ',' + fontnum + ',"' + fonttype + '"))\n';
return code;
}
export const turtle_write_format_skulpt = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var move = this.getFieldValue('MOVE');
var align = this.getFieldValue('ALIGN');
var fontname = generator.valueToCode(this, 'FONTNAME', generator.ORDER_ATOMIC);
var fontnum = generator.valueToCode(this, 'FONTNUM', generator.ORDER_ASSIGNMENT) || '0';
var fonttype = this.getFieldValue('FONTTYPE');
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var write = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + 'write' + '(' + write + ',' + move + ',align="' + align + '",font=(' + fontname + ',' + fontnum + ',"' + fonttype + '"))\n';
return code;
}
export const turtle_color_seclet = function (_, generator) {
var colour = this.getFieldValue('COLOR');
var code = '"' + colour + '"'
return [code, generator.ORDER_ATOMIC];
}
export const turtle_getscreen = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var turName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
var code = varName + ' = ' + turName + '.getscreen()\n';
return code;
}
export const turtle_update = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var code = `${varName}.update()\n`;
return code;
}
export const turtle_onkey = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var v = generator.valueToCode(this, "VAR", generator.ORDER_NONE) || "None";
var callback = generator.valueToCode(this, "callback", generator.ORDER_NONE) || "None";
var code = varName + ".onkey(" + callback + ", " + v + ")\n";
return code;
}
export const turtle_onclick = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var callback = generator.valueToCode(this, "callback", generator.ORDER_NONE) || "None";
var code = varName + ".onclick(" + callback + ")\n";
return code;
}
export const turtle_ontimer = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var v = generator.valueToCode(this, "VAR", generator.ORDER_NONE) || "None";
var callback = generator.valueToCode(this, "callback", generator.ORDER_NONE) || "None";
var code = varName + ".ontimer(" + callback + ", " + v + ")\n";
return code;
}
export const turtle_listen = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.listen()\n';
return code;
}
export const turtle_screen_savefig = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
var code = varName + ".getcanvas().postscript(file=" + file + ")\n";
return code;
}