# mmake-block-studio
**Repository Path**: xuegoo_admin/mmake-block-studio
## Basic Information
- **Project Name**: mmake-block-studio
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-11-02
- **Last Updated**: 2026-11-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 掌控图形化编程(Mmake)
面向中小学**信息科技 / 人工智能**课堂的图形化编程平台:拖积木 → 生成 MicroPython →
一键上传到**掌控板(mPython)**,同时配套**虚拟仿真**与**舞台演示**两种运行视图。
> 纯前端、单页、免安装;数据保存在浏览器本地,不上传服务器。
**在线体验:** | **源码:**
---
## 它能做什么
| 模块 | 说明 |
|---|---|
| 积木编程 | 基于 Blockly,中文积木,按「控制 / 运动 / 外观 / 逻辑 / 屏幕 / 变量 / 掌控板 / 拓展设备」分类 |
| 代码生成 | 实时生成可读的 MicroPython 代码,格式与 mPython 官方示例一致 |
| 上传真机 | WebSerial 直连,raw REPL 写入 `main.py`,无需安装 mPython IDE |
| 虚拟仿真 | 2D 掌控板 + 拓展设备卡片,可拖滑杆造数据、点按键、摇晃、模拟传感器 |
| 舞台演示 | 情景化舞台(书房 / 交通 / 校园…),元素可拖动,掌控小助手同步屏幕、可用 A/B 键与 PYTHON 触控 |
| 拓展库 | 40+ 传感器 / 执行器,悬停看详细介绍,点「▶ 视频介绍」看分镜动画 |
| 素材库 | 内置音乐、图片、表情、情景元素,支持上传自定义素材 |
| 工程文件 | 保存为 `.mxml`,可直接用 mPython IDE 打开;也支持打开官方 mxml / py |
## 运行方式
### 1. 在线版(推荐给课堂)
浏览器打开 ,
**必须用 Edge 或 Chrome**(上传真机依赖 WebSerial)。
### 2. Windows 桌面版
下载 `Mmake.exe` 双击运行:程序会把网页释放到
`%LOCALAPPDATA%\Mmake\web`,再用 Edge / Chrome 打开,然后自身退出。
没有常驻后台进程;工程数据跟着浏览器走,路径固定所以不会丢。
> 没有 Edge / Chrome 的机器,可在命令行执行 `Mmake.exe --serve`,
> 程序会起一个本地 HTTP 服务并给出访问地址。
### 3. 源码运行
```bash
git clone https://github.com/Ixinlin/mmake-block-studio.git
cd mmake-block-studio
# 直接用浏览器打开 index.html 也能跑(file:// 属于安全上下文,WebSerial 可用)
# 更稳妥的是起个静态服务:
npx serve .
```
## 打包 Windows 桌面版
```bash
node tools/make-icon.js # 由 docs/logo/Mmake-source.png 生成圆角 logo 与 ICO
node tools/build-publish.js # generate publish/(干净网页,已抹掉内置凭据)
node tools/build-exe.js # 打包 dist/Mmake.exe(需要 Python + PyInstaller)
```
`build-exe.js` 会:
1. 生成一份干净的 `publish/`;
2. **随机生成 256 位资源密钥**,分片混淆后写入 `tools/exe/_buildkey.py`(不入库);
3. 把 `publish/` 加密打包成 `build/web.pak`;
4. 用 PyInstaller 把「启动器 + 加密资源包」打成单文件 exe,并嵌入图标与版本信息。
运行时启动器解密 `web.pak` → 释放到 `%LOCALAPPDATA%\Mmake\web` → 用 Edge/Chrome 打开。
资源包带 SHA-256 校验,且用指纹文件 `web.pakid` 判断是否已释放过,二次启动秒开。
> **关于"加密"的能力边界**:网页是纯前端,代码必然要送到用户机器上。
> 这里做的是**资源包加密** —— 用 7-Zip 打开 exe 只能看到 `web.pak` 的乱码,
> 拿不到 html/js/css 明文。它挡得住"顺手把源码拷走",**挡不住专业逆向**。
> 真正的保护请靠开源协议与版权声明。
## 开发
```bash
npm install # 只装开发依赖(jsdom / playwright)
node tools/run-tests.js # 跑全部测试
node tools/run-tests.js r50 # 只跑某一轮
```
### 构建/打包脚本
| 脚本 | 作用 |
|---|---|
| `tools/build-publish.js` | 生成 `publish/`:可托管的干净网页(抹掉内置 API 凭据、替换教材示例) |
| `tools/build-repo.js` | 生成开源仓库目录(把运行时、构建脚本、测试、README/LICENSE 归拢到一起) |
| `tools/make-icon.js` | 由原始 logo 生成圆角透明 PNG 与多尺寸 ICO(用 Playwright + canvas,无需 Pillow) |
| `tools/pack-web.js` | 把 `publish/` 加密打包成 `build/web.pak` |
| `tools/build-exe.js` | 一键打包 `dist/Mmake.exe`(含密钥注入、图标、版本资源) |
| `tools/exe/launcher.py` | exe 启动器:解密资源包 → 释放 → 调 Edge/Chrome 打开 |
| `tools/exe/pakcrypto.py` | 资源包解密(纯标准库:`hashlib.shake_256` 密钥流 + SHA-256 校验) |
| `tools/png-info.py` | 零依赖读取 PNG,查看尺寸/通道/alpha,用于核对 logo |
### 目录结构
```
index.html 入口
css/style.css 全部样式
js/
app.js 主流程、工具栏、拓展库、运行控制
blocks-defs.js 积木定义(含自定义积木)
toolbox.js 工具箱分类与影子块
gen-python.js 积木 → MicroPython
gen-sim.js 积木 → 仿真执行代码
sim-engine.js 仿真运行时(解释执行生成的 JS)
sim-board.js 2D 掌控板与拓展设备卡片
stage.js / stage-scene.js 舞台与情景元素
board3d.js 掌控板 3D 视图
serial-link.js WebSerial + raw REPL 上传
project.js 工程存取 / mxml 导入导出
py2blocks.js Python → 积木(教材示例反解)
device-intro.js 拓展设备介绍与「视频介绍」
... 素材库、音乐、二维码、语音、视觉等
vendor/blockly/ Blockly 10 运行时
docs/logo/ logo 素材(原始方图 + 圆角透明版)
tools/ 构建与测试脚本
test-r*.js 各轮功能的回归测试
```
### 技术要点
- **Blockly 10**:两条反序列化路径(`fromXml` / `loadState`)行为不同,拖拽走后者。
- **上传协议**:官方 raw REPL 时序 `\r\n\x03\x03` → `\r\n\x01` → 横幅 →
命令 + `\x04` → `OK` + stdout`\x04`stderr`\x04`>`。
写入采用「**先按 UTF-8 字节切分,再逐块转义**」,避免转义序列被切断造成 `SyntaxError`。
- **仿真**:把积木编译成一段 JS,由 `sim-engine` 用异步解释器跑,
与真机共用同一份状态模型,所以「仿真能跑的,真机基本也能跑」。
## AI 功能(可选)
语音识别 / 合成、人脸、文字、物体识别走**讯飞开放平台**。
本仓库**不内置任何 API 凭据**(避免泄露账号额度),
需要时在界面右上角 **⚙ AI 设置** 里填自己的 `APPID / APIKey / APISecret`,
保存在浏览器 localStorage,不会写进文件。
不填也能正常使用其余全部功能,只是识别类积木会返回 401。
## 已知限制
- 上传真机仅支持 Chromium 内核浏览器(Edge / Chrome / 国产 Chromium 浏览器)。
- 部分官方示例涉及 SIoT / MQTT / 音频录制,积木体系未覆盖,导入后会退化为普通文本积木。
- 教材(湘科版)示例数据未随开源版分发。
## 参与贡献
欢迎提 Issue / PR。提交前请:
1. `node tools/run-tests.js` 全绿;
2. 新增功能补一份 `test-rNN.js`;
3. 不要把任何密钥、内网地址、学生个人信息写进代码或测试。
## 许可证
[MIT](LICENSE)