当前位置:网站首页>els block to the left to move the conditional judgment
els block to the left to move the conditional judgment
2022-07-31 03:11:00 【joker_0030】
1、函数实现(els.c)
#include"els_h.h"
//背景数组
char g_arrBackGroud[20][10] = {0};
char g_arrSqare[2][4] = {0};
void OnPaint(HDC hDc)
{
//创建兼容性DC.
HDC hMemDC = CreateCompatibleDC(hDc);//内存id为:HMemDc,窗口id hDc.
//创建兼容性位图.
HBITMAP hBitmapBack= CreateCompatibleBitmap(hDc, 500, 600);
//关联起来.
SelectObject(hMemDC, hBitmapBack);
PaintSqare(hMemDC);
ShowSqare2(hMemDC);
//传递:
//返回值:失败返回0,成功返回非零.
//参数1:目标DC,窗口DC
//参数2,3:目标的起始位置,注意是基于我们的窗口.
//参数4,5:区域的大小.
//参数6:源DC,也就是我们的内存DC.
//参数7,8:内存图片的起始位置.
//参数9:传递方式.
//
BitBlt(hDc, 0, 0, 300, 600, hMemDC, 0, 0, SRCCOPY);
//释放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)
{
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;
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;
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;
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_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;
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;
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;
break;
}
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();//停止下落.
}
else
{
//1到2
Change1To2();
//产生随机块.
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();
//显示方块.
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;
}
2、头函数(els.h)
#ifndef N_d
#define N_d
#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 OnReturn(HWND hWnd);
//方块下落.
void SqareDwon();
//方块左移.
void SqareLeft();
//定时器响应的函数.
void OnTimer(HWND hWnd);
//左键处理.
void OnLeft(HWND hWnd);
//方块停在最底层
int CanSqareDown();
//els 方块停在方块上.
int CanSqareDown2();
//判断左移边界是否是边框.
int CanSqareLeft();
//判断左移的边界是否是方块.
int CanSqareLeft2();
//将1变成2.
void Change1To2();
//显示2
void ShowSqare2(HDC hMemDC);
#endif
边栏推荐
猜你喜欢

刚出道“一战成名”,安全、舒适一个不落

JS function this context runtime syntax parentheses array IIFE timer delay self.backup context call apply

Addition and Subtraction of Scores in LeetCode Medium Questions

6、显示评论和回复

递归查询单表-单表树结构-(自用)

12 Disk related commands

Mysql 45讲学习笔记(二十四)MYSQL主从一致

【动态规划】连续子数组的最大和

STM32问题合集

11、Redis实现关注、取消关注以及关注和粉丝列表
随机推荐
【异常】The field file exceeds its maximum permitted size of 1048576 bytes.
SIP协议标准和实现机制
YOLOV5 study notes (3) - detailed explanation of network module
TCP详解(二)
Discussion on Service Commitment of Class Objects under Multithreading
16、热帖排行
IDEA 注释报红解决
Mysql 45讲学习笔记(二十五)MYSQL保证高可用
编译Hudi
7. List of private messages
SQL 面试用题(重点)
return in try-catch
MultipartFile file upload
LeetCode简单题之找到和最大的长度为 K 的子序列
顺序表的实现
Good place to download jar packages
Project (5) - Small target detection tph-yolov5
【编译原理】词法分析程序设计原理与实现
[C language foundation] Solve C language error: expected ';', ',' or ')' before '&' token
LeetCode简单题之两个数组间的距离值