您的位置:首页 > 编程语言

VC写的一个有问题的游戏DEMO的代码,希望高手帮我看看

2005-12-08 16:39 573 查看
// demo.cpp : 定义应用程序的入口点。
//

#include "stdafx.h"
#include "demo.h"
#include <stdio.h>

#define MAX_LOADSTRING 100

// 全局变量:
HINSTANCE hInst; // 当前实例
TCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本
TCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名

//自定义全局变量
HWND hWnd;
HDC mdc,bufdc;
HBITMAP fullmap;
HBITMAP person[4];
//HBITMAP map;

void MyPaint(HDC hdc);
DWORD tPre,tNow;
int num,dir,x,y;
const int rows = 15,cols = 15;

//int a=0,b=0;

// 此代码模块中包含的函数的前向声明:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
// TODO: 在此放置代码。
MSG msg;
HACCEL hAccelTable;

// 初始化全局字符串
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_DEMO, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);

// 执行应用程序初始化:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}

hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_DEMO);

// 主消息循环:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

return (int) msg.wParam;
}

//
// 函数: MyRegisterClass()
//
// 目的: 注册窗口类。
//
// 注释:
//
// 仅当希望在已添加到 Windows 95 的
// “RegisterClassEx”函数之前此代码与 Win32 系统兼容时,
// 才需要此函数及其用法。调用此函数
// 十分重要,这样应用程序就可以获得关联的
// “格式正确的”小图标。
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_DEMO);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = (LPCTSTR)IDC_DEMO;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

return RegisterClassEx(&wcex);
}

//
// 函数: InitInstance(HANDLE, int)
//
// 目的: 保存实例句柄并创建主窗口
//
// 注释:
//
// 在此函数中,我们在全局变量中保存实例句柄并
// 创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;

HDC hdc,bufdc;

hInst = hInstance; // 将实例句柄存储在全局变量中

hWnd = CreateWindow(szWindowClass, "DEMO", WS_OVERLAPPEDWINDOW,
150,100, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

if (!hWnd)
{
return FALSE;
}
MoveWindow(hWnd,150,100,600,350,true);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

int mapIndex[rows*cols] = { 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, //
0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, //
0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, //
0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, //
0,0,0,1,2,2,2,2,2,2,2,2,2,2,2, //
0,0,0,1,0,0,0,3,3,0,0,0,0,0,0, //
0,0,0,1,0,0,0,3,3,0,0,0,0,0,0, //
0,0,0,1,0,0,0,3,3,0,0,0,0,0,0, //
0,0,0,1,0,0,0,3,3,0,0,0,0,0,0, //
0,0,0,1,0,0,0,3,3,0,0,0,0,0,0, //
0,0,0,1,0,0,0,3,3,0,0,0,0,0,0, //
0,0,0,1,0,0,0,3,3,0,0,0,0,0,0, //
0,0,0,1,0,0,0,3,3,0,0,0,0,0,0, //
0,0,0,1,0,0,0,3,3,0,0,0,0,0,0,//
0,0,0,1,0,0,0,3,3,0,0,0,0,0,0, //
};//

hdc = GetDC(hWnd);
mdc = CreateCompatibleDC(hdc);
bufdc = CreateCompatibleDC(hdc);
fullmap=CreateCompatibleBitmap(hdc,cols*40,rows*40);

SelectObject(mdc,fullmap);

x = 300;
y = 250;
dir = 0;
num = 0;

person[0] = (HBITMAP)LoadImage(NULL,"image/girl0.bmp",IMAGE_BITMAP,440,148,LR_LOADFROMFILE);
person[1] = (HBITMAP)LoadImage(NULL,"image/girl1.bmp",IMAGE_BITMAP,424,154,LR_LOADFROMFILE);
person[2] = (HBITMAP)LoadImage(NULL,"image/girl2.bmp",IMAGE_BITMAP,480,148,LR_LOADFROMFILE);
person[3] = (HBITMAP)LoadImage(NULL,"image/girl3.bmp",IMAGE_BITMAP,480,148,LR_LOADFROMFILE);

HBITMAP map[3];
char filename[20] = "";
int rowNum,colNum;
int i,x,y;

for(i=0;i<3;i++)
{
sprintf(filename,"image/map%d.bmp",i);
map[i] = (HBITMAP)LoadImage(NULL,filename,IMAGE_BITMAP,50,50,LR_LOADFROMFILE);
}
for(i=0;i<rows*cols;i++)
{
SelectObject(bufdc,map[mapIndex[i]]);
rowNum = i / cols;
colNum = i % cols;
x=colNum*50;
y=rowNum*50;

BitBlt(mdc,x,y,50,50,bufdc,0,0,SRCPAINT);
}

MyPaint(hdc);

ReleaseDC(hWnd,hdc);
DeleteDC(bufdc);
//地图拼接结束

return TRUE;
}

//
// 函数: WndProc(HWND, unsigned, WORD, LONG)
//
// 目的: 处理主窗口的消息。
//
// WM_COMMAND - 处理应用程序菜单
// WM_PAINT - 绘制主窗口
// WM_DESTROY - 发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;

switch (message)
{
/*
case WM_KEYDOWN:
switch (wParam)
{
case VK_UP:
b-= 20;
if(b< 0)
b = 0;
break;
case VK_DOWN:
if(b> 660)
b = 660;
break;
case VK_LEFT:
a-= 20;
if(a< 0)
a = 0;
break;
case VK_RIGHT:
a+= 20;
if(a> 910)
a = 910;
break;

case VK_ESCAPE:
exit(0);

}*/
case WM_KEYDOWN:
switch (wParam)
{
case VK_ESCAPE:
PostQuitMessage( 0 );
break;
case VK_UP:
switch(dir)
{
case 0:
y -= 10;
break;
case 1:
x -= 1;
y -= 8;
break;
case 2:
x += 2;
y -= 10;
break;
case 3:
x += 2;
y -= 10;
break;
}
if(y < 0)
y = 0;
dir = 0;
break;
case VK_DOWN:
switch(dir)
{
case 0:
x += 1;
y += 8;
break;
case 1:
y += 10;
break;
case 2:
x += 3;
y += 6;
break;
case 3:
x += 3;
y += 6;
break;
}

if(y > 375)
y = 375;
dir = 1;
break;
case VK_LEFT:
switch(dir)
{
case 0:
x -= 12;
break;
case 1:
x -= 13;
y += 4;
break;
case 2:
x -= 10;
break;
case 3:
x -= 10;
break;
}
if(x < 0)
x = 0;
dir = 2;
break;
case VK_RIGHT:
switch(dir)
{
case 0:
x += 8;
break;
case 1:
x += 7;
y += 4;
break;
case 2:
x += 10;
break;
case 3:
x += 10;
break;
}
if(x > 575)
x = 575;
dir = 3;
break;
case VK_F1:

MessageBox(NULL,"GAME START","关于.. ...",MB_OK);
break;
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
MyPaint(hdc);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
DeleteDC(mdc);
DeleteDC(bufdc);
DeleteObject(fullmap);
// ReleaseDC(hWnd,hdc);
for(int i=0;i<4;i++)
DeleteObject(person[i]);
PostQuitMessage(0);
break;
default: //其他消息
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;

}

// “关于”框的消息处理程序。
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;

case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}

//绘制地图
void MyPaint(HDC hdc)
{
int w,h;
SelectObject(mdc,fullmap);
//BitBlt(hdc,0,0,cols*40,rows*40,mdc,a,b,SRCCOPY);
BitBlt(hdc,0,0,cols*40,rows*40,mdc,0,0,SRCCOPY);
//BitBlt(mdc,0,0,640,480,bufdc,0,0,SRCCOPY);

SelectObject(bufdc,person[dir]);
switch(dir)
{
case 0:
w = 55;
h = 74;
break;
case 1:
w = 53;
h = 77;
break;
case 2:
w = 60;
h = 74;
break;
case 3:
w = 60;
h = 74;
break;
}
BitBlt(mdc,x,y,w,h,bufdc,num*w,h,SRCAND);
BitBlt(mdc,x,y,w,h,bufdc,num*w,0,SRCPAINT);

BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);

tPre = GetTickCount();

num++;
if(num == 8)
num = 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐