|
|
本人为了找工作,想做一个游戏DEMO,以三国为题材.但是水平不佳,想在此向各位高手学习一下,并希望与和我一样的游戏编程爱好者相互交流交流,共同学习.
希望大家能支持我,并给我提出宝贵意见,谢谢!
以下是我编写的游戏框架,希望高手指点一下:
---------------//-common.h-//---------------------------------------------------------------------------------------------
#pragma once
#define STRICT
//=================================================================
#include <windows.h>
#include <windowsx.h>
#include <mmsystem.h>
#include <stdio.h>
#include <process.h>
#include <stdlib.h>
#include <tchar.h>
#include <math.h>
//=================================================================
#pragma comment( lib, "winmm.lib")
#pragma comment( lib, "comctl32.lib")
//==================================================================
#include <d3d9.h>
#include <d3dx9.h>
#include <dsound.h>
#include <dinput.h>
#include <dxerr9.h>
//=================================================================
#pragma comment( lib, "d3d9.lib")
#pragma comment( lib, "d3dx9.lib")
#pragma comment( lib, "dinput8.lib")
#pragma comment( lib, "dxerr9.lib")
//==================================================================
#include <gl\gl.h> // OpenGL32库的头文件
#include <gl\glu.h> // GLu32库的头文件
#include <gl\glaux.h> // GLaux库的头文件
//==================================================================
#pragma comment( lib, "opengl32.lib") // OpenGL32连接库
#pragma comment( lib, "glu32.lib") // GLu32连接库
#pragma comment( lib, "glaux.lib") // GLaux连接库
//================SanGuo.h==================================================
BOOL RegisterWindowClass();
BOOL CreateGameWindow();
BOOL ReleaseGameWindow();
BOOL ResizeGameWindow();
BOOL GameRun();
BOOL GameInit();
LRESULT CALLBACK MessageManage(
HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam
);
//============SanGuo.cpp=================================================
#include "../code/common.h"
#include "../code/sanguo.h"
//===============================================================
#define DIRECT3D 0U//
#define OPENGL 1U//
#define SOFT 2U//
//==============================================================
#define MESSAGEBOX(MESSAGE) ( MessageBox (NULL, TEXT (MESSAGE), NULL, MB_ICONERROR) )
//==============================================================
HINSTANCE g_hInstance ;//应用程序句柄
HWND g_hWnd ;//窗口句柄
HDC g_hDc ;//设备句柄
UINT g_Width =200U ;//窗口宽度
UINT g_Height =200U ;//窗口高度
BOOL g_Active =TRUE ;//程序是否是激活状态
BOOL g_FullScreen = FALSE ;//是否全屏
HGLRC g_hGlrc ;//OPENGL设备句柄
CHAR g_KeyDown[256] ={ FALSE } ;//按键状态
UINT g_Mode ;//选择应用程序实现方式
LPCTSTR g_WindowClassName="SanGuo";//类名字
//==============================================================
BOOL RegisterWindowClass()
{
WNDCLASS wc ;
{
wc.style = CS_HREDRAW | CS_VREDRAW ; //类风格
wc.lpfnWndProc = (WNDPROC)MessageManage ; //窗口过程
wc.cbClsExtra = 0 ; //额外类空间
wc.cbWndExtra = 0 ; //额外窗口空间
wc.hInstance = g_hInstance ; //实例句柄
wc.hIcon = NULL ; //图标
wc.hCursor = LoadCursor(NULL, IDC_ARROW); //光标
wc.hbrBackground = (HBRUSH)( COLOR_WINDOW +1) ; //背景画刷
wc.lpszMenuName = NULL ; //菜单
wc.lpszClassName = g_WindowClassName ; //类名称
}
if (!RegisterClass (&wc))
{
MESSAGEBOX("REGISTER WIDOW ERR!");
return FALSE ;
}
return TRUE;
}
//===============================================================
BOOL CreateGameWindow()//建立程序主窗口
{
if ( g_Mode==DIRECT3D )
{
if (!g_FullScreen)
{
g_hWnd = CreateWindow(
g_WindowClassName, //
"", //
WS_OVERLAPPEDWINDOW, //
CW_USEDEFAULT, //
0, //
CW_USEDEFAULT, //
0, //
NULL, //
NULL, //
g_hInstance, //
NULL //
);
if ( !g_hWnd )
{
MESSAGEBOX("CREATE WINDOW ERR!");
return FALSE;
}
}
else
{
}
}
if ( g_Mode==OPENGL )
{
if (!g_FullScreen)
{
}
else
{
}
}
if ( g_Mode==SOFT )
{
if (!g_FullScreen)
{
}
else
{
}
}
ShowWindow(g_hWnd, SW_SHOW);
UpdateWindow(g_hWnd);
return TRUE;
}
//==============================================================
BOOL ReleaseGameWindow()
{
return TRUE;
}
//===============================================================
BOOL ResizeGameWindow()
{
return TRUE;
}
//================================================================
BOOL GameInit()
{
return TRUE;
}
//================================================================
BOOL GameRun()
{
return TRUE;
}
//================================================================
WPARAM GameLoop(void)//游戏循环
{
MSG msg;
int m_message;
while(msg.message != WM_QUIT)
{
m_message = PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE);
if( m_message )
{ TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
GameRun();//
}
}
return msg.wParam;
}
//================================================================
BOOL GameExit()
{
return TRUE;
}
//================================================================
LRESULT CALLBACK MessageManage(
HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam
)//回调函数
{
int wmId, wmEvent;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
case WM_CREATE:
g_hDc=GetDC(hWnd);
GameInit();
break;
case WM_KEYDOWN:
g_KeyDown[wParam] = TRUE;
return 0;
}
case WM_KEYUP:
{
g_KeyDown[wParam] = FALSE;
return 0;
}
case WM_CLOSE:
GameExit();
PostQuitMessage(0);
return 0;
break;
case WM_SIZE:
g_Height = HIWORD(lParam);
g_Width = LOWORD(lParam);
if (g_Height==0) g_Height=1;
ResizeGameWindow();
return 0;
break;
case WM_DESTROY:
GameExit();
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
//================================================================
int APIENTRY WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
g_hInstance = hInstance ; //设置全局句柄
if ( !RegisterWindowClass ( ) ) return 0 ; //注册窗口
if ( !CreateGameWindow ( ) ) return 0 ; //建立窗口
return GameLoop( ) ; //游戏循环
}
|
|