int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { b2Vec2 gravity(0.0f, -10.0f); // CREATE THE GAME Game *balloonEscapeGame = new Game(); // FIRST WE'LL SETUP THE DATA LOADER, SINCE IT MAY NEED TO READ // IN DATA TO SETUP OTHER STUFF BalloonEscapeDataLoader *balloonEscapeDataLoader = new BalloonEscapeDataLoader(); balloonEscapeDataLoader->initWinHandle(hInstance, nCmdShow); balloonEscapeGame->setDataLoader(balloonEscapeDataLoader); balloonEscapeDataLoader->loadGame(balloonEscapeGame, W_INIT_FILE); // WHAT WE SHOULD BE DOING HERE IS LOADING THE GAME DATA FROM FILES. THIS // MEANS THE GUIS THEMSELVES AS WELL AS THE LEVELS. THAT WILL BE LEFT // FOR BECHMARK HWS. FOR NOW WE WILL JUST HARD CODE THE LOADING OF THE GUI // LOAD THE GUI STUFF, AGAIN, NOTE THAT THIS SHOULD REALLY // BE DONE FROM A FILE, NOT HARD CODED balloonEscapeDataLoader->loadGUI(balloonEscapeGame, W_GUI_INIT_FILE); // SPECIFY WHO WILL HANDLE BUTTON EVENTS BalloonEscapeButtonEventHandler *balloonEscapeButtonHandler = new BalloonEscapeButtonEventHandler(); GameGUI *gui = balloonEscapeGame->getGUI(); gui->registerButtonEventHandler((ButtonEventHandler*)balloonEscapeButtonHandler); // SPECIFY WHO WILL HANDLE KEY EVENTS BalloonEscapeKeyEventHandler *balloonEscapeKeyHandler = new BalloonEscapeKeyEventHandler(); balloonEscapeGame->getInput()->registerKeyHandler((KeyEventHandler*)balloonEscapeKeyHandler); // THIS WILL HANDLE PHYSICS COLLISION EVENTS BalloonEscapeCollisionListener *balloonEscapeCollisionListener = new BalloonEscapeCollisionListener(); balloonEscapeGame->getGSM()->getPhysics()->setCollisionListener(balloonEscapeCollisionListener); // START THE GAME LOOP balloonEscapeGame->runGameLoop(); // GAME'S OVER SHUTDOWN ALL THE STUFF WE CONSTRUCTED HERE delete (WindowsOS*)balloonEscapeGame->getOS(); delete (WindowsInput*)balloonEscapeGame->getInput(); delete (WindowsTimer*)balloonEscapeGame->getTimer(); delete (DirectXGraphics*)balloonEscapeGame->getGraphics(); delete (BalloonEscapeTextGenerator*)balloonEscapeGame->getText()->getTextGenerator(); delete balloonEscapeButtonHandler; delete balloonEscapeKeyHandler; delete balloonEscapeGame; // AND RETURN return 0; }
/* WinMain - This is the application's starting point. In this method we will construct a Game object, then initialize all the platform-dependent technologies, then construct all the custom data for our game, and then initialize the Game with our custom data. We'll then start the game loop. */ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // CREATE THE GAME Game *dummyGame = new Game(); // FIRST WE'LL SETUP THE DATA LOADER, SINCE IT MAY NEED TO READ // IN DATA TO SETUP OTHER STUFF GroupGameDataLoader *dummyDataLoader = new GroupGameDataLoader(); dummyDataLoader->initWinHandle(hInstance, nCmdShow); dummyGame->setDataLoader(dummyDataLoader); dummyDataLoader->loadGame(dummyGame, GG_INIT_FILE); // WHAT WE SHOULD BE DOING HERE IS LOADING THE GAME DATA FROM FILES. THIS // MEANS THE GUIS THEMSELVES AS WELL AS THE LEVELS. THAT WILL BE LEFT // FOR BECHMARK HWS. FOR NOW WE WILL JUST HARD CODE THE LOADING OF THE GUI // LOAD THE GUI STUFF, AGAIN, NOTE THAT THIS SHOULD REALLY // BE DONE FROM A FILE, NOT HARD CODED dummyDataLoader->loadGUI(dummyGame, L""); // SPECIFY WHO WILL HANDLE BUTTON EVENTS GroupGameButtonEventHandler *dummyButtonHandler = new GroupGameButtonEventHandler(); GameGUI *gui = dummyGame->getGUI(); gui->registerButtonEventHandler((ButtonEventHandler*)dummyButtonHandler); // SPECIFY WHO WILL HANDLE KEY EVENTS GroupGameKeyEventHandler *dummyKeyHandler = new GroupGameKeyEventHandler(); dummyGame->getInput()->registerKeyHandler((KeyEventHandler*)dummyKeyHandler); // START THE GAME LOOP dummyGame->runGameLoop(); // GAME'S OVER SHUTDOWN ALL THE STUFF WE CONSTRUCTED HERE delete (WindowsOS*)dummyGame->getOS(); delete (WindowsInput*)dummyGame->getInput(); delete (WindowsTimer*)dummyGame->getTimer(); delete (DirectXGraphics*)dummyGame->getGraphics(); delete (GroupGameTextGenerator*)dummyGame->getText()->getTextGenerator(); delete dummyButtonHandler; delete dummyKeyHandler; delete dummyGame; // AND RETURN return 0; }
/* WinMain - This is the application's starting point. In this method we will construct a Game object, then construct all the custom data for our game, and then initialize the Game with our custom data. We'll then start the game loop. */ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // USE WINDOWED MODE (ONE LESS HEADACHE) bool fullscreen = false; // CREATE A GAME file = ""; Game *worldRenderingGame = new Game(); // SPECIFY THE DIRECTORY WHERE ALL GAME DESIGN FILES // ARE TO BE LOADED FROM wchar_t *gameDataPathName = constructEmptyWCHAR_TArray(L"design/"); // WE'RE USING THE WINDOWS PLATFORM, SO MAKE A CUSTOM // GameOS OBJECT (WindowsGameOS), FOR SOME WINDOWS // PLATFORM STUFF, INCLUDING A Window OF COURSE wchar_t *gameTitle = constructEmptyWCHAR_TArray(L"World Scrolling Game"); WindowsGameOS *os = new WindowsGameOS( hInstance, nCmdShow, fullscreen, gameTitle, worldRenderingGame); // RENDERING WILL BE DONE USING DirectX DirectXGraphics *graphics = new DirectXGraphics(worldRenderingGame); graphics->init(); graphics->initGraphics(os->getWindowHandle(), fullscreen); graphics->initTextFont(22); // SOUND STUFF FROM XACT XactSound *sound= new XactSound(worldRenderingGame); sound->intiSound(); // WE'LL USE WINDOWS PLATFORM METHODS FOR GETTING INPUT WindowsGameInput *input = new WindowsGameInput(); // AND THE TIMER WindowsGameTimer *timer = new WindowsGameTimer(); // NOW INITIALIZE THE Game WITH ALL THE // PLATFORM AND GAME SPECIFIC DATA WE JUST CREATED worldRenderingGame->init( gameDataPathName, (GameGraphics*)graphics, (GameOS*)os, (GameInput*)input, (GameTimer*)timer); // LOAD OUR CUSTOM TEXT GENERATOR, WHICH DRAWS // TEXT ON THE SCREEN EACH FRAME WRTextGenerator *textGenerator = new WRTextGenerator(); textGenerator->initText(worldRenderingGame); worldRenderingGame->getText()->setTextGenerator((TextGenerator*)textGenerator); // LOAD THE GUI STUFF, NOTE THAT THIS SHOULD REALLY // BE DONE FROM A FILE, NOT HARD CODED initWRgui(worldRenderingGame); // SPECIFY WHO WILL HANDLE BUTTON EVENTS WRButtonEventHandler *eventHandler = new WRButtonEventHandler(); GameGUI *gui = worldRenderingGame->getGUI(); gui->registerButtonEventHandler((ButtonEventHandler*)eventHandler); // SPECIFY WHO WILL HANDLE KEY EVENTS WRKeyEventHandler *keyHandler = new WRKeyEventHandler(); input->registerKeyHandler((KeyEventHandler*)keyHandler); GameWorld *world = worldRenderingGame->getWorld(); dataloader = worldRenderingGame->getDataLoader(); // START THE GAME LOOP worldRenderingGame->runGameLoop(); return 0; }