EasyX之太空人表盘(2021-6-16)

简介: 这篇文章介绍了如何使用C++和EasyX库制作一个太空人表盘程序,包括绘制圆盘、文字、动画、动态时间显示以及音乐播放等功能,并提供了详细的代码实现。

EasyX太空人表盘

  • 既然买不起,就自己动手画一个太空人表盘

先上图
太空人

1.绘制圆盘
2.绘制文字
3.绘制动画
4.绘制动态时间
5.音乐播放
6.窗口去标题栏以及边框

  • 初始化一个窗口
    initgraph(WIDTH, HEIGHT);   //窗口宽高为500
    setbkcolor(RGB(223, 230, 240));  //背景色设置
    cleardevice();
  • 绘制圆盘
//绘制表盘
void drawCircle()
{
    setlinestyle(PS_SOLID, 20);      //实线,线宽20
    setfillcolor(RGB(223, 230, 240));
    fillcircle(WIDTH/2, HEIGHT/2, RADIUS);  //填充圆
    setlinecolor(RGB(49, 49, 49));
}
//绘制表盘内部线条
void drawLine()
{
    setlinestyle(PS_SOLID, 4);
    line(WIDTH / 2 - 40, 50, WIDTH / 2 - 40, 150);
    line(WIDTH / 2 - RADIUS+30, HEIGHT / 2 - 100, WIDTH / 2 + RADIUS-30, HEIGHT / 2 - 100);
    line(WIDTH / 2 - RADIUS + 30, HEIGHT / 2 + 100, WIDTH / 2 + RADIUS - 30, HEIGHT / 2 + 100);
    line(WIDTH / 2 + 50, HEIGHT / 2 + 100, WIDTH / 2 + 50, HEIGHT / 2 + 140);
    line(WIDTH / 2 + 50, HEIGHT / 2 + 140, WIDTH / 2 - 50, HEIGHT / 2 + 140);
    line(WIDTH / 2 - 50, HEIGHT / 2 + 140, WIDTH / 2 - 50, HEIGHT / 2 + 190);
}

表盘

  • 绘制基本文字及图片
//绘制左上角火箭以及文字
void drawLeftTop()
{
    char buff[6] = { 0 };

    setTextStyle(30, 20, "Arial");    //自定义函数
    sprintf(buff, "%d%%", 90);
    outtextxy(WIDTH / 2 - 130, HEIGHT / 2 - 130, buff);
    putimage(WIDTH / 2 - 83, HEIGHT / 2 - 170, img + 5);
}
//绘制右上角文字以及图片
void drawRightTop()
{
    char buff1[20] = { 0 };
    char buff2[20] = { 0 };
    sprintf(buff1, "晴天 %d°", 26);
    sprintf(buff2, "%d°C %d°", 25,17);
    setTextStyle(20, 12, "Arial");
    outtextxy(WIDTH / 2 - 30, HEIGHT / 2 - 170, "空气良好");
    setTextStyle(18, 10, "Arial");
    outtextxy(WIDTH / 2 - 30, HEIGHT / 2 - 150, buff1);
    outtextxy(WIDTH / 2 - 30, HEIGHT / 2 - 130, buff2);
    putimage(WIDTH / 2 + 60, HEIGHT / 2 - 150, &img[4]);
    putimage(WIDTH / 2 + 60, HEIGHT / 2 - 125, &img[3]);
    putimage(WIDTH / 2 + 85, HEIGHT / 2 - 142, &img[1]);
}
//绘制左下角文字以及图片
void drawLeftDown()
{
    char buff[10] = { 0 };
    setTextStyle(25, 15, "Arial");
    outtextxy(WIDTH / 2 - 130, HEIGHT / 2 + 110, "睡眠");
    setTextStyle(23, 15, "Arial");
    sprintf(buff, "%dh%dm", 7, 30);
    outtextxy(WIDTH / 2 - 60, HEIGHT / 2 + 110, buff);
}
//绘制右下角文字以及图片
void drawRightDown()
{
    char buff[10] = { 0 };
    setTextStyle(25, 15, "Arial");
    outtextxy(WIDTH / 2 + 60, HEIGHT / 2 + 110, "距离");
    setTextStyle(23, 15, "Arial");
    sprintf(buff, "%.2fkm", 9.88);
    outtextxy(WIDTH / 2 - 40, HEIGHT / 2 + 150, buff);
}
//绘制心图片以及文字
void drawHeart()
{
    char buff[10] = { 0 };
    setTextStyle(20, 10, "Arial");
    sprintf(buff, "%d ~ %d", 80, 128);
    outtextxy(WIDTH / 2 - 170, HEIGHT / 2 + 20, buff);
    putimage(WIDTH / 2 - 160, HEIGHT / 2 + 45, &img[0]);

    setTextStyle(35, 20, "Arial");
    sprintf(buff, "%d", 92);
    outtextxy(WIDTH / 2 - 105, HEIGHT / 2 + 60, buff);
}
//绘制运动图片以及文字
void drawSportSteps()
{
    putimage(WIDTH / 2 + 70, HEIGHT / 2 + 60, &img[2]);
    char buff[10] = { 0 };
    setTextStyle(25, 10, "Arial");
    sprintf(buff, "%d", 9527);
    outtextxy(WIDTH / 2 + 110, HEIGHT / 2 + 70, buff);
}

在这里插入图片描述

  • 绘制太空人动画
IMAGE spaceMan[59];      //太空人图片
IMAGE img[6];            //其它图片
//加载图片
void loadImg()
{
    char fileName[30] = "\0";
    //加载图片
    for (int i = 0; i < 59; i++)
    {
        sprintf(fileName, "./images/human (%d).jpg", i + 2);
        loadimage(&spaceMan[i], fileName, 120, 120);
    }
    //加载心
    loadimage(&img[0], "./images/other1.jpg", 50, 50);
    //加载右上角图片
    loadimage(&img[1], "./images/other2.jpg", 40, 40);
    loadimage(&img[2], "./images/other3.jpg", 35, 35);
    loadimage(&img[3], "./images/other4.jpg", 20, 20);
    //加载鞋子
    loadimage(&img[4], "./images/other5.jpg", 20, 20);
    //加载火箭
    loadimage(&img[5], "./images/other6.jpg", 40, 40);
}
//动画输出
void putImg()
{
    //时间差解决绘制快慢问题(控制图片的切换速度)
    static DWORD t1 = clock();
    DWORD t2 = clock();
    static int i = 0;
    if (t2 - t1 > 20)
    {
        i = (i + 1) % 59;
        t1 = t2;
    }
    putimage(WIDTH / 2 - 60, HEIGHT / 2 - 40, spaceMan + i);
}

在这里插入图片描述

  • 绘制动态的时间
//将数字日期转换为汉字日期
char* changeDate(int mon, int day)
{
    static char buff[20] = { 0 };
    switch (mon + 1)
    {
    case 1:
        switch (day)
        {
        case 1:
            strcpy(buff, "一月一日");
            break;
        case 2:
            strcpy(buff, "一月二日");
            break;
        case 3:
            strcpy(buff, "一月三日");
            break;
        case 4:
            strcpy(buff, "一月四日");
            break;
        case 5:
            strcpy(buff, "一月五日");
            break;
        case 6:
            strcpy(buff, "一月六日");
            break;
        case 7:
            strcpy(buff, "一月七日");
            break;
        case 8:
            strcpy(buff, "一月八日");
            break;
        case 9:
            strcpy(buff, "一月九日");
            break;
        case 10:
            strcpy(buff, "一月十日");
            break;
        case 11:
            strcpy(buff, "一月十一日");
            break;
        case 12:
            strcpy(buff, "一月十二日");
            break;
        case 13:
            strcpy(buff, "一月十三日");
            break;
        case 14:
            strcpy(buff, "一月十四日");
            break;
        case 15:
            strcpy(buff, "一月十五日");
            break;
        case 16:
            strcpy(buff, "一月十六日");
            break;
        case 17:
            strcpy(buff, "一月十七日");
            break;
        case 18:
            strcpy(buff, "一月十八日");
            break;
        case 19:
            strcpy(buff, "一月十九日");
            break;
        case 20:
            strcpy(buff, "一月二十日");
            break;
        case 21:
            strcpy(buff, "一月二十一日");
            break;
        case 22:
            strcpy(buff, "一月二十二日");
            break;
        case 23:
            strcpy(buff, "一月二十三日");
            break;
        case 24:
            strcpy(buff, "一月二十四日");
            break;
        case 25:
            strcpy(buff, "一月二十五日");
            break;
        case 26:
            strcpy(buff, "一月二十六日");
            break;
        case 27:
            strcpy(buff, "一月二十七日");
            break;
        case 28:
            strcpy(buff, "一月二十八日");
            break;
        case 29:
            strcpy(buff, "一月二十九日");
            break;
        case 30:
            strcpy(buff, "一月三十日");
            break;
        case 31:
            strcpy(buff, "一月三十一日");
            break;
        default:
            break;
        }
        break;
        //此处省略......
    }
    return buff;
}
//将数字星期转换为汉字星期
char* changeWinday(int wday)
{
    char cWday[10] = { 0 };
    switch (wday)
    {
        case 0:
            strcpy(cWday,"星期日");
            break;
        case 1:
            strcpy(cWday, "星期一");
            break;
        case 2:
            strcpy(cWday, "星期二");
            break;
        case 3:
            strcpy(cWday, "星期三");
            break;
        case 4:
            strcpy(cWday, "星期四");
            break;
        case 5:
            strcpy(cWday, "星期五");
            break;
        case 6:
            strcpy(cWday, "星期六");
            break;
        default:
            break;
    }
    return cWday;
}
void drawTime()
{
    //获取当前时间
    time_t curTime = time(NULL);
    //将时间戳转换为本地时间
    tm* humanTime = localtime(&curTime);
    char buff[20] = { 0 };
    if (humanTime->tm_min < 10)
    {
    sprintf(buff, "%d:0%d", humanTime->tm_hour, humanTime->tm_min);
    }
    else
    {
        sprintf(buff, "%d:%d", humanTime->tm_hour, humanTime->tm_min);
    }
    setTextStyle(65, 40, "Arial");
    outtextxy(100,152,buff);

    if (humanTime->tm_sec < 10)
    {
        sprintf(buff, "0%d", humanTime->tm_sec);
    }
    else
    {
        sprintf(buff, "%d", humanTime->tm_sec);
    }
    setTextStyle(50, 20, "Arial");
    outtextxy(WIDTH/2 + 80, HEIGHT/2 - 70, buff);

    //绘制几月几日
    sprintf(buff, "%s", changeDate(humanTime->tm_mon, humanTime->tm_mday));
    setTextStyle(18, 6, "Arial");
    outtextxy(WIDTH / 2 + 70, HEIGHT / 2 - 10, buff);
    //绘制星期几
    sprintf(buff, "%s", changeWinday(humanTime->tm_wday));
    setTextStyle(20, 10, "Arial");
    outtextxy(WIDTH / 2 + 70, HEIGHT / 2 + 20, buff);

    sprintf(buff, "%d-%d", humanTime->tm_mon + 1,humanTime->tm_mday);
    setTextStyle(20, 10, "Arial");
    outtextxy(WIDTH / 2 + 140, HEIGHT / 2 + 20, buff);
}

在这里插入图片描述

  • 音乐播放
#include<mmsystem.h>     //添加音视频播放头文件
#pragma comment(lib,"winmm.lib")  //连接音频播放库
    //打开音乐
    mciSendString("open ./images/风儿吹.mp3 alias BGM", NULL, NULL, NULL);
    //播放音乐
    mciSendString("play  BGM", NULL, NULL, NULL);
  • 去除标题栏以及边框
    // 去掉标题
    SetWindowLong(GetHWnd(), GWL_STYLE, GetWindowLong(GetHWnd(), GWL_STYLE) & ~WS_CAPTION);
    // 初始化界面为圆形
    SetWindowRgn(GetHWnd(), CreateEllipticRgn(40, 40, WIDTH - 40, HEIGHT - 40), true);

整体代码

#define _CRT_SECURE_NO_WARNINGS
#include<graphics.h>
#include<cstdio>
#include<cstring>
#include<conio.h>
#include<time.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")
#define WIDTH 500
#define HEIGHT 500
#define RADIUS 200

IMAGE spaceMan[59];      //太空人图片
IMAGE img[6];            //其它图片
//加载图片
void loadImg()
{
    char fileName[30] = "\0";
    //加载图片
    for (int i = 0; i < 59; i++)
    {
        sprintf(fileName, "./images/human (%d).jpg", i + 2);
        loadimage(&spaceMan[i], fileName, 120, 120);
    }
    //加载心
    loadimage(&img[0], "./images/other1.jpg", 50, 50);
    //加载右上角图片
    loadimage(&img[1], "./images/other2.jpg", 40, 40);
    loadimage(&img[2], "./images/other3.jpg", 35, 35);
    loadimage(&img[3], "./images/other4.jpg", 20, 20);
    //加载鞋子
    loadimage(&img[4], "./images/other5.jpg", 20, 20);
    //加载火箭
    loadimage(&img[5], "./images/other6.jpg", 40, 40);
}
//设置文字样式
void setTextStyle(int h,int w,const char* faceName)
{
    LOGFONT font = { 0 };
    font.lfHeight = h;
    font.lfWidth = w;
    strcpy(font.lfFaceName, faceName);
    settextstyle(&font);
    settextcolor(RGB(0, 2, 4));
}
//绘制表盘
void drawCircle()
{
    setlinestyle(PS_SOLID, 20);
    setfillcolor(RGB(223, 230, 240));
    fillcircle(WIDTH/2, HEIGHT/2, RADIUS);
    setlinecolor(RGB(49, 49, 49));
}
//绘制内部线条
void drawLine()
{
    setlinestyle(PS_SOLID, 4);
    line(WIDTH / 2 - 40, 50, WIDTH / 2 - 40, 150);
    line(WIDTH / 2 - RADIUS+30, HEIGHT / 2 - 100, WIDTH / 2 + RADIUS-30, HEIGHT / 2 - 100);
    line(WIDTH / 2 - RADIUS + 30, HEIGHT / 2 + 100, WIDTH / 2 + RADIUS - 30, HEIGHT / 2 + 100);
    line(WIDTH / 2 + 50, HEIGHT / 2 + 100, WIDTH / 2 + 50, HEIGHT / 2 + 140);
    line(WIDTH / 2 + 50, HEIGHT / 2 + 140, WIDTH / 2 - 50, HEIGHT / 2 + 140);
    line(WIDTH / 2 - 50, HEIGHT / 2 + 140, WIDTH / 2 - 50, HEIGHT / 2 + 190);
}
//绘制左上角火箭
void drawLeftTop()
{
    char buff[6] = { 0 };

    setTextStyle(30, 20, "Arial");
    sprintf(buff, "%d%%", 90);
    outtextxy(WIDTH / 2 - 130, HEIGHT / 2 - 130, buff);
    putimage(WIDTH / 2 - 83, HEIGHT / 2 - 170, img + 5);
}
//绘制右上角文字
void drawRightTop()
{
    char buff1[20] = { 0 };
    char buff2[20] = { 0 };
    sprintf(buff1, "晴天 %d°", 26);
    sprintf(buff2, "%d°C %d°", 25,17);
    setTextStyle(20, 12, "Arial");
    outtextxy(WIDTH / 2 - 30, HEIGHT / 2 - 170, "空气良好");
    setTextStyle(18, 10, "Arial");
    outtextxy(WIDTH / 2 - 30, HEIGHT / 2 - 150, buff1);
    outtextxy(WIDTH / 2 - 30, HEIGHT / 2 - 130, buff2);
    putimage(WIDTH / 2 + 60, HEIGHT / 2 - 150, &img[4]);
    putimage(WIDTH / 2 + 60, HEIGHT / 2 - 125, &img[3]);
    putimage(WIDTH / 2 + 85, HEIGHT / 2 - 142, &img[1]);
}
//绘制左下角
void drawLeftDown()
{
    char buff[10] = { 0 };
    setTextStyle(25, 15, "Arial");
    outtextxy(WIDTH / 2 - 130, HEIGHT / 2 + 110, "睡眠");
    setTextStyle(23, 15, "Arial");
    sprintf(buff, "%dh%dm", 7, 30);
    outtextxy(WIDTH / 2 - 60, HEIGHT / 2 + 110, buff);
}
//绘制右下角
void drawRightDown()
{
    char buff[10] = { 0 };
    setTextStyle(25, 15, "Arial");
    outtextxy(WIDTH / 2 + 60, HEIGHT / 2 + 110, "距离");
    setTextStyle(23, 15, "Arial");
    sprintf(buff, "%.2fkm", 9.88);
    outtextxy(WIDTH / 2 - 40, HEIGHT / 2 + 150, buff);
}
//绘制心跳
void drawHeart()
{
    char buff[10] = { 0 };
    setTextStyle(20, 10, "Arial");
    sprintf(buff, "%d ~ %d", 80, 128);
    outtextxy(WIDTH / 2 - 170, HEIGHT / 2 + 20, buff);
    putimage(WIDTH / 2 - 160, HEIGHT / 2 + 45, &img[0]);

    setTextStyle(35, 20, "Arial");
    sprintf(buff, "%d", 92);
    outtextxy(WIDTH / 2 - 105, HEIGHT / 2 + 60, buff);
}
//绘制运动步数
void drawSportSteps()
{
    putimage(WIDTH / 2 + 70, HEIGHT / 2 + 60, &img[2]);
    char buff[10] = { 0 };
    setTextStyle(25, 10, "Arial");
    sprintf(buff, "%d", 9527);
    outtextxy(WIDTH / 2 + 110, HEIGHT / 2 + 70, buff);
}
//动画输出
void putImg()
{
    static DWORD t1 = clock();
    DWORD t2 = clock();
    static int i = 0;
    if (t2 - t1 > 20)
    {
        i = (i + 1) % 59;
        t1 = t2;
    }
    putimage(WIDTH / 2 - 60, HEIGHT / 2 - 40, spaceMan + i);
}
//将数字日期转换为汉字日期
char* changeDate(int mon, int day)
{
    static char buff[20] = { 0 };
    switch (mon + 1)
    {
    case 1:
        switch (day)
        {
        case 1:
            strcpy(buff, "一月一日");
            break;
        case 2:
            strcpy(buff, "一月二日");
            break;
        case 3:
            strcpy(buff, "一月三日");
            break;
        case 4:
            strcpy(buff, "一月四日");
            break;
        case 5:
            strcpy(buff, "一月五日");
            break;
        case 6:
            strcpy(buff, "一月六日");
            break;
        case 7:
            strcpy(buff, "一月七日");
            break;
        case 8:
            strcpy(buff, "一月八日");
            break;
        case 9:
            strcpy(buff, "一月九日");
            break;
        case 10:
            strcpy(buff, "一月十日");
            break;
        case 11:
            strcpy(buff, "一月十一日");
            break;
        case 12:
            strcpy(buff, "一月十二日");
            break;
        case 13:
            strcpy(buff, "一月十三日");
            break;
        case 14:
            strcpy(buff, "一月十四日");
            break;
        case 15:
            strcpy(buff, "一月十五日");
            break;
        case 16:
            strcpy(buff, "一月十六日");
            break;
        case 17:
            strcpy(buff, "一月十七日");
            break;
        case 18:
            strcpy(buff, "一月十八日");
            break;
        case 19:
            strcpy(buff, "一月十九日");
            break;
        case 20:
            strcpy(buff, "一月二十日");
            break;
        case 21:
            strcpy(buff, "一月二十一日");
            break;
        case 22:
            strcpy(buff, "一月二十二日");
            break;
        case 23:
            strcpy(buff, "一月二十三日");
            break;
        case 24:
            strcpy(buff, "一月二十四日");
            break;
        case 25:
            strcpy(buff, "一月二十五日");
            break;
        case 26:
            strcpy(buff, "一月二十六日");
            break;
        case 27:
            strcpy(buff, "一月二十七日");
            break;
        case 28:
            strcpy(buff, "一月二十八日");
            break;
        case 29:
            strcpy(buff, "一月二十九日");
            break;
        case 30:
            strcpy(buff, "一月三十日");
            break;
        case 31:
            strcpy(buff, "一月三十一日");
            break;
        default:
            break;
        }
        break;
    //此处省略很多字......
    case 12:
        switch (day)
        {
        case 1:
            strcpy(buff, "十二月一日");
            break;
        case 2:
            strcpy(buff, "十二月二日");
            break;
        case 3:
            strcpy(buff, "十二月三日");
            break;
        case 4:
            strcpy(buff, "十二月四日");
            break;
        case 5:
            strcpy(buff, "十二月五日");
            break;
        case 6:
            strcpy(buff, "十二月六日");
            break;
        case 7:
            strcpy(buff, "十二月七日");
            break;
        case 8:
            strcpy(buff, "十二月八日");
            break;
        case 9:
            strcpy(buff, "十二月九日");
            break;
        case 10:
            strcpy(buff, "十二月十日");
            break;
        case 11:
            strcpy(buff, "十二月十一日");
            break;
        case 12:
            strcpy(buff, "十二月十二日");
            break;
        case 13:
            strcpy(buff, "十二月十三日");
            break;
        case 14:
            strcpy(buff, "十二月十四日");
            break;
        case 15:
            strcpy(buff, "十二月十五日");
            break;
        case 16:
            strcpy(buff, "十二月十六日");
            break;
        case 17:
            strcpy(buff, "十二月十七日");
            break;
        case 18:
            strcpy(buff, "十二月十八日");
            break;
        case 19:
            strcpy(buff, "十二月十九日");
            break;
        case 20:
            strcpy(buff, "十二月二十日");
            break;
        case 21:
            strcpy(buff, "十二月二十一日");
            break;
        case 22:
            strcpy(buff, "十二月二十二日");
            break;
        case 23:
            strcpy(buff, "十二月二十三日");
            break;
        case 24:
            strcpy(buff, "十二月二十四日");
            break;
        case 25:
            strcpy(buff, "十二月二十五日");
            break;
        case 26:
            strcpy(buff, "十二月二十六日");
            break;
        case 27:
            strcpy(buff, "十二月二十七日");
            break;
        case 28:
            strcpy(buff, "十二月二十八日");
            break;
        case 29:
            strcpy(buff, "十二月二十九日");
            break;
        case 30:
            strcpy(buff, "十二月三十日");
            break;
        case 31:
            strcpy(buff, "十二月三十一日");
            break;
        default:
            break;
        }
        break;
    default:
        break;
    }
    return buff;
}
//将数字星期转换为汉字星期
char* changeWinday(int wday)
{
    char cWday[10] = { 0 };
    switch (wday)
    {
        case 0:
            strcpy(cWday,"星期日");
            break;
        case 1:
            strcpy(cWday, "星期一");
            break;
        case 2:
            strcpy(cWday, "星期二");
            break;
        case 3:
            strcpy(cWday, "星期三");
            break;
        case 4:
            strcpy(cWday, "星期四");
            break;
        case 5:
            strcpy(cWday, "星期五");
            break;
        case 6:
            strcpy(cWday, "星期六");
            break;
        default:
            break;
    }
    return cWday;
}
void drawTime()
{
    //获取当前时间
    time_t curTime = time(NULL);
    tm* humanTime = localtime(&curTime);
    char buff[20] = { 0 };
    if (humanTime->tm_min < 10)
    {
    sprintf(buff, "%d:0%d", humanTime->tm_hour, humanTime->tm_min);
    }
    else
    {
        sprintf(buff, "%d:%d", humanTime->tm_hour, humanTime->tm_min);
    }
    setTextStyle(65, 40, "Arial");
    outtextxy(100,152,buff);

    if (humanTime->tm_sec < 10)
    {
        sprintf(buff, "0%d", humanTime->tm_sec);
    }
    else
    {
        sprintf(buff, "%d", humanTime->tm_sec);
    }
    setTextStyle(50, 20, "Arial");
    outtextxy(WIDTH/2 + 80, HEIGHT/2 - 70, buff);

    //绘制几月几日
    sprintf(buff, "%s", changeDate(humanTime->tm_mon, humanTime->tm_mday));
    setTextStyle(18, 6, "Arial");
    outtextxy(WIDTH / 2 + 70, HEIGHT / 2 - 10, buff);
    //绘制星期几
    sprintf(buff, "%s", changeWinday(humanTime->tm_wday));
    setTextStyle(20, 10, "Arial");
    outtextxy(WIDTH / 2 + 70, HEIGHT / 2 + 20, buff);

    sprintf(buff, "%d-%d", humanTime->tm_mon + 1,humanTime->tm_mday);
    setTextStyle(20, 10, "Arial");
    outtextxy(WIDTH / 2 + 140, HEIGHT / 2 + 20, buff);
}

int main()
{
    initgraph(WIDTH, HEIGHT);
    // 去掉标题
    SetWindowLong(GetHWnd(), GWL_STYLE, GetWindowLong(GetHWnd(), GWL_STYLE) & ~WS_CAPTION);
    // 初始化界面为圆形
    SetWindowRgn(GetHWnd(), CreateEllipticRgn(40, 40, WIDTH - 40, HEIGHT - 40), true);
    setbkcolor(RGB(223, 230, 240));
    cleardevice();

    loadImg();          //加载图片
    BeginBatchDraw();   //双缓冲绘图
    //播放音乐
    mciSendString("open ./images/风儿吹.mp3 alias BGM", NULL, NULL, NULL);
    mciSendString("play  BGM", NULL, NULL, NULL);
    while (1)
    {
        drawCircle();      //绘制圆盘
        drawLine();        //绘制线条
        drawLeftTop();     //绘制左上角
        drawRightTop();    //绘制右上角
        drawLeftDown();    //绘制左下角
        drawRightDown();   //绘制右下角
        drawHeart();       //绘制心跳
        drawSportSteps();  //绘制运动步数
        putImg();          //绘制太空人动画
        drawTime();        //绘制时间

        FlushBatchDraw();
    }
    //关闭音乐
    mciSendString("close  BGM", NULL, NULL, NULL);
    closegraph();

    return 0;
}
相关文章
|
27天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
3天前
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
372 16
|
19天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
6天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
21天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
23天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2594 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
5天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
182 2
|
3天前
|
编译器 C#
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
105 65
|
7天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
332 2
|
23天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1580 17
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码