[
  {
    "id": 1,
    "type": "single_choice",
    "content": "小海在制作一个“弹球游戏”，舞台大小设为480×360。他用到了以下积木：移到x:0 y:0；面向90方向；重复执行：移动10步，碰到边缘就反弹。运行后，小球在舞台上往返运动。他发现小球到达舞台边缘反弹时，偶尔会卡在边缘抖动。下列分析中正确的是：",
    "options": [
      "A. 因为“碰到边缘就反弹”积木只能让角色在左右边缘反弹，不能用于上下边缘",
      "B. 移动10步恰好跨过舞台边缘时，下一帧角色可能仍在边缘之外，导致连续反弹，产生抖动",
      "C. 应当将“碰到边缘就反弹”替换为“如果碰到舞台边缘，那么旋转180度”，才能彻底避免抖动",
      "D. 在循环中加入“等待0.01秒”可以完全解决任何边缘反弹问题"
    ],
    "answer": "B"
  },
  {
    "id": 2,
    "type": "multiple_choice",
    "content": "老师要求设计一个“萤火虫群舞”项目：点击绿旗后，每隔0.5秒克隆一只萤火虫，总共克隆20只；每只克隆体出现在舞台随机位置，亮度在50到100之间随机变化，且不断小幅度移动；当克隆体被鼠标碰到时，它消失并播放“叮”声，同时变量“碰到的数量”增加1。关于这个项目，下列说法正确的有：",
    "options": [
      "A. 需要在角色中建立“碰到的数量”变量，且必须选择“适用于所有角色”，否则克隆体无法访问该变量",
      "B. 使用“移到随机位置”积木时，应确保角色不会出现在舞台外，可以结合“x在-240到240间取随机数”和“y在-180到180间取随机数”来实现",
      "C. 在克隆体启动时使用“重复执行直到（碰到鼠标指针？）”，内部移动几步，可以同时实现移动和等待被点击的效果，无需额外判断",
      "D. 让克隆体消失除了使用“删除此克隆体”，还可以使用“隐藏”积木，但隐藏不会释放内存，可能影响性能",
      "E. 播放声音“叮”时，如果多个克隆体同时被碰到，所有声音会叠加播放，可能造成声音失真，因此需要引入“播放声音...直到结束”进行串行处理"
    ],
    "answer": "B,D"
  },
  {
    "id": 3,
    "type": "single_choice",
    "content": "小宁做了一个“成语接龙”记录器，用列表保存玩家输入的词语。规则：每次输入一个四字成语后，程序判断该成语的第一个字是否等于上一个成语的最后一个字（首个成语只需要长度等于4），如果符合就加入列表，否则提示错误。她用询问与回答积木获取输入，并设计了如下算法：\n1. 初始化列表，清空；\n2. 询问并等待，获得回答；\n3. 如果 （列表长度为0） 且 （回答的字符数 = 4），那么将回答加入列表，并说“第一个词通过”；\n否则，如果 （列表长度 > 0）且 （回答的第1个字符 = 列表的第（列表长度）项的第4个字符），那么将回答加入列表，说“接龙成功”；\n否则，说“不符合规则”。\n4. 重复步骤2。\n运行一段时间后，她发现明明接龙正确的词有时被判定为错误。最可能的原因是：",
    "options": [
      "A. “回答的第1个字符”的判断在图形化编程中不能直接使用中文字符，必须转换为拼音",
      "B. 从列表中获取最后一项并取其第4个字符时，使用了错误的积木，如误用了“列表的第1项”而不是“列表的最后一项”",
      "C. 询问积木会延迟，导致回答还未完全存入变量时就被读取，产生空字符串",
      "D. 忘记将“回答”变量设为“适用于所有角色”，导致在重复执行时变量值不更新"
    ],
    "answer": "B"
  },
  {
    "id": 4,
    "type": "single_choice",
    "content": "小杰设计了一个“双人抢答器”：舞台上有角色A和角色B，当按下‘a’键时，角色A说“A抢答成功”；当按下‘b’键时，角色B说“B抢答成功”。他希望实现：一旦有人抢答成功，另一人无论怎么按键都不再响应，直到主持人按下空格键重置。为此他使用了广播机制：\n角色A：当按下a键 → 如果（变量“锁定”=0）那么→广播“A抢”并等待→将“锁定”设为1→说“A抢答成功”。\n角色B：当按下b键 → 如果（变量“锁定”=0）那么→广播“B抢”并等待→将“锁定”设为1→说“B抢答成功”。\n主持人角色：当按下空格键 → 将“锁定”设为0 → 说“重新开始”。\n测试时发现，在A抢答后，B立即按下b键，有时B仍然能说出“B抢答成功”。问题的主要原因是什么？",
    "options": [
      "A. “广播并等待”会立刻执行接收方的脚本，但变量“锁定”的修改可能存在延迟，B读到锁定=0时还未更新",
      "B. 按下b键的侦测积木使用了“当按下b键”的事件，该事件独立于其他脚本运行，无法被锁定变量阻止",
      "C. 因为角色A说“A抢答成功”的积木在设置锁定之后，导致广播先发送，B收到了广播",
      "D. 键盘按键侦测存在硬件冲突，同时按下两个键会丢失事件"
    ],
    "answer": "A"
  },
  {
    "id": 5,
    "type": "single_choice",
    "content": "小川想用画笔模块绘制一个彩色螺旋线，他编写了如下脚本：\n抬笔，清空，将笔的颜色设为0，将笔的粗细设为2；移到x:0 y:0；落笔；重复执行200次：\n    移动（变量“步长”的值）步，\n    右转（变量“角度”的值）度，\n    将笔的颜色增加2，\n    将“步长”增加0.1，\n    将“角度”设为（角度 × 0.99）。\n设初始时“步长”=2，“角度”=89。运行后他看到的图案是：",
    "options": [
      "A. 一个标准的圆形，因为角度接近90度且步长逐渐增大，半径均匀扩大",
      "B. 逐渐向外扩散且颜色渐变的螺旋线，但后期会聚拢成一团，因为角度不断减小趋近0，转向不足",
      "C. 一个半径均匀增大的多边形，边数由角度决定，且边数越来越多，最后近似椭圆",
      "D. 图案会超出舞台导致程序中断，因为步长无限增长会使坐标超出范围"
    ],
    "answer": "B"
  },
  {
    "id": 6,
    "type": "application",
    "content": "“智能除草机”模拟：舞台上有一片矩形草地（用绿色矩形角色表示，位置固定），画面上方随机下落“杂草”（黄色小圆点）。玩家用鼠标控制一个圆形的除草机角色移动（始终面向鼠标指针，且按下鼠标时前进，松开停止）。规则：\n1. 杂草每隔1到3秒（随机）在舞台顶部水平随机位置出现，并匀速下落，速度在2到5之间随机；\n2. 除草机碰到杂草时，杂草消失，变量“已除草数”增加1；\n3. 如果杂草落到舞台底部（y坐标小于-170），则变量“漏除草数”增加1，并播放音效“失败声”；\n4. 当“漏除草数”达到5时，游戏结束，舞台显示“Game Over”并停止所有脚本。\n请写出实现该项目的完整积木方案（可分角色描述，包含必要的初始化、变量创建、循环与条件分支、克隆管理、侦测控制等）。",
    "answer": "一、准备工作：\n- 创建变量：“已除草数”、“漏除草数”（适用于所有角色）。\n- 导入或绘制角色：“草地”（矩形绿色），“除草机”（圆形），“杂草”（黄色小圆点）。\n- 导入音效“失败声”。\n\n二、草地角色：只需固定在合适位置，无脚本。\n\n三、除草机角色：\n当绿旗被点击：\n    将“已除草数”设为0，将“漏除草数”设为0。\n    移到鼠标指针（或初始位置自定）。\n    重复执行：\n        面向鼠标指针。\n        如果（鼠标按下？）那么：\n            移动3步（速度可调）。\n        如果（碰到“杂草”？）那么：\n            将“已除草数”增加1。\n            广播“消除杂草”并等待（用于告知对应的杂草克隆体删除）。\n    但注意：多个克隆体可能同时被碰到，广播可能误删。更严谨的做法：在杂草克隆体里循环判断是否碰到除草机。\n优化方案：\n除草机不做广播，只在杂草克隆体中不断侦测：“如果碰到除草机？那么：删除此克隆体；将已除草数增加1”。\n\n四、杂草角色：\n当绿旗被点击：隐藏。\n重复执行：\n    等待（在1到3间取随机数）秒。\n    克隆自己。\n\n作为克隆体启动时：\n    显示。\n    将大小设为20（适当）。\n    移到x: 在-220到220间取随机数 y: 180。\n    设定下落速度：变量“下落速度”（仅适用于当前角色）设为在2到5间取随机数。\n    重复执行直到（y坐标 < -170 或 碰到除草机？）：\n        将y坐标增加（下落速度 * -1）。\n        如果（碰到除草机？）那么：\n            将“已除草数”增加1。\n            删除此克隆体。\n    如果（y坐标 < -170）那么：\n        将“漏除草数”增加1。\n        播放声音“失败声”。\n        删除此克隆体。\n    注意：用两个独立的“如果”分别判断碰到除草机和到达底部，避免同时触发。因为使用“重复执行直到（条件1 或 条件2）”，当循环退出时需再次检查是哪个条件成立。\n\n更清晰的逻辑：\n当克隆体启动：\n    显示，移到x:随机(-220,220) y:180。\n    设置私有变量“速度”为随机2~5。\n    重复执行：\n        将y坐标增加（-速度）。\n        如果（碰到除草机？）那么：\n            将“已除草数”增加1。\n            删除此克隆体。\n        如果（y坐标 < -170）那么：\n            将“漏除草数”增加1。\n            播放声音“失败声”。\n            删除此克隆体。\n\n五、游戏结束判定（在舞台或新建角色中）：\n当绿旗被点击：\n    重复执行：\n        如果（漏除草数 ≥ 5）那么：\n            说“Game Over”2秒。\n            停止全部脚本。\n注意：停止全部脚本会停止所有角色的脚本，包括杂草的产生。"
  },
  {
    "id": 7,
    "type": "application",
    "content": "设计一个“健康指数小调查”程序。要求：\n1. 点击绿旗后，角色依次询问用户三个问题并等待输入：\n   - “请输入您的年龄（数字）？”\n   - “请输入您的身高（厘米）？”\n   - “请输入您的体重（千克）？”\n2. 将三个输入值分别存入列表“个人信息”中（按顺序添加）。\n3. 计算BMI：体重(kg)÷身高(m)²，并将计算结果四舍五入保留一位小数，添加到列表“个人信息”的末尾。\n4. 根据年龄和BMI给出建议：\n   - 如果年龄 < 18：不给出标准建议，只说“少年，保持均衡营养！”\n   - 如果年龄 ≥ 18：\n       - BMI < 18.5 → 说“偏瘦，注意营养。”\n       - 18.5 ≤ BMI < 24 → 说“标准，继续保持！”\n       - BMI ≥ 24 → 说“偏重，合理饮食与运动。”\n5. 所有逻辑需用分支和运算积木实现，不可使用额外扩展。\n请写出详细的脚本设计，包括列表的初始化和数据处理步骤。",
    "answer": "一、初始化：\n- 创建列表“个人信息”，勾选“适用于所有角色”方便处理。\n- 清空列表（当绿旗被点击时执行）。\n\n二、主脚本（角色1）：\n当绿旗被点击：\n    清空“个人信息”列表。\n    询问“请输入您的年龄（数字）？”并等待。\n    将（回答）加入“个人信息”。\n    询问“请输入您的身高（厘米）？”并等待。\n    将（回答）加入“个人信息”。\n    询问“请输入您的体重（千克）？”并等待。\n    将（回答）加入“个人信息”。\n    \n    # 提取数据，注意列表项为字符串，需转为数字\n    设变量“年龄”为（将第1项“个人信息”转换为数字）——Scratch中可使用“将 年龄 设为 （第1项 个人信息）”，自动转为数字或使用运算积木（第1项 个人信息 + 0）强制转换。更安全：设“年龄”为第1项，“身高”为第2项，“体重”为第3项，运算时用（年龄+0）确保数字。\n    设“身高米”为（（第2项个人信息）÷100）。\n    设“BMI”为（第3项个人信息 ÷ （身高米 × 身高米））。\n    设“BMI四舍五入”为（四舍五入 BMI 到 1 位小数）——可使用（将 BMI * 10 四舍五入）÷10 实现。\n    将“BMI四舍五入”加入“个人信息”。\n    \n    如果（（年龄+0）< 18）那么：\n        说“少年，保持均衡营养！”2秒。\n    否则：\n        如果（（年龄+0）≥ 18）那么：\n            如果（BMI < 18.5）那么：\n                说“偏瘦，注意营养。”2秒。\n            否则：\n                如果（BMI < 24）那么：\n                    说“标准，继续保持！”2秒。\n                否则：\n                    说“偏重，合理饮食与运动。”2秒。\n\n注意：因为年龄是第一个询问，且存在年龄边界，需用嵌套的“如果那么否则”。\n\n三、容错：为简化，题目未要求校验输入非法（如非数字），假设正确输入。以上可直接完成。\n优化：可使用“回答”积木每次读取后加入列表。需要确保列表顺序：第1项年龄，第2项身高，第3项体重，第4项BMI。"
  },
  {
    "id": 8,
    "type": "application",
    "content": "利用画笔模块绘制一个“万花筒”图案。要求：\n1. 舞台中心作为原点，使用两个嵌套的循环：外层循环控制绘制多少个相同的花瓣形状，内层循环绘制一个花瓣（如菱形或曲线）。\n2. 每个花瓣的颜色逐渐变化，且每次绘制前笔的颜色根据外层循环的当前序号进行计算，使得整体颜色过渡自然。\n3. 需要使用自定义积木（函数），将绘制一个花瓣的过程封装起来，该自定义积木至少有一个参数表示大小。\n4. 绘制完成后角色说出绘制所花的时间（从点击绿旗开始计时，直到完成）。\n5. 所有画笔操作开始前清空舞台画布。\n请提供完整脚本，包括自定义积木的设计和调用方式。",
    "answer": "一、准备工作：\n- 添加画笔扩展。\n- 创建计时变量“开始时间”、“结束时间”（适用于所有角色）。\n\n二、自定义积木“绘制花瓣 大小”：\n定义“绘制花瓣 (大小)”：\n    落笔。\n    # 画一个菱形花瓣，由两条折线组成\n    重复执行2次：\n        移动(大小)步，右转60度。\n        移动(大小)步，右转120度。\n    抬笔。\n注：该菱形实际中心对称，可自行设计花瓣形状。\n\n三、主脚本：\n当绿旗被点击：\n    全部擦除。\n    抬笔。\n    将计时器归零（或利用“当前时间”差值）。简便：设置变量“开始时间”为（计时器）。\n    移到x:0 y:0。\n    面向上方（0度方向）。\n    将笔的颜色设为0。\n    将笔的粗细设为2。\n    设置变量“花瓣数”为12（可调）。\n    重复执行（花瓣数）次：\n        将笔的颜色设为（当前循环次数 × （颜色范围/花瓣数）），如 循环次数设为变量 i 从0开始：重复执行直到 i = 花瓣数，内部设置颜色为 i*(255/花瓣数)的整数。\n        更精准：使用重复执行（花瓣数）次，用变量“当前次数”从1到花瓣数，则笔的颜色设为（（当前次数-1） * 21）绕一圈回0需取余255，这里可以简化取色增量。例如：设颜色为（当前次数 * 20）对255取余。\n    具体：\n    设变量 idx 为 0。\n    重复执行（花瓣数）次：\n        将 idx 增加 1。\n        将笔的颜色设为（（idx * 20） mod 255）。\n        调用“绘制花瓣 大小：50”（可调整大小）。\n        右转（360 / 花瓣数）度。\n    end\n    设“结束时间”为（计时器）。\n    说（连接“绘制耗时”和（（结束时间）-（开始时间））和“秒”）2秒。\n\n注意：计时器从绿旗开始一直在走，取差值正确。Scratch计时器积木为“计时器”，单位秒。设置“开始时间”为“计时器”，“结束时间”为“计时器”时差即得。\n\n此方案完成多花瓣绘制、颜色过渡、自定义积木封装、计时显示。"
  },
  {
    "id": 9,
    "type": "application",
    "content": "“基因变异模拟器”项目：舞台上有多个初始形态相同的“细胞”角色。点击绿旗后，出现1个母细胞（原始造型），等待2秒后，母细胞通过克隆产生10个子细胞。每个子细胞在出现时，随机选择一种“变异”：\n- 60%概率变为造型A（红色圆形），\n- 30%概率变为造型B（蓝色方形），\n- 10%概率生成一个“超级细胞”（造型C，金色星形）。\n所有子细胞克隆体出现在舞台随机位置，并缓慢无规则漂移（在-2到2步间随机上下左右移动）。当玩家用鼠标点击任意子细胞时，该细胞会广播一条“被选中”消息，所有其他子细胞收到消息后立刻改变颜色特效（增加25），同时被点击的细胞自身说“我是XX型”（根据自身造型说不同文本），等待1秒后整个程序停止。\n请写出完整的脚本设计，包括母细胞与子细胞克隆体的控制，注意广播的合理使用，避免消息丢失或误触发。",
    "answer": "一、准备：\n- 绘制/导入角色：“母细胞”有造型A（红圆）、B（蓝方）、C（金星星）和一个默认原始造型（例如灰色圆）。将原始造型设为第1个，A、B、C依次。\n- 需要变量：“变异类型”（仅适用于当前角色，用于传递造型）。可不用变量，直接在克隆体启动时随机造型。\n\n二、母细胞脚本：\n当绿旗被点击：\n    切换到造型“原始造型”（假设名称或编号）。\n    显示。\n    移到随机位置（或固定），例如中心。\n    说“母细胞生成中…”2秒。\n    重复执行10次：\n        # 生成随机数决定造型\n        设私有变量“随机值”为（在1到100间取随机数）。\n        如果（随机值 ≤ 60）那么：\n            将私有变量“造型选择”设为“A”。\n        否则：\n            如果（随机值 ≤ 90）那么：\n                将“造型选择”设为“B”。\n            否则：\n                将“造型选择”设为“C”。\n        end\n        克隆自己。\n    隐藏（母细胞结束使命）。\n\n三、作为克隆体启动时（每个子细胞）：\n    （继承母细胞的变量“造型选择”？不，克隆体启动时读取变量需要在克隆前设置本角色私有变量，但由于克隆体继承了母体所有变量值，包括私有变量。因此可以在克隆前设置母体的私有变量，克隆后子细胞读取。更可靠：在克隆体启动时直接根据随机值重新判断。方法：克隆体启动时重新生成随机数决定造型。但要求母细胞决定变异，所以应克隆前传递。实现：母细胞中设置变量“变种”（适用于当前角色），克隆。那么在克隆体启动时使用“变种”的值。但要确保每次循环都更新变种。\n    伪代码：\n    当作为克隆体启动：\n        显示。\n        移到随机位置：x在-220到220，y在-160到160随机。\n        如果（变种 = “A”）那么：\n            切换到造型A（红圆）。\n        否则：\n            如果（变种 = “B”）那么：\n                切换到造型B（蓝方）。\n            否则：\n                切换到造型C（金星星）。\n        end\n        重复执行如下漂移：\n            如果（碰到鼠标指针？且鼠标被按下）那么：\n                广播“被选中”并等待。\n                停止当前脚本（或其他角色的其他克隆体会响应广播）。但注意广播会被所有角色接收。所以需设计当收到“被选中”时，除本克隆体外，其他子细胞改变颜色。可以在子细胞的克隆体启动中加入“当接收到‘被选中’”：如果（自己不是被点击者）则改变颜色特效。如何区分？可用一个公有变量“点击者CloneID”记录。或者简单处理：收到广播后，所有子细胞都做颜色特效增加25，但被点击的也会增加，但可以说出文字后停止，无碍。\n                为避免自己触发自己的广播导致颜色增加两次等，可设一个标记。简化：允许所有子细胞都响应“被选中”增加颜色特效25，这包括点击者自身，可以接受。\n        但需防止连续点击。在收到广播后，可等待1秒然后停止全部。\n\n详细脚本：\n\n母细胞：\n当绿旗被点击：\n    显示，移到x:0 y:0。\n    说“生成中…”2秒。\n    设置变量“繁殖次数”为0（适用于当前角色）。\n    重复执行10次：\n        如果（在1到100间随机数 ≤ 60）那么：\n            将“变种”设为“A”。\n        否则：\n            如果（该随机数 ≤ 90）那么：\n                将“变种”设为“B”。\n            否则：\n                将“变种”设为“C”。\n        克隆自己。\n        等待0.1秒。\n    隐藏。\n\n克隆体启动：\n    显示。\n    移到x:随机(-220,220) y:随机(-160,160)。\n    如果（变种 = “A”）那么：\n        换成造型A。\n    否则：\n        如果（变种 = “B”）那么：\n            换成造型B。\n        否则：\n            换成造型C。\n    end\n    重复执行：\n        在-2到2之间取随机数，改变x和y坐标（实现漂移）。可以：x增加(随机(-2,2))，y增加(随机(-2,2))。\n        如果（鼠标按下？且 碰到鼠标指针？）那么：\n            广播“被选中”。\n            说（连接“我是”和（变种）和“型”）2秒。\n            等待1秒。\n            停止全部脚本。\n\n当接收到“被选中”：\n    将颜色特效增加25。（所有克隆体都会执行，包括广播者自己，可以）\n\n这样就完成了。注意需防止多次点击，停止全部脚本会结束程序。"
  },
  {
    "id": 10,
    "type": "application",
    "content": "“数据加密传输”模拟：有两个角色，发送方（发信者）和接收方（收信者）。发送方在点击绿旗后询问用户要发送的秘密消息（只包含大写英文字母），然后将每个字母按照以下规则加密：字母在字母表中的位置序号乘以一个密钥数字（密钥初始为3，每次加密后密钥变为（密钥×2）的结果取个位数），得到的数字用一个32位二进制补码形式表示（不足32位前面补0），然后将这些二进制字符串拼接成一个长字符串，存入列表“加密数据”中。接收方通过另一个按钮（按空格键）开始解密：从列表中取出加密数据，按32位分割，恢复出数字，再用密钥同步解密（密钥初始也为3，并同步更新），得到原字母，最后将解码的消息说出。\n请写出设计方案，包括：如何实现字母与序号转换（A=1, B=2,...），如何生成32位二进制补码表示（注意正数补码与原码相同，模拟过程即可），如何同步密钥，以及接收方的解密步骤。",
    "answer": "一、设计思路：\n使用Scratch的列表和运算积木，但Scratch本身对二进制操作支持有限，需要用字符串拼接模拟32位二进制。正数的补码就是其二进制，我们只需将十进制数字转为二进制字符串并补零到32位。字母序号：利用变量存储字母表字符串\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"，通过查找位置获得序号（积木“apple在banana中的位置”）。\n\n二、全局变量和列表：\n- 密钥（Key），适用于所有角色，初始3。\n- 字母表字符串，可存为常量列表或直接用字符串“ABCDEFGHIJKLMNOPQRSTUVWXYZ”。\n- 列表“加密数据”，适用于所有角色，用于存放拼接后的二进制字符串。\n\n三、发送方脚本：\n当绿旗被点击：\n    清空“加密数据”列表。\n    将Key设为3。\n    询问“请输入大写英文消息：”并等待。\n    设变量“消息”为（回答）。\n    设变量“长度”为（消息的字符数）。\n    设变量“二进制总串”为空字符串。\n    设变量“位置”为1。\n    重复执行（长度）次：\n        设“当前字符”为（消息的第 位置 个字符）。\n        设“序号”为（在“ABCDEFGHIJKLMNOPQRSTUVWXYZ”中第一个“当前字符”出现的位置）。如果为0则报错（假设正确）。\n        设“加密数字”为（序号 × Key）。\n        调用自定义积木“转为32位二进制 (加密数字)”获取二进制字符串，存入temp。\n        将temp添加到“二进制总串”末尾。\n        更新Key：将Key设为（（Key × 2）除以10的余数）。注意Key是个位数，可能变为0，需处理Key为0情况，可约定Key为0时置为1。或者按题目“密钥×2的结果取个位数”，3×2=6，6×2=12取2，2×2=4，4×2=8，8×2=16取6...，不会为0。\n        位置增加1。\n    将“二进制总串”加入列表“加密数据”（作为一项）。\n    说“加密完成”2秒。\n\n自定义积木“转为32位二进制 (数字)”：\n    设“结果二进制”为空。\n    设“被除数”为（数字）。\n    重复执行直到（被除数 = 0）或（结果长度足够，采用标准除法）：\n        设“余数”为（被除数除以2的余数）。\n        将（连接“余数”和“结果二进制”）设为“结果二进制”（即余数在前）。\n        设“被除数”为（向下取整（被除数 ÷ 2））。\n    重复执行直到（结果二进制的长度 = 32）：\n        在“结果二进制”前拼接“0”。\n    返回“结果二进制”。\n\n注意：Scratch不能直接返回，通过设置全局变量返回，或直接在脚本中运算。这里可以通过设置一个临时变量传递。\n\n四、接收方脚本（按空格键触发）：\n当按下空格键：\n    如果（“加密数据”列表长度为0？）那么：说“无加密数据”2秒，停止。\n    将从“加密数据”第1项读出设为“加密串”。\n    清空列表以表示已读。或保留。\n    将Key设为3。\n    设“解密消息”为空。\n    设“索引”为1。\n    重复执行直到（索引 > 加密串的长度）：\n        取出32位子串：从“加密串”的索引开始取32个字符，存入“二进制块”。\n        将“二进制块”转为十进制数字（自定义积木“二进制转十进制”）。\n        得到数字“原始数字”。\n        由于加密时数字 = 序号 × Key，那么序号 = 原始数字 ÷ Key。必须整除，假设无误。\n        得到“序号”。\n        根据序号从字母表中取出对应字母：用（字母表的第 序号 个字符）。\n        将该字符添加到“解密消息”末尾。\n        更新Key：Key设为（Key × 2）除以10的余数。\n        索引增加32。\n    说（连接“解密消息：”和“解密消息”）2秒。\n\n自定义积木“二进制转十进制 (二进制字符串)”：\n    设“结果”为0。\n    设“位置”为1。\n    重复执行32次：\n        设“位值”为（二进制字符串的第 位置 个字符）。\n        如果（位值 = “1”）那么：\n            设“结果”为（结果 + （2的（32 - 位置）次方））。注意：32位最左边是最高位，对应2^31。即位置1对应2^(32-1)。\n        位置增加1。\n    返回结果。（用变量传递）\n\n五、说明：以上方案完整实现了加密解密过程，并遵循密钥同步。Scratch中可创建对应的自定义积木，用全局变量传递返回值。"
  }
]