• 大小: 1.43MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-10-21
  • 语言: C/C++
  • 标签: C++俄罗斯  

资源简介

一个控制台俄罗斯方块C++源代码及可执行程序。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#ifdef _DEBUG
#define verify(f)    assert(f)
#else
#define verify(f)    ((void)(f))
#endif
class Console // 控制台
{
    friend class Window;
public:
    // title: 控制台标题
    // point: 控制台宽度和高度
    void Open( const char* title COORD wl )
    {
        assert( wl.X>0 && wl.Y>0 );
        verify( (hStdOutput=GetStdHandle(STD_OUTPUT_HANDLE)) != INVALID_HANDLE_VALUE ); // 获得输出句柄
        verify( SetConsoletitle( title ) );                        // 设置标题
        CONSOLE_CURSOR_INFO cci = { 25 FALSE };
        verify( SetConsoleCursorInfo( hStdOutput &cci ) );        // 去处光标
        SMALL_RECT wrt = { 0 0 wl.X-1 wl.Y-1 };
        verify( SetConsoleWindowInfo( hStdOutput TRUE &wrt ) );  // 设置窗体尺寸
        coord = wl;                                      
        verify( SetConsoleScreenBufferSize( hStdOutput coord ) ); // 设置缓冲尺寸
    }
private:
    HANDLE hStdOutput;
    COORD  coord;
};
class Window // 窗体是控制台的一个子部分
{
public:
    // wrect: 窗体左上角坐标右下角坐标
    void Open( Console& console SMALL_RECT wrect )
    {
        assert( wrect.Left < wrect.Right && wrect.Top < wrect.Bottom );
        assert( wrect.Left>=0 && wrect.Right<=console.coord.X );
        assert( wrect.Top>=0 && wrect.Bottom<=console.coord.Y );
        pcon = &console;
        wrt = wrect;
    }
    // xy: 相对于窗体的坐标
    // color: 字体和背景颜色
    // str: 欲输出字符串遇0或达到len数量则结束没考虑控制字符比如\r等
    void Output( short x short y WORD color const char* str size_t len=INT_MAX )
    {
        assert( x>=0 && x<=wrt.Right-wrt.Left && y>=0 && y<=wrt.Bottom-wrt.Top );
        COORD c = { wrt.Left+x wrt.Top+y };
        DWORD n = 0;
        WORD cs[2] = { color color };
        for( const char* p=str; len!=0 && *p!=0; --len++p++c.X  )
        {
            if( c.X >= wrt.Right ) // 换行
            {
                c.X = wrt.Left+x;
                ++c.Y;
                assert( c.Y < wrt.Bottom );
            }
            if( *p > 0 ) // 单字节字符
            {
                verify( WriteConsoleOutputCharacter( pcon->hStdOutput p 1 c &n ) && n==1 );
                verify( WriteConsoleOutputAttribute( pcon->hStdOutput cs 1 c &n ) && n==1 );
            }
            else // 双字节字符
            {
                assert( len>=2 && *(p+1)!=0 && (c.X+1)                verify( WriteConsoleOutputCharacter( pcon->hStdOutput p 2 c &n ) && n==2 );
                verify( WriteConsoleOutputAttribute( pcon->hStdOutput cs 2 c &n ) && n==2 );
                --len++p++c.X;
            }
        }
    }
private:
    Console*  pcon;
    SMALL_RECT wrt;
};
class RussiaDiamonds
{
public:
    // xy: 左上角坐标右下角坐标
    RussiaDiamonds( Console& console short x short y )
    {
        SMALL_RECT wrect = { x y x+38 y+21 };
        win.Open( console wrect );
    }
  

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2015-01-31 16:02  tetris3\
     目录           0  2015-01-31 13:26  tetris3\Debug\
     文件      200751  2015-01-31 13:26  tetris3\Debug\tetris3.exe
     文件      233024  2015-01-31 13:26  tetris3\Debug\tetris3.ilk
     文件       41187  2015-01-31 13:26  tetris3\Debug\tetris3.obj
     文件     3572704  2015-01-31 13:09  tetris3\Debug\tetris3.pch
     文件      533504  2015-01-31 13:26  tetris3\Debug\tetris3.pdb
     文件      148480  2015-01-31 13:26  tetris3\Debug\vc60.idb
     文件       77824  2015-01-31 13:26  tetris3\Debug\vc60.pdb
     文件       16069  2015-01-31 13:26  tetris3\tetris3.cpp
     文件        4296  2015-01-31 13:31  tetris3\tetris3.dsp
     文件         520  2015-01-31 13:08  tetris3\tetris3.dsw
     文件       41984  2015-01-31 16:02  tetris3\tetris3.ncb
     文件       48640  2015-01-31 16:02  tetris3\tetris3.opt
     文件        1279  2015-01-31 13:26  tetris3\tetris3.plg

评论

共有 条评论