/*
sprites.h
本文件是C++精灵库(C++ Sprites库)总的头文件。它主要包含的是cppsprites目录下面的一些头文件。
作者:李兴球,电子信箱:52703141@qq.com, 版本V1.0.5,copyright@2026年3月31号。
C++精灵库继承了logo计算机语言以来的小海龟编程教育思想。在具体实现上传承、扬弃、发展了Python turtle库的相关命令。 所以在C++精灵库中角色与屏幕对象的很多命令和Python turtle保持一致。
相对于Python turtle库,C++精灵库增强了某些命令,比如heading命令,原Python turtle加中的只能返回角色的方向,而C++精灵库的heading命令通过重载这个命令让角色可以直接朝向某个坐标或角色。
比如 角色的pencolor命令,原Python turtle可以填写RGB与16进制字符串参数。C++精灵库则通过重载还可以直接支持填写整数参数。这个时候,这个整数表示颜色的色相。
新增的命令还有:
penshade——设定画笔颜色深浅度(阴影度);
fill——洪水填充命令,适合于在封闭区域进行填充;
penhue——设定画笔的色相命令;
pensat——设定画笔的饱和度命令;
penvalue——设定画笔的明度命令;
coloradd——颜色增加命令,增加的是颜色的色相;
oval——画椭圆命令 ;
penhsv——设定画笔hsv命令,关于hsv颜色模型,请自行查阅资料;
bounce_on_edge——碰到边缘反弹命令;
nextshape——下一个造型命令等等,这里不一一列举;
授权任何人出于任何目的(包括商业用途)都可以使用本软件,并可自由修改和重新分发,比如,你可以自己开发一个C++编辑器把C++精灵库集成在内,须遵守以下限制条件:
1. 不得歪曲本软件的来源;您不得声称自己编写了原始软件。如果您在作品/产品/课程/书籍等中使用本软件,需要申明使用了C++精灵库及其作者姓名。
2. 如果你希望修改C++精灵库的源代码发展自己的专属库,修改后的源代码版本必须明确标注为已修改版本,且不得被错误地表述为原始软件。
3. 本声明不得从任何源代码分发版本中删除或修改。
C++精灵库采用SDL2库为基座。它的设计目标与适应场景是青少儿C++入门。它并非专业级别的游戏开发与模拟仿真中间件。 如果你想支持作者不断改进C++精灵库,可以进行捐助,捐助时先给作者发送电子邮件。
V1.0.2版本更新记录:
主要增加了对 write命令所写的文本进行更精细化管理,以下是更新说明:
新增角色方法:
scale() : 返回当前缩放比例xscale
get_txtitems(): 获取所有文本ID
cleartxt(): 按ID删除文本
cleartxts(): 批量删除文本(前n/后n/全部)
参数增强
ellipse()/oval() : 增加fill参数控制是否填充
V1.03版更新记录:
1. 新增delay单独函数,本质就是调用屏幕的等待函数,但有默认参数为0.016666。
示例:delay(2)
2. 角色的done命令可以加0参数,表示角色先隐藏后再进入事件循环。
示例:sprite.done(0)
3. 修正屏幕的savepng命令在非全屏截图时不会截文字与图章的bug。
示例:screen.savepng(filename,{-50, 50, 100, 100},true);
以上savepng命令的参数分别是图像文件名,矩形区域,是否只截绘图层。
V1.04版更新记录:
1. 新增屏幕对象的polar方法,用于显示极坐标图或者返回极坐标图最内层圆圈的半径。
示例:screen.polar(50)
2. 重载角色的xcor和ycor方法,原来xcor和ycor只能获取角色的x坐标和y坐标值,现在也可以设置其值,用途同setx和sety。
示例: sprite.xcor(100); sprite.ycor(200);
3. 新增了单击鼠标指针并按住时能拖动角色的功能。
4. 新增了角色的clone方法,返回的是角色指针。
示例:Sprite *t = sprite.clone();
V1.05版更新记录:
1. 增加了角度转弧度计算的别名:radians,和Python turtle保持一致
2. dot命令再次优化,推荐用dot(1)或dot(2),速度较快。
如果你是高级用户,想单独安装C++精灵库,以下是在基于64位GCC的编辑器里安装C++精灵库的步骤:
1. 首先给这个C++编辑器安装SDL2库,要求SDL2库的头文件放在编译器的include目录的SDL2目录下面。
2. 然后把sprites.h和cppsprites目录拷贝到 "编辑器安装目录\MinGW64\include"目录下面。
3. 把库文件libsprites.a拷贝到 "编辑器安装目录\MinGW64\lib"目录下面。
4. 在编译时加入以下命令:-std=c++17 -Wno-narrowing -fexec-charset=GBK -finput-charset=GBK
5. 在连接器命令行加入以下命令:-static-libgcc -lmingw32 -lgdi32 -luser32 -lole32 -luuid -lws2_32 -lsprites -lSDL2main -lSDL2 -lSDL2_image -lSDL2_ttf -lSDL2_mixer
如果C++精灵库基于C++17标准,如果你对编译器不熟悉,建议不要手动安装C++精灵库,而是用作者已经集成好了C++精灵库的pxC++编辑器或者作者发布的DevC++5.11升级包,从而对DevC++5.11一键升级,从而可方便地使用C++精灵库。
*/
#ifndef SPRITES_H
#define SPRITES_H
#define SDL_MAIN_HANDLED //禁用 SDL2 对 main() 的重写
#define Surface SDL_Surface
#define Texture SDL_Texture
#include "cppsprites/screen.h"
#include "cppsprites/sprite.h"
#include "cppsprites/color_map.h"
#include "cppsprites/functools.h"
#include "cppsprites/polygon_region_filler.h"
#include "cppsprites/polygon_offset.h"
#include "cppsprites/coloradd.h"
#include "cppsprites/writetxt.h"
#include <sstream>
#include "cppsprites/dynamicproperty.h"
#define Create(name) Sprite name("res/" #name ".png", #name)
#endif // SPRITES_H