www.pudn.com > migongchengxu.rar > Main.cpp
#include "OpenGLCom.h" #include#include "resource.h" #include "Maze.h" char mazemap [] ="MazeMap.txt"; char szClassName[]= "MazeWalkerClass"; char szAppTitle[] = "Maze Walker --Demo HeartBlue 2002-5-18"; char szHelpA[]=" :Start | :Pause | :Resume | :Exit"; char szHelpB[]=" :Speed Up | :Speed down | : Full speed"; RunApp(LPSTR ,int); int g_cur_speed=100; LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int Action(LONG fps); GLubyte* dib_data; BITMAPINFOHEADER dib_info; void UseTex(); void Resize(); CMaze maze; RunApp(LPSTR CmdLine ,int sw_mode) { maze.LoadMaze(mazemap); if(MessageBox(NULL,"是否要工作在全屏模式?","迷宫DEMO",MB_OKCANCEL)==IDCANCEL) CreateNormalApp(sw_mode,0,0,420,420); else CreateExcApp(sw_mode); // CreateExcApp(sw_mode); InitOpenGL(); glEnable(GL_CULL_FACE); UseTex(); // SetForceFps(g_cur_speed); g_AppData.bIsActive=1; Resize(); MainLoop(Action); //Release Texture delete []dib_data; ReleaseGL(); return 1; } void UseTex() { // glEnable(GL_TEXTURE_2D); LoadBmpFromeFile("Stone.BMP",dib_data,dib_info); glTexImage2D(GL_TEXTURE_2D,0,3, dib_info.biWidth, dib_info.biHeight,0, GL_BGR_EXT,GL_UNSIGNED_BYTE,dib_data); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T, GL_REPEAT); // glEnable(GL_TEXTURE_2D); } void Resize() { RECT rct; GetClientRect(g_AppData.hWnd,&rct); int w = rct.right - rct.left; int h = rct.bottom - rct.top ; if(w =20) g_cur_speed-=5; SetForceFps(g_cur_speed); break; case ID_FULL: g_cur_speed=100; SetForceFps(0); break; case ID_ABOUT: MessageBox(hWnd,"迷宫搜索Demo\n 用OpenGL加速\n\n 潘李亮 2002-5-18","迷宫搜索Demo",MB_OK); break; } break; case WM_KEYDOWN: switch(wParam) { case VK_RETURN: maze.LoadMaze(mazemap); maze.SetPause(false); break; case VK_ESCAPE: DestroyWindow(hWnd); break; case VK_F1: MessageBox(hWnd,"迷宫搜索Demo\n 用OpenGL加速\n\n 潘李亮 2002-5-18","迷宫搜索Demo",MB_OK); break; case VK_SHIFT: maze.SetPause(true); break; case VK_CONTROL: maze.SetPause(false); break; case VK_UP: if(g_cur_speed<=100) g_cur_speed+=5; SetForceFps(g_cur_speed); break; case VK_DOWN: if(g_cur_speed>=20) g_cur_speed-=5; SetForceFps(g_cur_speed); break; case VK_END: g_cur_speed=100; SetForceFps(0); break; } break; case WM_CLOSE: DestroyWindow(hWnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return ::DefWindowProc(hWnd,msg,wParam,lParam); } return 1; }