Super SEGD World Main Game Loop

Written primarily in C++ (utilising C elements) this is the main game loop of my Super Mario World Clone, created for the second assignment of 2D Games Programming.

//Super Segd World
//Game.cpp
//Main Program

#include "DXHandle.h"
#include "Background.h"
#include "Player.h"
#include "Enemy.h"
#include "Controls.h"
#include "Items.h"
#include "HUD.h"
#include "GameStates.h"
#include "TitleScreen.h"

//title of app
const string APPTITLE = "Super Segd World";

//Game Initialisation
bool Game_Init(HWND window)
{

 //set random number seed
 srand(time(NULL));

 //Initialise Direct 3D for use, return error message if something goes wrong
 if (!Direct3D_Init(window, SCREENW, SCREENH, false))
 {
  MessageBox(0, "Error initialising Direct3D", "Error", 0);
  return false;
 }

 //Initialise Direct Input for use, return error message if something goes wrong
 if (!DirectInput_Init(window))
 {
  MessageBox(0, "Error initialising DirectInput", "Error", 0);
  return false;
 }

 //Initialise Direct Sound for use, return error message if something goes wrong
 if (!Init_DirectSound(window))
 {
  MessageBox(0, "Error initialising DirectSound", "Error", 0);
  return false;
 }

 //load sprite textures 
 loadStartScreen();

 //-----------------------------------------------------MARIO
 Mario_obj = LoadTexture("marioimage.png", bgcolour);
 errorWithLoad("marioimage.png", Mario_obj);

 //-----------------------------------------------------ITEMS
 ItemBlock_obj = LoadTexture("itemblock.png", bgcolour);
 errorWithLoad("itemblock.png", ItemBlock_obj);

 CoinBlock_obj = LoadTexture("coinblock.png", bgcolour);  //also used for plain block
 errorWithLoad("coinblock.png", CoinBlock_obj);

 Items_obj = LoadTexture("items.png", bgcolour);
 errorWithLoad("items.png", Items_obj);

 Coins_obj = LoadTexture("coin.png", bgcolour);
 errorWithLoad("coin.png", Coins_obj);

 GoalPosts_obj = LoadTexture("goalposts.png", bgcolour);
 errorWithLoad("goalposts.png", GoalPosts_obj);

 GoalBar_obj = LoadTexture("goalbar.png", bgcolour);
 errorWithLoad("goalbar.png", GoalBar_obj);

 Fireball_obj = LoadTexture("fireball.png", bgcolour);
 errorWithLoad("fireball.png", Fireball_obj);

 //---------------------------------------------------ENEMIES
 RedShell_obj = LoadTexture("spinredshell.png", bgcolour);
 errorWithLoad("spinredshell.png", RedShell_obj);

 RedTurtle_obj = LoadTexture("redturtle.png", bgcolour);
 errorWithLoad("returtle.png", RedTurtle_obj);

 Thwomp_obj = LoadTexture("thwomp.png", bgcolour);
 errorWithLoad("thwomp.png", Thwomp_obj);

 BulletBill_obj = LoadTexture("bulletbill.png", bgcolour);
 errorWithLoad("bulletbill.png", BulletBill_obj);

 ReznorBackground_obj = LoadTexture("reznorbackground.png", bgcolour);
 errorWithLoad("reznorbackground.png", ReznorBackground_obj);

 ReznorPlatform_obj = LoadTexture("reznorplatform.png", bgcolour);
 errorWithLoad("reznorplatform.png", ReznorPlatform_obj);

 Reznor_obj = LoadTexture("reznor.png", bgcolour);
 errorWithLoad("reznor.png", Reznor_obj);

 ReznorFireball_obj = LoadTexture("reznorfireball.png", bgcolour);
 errorWithLoad("reznor.png", ReznorFireball_obj);

 //-------------------------------------------------------HUD
 HUD_obj = LoadTexture("huddisplay.png", bgcolour);
 errorWithLoad("huddisplay.png", HUD_obj);

 ItemBoxHUD_obj = LoadTexture("iteminbox_hud.png", bgcolour);
 errorWithLoad("iteminbox_hud.png", ItemBoxHUD_obj);



 //set properties for sprites
 //-----------------------------------------------------MARIO
 Mario.setValues(10, 465, 7, 16, 40, 60, 7, 15, 0, 2, 2, 1, 1, health1, 0);
 createMarioRect();

 //-------------------------------------------------------HUD
 createHUDvalues();

 //-----------------------------------------------------ITEMS
 createItemBlocks();
 createItems();
 createCoinBlocks();
 createPlainBlocks();
 createCoinsForCoinBlocks();
 createCoinsForPlainBlocks();
 createGoalPosts();

 //---------------------------------------------------ENEMIES
 createRedShells();
 createRedTurtles();
 createThwomps();
 createBulletBills();
 createReznor();

 //load background image
 buildBackground();

 //music
 loadmusic();

 //get the back buffer surface
 d3ddev->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &backbuffer);

 return true;
}

//Game Update
void Game_Run(HWND window)
{
 //run gamestates
 startGame();

 //display back buffer on the screen
 d3ddev->Present(NULL, NULL, NULL, NULL);
 
 //escape key exits
 if (Key_Down(DIK_ESCAPE))
  gameover = true;

 //controller back button also exits
 if (controllers[0].wButtons & XINPUT_GAMEPAD_BACK)
  gameover = true;
}

//Game Shutdown
void Game_End()
{
 //free memory and shut down
 HUDShutdown();
 enemyObjShutdown();
 itemObjShutdown();
 playerObjShutdown();
 backgroundShutdown();
 DirectInput_Shutdown();
 Direct3D_Shutdown();
}