CDE文档

· · 休闲·娱乐

前往主页

文档

==Item初始化 函数==

创建一个Item的必要操作

Item()

例:
Item temp1();
Item(<xy>p,<int>hide=0)
初始化Item的状态,p:坐标,hide:显示(0)或隐藏(1)

例:
Item temp1({10,10},1);
Item temp2({0,0});
注意 : 此函数为CDE7及以上特有

Item(<xy>p,<vector<string>>str,<int>hide=0)
初始化Item的状态,p:坐标,str:图片,hide:显示(0)或隐藏(1)

例:
Item temp1({10,10},{"Hi"},1);
Item temp2({0,0},{"Hello","world"});

==Item获取组 函数==

获取Item状态的必要操作

xy get_xy()
获取Item坐标

例:
temp1.get_xy()
int get_len()
获取Item长度(注意,这里的长度是竖直的长度)

例:
temp1.get_len()
int get_hei()
获取Item高度(注意,这里的高度是横向的长度)

例:
temp1.get_hei()
bool get_hidemode()
获取Item显示隐藏状态(显示0,隐藏1)

例:
temp1.get_hidemode()
bool get_killmode()
获取Item死亡状态(生0,死1)

例:
temp1.get_killmode()
注意 : 此函数为CDE7.1及以上特有

string get_color()
获取图片当前颜色 

例:
temp1.get_color()
int get_facing()
获取Item朝向(北0,东90,南180,西-90/270)

例:
temp1.get_facing()
xy get_center()
获取Item中心位置

例:
temp1.get_center()
double get_to_facing(<xy>p)
获取Item假设朝向p点的角度,p:坐标

例:
temp1.get_to_facing({10,10})
double get_to_facing(<Item>p,<bool>facing_center=1)
获取Itemp假设朝向p(Item)的角度,p:其他Item,facing_center:朝向位置(左上角0,中心点1)

例:
temp1.get_to_facing(temp2)
xy get_len_xy(<double>len,<double>block_mode=2)
获取Item向前len格的坐标(朝向需要另外设置),len:长度,block_mode:横向与竖向的长度比率
(因为两个横向等于一个竖向,所以默认比率2)

例:
temp1.get_len_xy(5)
注意 : 此函数为CDE7.1及以上特有

pair<double,double> get_len_xy_double(<double>len,<double>block_mode=2)
获取Item向前len格的浮点数坐标(朝向需要另外设置),len:长度,block_mode:横向与竖向的长度比率
(因为两个横向等于一个竖向,所以默认比率2)

例:
temp1.get_len_xy_double(5)

==Item导入组 函数==

设置Item字符图片的必要操作

void file_load(<string>file,<string>s="")
导入图片文件,需要有特定格式,不常用,file:文件名(.cditem)无需加拓展名,s:图片组中的名字(默认不在图片组)

例:
temp1.file_load("temp1");
temp2.file_load("temp2","tupian1");
void code_load(<int>l,<int>h,<string>str,<string>s="")
导入图片代码,需要有特定格式,不常用,l:图片长度,h:图片高度,str:图片,s:图片组中的名字(默认不在图片组)

例:
temp1.code_load(1,2,"Hi");
void code_load(<int>l,<string>str,<string>s="")
导入图片代码,需要有特定格式,最常用,l:图片长度,str:图片,s:图片组中的名字(默认不在图片组)
(代码会根据图片长度自动分割行)

例:
temp1.code_load(1,"Hi");
注意 : 此函数为CDE7及以上特有

void code_load(<vector<string>>str,<string>s="")
导入图片代码,需要有特定格式,最常用,str:图片,s:图片组中的名字(默认不在图片组)
(代码会根据vector长度自动分割行)

例:
temp1.code_load({"Hi"});
temp2.code_load({"Hi","abc"});
注意 : 此函数为CDE7.1及以上特有

void code_load(<vector<string>>str,<string>group,<string>group_color)
导入图片代码,需要有特定格式,最常用,str:图片,group:图片组中的名字,group_color:这个图片的颜色(存储在图片组中)
(代码会根据vector长度自动分割行)

例:
temp1.code_load({"Hi"},"none","");
temp2.code_load({"Hi","abc"},"1",Tool::getRGB(200,0,200));

==Item绘制组 函数==

显示Item字符图片的必要操作

void draw()
绘制图片(需要看显隐状态),当隐藏时,不会进行绘制
注意 : 不要与show()混淆,draw()需要看状态,只有显示才能绘制,show()是必显示
void clear()
清理图片(不需要看显隐状态),一般没人用这个函数,请使用hide()
注意 : 不要使用clear()当作隐藏(hide()),这是无效的
void print(<xy>p)
印章,p:印的坐标(左上角坐标)
注意 : 印出来的东西只是字符,不是Item,是会被刷掉
void color_load(<string>cl)
设置图片整体的附加颜色,cl:颜色字符串(一般使用"\033[m"或者"Tool::"的颜色函数)

例:
temp1.color_load("\033[43m");
temp2.color_load(Tool::getRGB(200,0,200)+Tool::getbRGB(255,255,255));

==Item动作组 函数==

对Item进行操作的必要操作

bool goto_xy(<xy>p,<xy>py={0,0})
传送到p坐标后进行py的偏移,p:xy坐标,py:偏移量
返回是否执行成功(没有碰到边界)

例:
temp1.goto_xy({10,10});
temp2.goto_xy({10,45},{0,1});
bool goto_item(<Item>p,<xy>py={0,0})
传送到p(Item)后进行py的偏移,p:Item,py:偏移量
返回是否执行成功(没有碰到边界)

例:
temp1.goto_xy(temp2);
temp2.goto_xy(temp3,{0,1});
bool move_xy(<int>x,<int>y)
偏移到xy坐标,x:x坐标,y:y坐标
返回是否执行成功(没有碰到边界)

例:
temp1.move_xy(10,10);
bool move_xy(<xy>p,<xy>py={0,0})
偏移到p坐标,p:xy坐标,py:偏移量 
返回是否执行成功(没有碰到边界)

例:
temp1.move_xy({10,10});
temp2.move_xy({10,15},{1,0});
void towards(<int>new_fac)
设置朝向角度,new_fac:角度(北0,东90,南180,西-90/270)
注意 : 这里并不会旋转,一般配合forward使用

例:
temp1.towards(91);
temp2.towards(1145);//超出范围时会取模 
temp3.towards(-90);
void towards(<Item>p,<bool>facing_center=1)
设置朝向Item,p:Item,facing_center:朝向位置(左上角0,中心点1) 
注意 : 这里并不会旋转,一般配合forward使用

例:
temp1.towards(temp2);
temp2.towards(temp1,0);
void towards(<xy>p)
设置朝向点p,p:xy坐标
注意 : 这里并不会旋转,一般配合forward使用

例:
temp1.towards({0,0});
void left(<int>ang)
左转角度,ang:角度
注意 : 这里并不会旋转,一般配合forward使用

例:
temp1.left(91);
temp1.left(-114);
void right(<int>ang)
右转角度,ang:角度
注意 : 这里并不会旋转,一般配合forward使用

例:
temp1.right(91);
temp1.right(-514);//超出范围时会取模 
bool forward(<double>lens,<double>block_mode=2)
前进(会根据朝向移动,满足勾股定理),lens:格数,block_mode:横向与竖向的长度比率
(因为两个横向等于一个竖向,所以默认比率2)
返回是否执行成功(没有碰到边界)

例:
temp1.forward(10);
temp2.forward(-8);//可以后退 
temp1.forward(10,1);
bool forward_run(<double>lens,<bool>(*fun)(Item),<double>block_mode=2)
与forward不同的是,这里是有移动痕迹的,每移动一格,执行一次fun()
返回是否执行成功(没有碰到边界与fun()的返回(0为退,1为正常))
bool backward(<double>lens,<double>block_mode=2)
后退(会根据朝向移动,满足勾股定理),lens:格数,block_mode:横向与竖向的长度比率
(因为两个横向等于一个竖向,所以默认比率2)
返回是否执行成功(没有碰到边界)

例:
temp1.backward(10);
temp2.backward(-8);//可以前进 
temp1.backward(10,1);
bool backward_run(<double>lens,<bool>(*fun)(Item),<double>block_mode=2)
与backward不同的是,这里是有移动痕迹的,每移动一格,执行一次fun()
返回是否执行成功(没有碰到边界与fun()的返回(0为退,1为正常))
void hide()
强制隐藏Item
注意 : 不要与clear()混淆
void show()
强制显示Item
注意 : 不要与draw(),print()混淆
void kill()
清理Item,使killmode=1,只用于克隆体,一般搭配clone_run()使用

==Item克隆组 函数==

允许每个Item拥有自己的克隆Item,可以对其进行操作

应用场景 : 子弹发射,物品复制

void clone_this()
克隆自己

例:
temp1.clone_this(); 
void clone_item(<Item>p)
克隆其他的Item,p:Item

例:
temp1.clone_item(temp2);
void clone_run(Item (*fun)(Item))
对所有克隆体运行fun(),(Item *fun(Item)):函数地址
需要开发者自行编写函数,函数需要的返回值为Item,传入参数为Item
这样会给每个相应的克隆体重新赋值

例:
Item fun1(Item p)//传入旧的克隆体 
{
    ...
    return p;//重新赋值相应的克隆体 
}
...
temp1.clone_run(fun1);
void clone_clear()
清除所有的克隆体

例:
temp1.clone_clear();
int clone_size()
获取克隆体的个数(仅包含存活的,即killmode等于0的)

例:
temp1.clone_size()

==Item图片组 函数==

允许每个Item拥有自己的一系列不同的图片,可以对其进行切换

应用场景 : 五子棋,选择框

void group_load(<string>name,<string>group_color="")
导入一个图片(当前的图片+新设置的颜色),CDE7.1及以上不常用
name:存在图片组中的名字,group_color:存在图片组中的颜色
CDE7.1及以上替代品code_load(<vector<string>>str,<string>group,<string>group_color)
注意 : 使用该函数时,是把当前的图片保存为图片组,不是导入一个新的图片
注意 : 使用替代品code_load()时,是使用新的图片和颜色保存为图片组

例:
temp1.code_load(1,"Hello world!");//这里的code_load()不是上文所说的替代品 
temp1.group_load("1",Tool::getRGB(200,0,200));//需要配合上一行的code_load()

//注意 : 此函数为CDE7.1及以上特有
temp2.code_load({"Hello world"},"1",Tool::getRGB(200,0,200));//替代品,code_load()有多个重载 
void group_item(<string>name,<Item>p)
导入一个p的图片,继承p的color,name:存在图片组中的名字,p:Item

例:
temp1.group_item("1",temp2);
void group_use(<string>name)
使用(draw())某个图片组中的name图片,name:图片组中的某个图片名字

例:
temp1.group_use("1");
void group_erase(<string>name)
删除某个图片组中的name图片,name:图片组中的某个图片名字

例:
temp1.group_erase("1");

==Item动画组 函数==

允许每个Item拥有自己的动画(基于图片组实现),可以对其进行播放

应用场景 : 简单动画播放,切换效果组

void frame_add(<string>name,<string>pname)
给name动画组添加动画帧(图片组中的图片名),name:动画组名,pname:图片组中的某个图片名

例:
temp1.frame_add("f1","1");
void frame_clear(<string>name)
清空name动画组的帧,注意不是删除组,name:动画组名

例:
temp1.frame_clear("f1");
注意 : 此函数为CDE7.1及以上特有

void frame_erase(<string>name)
删除name动画组,注意是删除组,name:动画组名

例:
temp1.frame_erase("f1");
void frame_use(<string name>,<int>start)
从第start个帧开始播放name动画组,name:动画组名,start:开始的播放位置(从1开始) 
注意 : 这里并不会播放动画,需要配合frame_next()

例:
temp1.frame_use("f1",1);
temp2.frame_use("f2",911);//超出帧的个数会取模 
void frame_next(<string>name)
切换到下一帧,超出帧的个数会重新播放,name:动画组名

例:
temp1.frame_next("f1");

==Item碰撞组 函数==

CDE的灵魂所在 —开发者

应用场景 : Item碰撞检测,鼠标碰撞检测,克隆体碰撞检测

如非必须,尽量使用矩形碰撞检测,不要非空格碰撞检测,这样可以提升效率

bool crash_mouse(<bool>must_show=1)
鼠标是否碰到图片矩形部分,must_show:需要显示才能检测

例:
temp1.crash_mouse()
temp2.crash_mouse(1)
bool crash_mouse_block(<bool>must_show=1)
检测鼠标是否碰到图片非空格部分,must_show:是否需要显示才能检测 

例:
temp1.crash_mouse_block()
temp2.crash_mouse_block(1)
bool crash_item(<Item>anitem,<bool>must_show=1)
检测某个其他图片是否碰到图片矩形部分,anitem:Item,must_show:是否需要显示才能检测

例:
temp1.crash_item(temp2)
temp2.crash_item(temp1,1)
bool crash_item_block(<Item>anitem,<bool>must_show=1)
检测某个其他图片是否碰到图片非空格部分,anitem:Item,must_show:是否需要显示才能检测

例:
temp1.crash_item_block(temp2)
temp2.crash_item_block(temp1,1)
bool crash_item_clone(<Item>anitem,<bool>must_show=1)
检测某个其他图片的克隆体是否碰到图片矩形部分,anitem:Item,must_show:是否需要显示才能检测

例:
temp1.crash_item_clone(temp2)
temp2.crash_item_clone(temp1,1)
bool crash_item_clone_block(<Item>anitem,<bool>must_show=1)
检测某个其他图片的克隆体是否碰到图片非空格部分,anitem:Item,must_show:是否需要显示才能检测

例:
temp1.crash_item_clone_block(temp2)
temp2.crash_item_clone_block(temp1,1)
bool crash_edge(<xy>np={-1,-1})
检测这个Item在某个位置时是否会碰到边界,np:位置(默认{-1,-1},即当前位置)

例:
temp1.crash_edge()
temp2.crash_edge({25,100})

==Item工具组 函数==

CDE中好用的小工具 —开发者

无应用场景,仅方便开发测试

bool move_key(<bool>w,<bool>s,<bool>a,<bool>d,<int>speed=1)
通过键盘移动Item
w:是否开放按下w向上移动
s:是否开放按下s向下移动
a:是否开放按下a向左移动
d:是否开放按下d向右移动
speed:移动速度
返回是否执行成功(没有碰到边界)

例:
temp1.move_key(1,1,1,1);
temp2.move_key(1,1,1,1,2)
bool move_key(<int>speed=1)
通过键盘移动Item,使用wasd移动,上一个move_key()的简化版
speed:移动速度
返回是否执行成功(没有碰到边界)

例:
temp1.move_key();
temp2.move_key(2)
bool move_key_def(<bool>i,<bool>b,<bool>l,<bool>r,<char>w,<char>s,<char>a,<char>d,<int>speed=1)
通过键盘移动Item
i:是否开放按下w向上移动
b:是否开放按下s向下移动
l:是否开放按下a向左移动
r:是否开放按下d向右移动
w:向上移动键位按键
s:向下移动键位按键
a:向左移动键位按键
d:向右移动键位按键
speed:移动速度
返回是否执行成功(没有碰到边界)

例:
temp1.move_key_def(1,1,1,1,'w','a','s','d');
temp2.move_key_def(1,1,1,1,'i','k','j','l',2)
bool move_key_def(<char>w,<char>s,<char>a,<char>d,<int>speed=1)
通过键盘移动Item,使用定义的键位按键移动,上一个move_key_def()的简化版
w:向上移动键位按键
s:向下移动键位按键
a:向左移动键位按键
d:向右移动键位按键
speed:移动速度
返回是否执行成功(没有碰到边界)

例:
temp1.move_key_def('w','a','s','d');
temp2.move_key_def('i','k','j','l',2)