@ -1,7 +1,6 @@
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				# include  "game.h" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				# include  "start_screen.h" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				# include  "game_screen.h" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				# include  "result_screen.h" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				using  std : : string ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				using  std : : map ; 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -14,31 +13,12 @@ Game::Game() {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				void  Game : : init ( )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					score  =  0 ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					state  =  Start ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					sprites . insert ( pair < string ,  ALLEGRO_BITMAP * > ( " Title " ,  al_load_bitmap ( " logo.bmp " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					sprites . insert ( pair < string ,  ALLEGRO_BITMAP * > ( " Mr. Man " ,  al_load_bitmap ( " MrMan.bmp " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					sprites . insert ( pair < string ,  ALLEGRO_BITMAP * > ( " Mr. Manager " ,  al_load_bitmap ( " BigMrManager.bmp " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					sprites . insert ( pair < string ,  ALLEGRO_BITMAP * > ( " Mr. ManagerSad " ,  al_load_bitmap ( " mrmanagersad.bmp " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					sprites . insert ( pair < string ,  ALLEGRO_BITMAP * > ( " Mr. ManagerHappy " ,  al_load_bitmap ( " mrmanagerhappy.bmp " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					sprites . insert ( pair < string ,  ALLEGRO_BITMAP * > ( " KeyUp " ,  al_load_bitmap ( " small_key_up.bmp " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					sprites . insert ( pair < string ,  ALLEGRO_BITMAP * > ( " Spacebar " ,  al_load_bitmap ( " spacebar.bmp " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					sprites . insert ( pair < string ,  ALLEGRO_BITMAP * > ( " Employee " ,  al_load_bitmap ( " employee.bmp " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					sprites . insert ( pair < string ,  ALLEGRO_BITMAP * > ( " EmployeeHappy " ,  al_load_bitmap ( " employee_happy.bmp " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					sprites . insert ( pair < string ,  ALLEGRO_BITMAP * > ( " EmployeeSad " ,  al_load_bitmap ( " employee_sad.bmp " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					sprites . insert ( pair < string ,  ALLEGRO_BITMAP * > ( " Conveyor " ,  al_load_bitmap ( " conveyor.bmp " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					sprites . insert ( pair < string ,  ALLEGRO_BITMAP * > ( " KeyCtrl " ,  al_load_bitmap ( " small_key_ctrl.bmp " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					sprites . insert ( pair < string ,  ALLEGRO_BITMAP * > ( " KeyH " ,  al_load_bitmap ( " small_key_h.bmp " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					sprites . insert ( pair < string ,  ALLEGRO_BITMAP * > ( " KeyM " ,  al_load_bitmap ( " small_key_m.bmp " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					sprites . insert ( pair < string ,  ALLEGRO_BITMAP * > ( " KeyEsc " ,  al_load_bitmap ( " small_key_esc.bmp " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					sprites . insert ( pair < string ,  ALLEGRO_BITMAP * > ( " MusicOn " ,  al_load_bitmap ( " music_on.bmp " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					sprites . insert ( pair < string ,  ALLEGRO_BITMAP * > ( " MusicOff " ,  al_load_bitmap ( " music_off.bmp " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					//sprites.insert(pair<string, ALLEGRO_BITMAP*>("Title", al_load_bitmap("logo.bmp")));
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					//al_reserve_samples(4);
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					//samples.insert(pair<string, ALLEGRO_SAMPLE*>("Theme", al_load_sample("rasputin.wav")));
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					al_reserve_samples ( 4 ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					samples . insert ( pair < string ,  ALLEGRO_SAMPLE * > ( " Theme " ,  al_load_sample ( " rasputin.wav " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					samples . insert ( pair < string ,  ALLEGRO_SAMPLE * > ( " Move " ,  al_load_sample ( " move.wav " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					samples . insert ( pair < string ,  ALLEGRO_SAMPLE * > ( " Catch " ,  al_load_sample ( " catch.wav " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					samples . insert ( pair < string ,  ALLEGRO_SAMPLE * > ( " Fall " ,  al_load_sample ( " fall.wav " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					samples . insert ( pair < string ,  ALLEGRO_SAMPLE * > ( " Place " ,  al_load_sample ( " place.wav " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					samples . insert ( pair < string ,  ALLEGRO_SAMPLE * > ( " LevelUp " ,  al_load_sample ( " level.wav " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					font  =  al_create_builtin_font ( ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -50,56 +30,7 @@ void Game::reset() {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				//Run the game state machine
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				void  Game : : run ( )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					//Load screens
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					int  difficulty  =  1 ;  //Difficulty to run
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					bool  EXTREME_ON  =  false ;  //Flag for EXTREME easter egg
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					while  ( state  ! =  Exit )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						al_clear_to_color ( al_map_rgb ( 0 ,  0 ,  0 ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						switch  ( state )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						case  Start : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							start_screen . run ( font ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							if  ( start_screen . next_state  = =  EXTREME )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
								EXTREME_ON  =  true ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
								state  =  Hard ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							else  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
								state  =  start_screen . next_state ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							break ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							//The same set of code will be run for any difficulty state
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						case  Easy : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						case  Medium : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						case  Hard : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							//But we need to check once here whether the difficulty value needs to be adjusted
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							switch  ( state )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							case  Medium : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
								difficulty  =  3 ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
								result_screen . prev_state  =  Medium ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
								break ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							case  Hard : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
								difficulty  =  5 ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
								result_screen . prev_state  =  Hard ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
								break ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							if  ( EXTREME_ON )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
								game_screen . reset ( 5 ,  5 ,  difficulty ) ;  //If the EXTREME easter egg is enabled, the game will be run with 5 lines on hard mode
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							else  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
								game_screen . reset ( 3 ,  5 ,  difficulty ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							EXTREME_ON  =  false ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							game_screen . run ( font ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							state  =  game_screen . next_state ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							break ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						case  End : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							//Send proper finishing values for this game to the result screen
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							result_screen . score  =  game_screen . score ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							result_screen . difficulty  =  game_screen . difficulty ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							result_screen . run ( font ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							state  =  result_screen . next_state ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							break ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					//Garbage collection
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					map < string ,  ALLEGRO_BITMAP * > : : iterator  it ;