小弟我的第一个win32的小游戏,渲染时出错

我的第一个win32的小游戏,渲染时出错
本帖最后由 u010004086 于 2013-09-23 14:10:19 编辑
正在学习windows游戏编程,自己的第一个小游戏。
我觉得是Draw_Block()函数里CreateSolidBrush()的问题,但是没有找到解决办法。
下面是我的代码:
/*windows GDI下的游戏程序*/
#define WIN32_LEAN_AND_MEAN

#include<windows.h>

#include<stdlib.h>
#include<stdio.h>
#include<math.h>

//窗口类
#define WINDOW_CLASS_NAME "WIN3DCLASSS"

//按键响应
#define KEY_DOWN(vk_code)        ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)

//窗口尺寸
#define WINDOW_WIDTH  640
#define WINDOW_HEIGHT 480
#define SCREEN_WIDTH  640
#define SCREEN_HEIGHT 480

//Block设置
#define NUM_BLOCK_ROWS           6
#define NUM_BLOCK_COLUMNS        8
#define BLOCK_WIDTH              64
#define BLOCK_HEIGHT             16
#define BLOCK_ORIGIN_X           8
#define BLOCK_ORIGIN_Y           8
#define BLOCK_X_GAP              80
#define BLOCK_Y_GAP              32

//Paddle设置
#define PADDLE_START_X           (SCREEN_WIDTH/2-16)
#define PADDLE_START_Y           (SCREEN_HEIGHT-32)
#define PADDLE_WIDTH             32
#define PADDLE_HEIGHT            8
#define PADDLE_COLOR             191

//Ball设置
#define BALL_START_Y             (SCREEN_HEIGHT/2)
#define BALL_SIZE                4

int Game_Init(void *parms=NULL);           //游戏初始化函数
int Game_Shutdown(void *parms=NULL);       //游戏关闭函数
int Game_Main(void *parms=NULL);           //游戏处理函数
void Draw_Blocks(void);                    //Block绘画函数

HWND main_window_handle=NULL;             //窗口句柄
HINSTANCE main_instance=NULL;             //实例句柄
HDC main_hdc=NULL;
HBRUSH main_brush=NULL;
HBRUSH old_brush=NULL;

int paddle_x=0,paddle_y=0;       //Paddle的坐标
int ball_x=0,ball_y=0;           //Ball的坐标
int ball_dx=0,ball_dy=0;         //Ball的运动向量
int score=0;                     //分数
int level=1;                     //等级
int blocks_hit=0;                //Block撞击数
char buffer[80]="";              //字符缓存

//Block的颜色数组
UCHAR blocks[NUM_BLOCK_ROWS][NUM_BLOCK_COLUMNS];   

LRESULT CALLBACK WindowProc(HWND hwnd,
UINT msg,
WPARAM wparam,
LPARAM lparam)
{
PAINTSTRUCT ps;

switch(msg)
{
case WM_CREATE:
{
return(0);
}break;
case WM_PAINT:
{
main_hdc=BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);
return(0);
}break;
case WM_TIMER:             //定时器
{
switch(wparam)
{
case 1:
{ //键盘获取Paddle的移动
if(KEY_DOWN(VK_RIGHT))
{
paddle_x+=8;
if(paddle_x>(SCREEN_WIDTH-PADDLE_WIDTH))
paddle_x=SCREEN_WIDTH-PADDLE_WIDTH;
}
else if(KEY_DOWN(VK_LEFT))
{
paddle_x-=8;
if(paddle_x<0)
paddle_x=0;
}

                    //Ball的移动
ball_x+=ball_dx;
ball_y+=ball_dy;


RECT rect;//矩形结构体
/*渲染屏幕*/ rect.left=1;
rect.top=1;
rect.right=SCREEN_WIDTH-1;
rect.bottom=SCREEN_HEIGHT-1;
main_brush=CreateSolidBrush(200);
SelectObject(main_hdc,main_brush);
FillRect(main_hdc,&rect,main_brush);

Draw_Blocks();//绘制Block


/*绘制Paddle*/ rect.left=paddle_x-8;
rect.top=paddle_y+8;