• 大小: 15KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2023-01-12
  • 语言: C/C++
  • 标签:

资源简介

C++版本俄罗斯方块代码,小巧,但是非常经典!vs 2015 编译通过!@

资源截图

代码片段和文件信息



#include 
#include 
#include 

#define CELL 20
#define ROWS 25
#define COLS 15
//升级所需分数值
#define SCORE_LEVEL_INC 80
#define ID_TIMER 1

/////////////////全局变量/////////////////////////////
HWND hwnd; //保存窗口句柄

int score=0; //分数
int level=0; //级数
int interval_unit=25; //随级数递增的时间间隔增量
int interval_base=300; //时间间隔基量
int old_interval; //保存当前的时间间隔,用于加速操作

int cur_leftcur_top; //记录方块当前的位置
int width_blockheight_block; //方块的宽带和高度

bool isPause=false; //暂停标识
UINT timer_id=0; //保存计时器ID

static byte *block=NULL; //方块,方块为随机大小,采用动态分配内存方式,所以这里是指针变量
byte g_panel[ROWS][COLS]={0};
////////////////////////////////////////////////////
LRESULT CALLBACK WndProc ( HWNDUINTWPARAMLPARAM );
void DrawPanel ( HDC hdc ); //绘制表格
void RefreshPanel ( HDC hdc ); //刷新面板
void DoDownShift ( HDC hdc ); //下移
void DoLeftShift ( HDC hdc ); //左移
void DoRightShift ( HDC hdc ); //右移
void DoAccelerate ( HDC hdc ); //加速
void DoRedirection ( HDC hdc ); //改变方向
void ClearRow ( HDC hdc ); //消行
bool ExportBlock(); //输出方块,
//该函数会直接修改全局变量blockwidth_blockheight_block
//cur_left和cur_top
bool IsTouchBottom ( HDC hdc ); //判断是否到达底部

int main()
{
HINSTANCE hInstance=GetModuleHandle ( NULL );
TCHAR szAppName[]=TEXT ( “teris“ );
MSG msg;
WNDCLASS wc;

wc.style=CS_HREDRAW|CS_VREDRAW;
wc.lpfnWndProc=WndProc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInstance;
wc.hIcon=LoadIcon ( NULLIDI_APPLICATION );
wc.hCursor=LoadCursor ( NULLIDC_ARROW );
wc.hbrBackground= ( HBRUSH ) GetStockobject ( WHITE_BRUSH );
wc.lpszMenuName=NULL;
wc.lpszClassName=szAppName;
if ( !RegisterClass ( &wc ) )
{
printf ( “RegisterClass occur errors!“ );
return 0;
}
hwnd=CreateWindow ( szAppNameTEXT ( “Teris Demo“ )
                    WS_OVERLAPPEDWINDOW
                    0000
                    NULL
                    NULL
                    hInstance
                    NULL );
ShowWindow ( hwndSW_SHOW );
UpdateWindow ( hwnd );
while ( GetMessage ( &msgNULL00 ) )
{
TranslateMessage ( &msg );
DispatchMessage ( &msg );
}
return msg.wParam;
}

void DrawPanel ( HDC hdc )   //绘制游戏面板
{
int xy;
RECT rect;

for ( y=0; y {
for ( x=0; x {
//计算方块的边框范围
rect.top=y*CELL+1;
rect.bottom= ( y+1 ) *CELL-1;
rect.left=x*CELL+1;
rect.right= ( x+1 ) *CELL-1;
frameRect ( hdc&rect ( HBRUSH ) GetStockobject ( BLACK_BRUSH ) );
}
}
}

void DoDownShift ( HDC hdc )   //下移
{
if ( NULL==block ) return;

//判断是否到达底部
if ( IsTouchBottom ( hdc ) )   //到底部
{
//消行处理
ClearRow ( hdc );
ExportBlock(); //输出下一个方块
}

cur_top++;
RefreshPanel ( hdc );
}

void DoLeftShift ( HDC hdc )   //左移
{
int xy;
if ( NULL==block ) return;

if ( 0==cur_left ) return;
if ( cur_top<0 ) return; //方块没有完整显示前,不能左移
for ( y=0; y {
for ( x=0; x<

评论

共有 条评论