The game loop is remarkably simple once you "get" it.
int delta = 0;
delta = calculateDelta();
So this is the basic structure of a simple game. So now I'll go through it step by step.
Before you enter into the game loop, you want to initialize everything. This means create your window, load your graphics, sounds, levels etc.
Then we enter into the loop which will continue to run until the user presses exit. NB, one "frame," is one iteration of this loop. The first thing you do is calculate the delta.
Delta in sciences means "change in" and in this context we mean change in time, as in the difference between the time at the start of the previous frame and the start of this frame. The reason we use this is to make sure the game runs at the same rate no matter how long individual frames take to "do." This will become clearer later on if you don't understand.
Next we "update." Call this what you want all it means is "do game logic." In this part, you calculate new positions of objects that are moving, you calculate what has hit what (aka collisions detection), you calculate who's dead and who killed them etc. This is where delta comes in. If you have a ball moving at 5 pixels per second, you need to know how many seconds have passed by to work out how many pixels it has actually moved. That's basics right? Yet it always takes a while to sink in. The last thing you have to do here is see if the player wants to exit and break the loop if so.
Then we "render". In this bit you take everything you calculated in update (who is where and how much blood is around) and draw it in your window so that the player(s) can actually see whats going on.This bit is really as complex as you need it to be and can be anything under the sun. (Sun as in Sun Microsystems)
The last bit of the loop is syncing. It is really necessary but makes sure your game doesn't consume all the cpu time and battery power. Say you want your game to run at 60 frames per second. What happens if an iteration of the loop takes less time than 1 / 60 seconds? You need to wait a little which is all the sync does. If your using LWJGL, then there is a special little function that does this for you.
And after all this you tear down your program and release any resources you may have had.
P.S. There's nothing more "advanced" than "simple" programs. (I kid, I know what you mean).