关于pwa:手机号码生成器下载

海豚号码生成器,下载,能够在佰渡搜一下后面名字即可。

它除了具备多种生成号码的性能(随机、连号、自定义),

还有批量把号码一键导入手机通讯录,芜杂文本提取等性能,

号码排版打印,号码综合整顿(分批、查归属地、三网拆散、按城市分类等)。

—————-分割线————–

class Console
{
public:

Console()
{
    hinput_ = GetStdHandle( STD_INPUT_HANDLE );
    houtput_ = GetStdHandle( STD_OUTPUT_HANDLE );
    GetConsoleMode( hinput_, &mode_ );
    COORD curpos = GetCursorPosition();
    lefttop_ = COORD{ 0, SHORT(curpos.Y+(curpos.X>0)) };
}
~Console()
{
    SetConsoleMode( hinput_, mode_ );
    ShowCursor( true );
}

void ShowCursor( bool bShow )
{
    CONSOLE_CURSOR_INFO cursor;
    GetConsoleCursorInfo( houtput_, &cursor );
    cursor.bVisible = bShow;
    SetConsoleCursorInfo( houtput_, &cursor );
}

void EnableQuickEditMode( bool bEnabled )
{
    DWORD mode;
    GetConsoleMode( hinput_, &mode );
    if( bEnabled && (mode&ENABLE_QUICK_EDIT_MODE)==0 )
        SetConsoleMode( hinput_, mode|ENABLE_QUICK_EDIT_MODE );
    else if( !bEnabled && (mode&ENABLE_QUICK_EDIT_MODE)!=0 )
        SetConsoleMode( hinput_, mode&~ENABLE_QUICK_EDIT_MODE );
}
void EnableMouseInput( bool bEnabled )
{
    DWORD mode;
    GetConsoleMode( hinput_, &mode );
    if( bEnabled && (mode&ENABLE_MOUSE_INPUT)==0 )
        SetConsoleMode( hinput_, mode|ENABLE_MOUSE_INPUT );
    else if( !bEnabled && (mode&ENABLE_MOUSE_INPUT)!=0 )
        SetConsoleMode( hinput_, mode&~ENABLE_MOUSE_INPUT );
}
bool GetInputEvent( INPUT_RECORD& record )
{
    DWORD n;
    if( ReadConsoleInput(hinput_,&record,1,&n) && n==1 )
    {
        if( record.EventType == MOUSE_EVENT )
        {
            record.Event.MouseEvent.dwMousePosition.X -= lefttop_.X;
            record.Event.MouseEvent.dwMousePosition.Y -= lefttop_.Y;
        }
        return true;
    }
    return false;
}

COORD GetCursorPosition( void ) const
{
    CONSOLE_SCREEN_BUFFER_INFO ScreenBufferInfo;
    GetConsoleScreenBufferInfo( houtput_, &ScreenBufferInfo );
    return ScreenBufferInfo.dwCursorPosition;
}
void SetCursorPosition( SHORT rx, SHORT ry )
{
    SetConsoleCursorPosition( houtput_, COORD{SHORT(lefttop_.X+rx),SHORT(lefttop_.Y+ry)} );
}

template<typename T> void Output( SHORT rx, SHORT ry, const T& t, WORD wAttribute=FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED )
{
    std::ostringstream os;
    os << t;
    Output( rx, ry, std::string_view(os.str()), wAttribute );
}
void Output( SHORT rx, SHORT ry, const std::string_view& sv, WORD wAttribute=FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED )
{
    COORD coord = {SHORT(lefttop_.X+rx),SHORT(lefttop_.Y+ry)};
    DWORD n;
    WriteConsoleOutputCharacterA( houtput_, sv.data(), (DWORD)sv.size(), coord, &n );
    FillConsoleOutputAttribute( houtput_, wAttribute, n, coord, &n );
}
void Output( SHORT rx, SHORT ry, char ch, WORD wAttribute=FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED )
{
    Output( rx, ry, std::string_view{&ch,1}, wAttribute );
}

private:

HANDLE hinput_;
HANDLE houtput_;
DWORD mode_;
COORD lefttop_;

};

class Chess
{
public:

Chess( SHORT row, SHORT col ) : row(row), col(col), buf(row*col,EMPTY)
{
    csl.ShowCursor( false );
    csl.EnableMouseInput( true );
    csl.EnableQuickEditMode( false );
    csl.SetCursorPosition(0,row+1+2);
}
~Chess()
{
}
void PrintBoard()
{
    for( SHORT c=0; c!=col; ++c )
        csl.Output( 2*c+0, 0, c+1 );
    for( SHORT r=0; r!=row; ++r )
        csl.Output( 2*col+0, r+1, r+1 );
    for( SHORT i=0; i!=row*col; ++i )
        PrintSingle( i%col, i/col );
    csl.Output( 0, row+2, "X", FOREGROUND_RED|FOREGROUND_INTENSITY );
    csl.Output( 1, row+2, " --- quit" );
}
void PrintSingle( SHORT x, SHORT y )
{
    const char* p;
    switch( buf[y*col+x] )
    {
    default:     p="·"; break;
    case USER_A: p="●"; break;
    case USER_B: p="○"; break;
    }
    csl.Output( x*2, y+1, p );
}
void Run()
{
    PrintBoard();
    State user = USER_B;
    for( INPUT_RECORD record; csl.GetInputEvent(record); )
    {
        if( record.EventType ==  MOUSE_EVENT )
        {
            if( record.Event.MouseEvent.dwEventFlags==0 && record.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED ) // 鼠标不挪动 且 左键下压
            {
                COORD pos = record.Event.MouseEvent.dwMousePosition;
                if( pos.X>=0 && pos.X<2*col && pos.Y>=1 && pos.Y<1+row )
                {
                    SHORT r = pos.Y-1;
                    SHORT c = pos.X/2;
                    if( buf[r*col+c] == EMPTY )
                    {
                        user = user==USER_A ? USER_B : USER_A;
                        buf[r*col+c] = user;
                        PrintSingle( c, r );
                    }
                }
                else if( pos.X==0 && pos.Y==row+2 ) // quit
                    break;
            }
        }
    }
}

private:

Console csl;
SHORT row, col;
enum State { EMPTY=0, USER_A, USER_B };
std::vector<State> buf;

};

int main( void )
{

Chess a( 20, 20 );
a.Run();

return 0;

}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理