小弟我的第一个win32的小游戏,渲染时出错
我的第一个win32的小游戏,渲染时出错
正在学习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;
正在学习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;