win32编程之俄罗斯方块

因为把目标定在了游戏上,最近在学习win32编程

经过一段时间的学习,开始进行编程实现俄罗斯方块,记录一下其中遇到的一些问题

一开始是看网上的教程学习的,但是做完一部分之后发现   会有闪屏的情况   所以又去网上搜索了一下发现要用到双缓冲。


注意:这段开始正确性有待考证!

我一开始的时候是把

drawTeris();

drawBackGround();

drawBlocked();

都放在了WM_PAINT事件里

而且里面都用了双缓冲来绘制,结果导致后面闪屏更加频繁,后来把所有的绘制动作都交由一个缓冲区来处理,然后删掉其他函数中的双缓冲相关代码并加入drawBackGround中,这样在WM_PAINT事件中只需要调用一次drawBackground就行了  而且也没发现有闪屏了。


另外还发现一个比较奇葩的问题:

一个用了BOOL类型的变量后面把他当作bool类型进行memcpy的时候会出问题


贴上在网上找到的资料:

windows为了兼容问题定义的基础变量。
typedef unsigned long        DWORD;
typedef int                  BOOL;
typedef unsigned char        BYTE;
typedef unsigned short       WORD;
typedef float                FLOAT;
typedef FLOAT                *PFLOAT;
typedef BOOL near            *PBOOL;
typedef BOOL far             *LPBOOL;
typedef BYTE near            *PBYTE;
typedef BYTE far             *LPBYTE;
typedef int near             *PINT;
typedef int far              *LPINT;

根据上面这段可以发现其实BOOL是个int类型的 


附上  代码 

tetris.h

#pragma once

#include "resource.h"

//函数声明
void checkComplite();  //查看一行是否能消去  采用从上往下的消法,消去一行后把上面的每行都往下移,但是我感觉效率有点低,以后看能不能有点改进
void drawBlocked(HDC hdc);		//绘制当前已经存在砖块的区域
void DrawBackGround(HDC hdc);		//绘制背景
void outPutBoxInt(int num);		//自定义的弹窗函数  用于调试
void outPutBoxString(TCHAR str[1024]);
void setRandomT();		//随机生成一个方块用作下一次掉落
void init_game();		//初始化
void fillBlock();		//到达底部后填充矩阵
void RotateTeris(BOOL bTeris[4][4]);		//旋转矩阵
void DrawTeris(HDC mdc);	//绘制正在下落的方块
void drawNext(HDC hdc);	//绘制下一个将要掉落的方块
void drawScore(HDC hdc);	//绘制分数
void drawCompleteParticle(int line);

int RandomInt(int _min,int _max);		//获取一个随机int
int CheckValide(int curPosX,int curPosY,BOOL bCurTeris[4][4]);   //给定一个矩阵,查看是否合法
int selectDiffculty(HWND hWnd,int dif);
int selectLayOut(HWND hWnd,int layout);

//常量声明
const int BORDER_X = 10;
const int BORDER_Y = 10;
const int SCREEN_LEFT_X = 300 + BORDER_X;
const int SCREEN_Y = 600 + BORDER_Y;
const int SCREEN_RIGHT_X = 180+BORDER_X*2;
const int SCREEN_X = SCREEN_LEFT_X+SCREEN_RIGHT_X;
const BOOL state_teris[][4][4]=
{
	{
  
  {1,1,1,1},{0,0,0,0},{0,0,0,0},{
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值