方块处理(1) ---十天教会你俄罗斯方块

一.显示方块

二.产生随机块


20行10列的二维数组数组元素初始化成0如果元素值为1,就画方块,否则不画

#define SIDE_LEN 30
#define G_ARR_ROW (RECT_LOWER_Y/SIDE_LEN)
#define G_ARR_RANK (RECT_LOWER_X/SIDE_LEN)
//全局变量
int g_arrBackGround[G_ARR_ROW][G_ARR_RANK] = {0};//产生背景数组
void OnPaint(HDC hDC)
{
//创建兼容性DC(内存DC)--纸的编号
HDC mDC = CreateCompatibleDC(hDC);
//创建兼容性位图--纸本身
HBITMAP hBitmap = CreateCompatibleBitmap(hDC,WND_WIDTH,WND_HEIGHT);
//将DC与位图关联
SelectObject(mDC, hBitmap);
//画方块
PaintSquare(mDC);
//从内存DC到窗口DC传递
BitBlt(hDC,0,0,RECT_LOWER_X,RECT_LOWER_Y,mDC,0,0,SRCCOPY);
//释放位图
DeleteObject(hBitmap);
//释放DC
DeleteDC(mDC);
}
void PaintSquare(HDC mDC){
int i = 0;
int j = 0;
//画矩形框
Rectangle(mDC,RECT_UPPER_X,RECT_UPPER_Y,RECT_LOWER_X,RECT_LOWER_Y);
g_arrBackGround[2][4] = 1;g_arrBackGround[3][3] = 1;
g_arrBackGround[3][4] = 1;g_arrBackGround[3][5] = 1;
//遍历二维数组
for(i=0;i<G_ARR_ROW;i++)
{
for(j=0;j<G_ARR_RANK;j++)
{
if(1==g_arrBackGround[i][j])
{Rectangle(mDC,j*SIDE_LEN,i*SIDE_LEN,j*SIDE_LEN+SIDE_LEN,i*SIDE_LEN+SIDE_LEN);}
}

}}

2、产生随机块并显示

//全局变量

int g_arrSquare[2][4] = {0};//产生方块数组


七种情况

#include <time.h>
int CreateRandomSquare(){
int nIndex = rand()%7;//7种组合
switch(nIndex)
{
case 0:
g_arrSquare[0][0] = 1;g_arrSquare[0][1] = 1;g_arrSquare[0][2] = 0;g_arrSquare[0][3] = 0;
g_arrSquare[1][0] = 0;g_arrSquare[1][1] = 1;g_arrSquare[1][2] = 1;g_arrSquare[1][3] = 0;
break;
case 1: …… break;
case 2: …… break;
case 3: …… break;
case 4: …… break;
case 5: …… break;
case 6: ……break;
default:break;
}
return nIndex;}
void CopySquareToBack()
{
int i = 0;
int j = 0;
for(i=0;i<COMB_ROW;i++)
{
for(j=0;j<COMB_RANK;j++)
{
g_arrBackGround[i][j+3] = g_arrSquare[i][j];//起始出现位置在中间
}
 }

}

效果图:





  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wym_king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值