///////////////////// // Draw Table Limits void TableClass::DrawLimits() { acquire_screen(); if(key[KEY_ESC]) Core.run = false; clear_to_color(Core.backBuffer, makecol(0,0,0)); rect(Core.backBuffer, 0, 0, SCREEN_W-1, SCREEN_H-1, makecol(255,255,255)); line(Core.backBuffer, SCREEN_W/2, 0, SCREEN_W/2, SCREEN_H-1, makecol(255,255,255)); draw_sprite(screen, Core.backBuffer, 0, 0); release_screen(); } /////////////// // Draw Paddle void PaddleClass::DrawPaddle() { acquire_screen(); rectfill(Core.backBuffer, p_x, p_temp_y, p_x + p_size_x, p_temp_y + p_size_y, makecol( 0, 0, 0)); rectfill(Core.backBuffer, p_x, p_y, p_x + p_size_x, p_y + p_size_y, makecol(255, 255, 255)); draw_sprite(screen, Core.backBuffer, 0, 0); release_screen(); } ///////////////// // Do Game Logic void CoreClass::DoGameLogic() { Paddle1.PaddleMove(true); Paddle2.PaddleMove(false); } /////////////// // Draw Screen void CoreClass::DrawScreen() { Table.DrawLimits(); Paddle1.DrawPaddle(); Paddle2.DrawPaddle(); } ///////////////// // Run Game Loop void CoreClass::RunGameLoop() { LOCK_VARIABLE(ticks); LOCK_FUNCTION(ticker); install_int_ex(ticker, BPS_TO_TIMER(60)); while (run) { while (ticks > 0) { DoGameLogic(); ticks--; refresh = true; firstRun = false; } if (refresh) DrawScreen(); } remove_int(ticker); }