# CLI_GUI_Rendering **Repository Path**: memoryshadow/CLI_GUI_Rendering ## Basic Information - **Project Name**: CLI_GUI_Rendering - **Description**: 命令行中界面的多图层渲染 - **Primary Language**: C - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-05-19 - **Last Updated**: 2022-05-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CLI GUI Rendering |Author|MemoryShadow| |---|--- |E-mail|MemoryShadow@outlook.com| ## 目录 * [作用](#作用 "点击前往") * [用法](#用法示例 "点击前往") * [接口](#接口与调用 "点击前往") ### 作用 命令行中界面的多图层渲染,就像Adobe Photoshop 中的图层一样对各个图层进行单独的管理,移动.您只需要关注算法而不需要去为简单的测试环境思考界面 ### 用法示例 我们已经为您准备好了一些基础示例: * [弹跳球](./Bouncing%20ball.cpp "点击前往") * [飞机大战(尚未完成)](./Airplane%20war.cpp "点击前往") ### 接口与调用 `此项正在编辑` 在此处展示这个头文件的相关函数与相关类型 #### 类型 这个头文件中包含了以下几个类型 |类型名|原始类型|作用| |---|---|---| |[Paint_layer](#Paint_layer "点击访问详解")|struct|中文称谓(在注释中):绘制层 其中储存了有关于本层的绘制信息,可以在相关控制函数的帮助下移动或者绘制新的信息| |[Window_layer](#Window_layer "点击访问详解")|struct|中文称谓(在注释中):窗口层 其中标记了一个"界面",不可储存数据,但是可以拥有多个绘制层| |[MoveDirection](#MoveDirection "点击访问详解")|enum|中文称谓(在注释中):移动方向 在使用[layer_Move](#layer_Move "点击前往")时可以作为第二参数填入,不同方向可以用\|符号进行隔开同时提交| ##### Paint_layer
声明结构 ```C struct Paint_layer { // 层的宽 unsigned width; // 层的高 unsigned height; // 记录每个点的内容 CHAR **Data; // 为链表做的准备 Paint_layer *Next; }; ```
##### Window_layer
声明结构 ```C typedef struct Paint_layer Window_layer; ```
##### MoveDirection
声明结构 ```C enum MoveDirection { Up = 1, Down = 2, Left = 4, Right = 8 }; ```
#### 函数 这个头文件中包含了以下几个函数 |函数名|参数列表|返回类型|具体作用|使用示例| |---|---|---|---|---| |[new_Window_layer](#new_Window_layer "点击访问详解")|`unsigned width`
`unsigned height`|Window_layer *|创建一个Window_layer结构,返回新建的指针`您可以理解为面向对象语言中的new操作符`|`Window_layer *main_layer = new_Window_layer(20, 15);`| |[new_Paint_layer](#new_Paint_layer "点击访问详解")|`Window_layer *Window`|Paint_layer *|在指定窗口的顶层创建一个绘制层`您可以理解为面向对象语言中的new操作符`|`Paint_layer *edge_layer = new_Paint_layer(main_layer);`| |[layer_length](#layer_length "点击访问详解")|`const Window_layer *Window`|unsigned|计算某个窗口层的绘制层数量|`示例代码见详解`| |[Remove_layer](#Remove_layer "点击访问详解")|`Window_layer *Window`
`unsigned index`|Paint_layer *|将某个绘制层从所属的窗口层中剥离出来(会拒绝剥离0)|`Remove_layer(main_layer,1)`| |[delete_Paint_layer](#delete_Paint_layer "点击访问详解")|`Paint_layer *layer`|Paint_layer *|释放某个窗口层的内容,`您可以理解为面向对象语言中的delete操作符`(别忘记先将其从窗口层中剥离)|`delete_Paint_layer(Window)`| |[delete_Window_layer](#delete_Window_layer "点击访问详解")|`Window_layer *Window`|void|释放某个窗口层(会删除其所有绘制层)`您可以理解为面向对象语言中的delete操作符`|`delete_Window_layer(main_layer)`| |[layer_index](#layer_index "点击访问详解")|`Window_layer *Window`
`unsigned index`|Paint_layer *|取得某个窗口层中指定索引的绘制层指针|`layer_index(main_layer,1)`| |[Write_Point](#Write_Point "点击访问详解")|`Paint_layer *layer`
`unsigned x`
`unsigned y`
`CHAR Char`|Paint_layer *|在指定的层中指定的位置,填充指定的字符(成功返回此层指针,失败返回NULL)|`示例代码见详解`| |[Get_Point](#Get_Point "点击访问详解")|`Paint_layer *layer`
`unsigned x`
`unsigned y`|CHAR|在指定的层中获取指定位置的字符(成功返回此字符,失败..就返回\0好了)|`示例代码见详解`| |[WindowDraw](#WindowDraw "点击访问详解")|`Window_layer *Window`
`int Convert = 0`|void|绘制指定的窗口,参数Convert控制是否对于特定的半角字符转换为全角进行渲染|`WindowDraw(main_layer)`| |[layer_Move](#layer_Move "点击访问详解")|`Paint_layer *layer`
`unsigned Direction`
`unsigned length`|Paint_layer *|将一个绘制层按照指定的方向移动指定的步长|`layer_Move(layer_length(main_layer,1),Up,1)`| **** ##### new_Window_layer 函数原型: ```C Window_layer *new_Window_layer(unsigned width, unsigned height); ``` 对于它的两个参数: `unsigned width`:标记了这个窗口层的最大宽度 `unsigned height`:标记了这个窗口层的最大高度 创建一个Window_layer结构,返回新建的指针 `您可以理解为面向对象语言中的new操作符` 示例代码: ```C Window_layer *main_layer = new_Window_layer(20, 15); ``` 它看起来像极了[C\+\+中的new语法](#参考资料\:C\+\+中的new语法 "点击查看")对吗,是的,这就是沿用了C++的语法,但是这个工具目标是在C下运行的,所以千万不要忽略了new后面的下划线
参考资料:C++中的new语法 ###### 参考资料\:C\+\+中的new语法 上面所提到的,沿用了C++的语法,此处是参考,对于尚未接触面向对象语言,或者接触过但是尚未接触C++语言的开发者,可能这部分资料会对你有一些帮助. ```C++ Window_layer *main_layer = new Window_layer(20, 15); ``` 这段代码将会调用类型Window_layer的构造器`Window_layer::Window_layer(unsigned,unsigned)`新增一个Window_layer类型的实例,这个实例的指针会被`Window_layer的构造器`返回 并且放到`Window_layer *main_layer`所声明的Window_layer类型指针main_layer中去. 如果想要了解更多,请参阅C++文档