> **GESP等级：三级 | 考级考点：GESP Python 三级**

# 教案：第22节 EasyGUI + turtle 综合项目

| 项目 | 内容 |
|------|------|
| **课程编号** | GESP #13-3-4 |
| **章节** | 13_EasyGUI → 第22节_综合项目 |
| **课题** | EasyGUI + turtle 综合项目：小乌龟画图助手 |
| **课型** | 综合实操课（项目式学习） |
| **时长** | 60分钟 |
| **前置知识** | EasyGUI 弹窗/选择/文件操作 + turtle 基础绘图 |

---

## 一、教学总目标

### 知识与技能
1. 综合运用 EasyGUI 的 choicebox / integerbox / buttonbox / msgbox 构建交互界面
2. 综合运用 turtle 绘制多种图形（圆形、正方形、三角形、五角星等）
3. 掌握"数据驱动绘图"思想——用户选择映射为绘图参数
4. 掌握函数封装与模块化设计（一个形状一个函数）

### 过程与方法
1. 分层递进式教学：入门 → 进阶 → 挑战
2. 项目驱动：每个关卡完成一个完整功能
3. 代码复用：从简到繁不断扩展，而非从零重写

### 情感态度与价值观
1. 体验"交互式编程"的成就感——程序能理解用户的选择
2. 培养分层设计思维——复杂功能由简单模块组合而成
3. 激发创造力——挑战版鼓励自由创作

---

## 二、教学重点与难点

| 类型 | 内容 |
|------|------|
| **重点** | EasyGUI 交互 + turtle 绘图的综合运用 |
| **重点** | 用户选择到绘图参数的映射逻辑 |
| **难点** | 复杂形状（五角星、心形）的 turtle 绘制算法 |
| **难点** | 规律图案的位置计算（环形、螺旋的数学原理） |

---

## 三、教学准备

- Python 环境（3.7+）
- 安装 EasyGUI：`pip install easygui`
- turtle 模块（Python 内置，无需额外安装）
- 课件文件：`13第22节4_代码.py`

---

## 四、教学过程（60分钟）

### 第一部分：导入（5分钟）

**情境导入：**
> "同学们，前面我们学了 EasyGUI 的各种弹窗，也学了 turtle 画图。今天我们把它们结合起来——做一个'小乌龟画图助手'！用户只需要点一点、选一选，小乌龟就能按照要求画出图形来。"

**展示效果：**
- 运行第1关程序，演示完整的交互流程
- 提问："猜猜看，程序是怎么知道用户想画什么颜色的？"

---

### 第二部分：第1关 · 入门版（15分钟）

#### 2.1 交互流程分析

```
msgbox 欢迎
    ↓
choicebox 选颜色
    ↓
choicebox 选形状（圆形/正方形/三角形）
    ↓
integerbox 选大小
    ↓
ccbox 确认信息
    ↓
turtle 绘图
    ↓
ccbox 是否再画一次
```

#### 2.2 核心知识点讲解

1. **choicebox 返回值处理**
   - 用户点击"取消"返回 `None`
   - 必须判断 `None`，否则程序会崩溃

2. **颜色名 → turtle 颜色 映射**
   ```python
   COLOR_MAP = {
       "红色": "red",
       "蓝色": "blue",
       ...
   }
   ```

3. **draw_shape 分发函数**
   ```python
   def draw_shape(t, shape_name, size, color, fill=True):
       shape_map = {"圆形": draw_circle, "正方形": draw_square, ...}
       draw_func = shape_map.get(shape_name)
       if draw_func:
           draw_func(t, size, color, fill=fill)
   ```

#### 2.3 学生实操任务

1. 运行程序，体验第1关完整流程
2. 理解 `choicebox` 的返回值是什么类型
3. 修改代码：在 `COLOR_MAP` 中增加一种新颜色

---

### 第三部分：第2关 · 进阶版（15分钟）

#### 3.1 新增功能讲解

| 功能 | 使用的 EasyGUI 控件 | 说明 |
|------|---------------------|------|
| 位置选择 | choicebox | 9宫格位置 → 屏幕坐标 |
| 线宽选择 | integerbox | 1~10 |
| 填充开关 | buttonbox | "填充"/"不填充" |
| 连续画 | while 循环 | 每次画完询问下一步 |

#### 3.2 位置映射原理

```python
POSITION_MAP = {
    "左上": (-250, 150),
    "中心": (0, 0),
    "右下": (250, -150),
    ...
}
```

用户选"左上" → 程序查表得到坐标 (-250, 150) → turtle 移动到该位置绘图

#### 3.3 学生实操任务

1. 体验第2关，画出3个以上不同位置不同颜色的图形
2. 理解 `go_to_position` 函数的作用
3. 思考：如何通过修改映射表来改变位置布局？

---

### 第四部分：第3关 · 挑战版（20分钟）

#### 4.1 三种创作模式

**模式1：规律图案**
- 画一排：循环 + 坐标递增
- 环形阵列：三角函数计算圆周点
- 棋盘格：双层循环 + 行列奇偶判断
- 螺旋阵列：半径递增 + 角度旋转

**模式2：颜色序列**
- `multchoicebox` 多选颜色
- 循环使用颜色列表（取模运算）

**模式3：随机创作**
- `random.choice` 随机选颜色/形状/位置
- 每次运行生成独一无二的图案

#### 4.2 数学原理（环形阵列）

```python
import math
for i in range(count):
    angle = 2 * math.pi * i / count
    x = radius * math.cos(angle)
    y = radius * math.sin(angle)
```

- `2 * math.pi` = 360度（一圈）
- `i / count` = 当前是第几分之几圈
- 乘起来得到每个图形所在的弧度角
- `cos/sin` 将弧度角转为 x/y 坐标

#### 4.3 学生实操任务

1. 运行第3关，体验三种模式
2. 挑战：在规律图案中增加一个"锯齿形"排列
3. 挑战：修改随机创作的范围，让图形只出现在画布上半部分

---

### 第五部分：项目总结（5分钟）

#### 5.1 知识回顾

```
┌─────────────────────────────────────┐
│      小乌龟画图助手 · 知识图谱      │
├─────────────────────────────────────┤
│                                     │
│  EasyGUI 层                         │
│  ┌──────────────┬──────────────┐   │
│  │ choicebox    │ 选择列表项   │   │
│  │ integerbox   │ 输入整数     │   │
│  │ buttonbox    │ 按钮选择     │   │
│  │ multchoicebox│ 多选         │   │
│  │ msgbox       │ 提示信息     │   │
│  │ ccbox        │ 确认/取消    │   │
│  └──────┬───────┴──────┬───────┘   │
│         ↓              ↓           │
│  映射层   COLOR_MAP  POSITION_MAP  │
│         ↓              ↓           │
│  turtle 绘图层                     │
│  ┌──────────────────────────────┐  │
│  │ draw_circle                  │  │
│  │ draw_square                  │  │
│  │ draw_triangle                │  │
│  │ draw_star                    │  │
│  │ draw_hexagon                 │  │
│  │ draw_heart                   │  │
│  │ draw_spiral                  │  │
│  └──────────────────────────────┘  │
└─────────────────────────────────────┘
```

#### 5.2 核心收获

1. **数据驱动绘图**：用户选择 → 映射表 → 绘图参数 → turtle 执行
2. **函数封装**：每种形状独立成函数，便于扩展
3. **分层设计**：交互层 / 映射层 / 绘图层 解耦

---

## 五、板书设计

```
小乌龟画图助手
═══════════════════════════════

第1关：选→画
  choicebox(颜色) → choicebox(形状) → integerbox(大小) → turtle画

第2关：扩展
  位置映射 + 线宽 + 填充 + 连续画

第3关：创作
  规律图案 | 颜色序列 | 随机创作
  
核心思想：数据驱动绘图
  用户选择 → 查表映射 → turtle执行
```

---

## 六、课堂练习题

见《课堂练习册_第22节.md》

---

## 七、课后作业

见《课后练习卡_第22节.md》

---

## 八、教学反思（课后填写）

| 项目 | 记录 |
|------|------|
| 学生掌握情况 | |
| 常见问题 | |
| 改进建议 | |
