一个借助easyx写出的赛博贺卡


生日到了,用easyx纪念一下,聊表心意


(easyx是一个绘图库,极其简单的语句,可很方便的进行交互)


 下面是实现过程:(新手,轻喷)

1.准备工作

        使用了clion来写,因此就导致了以后一些意想不到的bug,首先easyx的在clion安装就是一个不小的问题,具体操作方法可参考 clion安装easyx操作 ,以及easyx入门指南

2.实际操作

        想到了一个很合理的流程,并进行了一些合理的操作。开启时使用随机速度的进度条,达到一个加载中的效果,随后主菜单分为三个板块,并埋下彩蛋。具体代码如下:

#include "graphics.h"
#include <conio.h>
#include "string"
#include <cstdlib>
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")

using namespace std;

int begin();
int error();
void menu();
int cake();
int music();
void say();
void start();
void end();

int main()
{
    int bir;
    bir = begin();
    initgraph(1000, 650, SHOWCONSOLE);
    while(1)
    {
        if (bir == 1)
        {
            break;
        }
        else
            bir = error();
    }
    flushmessage(-1);
    menu();
    return 0;
}
int begin()                            //进度条
{
    char a[24]="[                     ]";
    initgraph(1000, 650, SHOWCONSOLE);
    settextstyle(70,50,nullptr);

    srand((unsigned int)time(nullptr));
    int num;
    for (int i=1;i<21;i++){
        a[i] = '-';
        a[i+1] = '>';
        outtextxy(250,550,a);
        if (i<=10){
            num = rand() % 5;
            Sleep(num*100);
        }
        else
            Sleep(100);
    }
    outtextxy(250,550,"[----------------------]");
    Sleep(250);
    clearcliprgn();
    outtextxy(250,550,"Press To Start");

    MOUSEMSG msg;
    while (1)
    {
        if (MouseHit())
        {
            msg = GetMouseMsg();
            switch (msg.uMsg)
            {
                case WM_LBUTTONDOWN:
                {
                    flushmessage(-1);
                    return 1;
                }
                case WM_RBUTTONDOWN:
                {
                    flushmessage(-1);
                    return 2;
                }
                default:
                    continue;
            }
        }
    }
}

int error()
{
    initgraph(1000, 650, SHOWCONSOLE);
    settextstyle(50,50,nullptr);

    int i,j;
    for (i = 1,j = 0;j<25;i=i+10,j++)        //仿星战字幕
    {
        settextstyle(60-j,0,nullptr);
        outtextxy(150+i,550-i,"You Need Left Touch!");
        settextstyle(60-j+1,0,nullptr);
        outtextxy(150+i,550-i-60,"Tap To Again!!");
        settextstyle(60-j+1,0,nullptr);
        outtextxy(150+i,550-i-120,"Please wait me stop!!!");
        Sleep(100);
        clearcliprgn();
    }
    outtextxy(150,400,"Tap To Again!!!");
    Sleep(1000);
    MOUSEMSG msg;
    while(1)
    {
        msg = GetMouseMsg();//获取鼠标信息
        if (msg.uMsg == WM_LBUTTONDOWN || msg.uMsg == WM_RBUTTONDOWN) {
            return begin();
        }
    }
}


void menu()                               //主菜单
{                                   
    initgraph(1000, 650, SHOWCONSOLE);
    settextstyle(50, 50, nullptr);
    outtextxy(50, 170, "Happy Birthday,My Friend!");
    circle(150, 450, 150);
    circle(500, 450, 150);
    circle(850, 450, 150);
    setfillcolor(RED);//设置填充颜色
    fillroundrect(0,0,1000,60,10,10);
    setbkmode(TRANSPARENT);
    settextstyle(30, 0, nullptr);
    outtextxy(600, 13, "Touch D To Exit!(Anywhere)");
    settextstyle(45, 0, nullptr);
    outtextxy(100, 430, "A.A Song");
    outtextxy(450, 430, "B.A Cake");
    outtextxy(800, 430, "C.A Say");
    flushmessage(-1);
    char i;
    while(1)
    {
        i = getch();
        if (i == 'A' || i == 'a') {
            music();
            break;
        }
        else if (i == 'B' || i == 'b') {
            cake();
            break;
        }
        else if (i == 'C' || i == 'c') {
            say();
            break;
        }
        else if (i == 'D' || i == 'd') {
            end();
            break;
        }
        else continue;
    }

}

int cake()                  //图片展现
{
    IMAGE img1;
    loadimage(&img1,R"(../cake1.png)",1000,650);
    putimage(0, 0, &img1);
    char ch;
    ch = getch();
    while(1)
    {
        if (ch == 'd'||ch == 'D')
            menu();
        else exit(1);
    }
}

int music()                   //音乐展现
{
    initgraph(1000, 650, SHOWCONSOLE);
    settextstyle(50, 50, nullptr);

    start();

    char ch;
    ch = getch();
    mciSendString("close BGM ",0,0,0);
    while(1)
    {
        if (ch == 'd'||ch == 'D')
            menu();
        else exit(2);
    }
}

void say()              //弹出对话框
{
    HWND hnd = GetHWnd();
    settextstyle(50, 50, nullptr);
    outtextxy(50, 170, "say");

    int is_ok = MessageBox(hnd, "凡是过去,皆为序章\n愿未来安好,乘骐骥以驰骋", "Hey bro!(Chinese)", MB_OKCANCEL);
    if (is_ok == IDOK) {
        menu();
    }
    else if (is_ok == IDCANCEL) {
        exit(3);
    }
}

void start()
{
    outtextxy(50, 170, "A SONG!");
    mciSendString("open ../RS020643ANK71H36gh.mp3 alias BGM",0,0,0);
    mciSendString("play BGM repeat",0,0,0);
    Sleep(1000);
}

void end()         //结束,退出
{
    initgraph(1000, 650, SHOWCONSOLE);
    settextstyle(70,50,nullptr);
    outtextxy(70, 170, "Good Bye,My Friend!!!");
    outtextxy(70, 230, "Press enter to exit");
    getch();
    closegraph();
    exit(0);
}

3.具体遇到的问题与bug

一定要链接库,一定要链接库,一定要链接库(在此处音乐播放部分卡了很久)

        在clion中具体操作是在cmakelists.txt中插入:link_libraries(winmm.dll) ,如果不写的话会报错在音乐部分。

 其余部分跟着教程来,基本不会遇到重大问题,最后成功运行。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值