WinX Game engine

// the winX
game console
//
INCLUDES
#define
WIN32_LEAN_AND_MEAN
#include
<windows.h> // include
important windows stuff
#include
<windowsx.h>
#include
<mmsystem.h>
#include
<iostream.h> // include important C/C++ stuff
//
DEFINES
//
defines for windows
#define
WINDOW_CLASS_NAME "WINXCLASS"
// class name
#define
WINDOW_WIDTH 320
// size of window
#define
WINDOW_HEIGHT 200
//
MACROS
//
these read the keyboard asynchronously
#define
KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define
KEY_UP(vk_code)
((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
//
PROTOTYPES
int
GameInit(void *parms=NULL);
int
GameShutdown(void *parms=NULL);
int
GameMain(void *parms=NULL);
//
GLOBALS
HWND
mainWindowHandle = NULL; // save the window handle
HINSTANCE
mainInstance = NULL; // save the instance
HDC
mainGDC;
// save the graphics context
char
buffer[80];
// used to print text
//
FUNCTIONS
LRESULT
CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam,
LPARAM lparam)
{ //
this is the main message handler of the system
PAINTSTRUCT ps; // used in WM_PAINT
HDC hdc; // handle to a device context
// what is the message
switch(msg)
{
case
WM_CREATE:
{ // do
initialization stuff here
return(0);
} break;
case WM_PAINT:
{ // start painting
hdc =
BeginPaint(hwnd,&ps);
// end painting
EndPaint(hwnd,&ps);
return(0);
} break;
case WM_DESTROY:
{ // kill the
application
PostQuitMessage(0);
return(0);
} break;
default:break;
} // end switch
// process any messages that we didn't
take care of
return (DefWindowProc(hwnd, msg,
wparam, lparam));
} //
end WinProc
//
************** WINMAIN ******************
int
WINAPI WinMain( HINSTANCE
hinstance, HINSTANCE hprevinstance,
LPSTR
lpcmdline, int ncmdshow)
{
WNDCLASS winclass; //
this will hold the class we create
HWND
hwnd; //
generic window handle
MSG
msg; //
generic message
HDC hdc; // generic dc
PAINTSTRUCT ps; // generic
paintstruct
// first fill in the window class
stucture
winclass.style =
CS_DBLCLKS | CS_OWNDC | CS_HREDRAW
| CS_VREDRAW;
winclass.lpfnWndProc = WindowProc;
winclass.cbClsExtra =
0;
winclass.cbWndExtra =
0;
winclass.hInstance =
hinstance;
winclass.hIcon =
LoadIcon(NULL, IDI_APPLICATION);
winclass.hCursor =
LoadCursor(NULL, IDC_ARROW);
winclass.hbrBackground = (HBRUSH)
GetStockObject(BLACK_BRUSH);
winclass.lpszMenuName = NULL;
winclass.lpszClassName =
WINDOW_CLASS_NAME;
// register the window class
if (!RegisterClass(&winclass))
return(0);
// create the window
if (!(hwnd =
CreateWindow(WINDOW_CLASS_NAME, "WinX Game Console",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
WINDOW_HEIGHT,
NULL, NULL, hinstance, NULL)))
return(0);
// save the window handle and instance
in a global
mainWindowHandle = hwnd;
mainInstance = hinstance;
// perform all game console specific
initialization
GameInit();
// enter main event loop
while(1)
{ if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
//
test if this is a quit
if
(msg.message == WM_QUIT)
break;
//
translate any accelerator keys
TranslateMessage(&msg);
//
send the message to the window proc
DispatchMessage(&msg);
} // end if
// main game processing
goes here
GameMain();
} // end while
// shutdown game and release all
resources
GameShutdown();
// return to Windows like this
return(msg.wParam);
} //
end WinMain
// WINX
GAME PROGRAMMING CONSOLE FUNCTIONS
int
GameInit(void *parms)
{ //
this function is where you do all the initialization
// for your game
// retrieve the graphics device context
once and save it
// we can do this since the winclass
has OWN_DC
mainGDC = GetDC(mainWindowHandle);
// return success
return(1);
} //
end GameInit
int
GameShutdown(void *parms)
{
// this function is where you shutdown
your game and
// release all resources that you
allocated
// release the graphics device context
ReleaseDC(mainWindowHandle, mainGDC);
// return success
return(1);
} //
end GameShutdown
int
GameMain(void *parms)
{
// this is the workhorse of your game
it will be called
// continuously in real-time this is
like main() in C
// all the calls for you game go here!
return(1); // return success
} //
end GameMain