首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

谁帮忙看一上程序哪有有关问题

2012-09-12 
哪位高手帮忙看一下程序哪有问题?/*******/#include windows.h#include stdlib.h#include time.h#in

哪位高手帮忙看一下程序哪有问题?
/**
*
*
*
*
*/
#include <windows.h>
#include <stdlib.h>
#include <time.h>
#include <TCHAR.h>
#include "resource.h"

#define TILEWIDE 64
#define TILEHIGH 32
#pragma comment(lib,"msimg32")

BOOL bRight = TRUE;
int nRoleIdx = 0;
HDC hdcTiles[4],hdcRole[14],hdcMem;
HBITMAP hBitmapTiles[4],hBitmapRole[4],hBitmapMem;
int Data[100][100];
int playerx,playery;
int MAXSCREENX,MAXSCREENY;

int InitMap(HINSTANCE,HDC);
int MapDraw(HDC);

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

//入口函数
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
static TCHAR szAppName[] = TEXT("示例");
HWND hwnd;
MSG msg;
WNDCLASS wndclass;

wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszClassName = szAppName;
wndclass.lpszMenuName = NULL;

if (!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("This program requires Windows NT!"),szAppName,MB_ICONERROR);
return 0;
}

MAXSCREENX = 640;
MAXSCREENY = 480;


hwnd = CreateWindow(szAppName,TEXT("菱形地图与动画演示"),WS_OVERLAPPEDWINDOW,
CW_USEDEFAULTX,CW_USEDEFAULTY,MAXSCREENX,MAXSCREENY,NULL,
NULL,hInstance,NULL);

ShowWindow(hwnd,nShowCmd);
UpdateWindow(hwnd);
 
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
HINSTANCE hInstance;
int i;

switch (message)
{
case WM_CREATE:
hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
hdc = GetDC(hwnd);
hdcMem = CreateCompatibleDC(hdc);
hBitmapMem = CreateCompatibleBitmap(hdc,1024 * 2,768 * 2);
InitMap(hInstance,hdc);
break;
case WM_KEYDOWN:
{
int lim = MAXSCREENX / TILEWIDE;
switch (wParam)
{
case VK_UP:
if (!bRight)
nRoleIdx = 0;
bRight = TRUE;
if (playery < 1 + lim) break;
playery--;
InvalidateRect(hwnd,NULL,NULL);
break;
case VK_DOWN:
if (bRight)
nRoleIdx = 6;
bRight = FALSE;
if (playery < 1 + lim) break;
playery--;
InvalidateRect(hwnd,NULL,NULL);
break;
case VK_LEFT:
if (bRight)
nRoleIdx = 6;
bRight = FALSE;
if (playerx < 1 + lim) break;
playerx--;
InvalidateRect(hwnd,NULL,NULL);
break;
case VK_RIGHT:
if (!bRight)
nRoleIdx = 0;
bRight = TRUE;
if (playerx < 1 + lim) break;
playerx--;
InvalidateRect(hwnd,NULL,NULL);
break;
}
}
break;
case WM_SIZE:
MAXSCREENX = LOWORD(lParam);
MAXSCREENY = HIWORD(lParam);
SelectObject(hdcMem,GetStockObject(WHITE_BRUSH));
Rectangle(hdcMem,0,0,1024 * 2,768 * 2);
InvalidateRect(hwnd,NULL,TRUE);
break;
case WM_PAINT:
hdc = BeginPaint(hwnd,&ps);

GetClientRect(hwnd,&rect);
MapDraw(hdc);

EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
for (i = 0 ; i < 4 ; i++)
{
DeleteDC(hdcTiles[i]);
DeleteObject(hBitmapTiles[i]);
}
for (i = 0 ; i < 14 ; i++)


{
DeleteDC(hdcRole[i]);
DeleteObject(hBitmapTiles[i]);
}
DeleteDC(hdcMem);
DeleteObject(hBitmapMem);

PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}

int InitMap(HINSTANCE hInstance,HDC hdc)
{
int i;
TCHAR szName[10];
TCHAR tempChar[2];

srand((unsigned)time(NULL));

//初始化程序中所用到的图片
for (i = 0 ; i < 4 ; i++)
{
_tcscpy(szName,TEXT("MAP"));
_itot(i,tempChar,10);
_tcscat(szName,tempChar);
hdcTiles[i] = CreateCompatibleDC(hdc);
hBitmapTiles[i] = LoadBitmap(hInstance,szName);
SelectObject(hdcTiles[i],hBitmapTiles[i]);
}

for (int yi = 0 ; yi < 100 ; yi++)
{
for (int xi = 0 ; xi < 100 ; xi++)
{
if (xi == 50 && yi == 50)
Data[yi][xi] = 1;
else if(xi == 48 && yi == 48)
Data[yi][xi] = 0;
else if(xi == 58 && yi == 54)
Data[yi][xi] = 3;
else 
Data[yi][xi] = 2;
}
}

for (i = 0 ; i < 14 ; i++)
{
_tcscpy(szName,TEXT("ROLE"));
_itot(i,tempChar,10);
_tcscat(szName,tempChar);
hdcRole[i] = CreateCompatibleDC(hdc);
hBitmapRole[i] = LoadBitmap(hInstance,szName);
SelectObject(hdcTiles[i],hBitmapRole[i]);
}

playerx = playery = 50;
return 0;
}

int MapDraw(HDC hdc)
{
TCHAR strOut[7];
TCHAR strTemp[4] = {',',0,0,0};

int i,j;
int lim = MAXSCREENX / TILEWIDE + 1;

for (i = -lim ; i < lim ; i++)
for (j = -lim ; j < lim ; j++)
{
int sx = MAXSCREENX / 2 - (TILEWIDE / 2) + (i * TILEWIDE / 2) - (j * TILEWIDE / 2);
int sy = MAXSCREENY / 2 - (TILEHIGH / 2) + (i * TILEHIGH / 2) - (j * TILEHIGH / 2);

if ((sx < MAXSCREENX) &&  (sy < MAXSCREENY) && (sx + TILEWIDE > 0) && (sy + TILEHIGH > 0) && (playerx + i >= 0 && playerx + i < 100) && (playery + i >= 0 && playery + i < 100))
{
TransparentBlt(hdcMem,sx,sy,TILEWIDE,TILEHIGH,hdcTiles[Data[playerx + i][playery + j]],0,0,TILEWIDE,TILEHIGH,RGB(0,255,0));
}
}

TransparentBlt(hdcMem,MAXSCREENX / 2 - (42 / 2),MAXSCREENY / 2 - (82 / 2),42,82,hdcRole[nRoleIdx],0,0,42,82,RGB(255,255,255));
nRoleIdx++;
if (bRight)
{
if (nRoleIdx > 6)
nRoleIdx = 0;
}
else
{
if (nRoleIdx > 13)
nRoleIdx = 7;
}
_itot(playerx,strOut,10);
_tcscat(strOut,strTemp);
_itot(playery,strTemp,10);
_tcscat(strOut,strTemp);
SelectObject(hdcMem,GetStockObject(WHITE_BRUSH));
SelectObject(hdcMem,GetStockObject(NULL));
Rectangle(hdcMem,10,10,50,30);
TextOut(hdcMem,10,10,strOut,_tcslen(strOut));
BitBlt(hdc,0,0,MAXSCREENX,MAXSCREENY,hdcMem,0,0,SRCCOPY);

return 0;
}
运行没有结果。。。。

[解决办法]
单步调试!!!
[解决办法]
要学会调试啊,每关键步骤输出文字或图形。
[解决办法]
调试进WM_PAINT看看相关代码实现有没有问题

热点排行