一些函数

今天写了一些函数(有些是直接嫁接过来的),为了防止以后找不到,就发出来吧

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <cstring>
#include <conio.h>
#include <stdlib.h>
#include <cmath>
#include <ctime>
#include <vector>
#include <list>
#include <deque>
#include <malloc.h>
#include <map>
#include <windows.h>
using namespace std;
HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord;
void hide()//隐藏光标
{
    CONSOLE_CURSOR_INFO cursor_info={1,0};
    SetConsoleCursorInfo(hout, &cursor_info);
}
/**********************************************************************************************/

bool breorcon()//一旦键入值,返回 false
{
    if(_kbhit())//_kbhit()返回缓存区是否为空,空返回 0 ,非空返回 1
    {
        cin.sync();//cin.sync()清空缓存区
        cin.clear();//cin.clear()修复输入流
        return false;
    }
    return true;

}
/**********************************************************************************************/


void SetCurPos(const int x, const int y)//设置光标位置
{
    COORD position;
    position.X = x;
    position.Y = y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position);
}

/**********************************************************************************************/

void SetColor(int colorID)//设置文本颜色
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), colorID);
}



void SetBackColor()//设置文本背景色
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
                            FOREGROUND_BLUE |
                            BACKGROUND_BLUE |
                            BACKGROUND_GREEN |
                            BACKGROUND_RED );//这里是白色
}

/**********************************************************************************************/


string generatetime()//利用WindowsAPI获取系统时间
{
    SYSTEMTIME sys;
    GetLocalTime(&sys);
    int pl;
    string m="";
    pl=sys.wYear;   m+=to_string(pl);
    pl=sys.wMonth;  if(pl<10)m+="0";    m+=to_string(pl);
    pl=sys.wDay;    if(pl<10)m+="0";    m+=to_string(pl);
    pl=sys.wHour;   if(pl<10)m+="0";    m+=to_string(pl);
    pl=sys.wMinute; if(pl<10)m+="0";    m+=to_string(pl);
    pl=sys.wSecond; if(pl<10)m+="0";    m+=to_string(pl);
    return m;
}
/**********************************************************************************************/

void scanall()//打开.txt文件(其他类型文件暂不明),一次性读取并输出
{
    string n;
    cin>>n;
    string s;
    ifstream in(n);
    ostringstream tmp;
    tmp<<in.rdbuf();
    s=tmp.str();
    cout<<s;
}

/**********************************************************************************************/
void scanfilebyline(string n)//按行读取文件数据(假如一行用空格分为 4 部分)并输出
{
    string s,a,b,c,d;
    ifstream input(n);
    if(!input)
        cout<<"error | no data ?!"<<endl;
    else
        while(getline(input,s))
        {
            istringstream scin(s);
            scin>>a>>b>>c>>d;
            cout<<a<<"  "<<b<<"  "<<c<<"  "<<d<<endl;
        }
}


/**********************************************************************************************/

int randomnum(int a,int b)//产生随机数(有范围)
{
    srand((unsigned)time(nullptr));
    int c=rand()%(b-a)+a;
    return c;
}


/**********************************************************************************************/
void actviewlefthide
    (const int posx,
     const int posy,
     string* strgather,
     int height)//语句组向左隐藏于一点
{
    int lenght=strgather[0].size();
    for(int i=0;i<lenght;i++)
    {
        for(int j=0;j<height;j++)
        {
            SetCurPos(posx,posy+j);
            string active=strgather[j].substr(i);
            cout<<active;
        }
        Sleep(10);
        char a[lenght-i];
        memset(a,' ',sizeof(a));
        a[lenght-i]='\0';
        for(int j=0;j<height;j++)
        {
            SetCurPos(posx,posy+j);
            cout<<a;
        }
    }
}
void actviewleftout
    (const int posx,
     const int posy,
     string* strgather,
     int height)//语句自左方一点展开
{
    int lenght=strgather[0].size();
    for(int i=lenght-1;i>=0;i--)
    {
        for(int j=0;j<height;j++)
        {
            SetCurPos(posx,posy+j);
            string active=strgather[j].substr(i);
            cout<<active;
        }
        Sleep(10);
    }
}

void actviewrighthide
    (const int posx,
     const int posy,
     string* strgather,
     int height)//语句组向右隐藏于一点
{
    int lenght=strgather[0].size();
    for(int i=0;i<lenght;i++)
    {
        for(int j=0;j<height;j++)
        {
            SetCurPos(posx-lenght+i,posy+j);
            string active=strgather[j].substr(0,lenght-i);
            cout<<active;
        }
        Sleep(10);
        char a[lenght-i];
        memset(a,' ',sizeof(a));
        a[lenght-i]='\0';
        for(int j=0;j<height;j++)
        {
            SetCurPos(posx-lenght+i,posy+j);

            cout<<a;
        }
    }
}
void actviewrightout
    (const int posx,
     const int posy,
     string* strgather,
     int height)//语句自右方一点展开
{
    int lenght=strgather[0].size();
    for(int i=lenght-1;i>=0;i--)
    {
        for(int j=0;j<height;j++)
        {
            SetCurPos(posx-lenght+i,posy+j);
            string active=strgather[j].substr(0,lenght-i);
            cout<<active;
        }
        Sleep(10);
    }
}



void actviewleftoright
    (const int posx1,//语句前端初坐标 x
     const int posx2,//语句前端末坐标 x
     const int posy,
     string* strgather,
     int height)//语句自左方向右方滑动
{
    int lenght=strgather[0].size();
    for(int i=posx1;i<posx2;i++)
    {
        for(int j=0;j<height;j++)
        {
            SetCurPos(i,posy+j);
            cout<<strgather[j];
        }
        SetCurPos(i+lenght-1,posy+height);
        Sleep(10);
        char a[lenght];
        memset(a,' ',lenght);
        a[lenght]='\0';
        for(int j=0;j<height;j++)
        {
            SetCurPos(i,posy+j);
            cout<<a;
        }
    }
    for(int j=0;j<height;j++)
    {
        SetCurPos(posx2,posy+j);
        cout<<strgather[j];
    }

}

void actviewrightoleft
            (const int posx1,//语句前端初坐标 x
             const int posx2,//语句前端末坐标 x
             const int posy,
             string* strgather,
             int height)//语句自右方向左方滑动
{
    int lenght=strgather[0].size();
    for(int i=posx1;i>=posx2;i--)
    {
        for(int j=0;j<height;j++)
        {
            SetCurPos(i,posy+j);
            cout<<strgather[j];
        }
        SetCurPos(i+lenght-1,posy+height);
        Sleep(10);
        char a[lenght];
        memset(a,' ',lenght);
        a[lenght]='\0';
        for(int j=0;j<height;j++)
        {
            SetCurPos(i,posy+j);
            cout<<a;
        }
    }
    for(int j=0;j<height;j++)
    {
        SetCurPos(posx2,posy+j);
        cout<<strgather[j];
    }
}




/**
 *以下为用于测试上述函数功能的函数
 *
 */
void testactview()
{
    hide();
    string a[3]={"dcsoivsovn.zdrv   xdknl.vnljdxasscusdu",
                 "osvudnjsxaczcsdczsd   cszdczxaoifsiorv",
                 "pok   zsdczsdczsdczsdvczdfvd   ghyjfdz"};
    while(1)
    {
        actviewlefthide(2,3,a,3);Sleep(70);
        actviewleftout(2,3,a,3);
        actviewleftoright(2,50,3,a,3);
        actviewrighthide(88,3,a,3);Sleep(70);
        actviewrightout(88,3,a,3);
        actviewrightoleft(50,2,3,a,3);

    }
}
/****************************************************************************************/

//由键值选择
//left arrow : 75
//right arrow : 77
//up arrow : 72
//down arrow :80
const string testSen[5]={" 飞剑 "," 宝刀 "," 匕首 "," 长枪 "," 强弩 "};
int SitionSen[5]={0};
string activepr[5];
int maxnum=0;

void remakemenu
            (const string* pl,
             int *io,
             int d,
             string* activepl,
             int *fr)//重构菜单
{
    int k=0;
    vector<int> m;
    for(int i=0;i<d;i++)
    {
        activepl[i]="";//首先,清空 active pl
        if(SitionSen[i]>0)
        {
            m.push_back(i);//将参数写入 m
            k++;
        }
    }
    for(int h=0;h<k;h++)
        activepl[h]=testSen[m[h]];
    fr[0]=k;
}



void arrowchoose()//建立菜单并选择
{
    //
    for(int i=0;i<5;i++)
        SitionSen[i]=1;

    remakemenu(testSen,SitionSen,5,activepr,&maxnum);




    SetCurPos(10,5);
    SetBackColor();
    cout<<activepr[0];
    for(int i=1;i<maxnum;i++)
    {
        SetColor(3);
        cout<<activepr[i];
    }




    int pos=10;
    int key=0;
    char ch;
    hide();
    while((ch=getch()))
    {
        switch(ch)
        {
            case 13:
                SetCurPos(10,7);
                SetColor(4);
                cout<<"已选择"<<testSen[key];
                break;
            case 75:
                if(key>0)
                {
                    SetCurPos(pos,5);
                    SetColor(3);
                    cout<<activepr[key];
                    pos-=6;
                    key--;
                    SetCurPos(pos,5);
                    SetBackColor();
                    cout<<activepr[key];
                }
                break;
            case 77:
                if(key<maxnum-1)
                {
                    SetCurPos(pos,5);
                    SetColor(3);
                    cout<<activepr[key];
                    pos+=6;
                    key++;
                    SetCurPos(pos,5);
                    SetBackColor();
                    cout<<activepr[key];
                }
                break;
            default:break;
        }
        Sleep(50);
    }
}

/**********************************************************************************************/


void getkeynum()//获取键码
{
    char ch;
    while((ch=getch()))
    {
        switch(ch)
        {
            case 0:cout<<0<<endl;break;
            case 1:cout<<1<<endl;break;
            case 2:cout<<2<<endl;break;
            case 3:cout<<3<<endl;break;
            case 4:cout<<4<<endl;break;
            case 5:cout<<5<<endl;break;
            case 6:cout<<6<<endl;break;
            case 7:cout<<7<<endl;break;
            case 8:cout<<8<<endl;break;
            case 9:cout<<9<<endl;break;
            case 10:cout<<10<<endl;break;
            case 11:cout<<11<<endl;break;
            case 12:cout<<12<<endl;break;
            case 13:cout<<13<<endl;break;
            case 14:cout<<14<<endl;break;
            case 15:cout<<15<<endl;break;
            case 16:cout<<16<<endl;break;
            case 17:cout<<17<<endl;break;
            case 18:cout<<18<<endl;break;
            case 19:cout<<19<<endl;break;
            case 20:cout<<20<<endl;break;
            case 21:cout<<21<<endl;break;
            case 22:cout<<22<<endl;break;
            case 23:cout<<23<<endl;break;
            case 24:cout<<24<<endl;break;
            case 25:cout<<25<<endl;break;
            case 26:cout<<26<<endl;break;
            case 27:cout<<27<<endl;break;
            case 28:cout<<28<<endl;break;
            case 29:cout<<29<<endl;break;
            case 30:cout<<30<<endl;break;
            case 31:cout<<31<<endl;break;
            case 32:cout<<32<<endl;break;
            case 33:cout<<33<<endl;break;
            case 34:cout<<34<<endl;break;
            case 35:cout<<35<<endl;break;
            case 36:cout<<36<<endl;break;
            case 37:cout<<37<<endl;break;
            case 38:cout<<38<<endl;break;
            case 39:cout<<39<<endl;break;
            case 40:cout<<40<<endl;break;
            case 41:cout<<41<<endl;break;
            case 42:cout<<42<<endl;break;
            case 43:cout<<43<<endl;break;
            case 44:cout<<44<<endl;break;
            case 45:cout<<45<<endl;break;
            case 46:cout<<46<<endl;break;
            case 47:cout<<47<<endl;break;
            case 48:cout<<48<<endl;break;
            case 49:cout<<49<<endl;break;
            case 50:cout<<50<<endl;break;
            case 51:cout<<51<<endl;break;
            case 52:cout<<52<<endl;break;
            case 53:cout<<53<<endl;break;
            case 54:cout<<54<<endl;break;
            case 55:cout<<55<<endl;break;
            case 56:cout<<56<<endl;break;
            case 57:cout<<57<<endl;break;
            case 58:cout<<58<<endl;break;
            case 59:cout<<59<<endl;break;
            case 60:cout<<60<<endl;break;
            case 61:cout<<61<<endl;break;
            case 62:cout<<62<<endl;break;
            case 63:cout<<63<<endl;break;
            case 64:cout<<64<<endl;break;
            case 65:cout<<65<<endl;break;
            case 66:cout<<66<<endl;break;
            case 67:cout<<67<<endl;break;
            case 68:cout<<68<<endl;break;
            case 69:cout<<69<<endl;break;
            case 70:cout<<70<<endl;break;
            case 71:cout<<71<<endl;break;
            case 72:cout<<72<<endl;break;
            case 73:cout<<73<<endl;break;
            case 74:cout<<74<<endl;break;
            case 75:cout<<75<<endl;break;
            case 76:cout<<76<<endl;break;
            case 77:cout<<77<<endl;break;
            case 78:cout<<78<<endl;break;
            case 79:cout<<79<<endl;break;
            case 80:cout<<80<<endl;break;
            case 81:cout<<81<<endl;break;
            case 82:cout<<82<<endl;break;
            case 83:cout<<83<<endl;break;
            case 84:cout<<84<<endl;break;
            case 85:cout<<85<<endl;break;
            case 86:cout<<86<<endl;break;
            case 87:cout<<87<<endl;break;
            case 88:cout<<88<<endl;break;
            case 89:cout<<89<<endl;break;
            case 90:cout<<90<<endl;break;
            case 91:cout<<91<<endl;break;
            case 92:cout<<92<<endl;break;
            case 93:cout<<93<<endl;break;
            case 94:cout<<94<<endl;break;
            case 95:cout<<95<<endl;break;
            case 96:cout<<96<<endl;break;
            case 97:cout<<97<<endl;break;
            case 98:cout<<98<<endl;break;
            case 99:cout<<99<<endl;break;
            case 100:cout<<100<<endl;break;
            case 101:cout<<101<<endl;break;
            case 102:cout<<102<<endl;break;
            case 103:cout<<103<<endl;break;
            case 104:cout<<104<<endl;break;
            case 105:cout<<105<<endl;break;
            case 106:cout<<106<<endl;break;
            case 107:cout<<107<<endl;break;
            case 108:cout<<108<<endl;break;
            case 109:cout<<109<<endl;break;
            case 110:cout<<110<<endl;break;
            case 111:cout<<111<<endl;break;
            case 112:cout<<112<<endl;break;
            case 113:cout<<113<<endl;break;
            case 114:cout<<114<<endl;break;
            case 115:cout<<115<<endl;break;
            case 116:cout<<116<<endl;break;
            case 117:cout<<117<<endl;break;
            case 118:cout<<118<<endl;break;
            case 119:cout<<119<<endl;break;
            case 120:cout<<120<<endl;break;
            case 121:cout<<121<<endl;break;
            case 122:cout<<122<<endl;break;
            case 123:cout<<123<<endl;break;
            case 124:cout<<124<<endl;break;
            case 125:cout<<125<<endl;break;
            case 126:cout<<126<<endl;break;
            case 127:cout<<127<<endl;break;
            default:break;
        }
    }
}




int main()
{
    return 0;
}

这些函数是为实现另一个程序的一部分功能而写的

希望我能写好这个程序。。。

路过的大神们,如果知道怎样在控制台中画出矩形(不是由什么'#'组成的,而是真正的矩形,
并且是纯C++环境<不过系统环境例外,调用WindowsAPI是可以的>,请在评论区留言,谢谢)

猜你喜欢

转载自www.cnblogs.com/BuluGuy/p/9184747.html