网站设计思路作用,做外贸网站一定要会英语吗,哈尔滨调整部分地区风险等级,哪个网站做美食好一点先了解一下easy-x库
EasyX 是针对 C 的图形库#xff0c;可以帮助 C语言初学者快速上手图形和游戏编程。 可以通过官网下载#xff0c;文件很小#xff0c; easy-x的支持头文件是
#includegraphics.h下载之后双击打开会有所有easy-x函数的语法和作用#xff0c;中…先了解一下easy-x库
EasyX 是针对 C 的图形库可以帮助 C语言初学者快速上手图形和游戏编程。 可以通过官网下载文件很小 easy-x的支持头文件是
#includegraphics.h下载之后双击打开会有所有easy-x函数的语法和作用中文软件上手很快
分割线开始钟表制作
这是最终的效果图
第一步
新建画布 initgraph(Width,High);Width,High在开头定义为常量
第二步
在画布中央绘制一个圆 定义圆心坐标为Width/2High/2
int center_xWidth/2;int center_yHigh/2;绘制一个圆颜色为蓝色半径为Width/520
setcolor(BLUE);circle(center_x,center_y,Width/520);第三步
绘制秒针 //定义秒针长度int secondlengthWidth/5;//画秒针setlinestyle(PS_SOLID,2);//定义线的类型宽度为2setcolor(BLUE);//定义颜色为蓝色line(center_x,center_y,secondend_x,secondend_y);第三部
实现转动 思路使用三角函数知识控制secondend_x,secondend_y的移动
转动角度每分钟转动2*PI,则每秒转动2*PI/60获得当前系统时间的秒值乘以每秒转动的角度即可得出当前时间应该转动的角度 注意三角函数需要#includemath.h支持
//实现秒针转动
SYSTEMTIME ti;//获取系统时间
GetLocalTime(ti);//得当当前系统时间float secondangle0;//秒针转动的角度secondangleti.wSecond*2*PI/60;//每秒转动的角度等于当前时间*2*PI/60secondend_xcenter_xsecondlength*sin(secondangle);secondend_ycenter_y-secondlength*cos(secondangle);2. 动画的实现思路每次绘制完一帧图像后绘制一个与背景颜色一样的秒针隐藏前一个秒针并使用while1实现死循环
SYSTEMTIME ti;//获取系统时间
while(1){GetLocalTime(ti);//得当当前系统时间//实现秒针转动secondangleti.wSecond*2*PI/60;secondend_xcenter_xsecondlength*sin(secondangle);secondend_ycenter_y-secondlength*cos(secondangle);//画秒针setlinestyle(PS_SOLID,2);//定义线的类型宽度为2setcolor(BLUE);//定义颜色为蓝色line(center_x,center_y,secondend_x,secondend_y);//隐藏前一个秒针setcolor(BLACK);line(center_x,center_y,secondend_x,secondend_y);}但是我们发现图像一直在闪烁我们加上sleep也不行easyx提供了批量绘图函数BeginBatchDraw();FlushBatchDraw();EndBatchDraw(); 具体使用方法看百度 注意sleep需要#includeconio.h支持
SYSTEMTIME ti;//获取系统时间BeginBatchDraw();while(1){GetLocalTime(ti);//得当当前系统时间//实现秒针转动secondangleti.wSecond*2*PI/60;secondend_xcenter_xsecondlength*sin(secondangle);secondend_ycenter_y-secondlength*cos(secondangle);//画秒针setlinestyle(PS_SOLID,2);//定义线的类型宽度为2setcolor(BLUE);//定义颜色为蓝色line(center_x,center_y,secondend_x,secondend_y);FlushBatchDraw();Sleep(50);//隐藏前一个秒针setcolor(BLACK);line(center_x,center_y,secondend_x,secondend_y);}EndBatchDraw();类似的画出分针和时针注意时针一个周期是12小时所以时针的角度应该是 hourAngleti.wHour*2*PI/12; 注意代码结构先是定义然后FlushBatchDraw();批量绘制最后隐藏 拿出代码
float secondangle0;//秒针转动的角度float minuteangle0;//分针转动的角float hourAngle0;//定义时针转动的角SYSTEMTIME ti;//获取系统时间BeginBatchDraw();while(1){GetLocalTime(ti);//得当当前系统时间//实现秒针转动secondangleti.wSecond*2*PI/60;secondend_xcenter_xsecondlength*sin(secondangle);secondend_ycenter_y-secondlength*cos(secondangle);//实现分针转动minuteangleti.wMinute*2*PI/60;minuteend_xcenter_xminutelength*sin(minuteangle);minuteend_ycenter_y-minutelength*cos(minuteangle);//实现时针转动hourAngleti.wHour*2*PI/12;hourEnd_xcenter_xhourlength*sin(hourAngle);hourEnd_ycenter_y-hourlength*cos(hourAngle);//画秒针setlinestyle(PS_SOLID,2);//定义线的类型宽度为2setcolor(BLUE);//定义颜色为蓝色line(center_x,center_y,secondend_x,secondend_y);//画分针setlinestyle(PS_SOLID,2);//定义线的类型宽度为2setcolor(YELLOW);//定义颜色为黄色line(center_x,center_y,minuteend_x,minuteend_y);//画分针setlinestyle(PS_SOLID,3);//定义线的类型宽度为3setcolor(RED);//定义颜色为黄色line(center_x,center_y,hourEnd_x,hourEnd_y);setcolor(BLUE);FlushBatchDraw();Sleep(50);//隐藏前一个秒针setcolor(BLACK);line(center_x,center_y,secondend_x,secondend_y);//隐藏前一个分针 setcolor(BLACK);line(center_x,center_y,minuteend_x,minuteend_y);//隐藏前一个时针setcolor(BLACK);line(center_x,center_y,hourEnd_x,hourEnd_y);}EndBatchDraw();最后刻画表盘
同样是使用三角函数知识可以类比指针画我使用了一种及其复杂和智障的方法画先画出了12369然后再一个一个刻画写完才想到懒得改了 easyx中文字的输入用到outtextxy函数以下为outtextxy的用法和实例
outtextxy
这个函数用于在指定位置输出字符串。void outtextxy(int x,int y,LPCTSTR str
);void outtextxy(int x,int y,TCHAR c
);参数x
字符串输出时头字母的 x 轴的坐标值
y
字符串输出时头字母的 y 轴的坐标值。
str
待输出的字符串的指针。
c
待输出的字符。
返回值无说明该函数不会改变当前位置。字符串常见的编码有两种MBCS 和 Unicode。VC6 新建的项目默认为 MBCS 编码VC2008 及高版本的 VC 默认为 Unicode 编码。LPCTSTR 可以同时适应两种编码。为了适应两种编码请使用 TCHAR 字符串及相关函数。
来自easyx官网
TCHAR s[] _T(*输入文字*);outtextxy(x_11R/3-10, y_11sqrt(3.0)/2*RR/2, s);最后贴上完整代码和最终效果
上面的代码是好几年前写的新版本easyx已经放弃了之前的一些函数有小伙伴反映代码错误很多我已经在新版本环境下修改了目前环境是vs2019easyx 2018春风版上面代码没有修改思路是一样的下面贴上修改后的完整源码
#includegraphics.h
#includeconio.h
#includemath.h
#includestdlib.h
#define High 480
#define Width 640
#define PI 3.1415926
int main()
{//初始化画布initgraph(Width, High);//定义钟表中点坐标int center_x Width / 2;int center_y High / 2;//定义秒针长度int secondlength Width / 5;//定义分针长度int minutelength secondlength - 50;//定义时针长度int hourlength minutelength - 20;//定义秒针终点坐标int secondend_x, secondend_y;secondend_x center_x secondlength;secondend_y center_y;//定义分针终点坐标int minuteend_x center_x minutelength;int minuteend_y center_y;//定义时针终点坐标int hourEnd_x center_x hourlength;int hourEnd_y center_y;setcolor(BLUE);circle(center_x, center_y, secondlength 20);//绘制600setfillcolor(GREEN);solidcircle(Width / 2 4, High / 2 secondlength 15, 4);TCHAR s_6[5];_stprintf_s(s_6, _T(%d), 6); // 高版本 VC 推荐使用 _stprintf_s 函数outtextxy(Width / 2 - 2, High / 2 secondlength - 5, s_6);//绘制1200solidcircle(Width / 2, High / 2 - secondlength - 17, 4);TCHAR s_12[5];_stprintf_s(s_12, _T(%d), 12); // 高版本 VC 推荐使用 _stprintf_s 函数outtextxy(Width / 2 - 6, High / 2 - secondlength - 13, s_12);//绘制300solidcircle(center_x secondlength 17, center_y, 4);TCHAR s_3[5];_stprintf_s(s_3, _T(%d), 3); // 高版本 VC 推荐使用 _stprintf_s 函数outtextxy(center_x secondlength, center_y - 5, s_3);//绘制900solidcircle(center_x - secondlength - 17, center_y, 4);TCHAR s_9[5];_stprintf_s(s_9, _T(%d), 9); // 高版本 VC 推荐使用 _stprintf_s 函数outtextxy(center_x - secondlength - 8, center_y - 5, s_9);//绘制其他刻度int R secondlength 20;int x_11, y_11;x_11 Width / 2 - R / 2;//11:00刻度横坐标y_11 High / 2 - sqrt(3.0) / 2 * R;//11:00刻度纵坐标solidcircle(x_11, y_11, 3);TCHAR s_11[5];_stprintf_s(s_11, _T(%d), 11); // 高版本 VC 推荐使用 _stprintf_s 函数outtextxy(x_11, y_11, s_11);int x_10, y_10;x_10 Width / 2 - sqrt(3.0) / 2 * R;//10:00刻度横坐标y_10 High / 2 - R / 2;//11:00刻度纵坐标solidcircle(x_10, y_10, 3);TCHAR s_10[5];_stprintf_s(s_10, _T(%d), 10); // 高版本 VC 推荐使用 _stprintf_s 函数outtextxy(x_10, y_10, s_10);int x_8, y_8;x_8 x_10;y_8 y_10 R;solidcircle(x_8, y_8, 3);TCHAR s_8[5];_stprintf_s(s_8, _T(%d), 8); // 高版本 VC 推荐使用 _stprintf_s 函数outtextxy(x_8, y_8, s_8);int x_7, y_7;x_7 x_11;y_7 y_11 sqrt(3.0) * R;solidcircle(x_7, y_7, 3);TCHAR s_7[5];_stprintf_s(s_7, _T(%d), 7); // 高版本 VC 推荐使用 _stprintf_s 函数outtextxy(x_7, y_7, s_7);int x_5, y_5;x_5 x_7 R;y_5 y_7;solidcircle(x_5, y_5, 3);TCHAR s_5[5];_stprintf_s(s_5, _T(%d), 5); // 高版本 VC 推荐使用 _stprintf_s 函数outtextxy(x_5, y_5, s_5);int x_4, y_4;x_4 x_8 sqrt(3.0) * R;y_4 y_8;solidcircle(x_4, y_4, 3);TCHAR s_4[5];_stprintf_s(s_4, _T(%d), 4); // 高版本 VC 推荐使用 _stprintf_s 函数outtextxy(x_4, y_4, s_4);int x_2, y_2;x_2 x_10 sqrt(3.0) * R;y_2 y_10;solidcircle(x_2, y_2, 3);TCHAR s_2[5];_stprintf_s(s_2, _T(%d), 2); // 高版本 VC 推荐使用 _stprintf_s 函数outtextxy(x_2, y_2, s_2);int x_1, y_1;x_1 x_11 R;y_1 y_11;solidcircle(x_1, y_1, 3);TCHAR s_1[5];_stprintf_s(s_1, _T(%d), 1); // 高版本 VC 推荐使用 _stprintf_s 函数outtextxy(x_1, y_1, s_1);float secondangle 0;//秒针转动的角度float minuteangle 0;//分针转动的角float hourAngle 0;//定义时针转动的角SYSTEMTIME ti;//获取系统时间BeginBatchDraw();while (1){GetLocalTime(ti);//得当当前系统时间//实现秒针转动secondangle ti.wSecond * 2 * PI / 60;secondend_x center_x secondlength * sin(secondangle);secondend_y center_y - secondlength * cos(secondangle);//实现分针转动minuteangle ti.wMinute * 2 * PI / 60;minuteend_x center_x minutelength * sin(minuteangle);minuteend_y center_y - minutelength * cos(minuteangle);//实现时针转动hourAngle ti.wHour * 2 * PI / 12;hourEnd_x center_x hourlength * sin(hourAngle);hourEnd_y center_y - hourlength * cos(hourAngle);//画秒针setlinestyle(PS_SOLID, 2);//定义线的类型宽度为2setcolor(BLUE);//定义颜色为蓝色line(center_x, center_y, secondend_x, secondend_y);//画分针setlinestyle(PS_SOLID, 2);//定义线的类型宽度为2setcolor(YELLOW);//定义颜色为黄色line(center_x, center_y, minuteend_x, minuteend_y);//画分针setlinestyle(PS_SOLID, 3);//定义线的类型宽度为3setcolor(RED);//定义颜色为黄色line(center_x, center_y, hourEnd_x, hourEnd_y);setcolor(BLUE);TCHAR s[] _T(*小张钟表*);outtextxy(x_11 R / 3 - 10, y_11 sqrt(3.0) / 2 * R R / 2, s);FlushBatchDraw();Sleep(50);//隐藏前一个秒针setcolor(BLACK);line(center_x, center_y, secondend_x, secondend_y);//隐藏前一个分针 setcolor(BLACK);line(center_x, center_y, minuteend_x, minuteend_y);//隐藏前一个时针setcolor(BLACK);line(center_x, center_y, hourEnd_x, hourEnd_y);}EndBatchDraw();_getch();closegraph();system(pause);return 0;
}