save code
This commit is contained in:
+76
-36
@@ -4,6 +4,8 @@
|
||||
|
||||
每课约 **30~45 分钟**,建议家长陪同。
|
||||
|
||||
> 📌 **新版本教程的最大变化**:每课不再"一次给完整源码让你抄",而是**分成 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):
|
||||
**Windows(vcpkg):**
|
||||
```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` 里打个勾。*
|
||||
|
||||
Reference in New Issue
Block a user