当前位置:网站首页>els 结束判断
els 结束判断
2022-08-03 02:39:00 【joker_0030】
1、主函数(els.main.c)
#include<Windows.h>
#include"resource.h"
#include"els_h.h"
LRESULT CALLBACK PELouSi(HWND hWnd, UINT oMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR ipCmdLine,int nCmdShow)
{
//初始化窗口类。
WNDCLASSEX db;
HWND hWnd;
MSG msg;//结构体变量。
db.cbClsExtra = 0;
db.cbSize = sizeof(WNDCLASSEX);
db.cbWndExtra = 0;
db.hbrBackground = (HBRUSH)COLOR_BACKGROUND;//背景颜色。
//返回值:鼠标的句柄。
// 参数1:如果加载系统光标,NULL、如果加载自定义光标,填写实列句柄,hInstance;参数2:系统光标,直接填写定义好的宏、如果加载自定义光标,就用MAKEINTRESOURCE(240)加载相应的资源ID。
//db.hCursor = LoadCursor(NULL,IDC_HAND);//加载系统定义的光标。
db.hCursor = LoadCursor(hInstance,MAKEINTRESOURCE (IDC_NODROP));//自定义的光标。资源文件->添加->资源->Cursor->IDC_NODROP->新建。
//返回值:图标的句柄。
// 参数1:如果加载系统光标,NULL、如果加载自定义光标,填写实列句柄,hInstance;参数2:系统光标,直接填写定义好的宏、如果加载自定义光标,就用MAKEINTRESOURCE(240)加载相应的资源ID。
//db.hIcon = LoadIcon(NULL,IDI_ASTERISK);//加载系统定义的光标。
db.hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));//状态栏图标。
//db.hIconSm = NULL;//左上角图标为此定义。如果为空则默认为状态栏图标。
db.hIconSm = LoadIcon(NULL,IDI_HAND);
db.hInstance = hInstance;
db.lpfnWndProc = PELouSi;//回调函数名。
db.lpszClassName = "els";
db.lpszMenuName = NULL;
db.style = CS_HREDRAW | CS_VREDRAW;
if(0==RegisterClassEx(&db))
{
int a = GetLastError();
return 0;
}
//创建窗口。hWnd窗口句柄 失败返回NULL。
//窗口风格:参数4。
hWnd=CreateWindowEx(WS_EX_TOPMOST,"els","els方块",WS_OVERLAPPEDWINDOW,100,100,500,650,NULL,NULL,hInstance,NULL);
//1、?
if (NULL == hWnd)//窗口句柄。 窗口的唯一标识。
{
return 0;
}
//显示窗口
ShowWindow(hWnd, nCmdShow);
//消息循环。队列。
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
//回调函数
//返回值:LRESULT,CALLBACK调用约定。
//参数1:窗口句柄;参数2:消息ID。
LRESULT CALLBACK PELouSi(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)// LRESULT:long类型;UINT:无符号整型,消息的ID。
{
PAINTSTRUCT pt;//定义结构体。
HDC hDc;
//关闭窗口消息
switch (nMsg)
{
case WM_CREATE://窗口信息处理程序接受的第一个消息,也是回调函数处理的第一个消息(为WM_CREATE)。此消息只产生一次,一般是用于初始化一些数据。
//GetLastError();//优化。
Oncreate();//游戏数据初始化。
break;
case WM_TIMER:
OnTimer(hWnd);
break;
//是回调函数处理的第二个消息(为WM_PAINT)。
//当窗口显示区域的一部分显示内容或者全部变为(无效),以致于必须(更新画面)时,将由这个消息通知程序。
//窗口结构的最后的那个成员CS_HREDRAW|CS_VREDRAW,目的就是窗口大小发生变化的时候,产生WM_PAINT消息。
//窗口重叠时,重叠部分渐渐出现时。
case WM_PAINT:
//GetLastError();//优化。
hDc=BeginPaint(hWnd,&pt);//getDC,窗口可操作区域的标识。
//在此之间画窗口的内容。
//画方块。
OnPaint(hDc);//增加代码可读性。
EndPaint(hWnd, &pt);//结束。
break;
case WM_KEYDOWN:
switch (wParam)
{
case VK_RETURN:
OnReturn(hWnd);//3、?
break;
case VK_LEFT:
//左移。
OnLeft(hWnd);
break;
case VK_RIGHT:
// 右移。
OnRight(hWnd);
break;
case VK_UP:
//上变形
OnChangeSqare(hWnd);
break;
case VK_DOWN:
//下移动加速。
OnDown(hWnd);
break;
}
break;
case WM_DESTROY:
KillTimer(hWnd, DEF_TIMER1);
PostQuitMessage(0);//调用PostQuitMessage(0)这个函数发出WM_QUIT消息。//点叉系统依次产生WM_CLOSE,WM_DESTROY,WM_QUIT。
break;
}//手动处理点叉关闭消息。
return DefWindowProc(hWnd, nMsg, wParam, lParam);
//LRESULT a=DefWindowProc(hWnd, oMsg, wParam, lParam);//功能
//return a;
}
2、函数实现(els.c)
#include"els_h.h"
//背景数组
char g_arrBackGroud[20][10] = {0};
char g_arrSqare[2][4] = {0};
int g_nSqareID = -1;
// g_Line与g_nList记录当前模块左上角位置。
int g_nLine = -1;
int g_nList = -1;
int g_nScore = 0;
//结束判断
int CanGameover()
{
int i = 0;
for ( i = 0; i < 10; i++)
{
if (2 == g_arrBackGroud[0][i])
{
//游戏结束。
MessageBox(NULL, "GameOver", "提示信息", MB_YESNO);//最后一个参数为提示的风格。
return 0;
}
}
return 1;
}
void ShowScore(HDC hMemDC)//计数。
{
char strScore[10] = { 0 };
Rectangle(hMemDC, 300, 0, 500, 600);
itoa(g_nScore,strScore,10); //10是进制数。
TextOut(hMemDC, 400, 10, "分数:", strlen("分数:"));
TextOut(hMemDC, 400, 30, strScore, strlen(strScore));
}
void DestroyOneLineSqare()//删除满行。
{
int i = 0,
j = 0;
int nTempi = 0;
int nSum = 0;
for ( i = 19; i>=0; i--)
{
for (j = 0; j < 10; j++)
{
nSum += g_arrBackGroud[i][j];
}
if (20==nSum)
{
//消除一行。因为消除i行后,i--所以只能消除一行。
for ( nTempi = i-1; nTempi >=0; nTempi--)
{
for ( j = 0; j < 10; j++)
{
g_arrBackGroud[nTempi + 1][j] = g_arrBackGroud[nTempi][j];
}
}
//计分。
g_nScore++;
//为消除多行,需将i重回最底层一行。
i = 20;
}
nSum = 0;//清零。
}
}
int CanLineSqareChange()//长方块边界变形判断。
{
int i = 0,
j = 0;
for ( i = 1; i < 4; i++)//右
{
if (2 == g_arrBackGroud[g_nLine][g_nList + i] || g_nList + i > 9)
{
break;
}
}
for ( j = 1; j <4 ; j++)
{
if (2 == g_arrBackGroud[g_nLine][g_nList - j] || g_nList - j < 0)
{
break;
}
}
if ((i-1+j-1)<3)
{
return 0;
}
return 1;
}
void ChangeLineSqare()//长方块变形。
{
if (1 == g_arrBackGroud[g_nLine][g_nList - 1])//横着的。
{
//清零。
g_arrBackGroud[g_nLine][g_nList - 1] = 0;
g_arrBackGroud[g_nLine][g_nList + 1] = 0;
g_arrBackGroud[g_nLine][g_nList + 2] = 0;
if (2 == g_arrBackGroud[g_nLine + 1][g_nList])
{
g_arrBackGroud[g_nLine - 1][g_nList] = 1;
g_arrBackGroud[g_nLine - 2][g_nList] = 1;
g_arrBackGroud[g_nLine - 3][g_nList] = 1;
}
else if (2 == g_arrBackGroud[g_nLine + 2][g_nList])
{
g_arrBackGroud[g_nLine + 1][g_nList] = 1;
g_arrBackGroud[g_nLine - 1][g_nList] = 1;
g_arrBackGroud[g_nLine - 2][g_nList] = 1;
}
else
{
//元素赋值。
g_arrBackGroud[g_nLine - 1][g_nList] = 1;
g_arrBackGroud[g_nLine + 1][g_nList] = 1;
g_arrBackGroud[g_nLine + 2][g_nList] = 1;
}
}
else//竖着的。
{
//清零。
g_arrBackGroud[g_nLine - 1][g_nList] = 0;
g_arrBackGroud[g_nLine + 1][g_nList] = 0;
g_arrBackGroud[g_nLine + 2][g_nList] = 0;
if (2 == g_arrBackGroud[g_nLine][g_nList + 1]||9==g_nList)
{
//赋值。
g_arrBackGroud[g_nLine][g_nList - 1] = 1;
g_arrBackGroud[g_nLine][g_nList - 2] = 1;
g_arrBackGroud[g_nLine][g_nList - 3] = 1;
//标记。
g_nList = g_nList - 2;
}
else if (2 == g_arrBackGroud[g_nLine][g_nList + 2]||8==g_nList)
{
g_arrBackGroud[g_nLine][g_nList + 1] = 1;
g_arrBackGroud[g_nLine][g_nList - 1] = 1;
g_arrBackGroud[g_nLine][g_nList - 2] = 1;
g_nList = g_nList - 1;
}
else if (2 == g_arrBackGroud[g_nLine][g_nList - 1]||0 == g_nList)
{
//赋值。
g_arrBackGroud[g_nLine][g_nList + 1] = 1;
g_arrBackGroud[g_nLine][g_nList + 2] = 1;
g_arrBackGroud[g_nLine][g_nList + 3] = 1;
//标记。
g_nList = g_nList + 1;
}
else
{
//元素赋值。
g_arrBackGroud[g_nLine][g_nList - 1] = 1;
g_arrBackGroud[g_nLine][g_nList + 1] = 1;
g_arrBackGroud[g_nLine][g_nList + 2] = 1;
}
}
}
void OnPaint(HDC hDc)//函数实现。
{
//char strScore[10] = { 0 };
//创建兼容性DC。
HDC hMemDC = CreateCompatibleDC(hDc);//内存id为:HMemDc,窗口id hDc。
//创建兼容性位图。
HBITMAP hBitmapBack= CreateCompatibleBitmap(hDc, 500, 600);
//关联起来。
SelectObject(hMemDC, hBitmapBack);
PaintSqare(hMemDC);
ShowSqare2(hMemDC);
ShowScore(hMemDC);
//传递:
//返回值:失败返回0,成功返回非零。
//参数1:目标DC,窗口DC
//参数2,3:目标的起始位置,注意是基于我们的窗口。
//参数4,5:区域的大小。
//参数6:源DC,也就是我们的内存DC。
//参数7,8:内存图片的起始位置。
//参数9:传递方式。
整数转换为字符串。
//itoa(g_nScore,strScore,10); //10是进制数。
//BitBlt(hDc, 0, 0, 300, 600, hMemDC, 0, 0, SRCCOPY);
BitBlt(hDc, 0, 0, 500, 600, hMemDC, 0, 0, SRCCOPY);
//显示计分牌。
//TextOut(hDc,400 ,10,"gwb",3);//3是参数4中的有效的字节。也可以写为strlen("gwb")
//TextOut(hDc, 400, 10, strScore, strlen(strScore));
//释放DC
DeleteObject(hBitmapBack);
DeleteDC(hMemDC);
}
void Oncreate()
{
srand((unsigned int)time(NULL));//只执行一次。
CreateRandomSqare();
CopySqareToBack();
}
void PaintSqare(HDC hMemDC)
{
int i = 0,
j = 0;
//画大方块。
//创建的是窗口背景颜色。
HBRUSH hOldBrush1;
//创建一个颜色的画刷。
HBRUSH hNewBrush1 = CreateSolidBrush(RGB(63, 27, 18));
//绑定当前DC与画刷,返回系统默认画刷。
hOldBrush1 = SelectObject(hMemDC, hNewBrush1);
//释放画刷句柄。
//遍历
Rectangle(hMemDC, 0, 0, 300, 600);//矩形框距离运行窗口的开始位置坐标和截至位置坐标。
//指定一个方块。
/*g_arrBackGroud[2][4] = 1;
g_arrBackGroud[3][3] = 1;
g_arrBackGroud[3][4] = 1;
g_arrBackGroud[3][5] = 1;*/
//创建的是还未掉下的方块的颜色
HBRUSH hOldBrush;
//创建一个颜色的画刷。
HBRUSH hNewBrush = CreateSolidBrush(RGB(63, 27, 182));
//绑定当前DC与画刷,返回系统默认画刷。
hOldBrush = SelectObject(hMemDC, hNewBrush);
//释放画刷句柄。
//遍历
for (i=0 ; i < 20; i++)//2、?
{
for (j=0 ; j < 10; j++)
{
if (1 == g_arrBackGroud[i][j])
{
//画方块。
Rectangle(hMemDC, j*30, i*30, j*30 + 30, i*30 + 30);//矩形框距离运行窗口的开始位置坐标和截至位置坐标。
}
}
}
//使用完新画刷,把系统默认画刷选出来,返回创建的画刷。
hNewBrush = SelectObject(hMemDC, hOldBrush);
//释放画刷句柄。
DeleteObject(hNewBrush);
//使用完新画刷,把系统默认画刷选出来,返回创建的画刷。
hNewBrush1 = SelectObject(hMemDC, hOldBrush1);
//释放画刷句柄。
DeleteObject(hNewBrush1);
}
//创建随机块。
int CreateRandomSqare()
{
int nIndex=rand()%7;
switch(nIndex) //switch (6)
{
case 0:
g_arrSqare[0][0] = 1, g_arrSqare[0][1] = 1, g_arrSqare[0][2] = 0, g_arrSqare[0][3] = 0;
g_arrSqare[1][0] = 0, g_arrSqare[1][1] = 1, g_arrSqare[1][2] = 1, g_arrSqare[1][3] = 0;
g_nLine = 0;
g_nList = 3;
break;
case 1:
g_arrSqare[0][0] = 0, g_arrSqare[0][1] = 1, g_arrSqare[0][2] = 1, g_arrSqare[0][3] = 0;
g_arrSqare[1][0] = 1, g_arrSqare[1][1] = 1, g_arrSqare[1][2] = 0, g_arrSqare[1][3] = 0;
g_nLine = 0;
g_nList = 3;
break;
case 2:
g_arrSqare[0][0] = 0, g_arrSqare[0][1] = 1, g_arrSqare[0][2] = 0, g_arrSqare[0][3] = 0;
g_arrSqare[1][0] = 1, g_arrSqare[1][1] = 1, g_arrSqare[1][2] = 1, g_arrSqare[1][3] = 0;
g_nLine = 0;
g_nList = 3;
break;
case 3:
g_arrSqare[0][0] = 1, g_arrSqare[0][1] = 0, g_arrSqare[0][2] = 0, g_arrSqare[0][3] = 0;
g_arrSqare[1][0] = 1, g_arrSqare[1][1] = 1, g_arrSqare[1][2] = 1, g_arrSqare[1][3] = 0;
g_nLine = 0;
g_nList = 3;
break;
case 4:
g_arrSqare[0][0] = 0, g_arrSqare[0][1] = 0, g_arrSqare[0][2] = 1, g_arrSqare[0][3]= 0;
g_arrSqare[1][0] = 1, g_arrSqare[1][1] = 1, g_arrSqare[1][2] = 1, g_arrSqare[1][3] = 0;
g_nLine = 0;
g_nList = 3;
break;
case 5:
g_arrSqare[0][0] = 0, g_arrSqare[0][1] = 1, g_arrSqare[0][2] = 1, g_arrSqare[0][3] = 0;
g_arrSqare[1][0] = 0, g_arrSqare[1][1] = 1, g_arrSqare[1][2] = 1, g_arrSqare[1][3] = 0;
g_nLine = 0;
g_nList = 4;
break;
case 6:
g_arrSqare[0][0] = 1, g_arrSqare[0][1] = 1, g_arrSqare[0][2] = 1, g_arrSqare[0][3] = 1;
g_arrSqare[1][0] = 0, g_arrSqare[1][1] = 0, g_arrSqare[1][2] = 0, g_arrSqare[1][3] = 0;
g_nLine = 0;
g_nList = 4;
break;
}
g_nSqareID = nIndex;
return nIndex;
}
void CopySqareToBack()
{
int i = 0,
j = 0;
for ( i = 0; i <2 ; i++)
{
for ( j = 0; j < 4; j++)
{
g_arrBackGroud[i][j + 3] = g_arrSqare[i][j];
}
}
}
void OnReturn(HWND hWnd)
{
//启动定时器
//返回值:成功返回非零。
//参数1:窗口句柄hWnd,NUL
//参数2:定时器ID 不理会
//参数3:间隔时间,毫秒 1000ms=1s。
//参数4:设置为NULL 处理函数的地址。
SetTimer(hWnd, DEF_TIMER1, 200, NULL);
}
void SqareDwon()
{
int i = 0,
j = 0;
for (i = 19; i >=0; i--)
{
for (j = 0; j < 10; j++)
{
if (1==g_arrBackGroud[i][j])
{
g_arrBackGroud[i + 1][j] = g_arrBackGroud[i][j];
g_arrBackGroud[i][j]=0;
}
}
}
}
void OnTimer(HWND hWnd)
{
HDC hDc=GetDC(hWnd);//内核对象。
if (1 == CanSqareDown()&&1== CanSqareDown2())
{
SqareDwon();//停止下落。
g_nLine++;
}
else
{
//1到2
Change1To2();
//删除满行。
DestroyOneLineSqare();
//结束判断
if (0 == CanGameover())
{
//结束应用程序。
KillTimer(hWnd, DEF_TIMER1);
return 0;
}
//产生随机块。
CreateRandomSqare();
//复制到背景上。
CopySqareToBack();
}
//SqareDwon();
//显示方块:
//PaintSqare(hDc);
OnPaint(hDc);
ReleaseDC(hWnd, hDc);
}
int CanSqareDown()
{
int i = 0;
for ( i = 0; i < 10; i++)
{
if (1 == g_arrBackGroud[19][i])
{
return 0;
}
}
return 1;
}
void Change1To2()
{
int i = 0,
j = 0;
for ( i = 0; i < 20; i++)
{
for ( j = 0; j < 10; j++)
{
if (1==g_arrBackGroud[i][j])
{
g_arrBackGroud[i][j] = 2;
}
}
}
}
void ShowSqare2(HDC hMemDC)
{
int i = 0,
j = 0;
HBRUSH hOldBrush;
//创建一个颜色的画刷。
HBRUSH hNewBrush = CreateSolidBrush(RGB(233, 27, 182));
//绑定当前DC与画刷,返回系统默认画刷。
hOldBrush = SelectObject(hMemDC, hNewBrush);
for ( i = 0; i < 20; i++)
{
for ( j = 0; j < 10; j++)
{
if (2 == g_arrBackGroud[i][j])
{
Rectangle(hMemDC, j * 30, i * 30, j * 30 + 30, i * 30 + 30);//矩形框距离运行窗口的开始位置坐标和截至位置坐标。
}
}
}
//使用完新画刷,把系统默认画刷选出来,返回创建的画刷。
hNewBrush = SelectObject(hMemDC, hOldBrush);
//释放画刷句柄。
DeleteObject(hNewBrush);
}
int CanSqareDown2()
{
int i = 0,
j = 0;
for ( i = 19; i >= 0; i--)
{
for ( j = 0; j < 10; j++)
{
if (1== g_arrBackGroud[i][j])
{
if (2==g_arrBackGroud[i+1][j])
{
return 0;
}
}
}
}
return 1;
}
void OnLeft(HWND hWnd)
{
if (1== CanSqareLeft()&& 1==CanSqareLeft2())
{
HDC hDc = GetDC(hWnd);
//方块左移。
SqareLeft();
g_nList--;
//显示方块。
OnPaint(hDc);
ReleaseDC(hWnd, hDc);
}
}
void SqareLeft()
{
int i = 0,
j = 0;
for ( i = 0; i < 20; i++)
{
for ( j = 0; j < 10; j++)
{
if (1 == g_arrBackGroud[i][j])
{
g_arrBackGroud[i][j - 1] = g_arrBackGroud[i][j];
g_arrBackGroud[i][j] = 0;
}
}
}
}
int CanSqareLeft()
{
int i = 0;
for ( i = 0; i < 20; i++)
{
if (1==g_arrBackGroud[i][0])
{
return 0;
}
}
return 1;
}
int CanSqareLeft2()
{
int i,
j;
for ( i = 0; i < 20; i++)
{
for ( j = 0; j < 10; j++)
{
if (1 == g_arrBackGroud[i][j])
{
if (2==g_arrBackGroud[i][j-1])
{
return 0;
}
}
}
}
return 1;
}
void OnRight(HWND hWnd)
{
//HDC hDc = GetDC(hWnd);
方块右移。
//SqareRight();
//OnPaint(hDc);
释放。
//ReleaseDC(hWnd,hDc);
if (1 == CanSqareRight() && 1 == CanSqareRight2())
{
HDC hDc = GetDC(hWnd);
g_nList++;
//方块右移。
SqareRight();
//显示方块。
OnPaint(hDc);
ReleaseDC(hWnd, hDc);
}
}
void SqareRight()
{
int i,
j;
for ( i = 0; i < 20; i++)
{
for ( j = 9; j >=0 ; j--)
{
if (1 == g_arrBackGroud[i][j])
{
g_arrBackGroud[i][j+1] = g_arrBackGroud[i][j];
g_arrBackGroud[i][j] = 0;
}
}
}
}
int CanSqareRight()
{
int i = 0;
for (i = 0; i < 20; i++)
{
if (1 == g_arrBackGroud[i][9])
{
return 0;
}
}
return 1;
}
int CanSqareRight2()
{
int i,
j;
for (i = 0; i < 20; i++)
{
for (j = 0; j < 10; j++)
{
if (1 == g_arrBackGroud[i][j])
{
if (2 == g_arrBackGroud[i][j+1])
{
return 0;
}
}
}
}
return 1;
}
void OnDown(HWND hWnd)
{
OnTimer(hWnd);
}
void OnChangeSqare(HWND hWnd)
{
HDC hDc= GetDC(hWnd);
switch (g_nSqareID)//switch(6)
{
case 0:
case 1:
case 2:
case 3:
case 4:
if (1== CanSqareChangeShape())
{
ChangeSqare();//普通变形
}
else
{
return;
}
break;
case 5://方形
return;
case 6://长条变形。
if (1 == CanLineSqareChange())
{
ChangeLineSqare();
}
break;
}
OnPaint(hDc);
ReleaseDC(hWnd, hDc);
}
void ChangeSqare()
{
int i = 0,
j = 0,
nTemp=2;
char arrSqare[3][3] = { 0 };
//将背景块复制出来。
for ( i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
arrSqare[i][j] = g_arrBackGroud[g_nLine+i][g_nList+j];
}
}
//变形后复制回去。
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
g_arrBackGroud[g_nLine + i][g_nList + j]= arrSqare[nTemp][i];
nTemp--;
}
nTemp = 2;
}
}
int CanSqareChangeShape()
{
int i=0,
j=0;
for ( i = 0; i < 3; i++)
{
for ( j = 0; j < 3; j++)
{
if (2 == g_arrBackGroud[g_nLine + i][g_nList + j])
{
return 0;
}
}
}
//if (g_nList < 0 || g_nList + 2>9)//解决方案1。
//{
// return 0;
//}
if (g_nList < 0)
{
g_nList = 0;
}
if (g_nLine+2>9)
{
g_nList = 7;
}
return 1;
}
3、头函数(els.h)
#ifndef N_d
#define N_d
#define _CRT_NONSTDC_NO_DEPRECATE
#define _CRT_SECURE_NO_WARNINGS
#include<Windows.h>
#include<time.h>
#define DEF_TIMER1 1234
void OnPaint(HDC hDc);
//显示方块。
void PaintSqare(HDC hMemDC);
//产生随机块。
int CreateRandomSqare();
//随机块贴近背景。
void CopySqareToBack();
void Oncreate();
//方块加速。
void SqareDwon();
//方块左移。
void SqareLeft();
//方块左移。
void SqareRight();
//处理按键消息
//回车键。
void OnReturn(HWND hWnd);
//定时器响应的函数。
void OnTimer(HWND hWnd);
//左键处理。
void OnLeft(HWND hWnd);
//右键处理。
void OnRight(HWND hWnd);
//下键处理。
void OnDown(HWND hWnd);
//上键处理。
void OnChangeSqare(HWND hWnd);
//方块停在最底层
int CanSqareDown();
//els 方块停在方块上。
int CanSqareDown2();
//判断左移边界是否是边框。
int CanSqareLeft();
//判断左移的边界是否是方块。
int CanSqareLeft2();
//判断右移边界是否是边框。
int CanSqareRight();
//判断右移的边界是否是方块。
int CanSqareRight2();
//判断方块是否变形。
int CanSqareChangeShape();
//长条边界变化。
int CanLineSqareChange();
//结束判断
int CanGameover();
//将1变成2。
void Change1To2();
//改变形状。
void ChangeSqare();
//长条变形。
void ChangeLineSqare();
//消除满行。
void DestroyOneLineSqare();
//显示2
void ShowSqare2(HDC hMemDC);
//计分。
void ShowScore(HDC hMemDC);
#endif
边栏推荐
猜你喜欢

Incorrect datetime value: '2022-01-01' for function str_to_date

征集 |《新程序员》专访“Apache之父”Brian Behlendorf,你最想问什么?

How does Excel compare if two columns of strings are the same?

5. Software testing ----- automated testing

如何画一张架构图(内含知识图谱)

LabVIEW程序框图保存为图像

2022-08-02 顾宇佳 学习笔记 多线程

ROS2自学笔记:机器视觉基础

QCheckBox、margin、border、pandding、QHoxLayout、QSplitter、QSpacerItem

leetcode:149. 直线上最多的点数
随机推荐
44LVS负载均衡群集-NAT
ldap创建公司组织、人员
leetcode:140. 单词拆分 II
Kook机器人开发日志01
Interconversion between numpy PIL tensors
【云原生】灰度发布、蓝绿发布、滚动发布、灰度发布解释
nVisual信息基础设施可视化管理
QT添加资源文件、样式表、qss文件使用
C语言实验十一 指针(一)
易购数码类电商商城网页设计与实现项目源码
370万欧元!西班牙iPronics加速可重构光子芯片商用
能添加任意贴图超级复布局的初级智能文本提示器(超级版)
企业上云规划与云原生环境设计
Scala基础【异常、隐式转换、泛型】
How does Excel compare if two columns of strings are the same?
什么是数据标注? 数据标注公司主要做什么?
rancher集成ldap,实现统一账号登录
基于 Cyclone IV 在 Quartus 中配置 IP 核中的 PLL、RAM 与 FIFO 的详细步骤及仿真验证
任意版本JLink驱动官方下载指引
C语言——-动态内存开辟与管理(malloc,free,calloc,realloc)+柔性数组