c_tetris

第 1 课:环境准备 🛠️

1.1 本课目标

学习如何搭建 C 语言开发环境,为后续开发俄罗斯方块游戏做好准备。


1.2 为什么需要这些工具?

编译器(GCC)

C 语言是编译型语言,源代码需要转换成机器码才能运行。GCC(GNU Compiler Collection)是最常用的 C 语言编译器。

源代码 (.c) → [编译器] → 可执行文件
     ↓                        ↓
  人类可读                  机器可读

Make 工具

当项目有多个源文件时,每次都用长长的命令编译很麻烦。Make 工具通过 Makefile 自动化编译过程。

ncurses 库

ncurses 是一个终端图形库,让我们能在命令行中绘制边框、颜色、字符图形。俄罗斯方块的界面就靠它。


1.3 安装步骤

Ubuntu/Debian 系统

# 更新软件包列表
sudo apt update

# 安装编译器和必要工具
sudo apt install build-essential gcc make gdb

# 安装 ncurses 开发库
sudo apt install libncurses5-dev

命令解释:

Fedora/CentOS/RHEL 系统

# 安装开发工具组
sudo dnf groupinstall "Development Tools"

# 安装 ncurses 开发库
sudo dnf install ncurses-devel

macOS 系统

# 安装 Xcode 命令行工具
xcode-select --install

# 使用 Homebrew 安装 ncurses
brew install ncurses

1.4 验证安装

安装完成后,验证工具是否正确安装:

# 检查 GCC 版本
gcc --version
# 输出示例:gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0

# 检查 Make 版本
make --version
# 输出示例:GNU Make 4.3

# 检查 ncurses 是否可用
pkg-config --libs ncurses
# 输出:-lncurses

如果看到版本号输出,说明安装成功!✅


1.5 获取项目代码

# 进入项目目录
cd ~/Work/open_learn/c_proj/tetris

# 查看项目结构
ls -la

预期输出:

total 68
drwxr-xr-x  src/          # 源代码目录
drwxr-xr-x  docs/         # 教程文档
drwxr-xr-x  data/         # 游戏数据(最高分)
-rw-r--r--  Makefile      # 构建配置
-rw-r--r--  README.md     # 项目说明

1.6 编译和运行

编译项目

make

编译过程详解:

# Makefile 会执行以下命令(你不需要手动输入)

# 1. 创建 obj 目录
mkdir -p obj

# 2. 编译每个 .c 文件为 .o 文件
gcc -Wall -Wextra -std=c99 -Isrc -O2 -c src/board.c -o obj/board.o
gcc -Wall -Wextra -std=c99 -Isrc -O2 -c src/game.c -o obj/game.o
gcc -Wall -Wextra -std=c99 -Isrc -O2 -c src/input.c -o obj/input.o
gcc -Wall -Wextra -std=c99 -Isrc -O2 -c src/main.c -o obj/main.o
gcc -Wall -Wextra -std=c99 -Isrc -O2 -c src/render.c -o obj/render.o
gcc -Wall -Wextra -std=c99 -Isrc -O2 -c src/score.c -o obj/score.o
gcc -Wall -Wextra -std=c99 -Isrc -O2 -c src/tetromino.c -o obj/tetromino.o

# 3. 链接所有 .o 文件,生成可执行文件
gcc obj/*.o -o tetris -lncurses

编译选项解释: | 选项 | 含义 | 作用 | |——|——|——| | -Wall | Warning All | 显示所有警告 | | -Wextra | Warning Extra | 显示额外警告 | | -std=c99 | Standard C99 | 使用 C99 标准 | | -Isrc | Include src | 在 src 目录查找头文件 | | -O2 | Optimize 2 | 二级优化,提高运行速度 | | -c | Compile only | 只编译,不链接 | | -lncurses | Library ncurses | 链接 ncurses 库 |

运行游戏

make run
# 等价于 ./tetris

清理编译产物

make clean
# 删除 obj/ 目录和 tetris 可执行文件

1.7 常见问题解决

问题 1:gcc: command not found

原因: 未安装 GCC 编译器

解决:

sudo apt install build-essential  # Ubuntu
sudo dnf groupinstall "Development Tools"  # Fedora

问题 2:ncurses.h: No such file or directory

原因: 未安装 ncurses 开发库

解决:

sudo apt install libncurses5-dev  # Ubuntu
sudo dnf install ncurses-devel  # Fedora

问题 3:make: command not found

原因: 未安装 Make 工具

解决:

sudo apt install make  # Ubuntu
sudo dnf install make  # Fedora

1.8 知识扩展

为什么使用 C 语言?

  1. 性能高 - 直接编译为机器码,运行速度快
  2. 底层控制 - 可以精确控制内存和硬件
  3. 跨平台 - 几乎可以在任何系统上编译运行
  4. 学习价值 - 理解计算机工作原理

终端图形库对比

特点 适用场景
ncurses 功能强大,跨平台 复杂终端应用
termbox 轻量级,简单 简单终端 UI
原生转义序列 无需库,直接控制 简单动画、颜色

本项目选择 ncurses,因为:


✅ 本课检查清单


📝 小作业

  1. 尝试修改 Makefile 中的优化级别(-O2 改为 -O0),重新编译,观察有什么不同

  2. 运行 gcc --help,查找 -g 选项的作用(提示:调试信息)

  3. 查看系统中的 ncurses 头文件位置:

    find /usr/include -name "ncurses.h"
    

下一课:项目结构