华为太空人智能表盘代码仅需100行?

简介: 我来告诉你他到底有什么秘密,风儿风儿吹风儿风儿吹吹!听说最近太空人智能表盘很火啊,那么如何用C++做一个好玩的智能太空人表盘呢?安排!

摘要:我来告诉你他到底有什么秘密,风儿风儿吹风儿风儿吹吹!听说最近太空人智能表盘很火啊,那么如何用C++做一个好玩的智能太空人表盘呢?安排!

软件工具:Vsiual studio 201x

1、安装Vsiual studio

首先在官网下载安装Vsiual studio

https://visualstudio.microsoft.com/zh-hans/

下载完成后傻瓜式安装即可,如果你电脑上已经安装过Vsiual studio软件了这一步就可以忽略了。

2、安装EasyX图形库

由于太空人表盘界面需要用到很多画线画图函数,这里我们需要安装EasyX图形库。graphics.h是TC的针对DOS下的一个C语言图形库,如果要用的话应该用TC的编译器来编译,VC++环境有其它的针对Windows的图形库。分为:像素函数、直线和线型函数、多边形函数、填充函数等。如果有需要在VC及VS环境中使用graphics.h的功能,可以下载EasyX图形库,这是一个C++的图形库,如果一定要在C语言环境下使用graphics.h,可以使用Windows GDI。

下载方法

在网址:https://easyx.cn/downloads/ 下载graphics.h头文件安装包。安装包的图标如下图

安装包下载完成后按照安装向导安装,软件会自动检测你电脑上安装的Vsiual studio版本,因为我用的是2017版本,直接点击安装即可,这样EasyX图形库就安装到你的电脑中了。注意:如果不安装这个,接下来新建工程会报错没有graphics.h这个头文件。

3、新建工程

在所有环境都安装成功之后,就可以来新建一个工程了。打开Vsiual studio 2017软件,按照下图的配置新建一个空的新工程。

在工程的源文件和头文件中添加新建项,也就是工程所需的.h文件和.c文件。这两个文件我会放到文末!

这样工程就新建完毕了!

4、编写代码

由于windows生成的窗口是方形的,而智能表盘的形状是圆的,所以第一步就要修改窗口的样式

4.1初始化界面为圆形

void SetWindowNewStyle(int w, int h)
{
    // 去掉标题
    SetWindowLong(GetHWnd(), GWL_STYLE, GetWindowLong(GetHWnd(), GWL_STYLE) & ~WS_CAPTION);
    // 初始化界面为圆形
    SetWindowRgn(GetHWnd(), CreateEllipticRgn(0, 0, w, h), true);
}

4.2 加载图片

太空表盘的转动动图是由一张一张的图片循环播放的效果,所以使用LoadImage函数,可以装载图标,光标,或位图,支持bmp,jpg,gif,emf,wmf,ico格式。

void loadImg()
{
    mciSendString("open ./images/风儿吹.mp3", NULL, 0, NULL);
    mciSendString("play ./images/风儿吹.mp3 repeat", NULL, 0, NULL);
    char fileName[50] = { 0 };
    for (int i = 0; i < 30; i++)
    {
        sprintf_s(fileName, "./images/guoguoxiaoshidi (%d).jpeg", i + 1);
        loadimage(spaceMan + i, fileName, 140, 130);
    }
    loadimage(&other[0], "./images/xinlv.jpg", 60, 60);//心率
    loadimage(&other[1], "./images/sun.jpg", 40, 40);//太阳
    loadimage(&other[2], "./images/shoes.jpg", 40, 40);//鞋子
    loadimage(&other[3], "./images/shang.jpg", 30, 30);//上箭头
    loadimage(&other[4], "./images/xia.jpg", 30, 30);//下箭头
    loadimage(&other[5], "./images/rocket.jpg", 40, 40);//火箭
}

4.3 绘制汉字与直线

这里要注意的是高版的VS默认不让使用scanf,fopen等函数,如果使用会报scanf,fopen等函数不安全。而代替其函数的是scanf_s,fopen_s等函数,后边有个"_s"的形式。想要使用可右击工程 - 属性 - 配置属性 - C/C++ - 预处理器。增加下面两行,命令即可!

_CRT_SECURE_NO_DEPRECATE
_CRT_SECURE_NO_WARNINGS

下面就是具体的画图画线函数

void gameDraw()
{
    setbkcolor(RGB(255, 0, 0));
    cleardevice();
    //绘制表盘
    setlinecolor(RGB(0, 0, 0));//设置边框颜色
    setlinestyle(PS_SOLID, 30);
    setfillcolor(RGB(255, 255, 255));//设置圆的填充白色
    fillellipse(0, 0, WIN_SIZE, WIN_SIZE);//绘制一个圆    
    //绘制线条
    setlinestyle(PS_SOLID, 4);
    setlinecolor(BLACK);
    //最上面竖线
    line(WIN_HALF - 30, 20, WIN_HALF - 30, 130);
    //横线x2
    line(WIN_HALF - 195, WIN_HALF - 120, WIN_HALF + 195, WIN_HALF - 120);
    line(WIN_HALF - 195, WIN_HALF + 120, WIN_HALF + 195, WIN_HALF + 120);
    //下面线条x3
    line(WIN_HALF + 80, WIN_HALF + 120, WIN_HALF + 80, WIN_HALF + 175);
    line(WIN_HALF + 80, WIN_HALF + 175, WIN_HALF - 60, WIN_HALF + 175);
    line(WIN_HALF - 60, WIN_HALF + 175, WIN_HALF - 60, WIN_HALF + 175 + 48);
    
    setbkmode(TRANSPARENT);
    //左上空气湿度90%
    setTextStyle(55, 23, "Arial");
    settextcolor(BLACK);
    outtextxy(WIN_HALF - 155, 75, "90%");
    drawImg(other + 5, WIN_HALF - 90, 35);    //火箭
    putimage(WIN_HALF - 90, 35, other + 5);
    
    setTextStyle(25, 15, "黑体");
    outtextxy(WIN_HALF - 25, 35, "空气良好");
    setTextStyle(25, 13, "宋体");
    outtextxy(WIN_HALF - 25, 65, "晴天");
    outtextxy(WIN_HALF - 25, 95, "25℃");
    outtextxy(WIN_HALF + 38, 65, "26°");
    outtextxy(WIN_HALF + 38, 95, "17°");
    drawImg(other + 4, WIN_HALF + 73, 60);    
    drawImg(other + 3, WIN_HALF + 73, 90);    
    drawImg(other + 1, WIN_HALF + 105, 70);    
    putimage(WIN_HALF + 73, 60, other + 4);
    putimage(WIN_HALF + 73, 90, other + 3);
    putimage(WIN_HALF + 105, 70, other + 1);
    
    setTextStyle(37, 17, "宋体");
    outtextxy(100, WIN_HALF + 130, "睡眠");
    outtextxy(WIN_HALF + 90, WIN_HALF + 130, "距离");
    outtextxy(50, WIN_HALF-40, "武汉");
    
    setTextStyle(40, 15, "Arial");
    outtextxy(185, WIN_HALF + 125, "7h30m");
    outtextxy(215, WIN_HALF + 180, "9.88km");
    //心率
    setTextStyle(25, 13, "宋体");
    outtextxy(60, WIN_HALF + 30, "80~128");
    drawImg(&other[0], 65, WIN_HALF + 50);    //心率图
    putimage(65, WIN_HALF + 50, other + 0);
    setTextStyle(40, 15, "Arial");
    outtextxy(135, WIN_HALF + 60, "92");    
    // 步数
    drawImg(&other[2], WIN_HALF + 65, WIN_HALF + 65);
    putimage(WIN_HALF + 65, WIN_HALF + 65, &other[2]);
    outtextxy(WIN_HALF + 125, WIN_HALF + 75, "9527");
    //时间、日期相关
    time_t timep = time(NULL);            //获取当前时间
    struct tm* p = localtime(&timep);    //把时间转成格式化时间
    setTextStyle(25, 12, "宋体");
    outtextxy(WIN_HALF + 110, WIN_HALF - 20, "四月六号");
    char fileName[40] = { 0 };
    sprintf_s(fileName, "周%s %d-%d", week[p->tm_wday], p->tm_mon + 1, p->tm_mday);
    outtextxy(WIN_HALF + 110, WIN_HALF + 10, fileName);
    // 获取字体
    setTextStyle(100, 40, "Arial");
    char szBuf[40] = { 0 };
    sprintf_s(szBuf, "%d:%02d", p->tm_hour, p->tm_min);
    outtextxy(105, 120, szBuf);
    // 秒
    setTextStyle(55, 23, "Arial");
    sprintf(szBuf, "%02d", p->tm_sec);
    outtextxy(335, 160, szBuf);
}

4.4 main函数

int main()
{
    initgraph(WIN_SIZE, WIN_SIZE/*,EW_SHOWCONSOLE*/);
    SetWindowNewStyle(WIN_SIZE, WIN_SIZE);
    loadImg();
    BeginBatchDraw();//双缓冲 防止闪屏
    while (true)
    {
        gameDraw();
        animation();
        mouseEvent();
        FlushBatchDraw();
    }
    EndBatchDraw();
    return 0;
}

5、效果展示

在显示动画的同时电脑也会播放音乐哟!小伙伴赶紧下载工程玩玩去吧!

相关文章
|
3月前
|
算法 vr&ar 计算机视觉
基于PTGui和Ps 有手和低端手机就能拼接生成一张酷酷VR720°商用全景图
这篇文章介绍了如何使用PTGui和PhotoShop软件,配合低端手机,通过一系列步骤拍摄并拼接生成一张720°商用全景图,包括软件下载、拍摄要求、素材获取、拼接合成、发布全景图以及提高拍摄效果的方法。
基于PTGui和Ps 有手和低端手机就能拼接生成一张酷酷VR720°商用全景图
|
人工智能 供应链 Android开发
大厂密集背后,折叠屏市场“暗战”已起
在经过长达10余年的高速增长之后,智能手机行业在过去两年出现了显著的“颓势”
81 1
|
存储 并行计算 物联网
海思3559万能平台搭建:VGS的画线处理
海思3559万能平台搭建:VGS的画线处理
1216 0
海思3559万能平台搭建:VGS的画线处理
|
SQL 人工智能 算法
芯片“自”造:智能音箱从支点到拼图的进阶史
智能音箱这次把炮火打到了“芯片”战场。
芯片“自”造:智能音箱从支点到拼图的进阶史
|
人工智能 Android开发
荣耀手机四周年大猜想,AI战略与海外布局或成主体
几年间,互联网手机变天。来自赛诺的数据显示,2017年1-9月,荣耀超越小米,成为互联网手机出货量、销售额双料第一。至此,荣耀将曾经以12.5%份额在国内市场领头的小米斩落马下,互联网手机已经告别了三年前诸侯混战的大乱局,国内大势已成。
174 0
荣耀手机四周年大猜想,AI战略与海外布局或成主体
|
物联网 调度 芯片
能轻松实现智能联动的智能五孔插座,都隐藏了哪些“黑科技”?
应用速递栏目:应用速递是面向IoT厂商推荐芯片开放社区(OCC)上的典型应用案例,便于IoT厂商精准获取方案,快速实现产品落地。
189 0
能轻松实现智能联动的智能五孔插座,都隐藏了哪些“黑科技”?
|
开发工具 内存技术
启明云端分享:86盒智能新型开关面板UI设计
86 盒智能新型开关面板是基于公司 8ms GUI 平台开发的,用户新建工程后,在设计器实现 UI设计。针对86面板UI,启明云端在8ms开发工具平台上提供了丰富的素材,您可以一健克隆,快速出品产品DEMO。
388 0
启明云端分享:86盒智能新型开关面板UI设计
|
传感器 数据可视化 芯片
启明云端分享:可私人订制UI的86盒智能新型开关面板
今天给大家介绍的是86盒智能新型开关面板,86 盒智能新型开关面板是基于公司 8ms GUI 平台开发的,用户新建工程后,在设计器实现 UI 设计,在积木(Blockly)实现逻辑设计,代码编译成功后,通过烧录工具,将整个工程下载到 86 盒智能新型开关面板。
391 0
启明云端分享:可私人订制UI的86盒智能新型开关面板
|
人工智能 自动驾驶 算法
预告 | 大咖Live X 星舆科技杜洪伟 : 为什么高精度定位网络是打造量产高精度地图的刚需?
打造量产的高精度地图,离不开高精度定位网络的支撑,尤其基于RTK的高精度绝对定位网络是刚需。
635 0
下一篇
无影云桌面