int main(void) { _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); sf::RenderWindow window(sf::VideoMode (600,400), "ComboPuzzle"); window.setFramerateLimit(150); sf::RenderStates state; sf:: Color lightblue(230,230,250,0); TimedResourceHolder timed_resources; sf::FloatRect reset_bounds = timed_resources.reset_button.getGlobalBounds(); sf::FloatRect menu_bounds = timed_resources.menu_button.getGlobalBounds(); sf::Clock clock; sf:: Time time; Blocktree mainTree; MainMenu mainmenu; while (window.isOpen()) //Main Loop, while the game is running this loop is occuring { sf::Event event; while(mainmenu.gamestatus != 1 && window.isOpen()){ //This loop is the main menu loop. Mainmenu.gamestatus represents what gets rendered. while(window.pollEvent(event)){ //This sub-loop only occurs when gamestatus != 1, i.e. we haven't clicked start. if (event.type == sf::Event::Closed ) window.close(); if (event.type == sf::Event::MouseButtonPressed) mainmenu.clickOccur(window); } window.clear(lightblue); mainmenu.drawScreen(window); mainTree.drop_clock.restart(); mainTree.timerClock.restart(); window.display(); } // everything below is timed puzzle game time = clock.restart(); timed_resources.changeScore(mainTree.score); while(window.pollEvent(event)) //checks to see if any event has occured. various functions are executed depending on the event below. { if (event.type == sf::Event::Closed ) window.close(); if(event.type == sf::Event::MouseButtonPressed && mainTree.is_game_over() != true) if(sf::Keyboard::isKeyPressed(sf::Keyboard::R) || sf::Keyboard::isKeyPressed(sf::Keyboard::C)){ //executes clickOccur_clear which checks the rows/columns and erases them. if(mainTree.clickOccur_clear(window,reset_bounds, menu_bounds, mainmenu)){ timed_resources.changeComboUpdate(mainTree.combo_count-1); timed_resources.changeScoreUpdate(mainTree.last_score); } } else { if(sf::Mouse::isButtonPressed(sf::Mouse::Left)){ int id_to_swap = mainTree.clickOccur_swap(window,reset_bounds, menu_bounds, mainmenu); // this branch is for swapping. int id_to_swap2; while (sf::Mouse::isButtonPressed(sf::Mouse::Left)){ time = clock.restart(); timed_resources.changeScore(mainTree.score); timed_resources.changeDropTime(mainTree.updateGame_blocks(time)); // a compact version of the larger loop with rendering and updating window.clear(lightblue); // occurs when the mouse is held down. mainTree.drawTree(window, state); timed_resources.drawAll(window,state,mainTree); id_to_swap2 = mainTree.clickOccur_swap(window,reset_bounds, menu_bounds, mainmenu); if (mainTree.is_game_over() == true) goto ifGameEnds; if(id_to_swap == -2 || id_to_swap2 == -2){ clock.restart(); } else if (id_to_swap >-1 && id_to_swap2 >-1) mainTree.draw_select(id_to_swap,id_to_swap2,window,state); // the blocks that are being clicked on render their selected sprites timed_resources.changeComboUpdate(mainTree.combo_count-1); window.display(); if (mainmenu.gamestatus == 0) break; } if(mainTree.swap_colours(id_to_swap,id_to_swap2) == 0) //colour swap occurs once the mouse button has been let go of timed_resources.gamestatus_changeString("Invalid Swap!"); else timed_resources.gamestatus_changeString(""); timed_resources.changeComboUpdate(mainTree.combo_count-1); } } if (event.type == sf::Event::MouseButtonPressed && mainTree.is_game_over() == true){ if(mainTree.gameover_reset(window,reset_bounds,menu_bounds,mainmenu)); timed_resources.gamestatus_changeString(""); } } ifGameEnds: timed_resources.changeDropTime(mainTree.updateGame_blocks(time)); //rendering occurs, updates occur. window.clear(lightblue); mainTree.drawTree(window, state); timed_resources.changeComboUpdate(mainTree.combo_count-1); timed_resources.drawAll(window,state,mainTree); if (mainTree.is_game_over() == true){ //records the high score if it hasn't been recorded yet and the game is over if(mainTree.highScore_recorded == false){ if(timed_resources.write_highScore()) mainTree.highScore_recorded =true; } if(mainTree.highScore_recorded == false) timed_resources.gamestatus_changeString("You lost!\n Click reset\n to start again\n High Score\n Error!"); else timed_resources.gamestatus_changeString("You lost!\n Click reset\n to start again\n High Score\n Recorded!"); mainTree.drop_clock.restart(); window.display(); } else{ window.display(); } } }