So far the game is a maze where you load the maze data from a text file and then you have to navigate to the goal. It will progress from there but I want to go over how I'm implementing it.
the Game Loop:
Level1= new Grid("data/Testlvl.txt",20,70);
max_fps=2; //TODO may need to incorporate a file load or mabye just play game from start to finish
int fcount=0; //frame counter
long long fps_sum=0LL; //sum of frame rate
long long start=milliseconds_now();
//intialise player speed
Level1->player->Velocity.x=40; //40 pixels per second
Level1->player->Velocity.y=40;
while(!done) //Game LOOOP!
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) //is there a message?
{ //peek will not halt program while it looks for a message
if(msg.message==WM_QUIT) // have we received a quit message?
{
done=TRUE;
}
else{ //if not deal with the window messages
TranslateMessage(&msg); //Translate the Message
DispatchMessage(&msg); //Dispatch the Message
}
}
else{ // if there are no messages
// Draw the Scene. Watch for ESC Key and Quit Messages From DrawGLScene()
if((active && !DrawGLScene())|| keys[VK_ESCAPE])
{
done=TRUE; // ESC Signalled a Quit
}
else{ //not time to quit, update screen
//drew scene in the if statement
while(FPS(start,milliseconds_now())>max_fps)
{/*wait*/}
if(fcount < 60)
{
fps_sum=fps_sum+FPS(start,milliseconds_now());
++fcount;
}
else
{
fps=fps_sum/fcount;
fcount=0;
fps_sum=0LL;
}
start=milliseconds_now();
SwapBuffers(hDC); //SwapBuffers (double buffering)
}
}
} if (!gameover && active) // If Game Isn't Over And Programs Active Move Objects
{
if (keys[VK_RIGHT])
{
Level1->MovePlayer(M_RIGHT);
}
if (keys[VK_LEFT])
{
Level1->MovePlayer(M_LEFT);
}
if (keys[VK_DOWN])
{
Level1->MovePlayer(M_DOWN);
}
if (keys[VK_UP])
{
Level1->MovePlayer(M_UP);
}
Level1->Step(start);// what happens next?
}
//outside of live play:
if(keys['A'] && !ap)
{
ap=TRUE;
max_fps++;
}
if (!keys['A']) // If 'A' Key Has Been Released
{
ap=FALSE; // ap Becomes FALSE
}
if(keys['Z'] && !zp && max_fps>2)
{
zp=TRUE;
max_fps--;
}
if (!keys['Z']) // If 'A' Key Has Been Released
{
zp=FALSE; // ap Becomes FALSE
}
//*********update scene****************
/// Beat first Level Snippet
if(Level1->player->isTouching(*Level1->goal))
levelend=true;
///end of snippet
}
So right now inorder to switch scenes in the game loop I set global flags to true and false ( good or bed way to do it) and the DrawGLScene() will check the flags and determine which scene to draw,
After declaring a few setup variables I move everything along via time, I even force a max frame rate so that i can control the FPS. (I did this starting out just because I could and now I'm thinking about turning the FPS into something like a reward system collect items increase the FPS makes for smooth gameplay)
All my classes are contained within the Grid Class, the Grid Class will contain a player and a List of objects (coins enemies and such all will inherit the MObject class which has a bunch of virtual functions so I can iterate through the list and call Step() and Draw() functions. Step basically updates all the objects positions and other such statuses given that point in time. everything goes through Grid so when the user enters any key commands the Grid can determine what information flows to what objects it's managing. I keep most things public right now but I hope to eventually makes the objects private and get implement public functions to keep things from getting confuzzled.
so kind of breaking it down to the flow so far psuedo codeish:
GameLoop: DrawScene: [chooses what scene to draw based on flags] assuming game is running Draw header() Grid->Draw() Draws grid Draws Players Draws Goal todo: draw enemies todo: draw items Isgamerunning? Check for input Move player, enemies Step grid.Step() update animated items, players enemies, Are game changingg conditions met progress game
I'd really appreciate constructive criticism and how to make it better, methods to keep things organized, what your own ways to coding the loop are.
I hope my post makes some sense too

Find content
Not Telling