一款由c++开发的计时器

 名称:计时器beta

编写语言:devc++

备注:本程序无害.

#include<bits/stdc++.h>
#include<windows.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
using namespace std;
void color(int a){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);}
void gto(int x,int y){
    COORD pos;pos.X=y*2;pos.Y=x;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void gamecsh(){
    HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
    DWORD mode;
    GetConsoleMode(hStdin, &mode);
    mode &= ~ENABLE_QUICK_EDIT_MODE;
    mode &= ~ENABLE_INSERT_MODE;     
    mode &= ~ENABLE_MOUSE_INPUT;
    SetConsoleMode(hStdin, mode);
    CONSOLE_CURSOR_INFO cursor_info={1,0};
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
    SetWindowLongPtrA(
    GetConsoleWindow(),
    GWL_STYLE,
    GetWindowLongPtrA(GetConsoleWindow(), GWL_STYLE) & ~WS_SIZEBOX & ~WS_MAXIMIZEBOX);
    system("mode con cols=25 lines=8");
}
void gtoxy(int y,int x){
    x-=1;y-=1;
    swap(x,y);
    COORD pos;pos.X=y*2;pos.Y=x;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
struct Button{
    int x,y,color,color2;
    const char *name;
    int len;
    bool sfanx,dycsfanx,gs;
    int dq,zq;
    bool yjz;
    bool sfzx;
    int dqan,zqan; 
};
void puto(int x){
    if(x<0){
        putchar('-');
        x=-x;
    }
    if(x>=10){
        puto(x/10);
        putchar('0'+x%10);
    }
    else putchar('0'+x);
}
void GetPos(POINT &pt){
    HWND hwnd=GetForegroundWindow();
    GetCursorPos(&pt);
    ScreenToClient(hwnd,&pt);
    pt.y=pt.y/16,pt.x=pt.x/16;
}
Button NewButton(int y,int x,bool gs,const char *name){
    y-=1,x-=1;
    swap(x,y);
    Button t;
    t.x=x,t.y=y,t.name=name;
    t.color=7;
    t.color2=8;
    t.len=strlen(name);
    t.sfanx=false;
    t.dycsfanx=false;
    t.gs=gs;
    t.zq=t.dq=1;
    t.yjz=false;
    t.sfzx=false;
    return t;
}
int Preserve(Button &A){
    if(A.sfzx)return false;
    POINT pt;
    GetPos(pt);
    if(A.dq!=A.zq||!A.yjz) {
        A.yjz=true;
        if(A.gs){
            if(A.sfanx)color(A.color2);
            else color(A.color);
            A.yjz=true;
        }
        else color(A.color);
        gto(A.x,A.y);
        printf("%s",A.name);
    }
    if(pt.y==A.x&&(pt.x>=A.y&&pt.x<=A.y+A.len/2)){
        A.dq=1;
        if(A.dq!=A.zq||(A.gs&&A.dqan!=A.zqan)){
            if(A.gs){
                if(A.sfanx)color(A.color);
                else color(A.color2);
            }
            else color(A.color2);
            gto(A.x,A.y);
            printf("%s",A.name);
        }
        if(KEY_DOWN(VK_LBUTTON)||KEY_DOWN(VK_MBUTTON)|KEY_DOWN(VK_RBUTTON)) {
            if(!A.dycsfanx)A.dycsfanx=true;
            if(A.gs){
                A.sfanx=!A.sfanx;
                if(A.gs){
                    if(A.sfanx)color(A.color);
                    else color(A.color2);
                }
                else color(A.color2);
                gto(A.x,A.y);
                printf("%s",A.name);
            }
            A.zqan=A.dqan;
            if(KEY_DOWN(VK_LBUTTON))A.dqan=1;
            else if(KEY_DOWN(VK_MBUTTON))A.dqan=2;
            else if(KEY_DOWN(VK_RBUTTON))A.dqan=3;
            A.zq=A.dq;
            if(pt.y==A.x&&(pt.x>=A.y&&pt.x<=A.y+A.len/2))A.dq=1;
            else A.dq=0; 
            Sleep(100);
            if(!A.gs)return A.dqan;
            Sleep(50);
            return A.sfanx;
        }
    }
    A.zqan=A.dqan;
    if(KEY_DOWN(VK_LBUTTON))A.dqan=1;
    else if(KEY_DOWN(VK_MBUTTON))A.dqan=2;
    else if(KEY_DOWN(VK_RBUTTON))A.dqan=3;
    else A.dqan=0;
    A.zq=A.dq;
    if(pt.y==A.x&&(pt.x>=A.y&&pt.x<=A.y+A.len/2))A.dq=1;
    else A.dq=0; 
    return A.sfanx;
}
void Buttonname(Button &A,const char *name){
    gto(A.x,A.y);
    for(int i=0;i<A.len;i++)putchar(' ');
    A.name=name;
    A.len=strlen(name);
    A.dq=1;
    A.zq=0;
    A.yjz=false;
}
void hideButton(Button A){ 
    gto(A.x,A.y);
    for(int i=0;i<A.len;i++)putchar(' ');
}
void showButton(Button A){ 
    A.yjz=false;
    Preserve(A);
}
Button Sa[4],Sj[4],qd=NewButton(7,11,0,"开始"),gl=NewButton(7,7,0,"归零"),ztjx=NewButton(7,7,0,"暂停"),sett=NewButton(7,1,0,"设置");
int hour,minute,second;
int xhour,xminute,xsecond;
double num,qznum,hznum;
int dqnum=-1,okk=1;
int sysjtz=1,sysjbfb=1;
string str="~时间到了!~";
char mnfcc[16][51];
void jsqcsh(){
    color(7); 
    gtoxy(4,5);
    putchar(':');
    gtoxy(4,9);
    putchar(':');
    for(int i=0;i<3;i++){
        int x=3+i*4;
        Sa[i]=NewButton(2,x,0,"+");
        Sj[i]=NewButton(6,x,0,"-");
        gtoxy(4,x);
        puto(0);
    }
    showButton(qd);
    showButton(gl);
}
void drawjdq(int n){
    for(int i=0;i<n;i++)putchar('#');
    for(int i=0;i<10-n;i++)putchar(' ');
}
int main(){
    SetConsoleTitle("计时器");
    gamecsh();
    jsqcsh();
    xhour=xminute=xsecond=hour=minute=second=0; 
    begin:Buttonname(qd,"开始");
    color(7);
    okk=1;
    dqnum=0;
    Buttonname(ztjx,"暂停");
    hideButton(ztjx);
    gtoxy(4,3);
    if(xhour>9||hour<10)puto(xhour);
    else{
        putchar(' ');
        putchar(' ');
        gtoxy(4,3);
        puto(xhour);
    }
    gtoxy(4,7);
    if(xminute>9||minute<10)puto(xminute);
    else{
        putchar(' ');
        putchar(' ');
        gtoxy(4,7);
        puto(xminute);
    }
    gtoxy(4,11);
    if(xsecond>9||second<10)puto(xsecond);
    else{
        putchar(' ');
        putchar(' ');
        gtoxy(4,11);
        puto(xsecond);
    }
    hour=xhour;
    minute=xminute;
    second=xsecond;
    for(int i=0;i<3;i++){
        showButton(Sa[i]);
        showButton(Sj[i]);
    }
    showButton(qd);
    showButton(gl);
    showButton(sett);
    while(1){
        if(Preserve(sett)){
            Sleep(75);
            system("cls");
            sett.yjz=false;
            Button sysjbfbt=NewButton(1,1,0,"剩余时间百分比显示(开启)");
            Button sysjtzt=NewButton(2,1,0,"剩余时间条状显示(开启)");
            Button tscgg=NewButton(3,1,0,"更改提醒词");;
            if(!sysjbfb)Buttonname(sysjbfbt,"剩余时间百分比显示(关闭)");
            if(!sysjtz)Buttonname(sysjtzt,"剩余时间条状显示(关闭)");
            while(!Preserve(sett)){
                if(Preserve(sysjbfbt)){
                    if(sysjbfb)Buttonname(sysjbfbt,"剩余时间百分比显示(关闭)");
                    else Buttonname(sysjbfbt,"剩余时间百分比显示(开启)");
                    sysjbfb=!sysjbfb;
                }
                if(Preserve(sysjtzt)){
                    if(sysjtz)Buttonname(sysjtzt,"剩余时间条状显示(关闭)");
                    else Buttonname(sysjtzt,"剩余时间条状显示(开启)");
                    sysjtz=!sysjtz;
                }
                if(Preserve(tscgg)){
                    system("cls");
                    system("mode con cols=40 lines=10");
                    color(7);
                    printf("请输入新的提醒词:");
                    getline(cin,str);
                    printf("提示词设置成功.\n");
                    system("pause");
                    system("mode con cols=25 lines=8");
                    showButton(sett);
                    showButton(sysjtzt);
                    showButton(sysjbfbt);
                    showButton(tscgg);
                }
            }
            Sleep(75);
            hideButton(tscgg);
            hideButton(sysjbfbt);
            hideButton(sysjtzt);
            jsqcsh();
        }
        if(Preserve(gl)){
            color(7);
            int zhour=hour,zminute=minute,zsecond=second;
            hour=minute=second=0;
            if(zhour!=0){
                gtoxy(4,3);
                putchar('0');
                if(zhour>=10)putchar(' ');
            }
            if(zminute!=0){
                gtoxy(4,7);
                putchar('0');
                if(zminute>=10)putchar(' ');
            }
            if(zsecond!=0){
                gtoxy(4,11);
                putchar('0');
                if(zsecond>=10)putchar(' ');
            }
        }
        if(Preserve(qd))break;
        for(int i=0;i<3;i++){
            if(Preserve(Sa[i])){
                color(7);
                if(i==0){
                    gtoxy(4,3);
                    if(hour<23){
                        hour++;
                        puto(hour);
                    }
                    else {
                        hour=0;
                        putchar('0');
                        putchar(' ');
                    }
                }
                if(i==1){
                    gtoxy(4,7);
                    if(minute<59){
                        minute++;
                        puto(minute);
                    }
                    else {
                        minute=0;
                        putchar('0');
                        putchar(' ');
                    }
                    
                }
                if(i==2){
                    gtoxy(4,11);
                    if(second<59){
                        second++;
                        puto(second);
                    }
                    else{
                        second=0;
                        putchar('0');
                        putchar(' ');
                    }
                }
                Sleep(75);
            }
            if(Preserve(Sj[i])){
                color(7);
                if(i==0){
                    if(hour>0)hour--;
                    else hour=23;
                    gtoxy(4,3);
                    if(hour==9){
                        putchar('9');
                        putchar(' ');
                    }
                    else puto(hour);
                }
                if(i==1){
                    if(minute>0)minute--;
                    else minute=59;
                    gtoxy(4,7);
                    if(minute==9){
                        putchar('9');
                        putchar(' ');
                    }
                    else puto(minute);
                }
                if(i==2){
                    if(second>0)second--;
                    else second=59;
                    gtoxy(4,11);
                    if(second==9){
                        putchar('9');
                        putchar(' ');
                    }
                    else puto(second);
                }
                Sleep(75);
            }
        }
    }
    xhour=hour;
    xminute=minute;
    xsecond=second;
    hznum=(double)(xhour*3600+xminute*60+xsecond);
    qznum=hznum;
    num=100.0000;
    Buttonname(qd,"停止");
    for(int i=0;i<3;i++)hideButton(Sa[i]);
    for(int i=0;i<3;i++)hideButton(Sj[i]);
    hideButton(gl);
    hideButton(sett);
    clock_t start;
    start = clock();
    color(7);
    if(xhour+xminute+xsecond!=0){
        if(sysjbfb){
            gtoxy(1,1);
            printf("100.0000");
            putchar('%');
        }
        if(sysjtz){
            if(!sysjbfb)gtoxy(1,4);
            putchar(' ');
            for(int i=0;i<10;i++)putchar('#');
        }
    }
    showButton(ztjx);
    while(hour!=0||minute!=0||second!=0){
        if(Preserve(ztjx)){
            int nowtime=clock()-start;
            Buttonname(ztjx,"继续");
            Sleep(75);
            while(!Preserve(ztjx))if(Preserve(qd))goto end; 
            Buttonname(ztjx,"暂停");
            start=clock()-nowtime;
        }
        if(Preserve(qd))goto end;
        if(clock()-start>=999){
            start = clock();
            color(7);
            second--;
            if(second==-1){
                if(minute>0){
                    minute--;
                    second=59;
                    gtoxy(4,7);
                    if(minute==9){
                        putchar('9');
                        putchar(' ');
                    }
                    else puto(minute);
                }
                else{
                    if(hour>0){
                        hour--;
                        minute=59;
                        second=59;
                        gtoxy(4,3);
                        if(hour==9){
                            putchar('9');
                            putchar(' ');
                        }
                        else puto(hour);
                        gtoxy(4,7);
                        if(minute==9){
                            putchar('9');
                            putchar(' ');
                        }
                        else puto(minute);
                    }
                }
            }
            if(sysjtz||sysjbfb){
                qznum=(double)(hour*3600+minute*60+second*1);
                num=qznum/hznum*100.0;
            }
            if(sysjbfb&&okk==1){
                gtoxy(1,1);
                for(int i=0;i<7;i++)putchar(' '); 
                okk=0;
            }
            if(sysjbfb){
                gtoxy(1,1);
                if(num>=10)printf("%.4lf",num);
                else{
                    gtoxy(1,1);
                    printf("%.4lf",num);
                }
                putchar('%');
                putchar(' ');
                putchar(' ');
            }
            if(sysjtz){
                if(!sysjbfb){
                    gtoxy(1,4);
                    putchar(' ');
                }
                if(dqnum!=10&&num<=100.00&&num>=90.00)dqnum=10;
                else if(dqnum!=9&&num<90.00&&num>=80.00)dqnum=9;
                else if(dqnum!=8&&num<80.00&&num>=70.00)dqnum=8;
                else if(dqnum!=7&&num<70.00&&num>=60.00)dqnum=7;
                else if(dqnum!=6&&num<60.00&&num>=50.00)dqnum=6;
                else if(dqnum!=5&&num<50.00&&num>=40.00)dqnum=5;
                else if(dqnum!=4&&num<40.00&&num>=30.00)dqnum=4;
                else if(dqnum!=3&&num<30.00&&num>=20.00)dqnum=3;
                else if(dqnum!=2&&num<20.00&&num>=10.00)dqnum=2;
                else if(dqnum!=1&&num<=10.00&&num>=00.00)dqnum=1;
                drawjdq(dqnum-1);
            }
            gtoxy(4,11);
            if(second==9){
                putchar('9');
                putchar(' ');
            }
            else puto(second);
        }
    }
    hideButton(ztjx);
    hideButton(qd);
    end:if(sysjbfb){
        gtoxy(1,1);
        for(int i=0;i<9;i++)putchar(' ');
    }
    if(sysjtz){
        if(!sysjbfb)gtoxy(1,4);
        putchar(' ');
        for(int i=0;i<11;i++)putchar(' ');
    }
    if(hour+minute+second==0)MessageBox(NULL,str.c_str(),"计时器",MB_SYSTEMMODAL);
    goto begin;
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值