# tetriz
**Repository Path**: hang-jingqi/tetriz
## Basic Information
- **Project Name**: tetriz
- **Description**: 可以在Linux/Windows系统上运行的现代版俄罗斯方块
- **Primary Language**: C++
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2024-05-28
- **Last Updated**: 2025-05-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: ConsoleGame, Cpp
## README
Tetriz
一款基于CMake开发的现代版俄罗斯方块
---
## 目录
[TOC]
## 特性
一款基于CMake开发的现代版俄罗斯方块。
- 支持Windows与Linux平台
- 支持SRS旋转系统
- 支持HOLD功能
- 使用Bag7随机算法生成方块(应该写对了)
## 文件结构
```
.
├─bin
├─build
├─include
├─src
└─tool
└─Graphics
├─VS
└─VSCode
```
- `include`: 存放 `.h` 文件
- `src`: 存放 `.cpp` 文件
- `bin`: 生成的可执行文件在这
- `bulid`: (`VSCode`)编译的中间文件和配置的环境文件
- `out`: (`Visual Studio`)编译的中间文件和配置的环境文件
### 命名空间
- `ui`: layout
- `dw`: draw
- `gm`: game logic
- `ut`: utils
- `tc`: terminal control
## 安装
- 使用 `git clone https://git.acwing.com/YagiMiji/tetriz.git` 将库克隆到本地
- 下载源码包 [:paperclip:.zip](https://git.acwing.com/YagiMiji/tetriz/-/archive/master/tetriz-master.zip)
## 源码使用说明
### Windows上运行
#### 使用 VSCode
> *需要有 `GCC` 或 `Visual Studio Community` 环境*
1. 用 `vscode` 打开文件夹,会自动提示安装插件,安装 `CMake` 和 `C/C++ Extension Pack`。
2. 在左边栏选择 `CMake` ,点击 `CMake `设置栏下配置第一行选择工具包( `GCC` 或 `Visual Studio Community` )。`vscode` 会自动构建环境。
`Visual Studio Community` 环境下显示类似如下,及构建完成。
```
[visual-studio] 为 D:\VisualStudio\VC\Auxiliary\Build\vcvarsall.bat 修补从 C:\Program Files (x86)\Windows Kits\10\bin\x86 到 C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x86 的 Windows SDK 路径
```
`GCC` 环境下显示类似如下,及构建完成。
```
[cmake] -- Build files have been written to: D:/CodeProjects/tetriz/build
```
3. 点击下方栏生成即可在 `bin` 文件夹下生成可执行文件。点击运行可在 `vscode` 终端运行。
#### 使用Visual Studio
1. 用 `visual studio` 打开文件夹,会自行创建环境。
2. 点击运行即可运行。
### 在Linux上运行
1. 确保 `Linux` 上已经安装 `CMake` 与 `GCC` 。分别查看它们的版本号确定已安装。
```
gcc -v
cmake -version
```
> 缺什么则安装什么,上为 `gcc` 下为 `cmake`。
>
> ```
> sudo apt install g++ gcc gdb
>
> sudo apt install cmake
> ```
2. 移动到克隆的 `tetriz` 仓库。
```
cd ./teriz
```
3. 创建并移动到 `build` 文件夹。
```
mkdir build && cd build
```
4. 使用 `CMake` 编译并创建可执行文件。
```
cmake .. && make
```
> 当然你也可以指定编译的类型。
> `Debug`: 禁用优化,包括调试信息
>
> ```
> cmake -DCMAKE_BUILD_TYPE=Debug .. && make
> ```
>
> `Release`: 启用优化,排除调试信息
>
> ```
> cmake -DCMAKE_BUILD_TYPE=Release .. && make
> ```
>
> `MinSizeRel`: 优化最小二进制大小,排除调试信息
>
> ```
> cmake -DCMAKE_BUILD_TYPE=MinSizeRel .. && make
> ```
>
5. 移动到 `bin` 文件夹并运行。
```
cd ../bin
./tetriz
```
## 游戏如何操作
### 基本键位
- 旋转: 空格键
- 左移: a 键
- 右移: d 键
- 下移: s 键
- 旋转: w 键
- Hold:r 键
- 急降: 空格键
- 帮助: h 键
- 退出: q 键
### 关于键位更改
目前并没有设计在游戏中更改键位功能,故更改键位只能修改代码。
你可以在 `include/define.h` 中增加按键定义(只支持可用键盘直接打出的字符)。
```
define.h
...
//----- 下面定义了按键宏--------------------
#define KEY_Q 'q'
#define KEY_W 'w'
#define KEY_S 's'
#define KEY_A 'a'
#define KEY_D 'd'
#define KEY_R 'r'
#define KEY_H 'h'
#define KEY_BS ' '
// TODO: 可以在这添加新键位
//----------------------------------------
...
```
在 `src/control.cpp` 中可以添加或修改按键与对应的函数。
```
control.cpp
...
// -----按键对应的函数调用---------------------------------
std::map> comm_func{
{KEY_Q, command_quit}, /*退出*/
{KEY_W, command_rotate}, /*旋转*/
{KEY_A, command_left}, /*向左*/
{KEY_D, command_right}, /*向右*/
{KEY_S, command_down}, /*下降*/
{KEY_BS, command_drop}, /*直降*/
{KEY_R, command_hold}, /*Hold*/
{KEY_H, command_help} /*帮助*/
//TODO: 增加新的调用
};
//--------------------------------------------------------
...
```
## 维护者
| :stuck_out_tongue_closed_eyes: | :grinning: | :frog: |
| ------ | ------ | ------ |
|