save code

This commit is contained in:
Feast
2026-05-16 12:05:04 +08:00
parent a169ceb263
commit d092dfb4a6
23 changed files with 2291 additions and 1343 deletions
+76 -36
View File
@@ -4,6 +4,8 @@
每课约 **3045 分钟**,建议家长陪同。
> 📌 **新版本教程的最大变化**:每课不再"一次给完整源码让你抄",而是**分成 3~5 个小步骤**,每步加几行代码、立刻编译看效果。卡住时再去看 `solutions/` 里的完整答案。
---
## 前置条件(给家长)
@@ -18,60 +20,98 @@
- `void` 函数
- `while` 循环与 `break`
### 环境安装
---
## 一次性环境安装
### Mac(目标平台)
**Mac(目标平台)**
```bash
brew install fltk
brew install fltk cmake
```
**Windows(开发用)**
已通过 vcpkg 安装:`vcpkg install fltk --triplet x64-windows`
> 装 `cmake` 是必需的——FLTK 自己不带编译入口。
> 如果 `brew` 卡在 "Auto-updating",先 `export HOMEBREW_NO_AUTO_UPDATE=1` 再重试。
### 编译命令模板
### Windows(开发用)
每个项目的 `CMakeLists.txt` 模板(保存为项目文件夹下):
```cmake
cmake_minimum_required(VERSION 3.14)
project(gacha_lesson LANGUAGES CXX)
1. 装 Visual Studio(带 C++ 工作负载)和 CMake。
2. 装 vcpkg`git clone https://github.com/microsoft/vcpkg && .\vcpkg\bootstrap-vcpkg.bat`
3. 装 FLTK`vcpkg install fltk --triplet x64-windows`
set(CMAKE_CXX_STANDARD 17)
---
# Windows MSVC 中文支持
if(MSVC)
add_compile_options("/utf-8")
endif()
## 仓库结构
find_package(FLTK CONFIG REQUIRED)
add_executable(gacha main.cpp)
target_link_libraries(gacha PRIVATE fltk)
```
chouka/
├── CMakeLists.txt ← 一份通用 CMake,按 -DLESSON=N 切课
├── lesson_gui_1.cpp ~ 6.cpp ← 每课的「起步骨架」(孩子动手填的)
├── solutions/
│ └── lesson_gui_1.cpp ~ 6.cpp ← 老师的完整答案(卡住再看)
├── 第01课-... ~ 第06课-....md ← 6 课文档
├── 教程-FLTK抽卡游戏-GUI-6课.md ← 本文件(总目录)
└── 学习进度与状态-GUI.md ← 进度追踪
```
**Mac 编译**
---
## 编译运行(每课都一样)
**Mac / Linux**
```bash
cmake -B build && cmake --build build && ./build/gacha
cmake -B build -DLESSON=1 # 第一次配置;切课就改这个 1
cmake --build build
./build/gacha1
```
**Windows 编译**(需指定 vcpkg toolchain):
**Windowsvcpkg):**
```bash
cmake -B build -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake && cmake --build build --config Release && build\Release\gacha.exe
cmake -B build -DLESSON=1 -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake
cmake --build build --config Release
build\Release\gacha1.exe
```
之后改了 `.cpp` 想再运行:
```bash
cmake --build build && ./build/gacha1 # Mac/Linux
cmake --build build --config Release # Windows,然后 build\Release\gacha1.exe
```
### 看老师写好的完整答案
`-DUSE_SOLUTION=ON` 重新配置,会从 `solutions/` 编译:
```bash
cmake -B build -DLESSON=1 -DUSE_SOLUTION=ON
cmake --build build && ./build/gacha1
```
> 💡 切换课次或切换骨架/答案后,**必须重新跑一次 `cmake -B build -D...`**,否则会继续编译上次的源文件。
---
## 关于 emoji(🎴💰🎉 等)
教程里偶尔用了 emoji 让按钮更可爱。如果你看到的是空白方块(FLTK 默认字体不一定带 emoji),把它换成普通文字就行,例如:
- `"🎴 抽一张!"``"[抽一张]"`
- `"💰"``"$"`
效果不变,只是外观区别。
---
## 总说明
- **原则**:每课都能跑出一个可见的窗口,逐步变好玩
- **抽卡**:用随机数模拟概率,不涉及真实金钱
- **FLTK 说明**FLTK 是一个轻量 GUI 库,不需要安装庞大框架,编译出的程序只有几 MB
- **跨平台**:同一份代码在 Windows / Mac / Linux 都能编译运行
- **原则**:每课都能跑出一个**看得见**的进步——从空窗口到完整游戏,每一步都能编译运行。
- **抽卡**:用随机数模拟概率,不涉及真实金钱
- **FLTK**一个轻量 GUI 库,编译出的程序只有几 MB
- **跨平台**:同一份代码在 Windows / Mac / Linux 都能编译运行
---
## 第 1 课:GUI 你好窗口
**目标**创建第一个有窗口的程序,屏幕上出现欢迎语。
**目标**自己一步步写出第一个 GUI 程序——一个窗口、一行欢迎语。
**FLTK 新概念**`Fl_Window`(窗口)、`Fl_Box`(文字标签)、`Fl::run()`(事件循环)
@@ -83,11 +123,11 @@ cmake -B build -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake
## 第 2 课:按钮与回调
**目标**:放一个按钮,点击后文字会变——理解"事件驱动"。
**目标**:放一个按钮,点击后文字会变——理解"事件驱动"。
**FLTK 新概念**`Fl_Button`(按钮)、`callback`(回调函数)、全局指针
**核心思想**:和命令行不同,GUI 程序"等"用户操作,而不是按顺序执行
**核心思想**:和命令行不同,GUI 程序"等"用户操作,而不是按顺序执行
详见:`第02课-按钮与回调.md`
@@ -99,7 +139,7 @@ cmake -B build -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake
**复用旧知识**`rand()` / `srand()``if` / `else if` / `else`
**FLTK 新概念**:在回调里更新控件、`label()` 方法
**FLTK 新概念**:在回调里更新控件、`label()` 方法`sprintf` 拼字符串
详见:`第03课-随机抽卡.md`
@@ -111,7 +151,7 @@ cmake -B build -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake
**复用旧知识**`for` 循环、`std::string` 拼接
**FLTK 新概念**:多行显示(`\n` 换行)
**FLTK 新概念**:多行显示(`\n` 换行)、文字对齐
详见:`第04课-十连抽.md`
@@ -123,7 +163,7 @@ cmake -B build -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake
**复用旧知识**`std::string` 数组、下标
**FLTK 新概念**:控件位置计算
**FLTK 新概念**:控件位置计算`box()``color()`
详见:`第05课-卡片名字与布局.md`
@@ -135,7 +175,7 @@ cmake -B build -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake
**复用旧知识**:全部旧知识
**FLTK 新概念**:多按钮协作、综合布局
**FLTK 新概念**:多按钮协作、综合布局、函数复用
详见:`第06课-完整抽卡游戏.md`
@@ -149,7 +189,7 @@ cmake -B build -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake
| 2 | `Fl_Button``callback`、全局指针 | `void` 函数 |
| 3 | `label()` 更新、回调中用随机 | `rand`/`srand``if`/`else``%` |
| 4 | 多行 label、字符串拼接 | `for``std::string``+=` |
| 5 | 控件定位、`Fl_Group` | `string` 数组、下标、`rand()%N` |
| 5 | 控件定位、`box()`/`color()` | `string` 数组、下标、`rand()%N` |
| 6 | 多按钮回调、综合布局 | 全部知识综合 |
---
@@ -164,4 +204,4 @@ cmake -B build -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake
---
*每课详细步骤见对应文档。*
*每课详细步骤见对应文档。学完一课,记得在 `学习进度与状态-GUI.md` 里打个勾。*