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,
0,0, WINDOW_WIDTH,
               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