资源简介
一个控制台俄罗斯方块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
- 上一篇:21天学通C++(第7版)源代码
- 下一篇:c++邻接矩阵源码
评论
共有 条评论