因为把目标定在了游戏上,最近在学习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;
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},{

最低0.47元/天 解锁文章
1392

被折叠的 条评论
为什么被折叠?



