@@ -29,11 +29,15 @@ void tag_puzzle::field_init() {
2929
3030 bits[null_index] = 0 ;
3131
32+ timer.restart ();
33+
3234 srand (time (0 ));
3335 for (int i{0 }; i < 500 ; i++) this ->move_bit ((Direction)(rand () % 4 ));
3436}
3537
3638void tag_puzzle::move_bit (Direction step) {
39+ if (timer.getElapsedTime ().asSeconds () > 1 ) if (is_win ()) return ;
40+
3741 int row = null_index / 4 ;
3842 int collumn = null_index % 4 ;
3943
@@ -106,4 +110,44 @@ void tag_puzzle::draw(sf::RenderTarget &target, sf::RenderStates states) const {
106110 target.draw (bit_num, states);
107111 target.draw (bit, states);
108112 }
113+
114+ for (int i{0 }; i < 15 ; i++){
115+ if (bits[i] != i + 1 ) return ;
116+ }
117+
118+ sf::RectangleShape win_place;
119+ win_place.setSize (sf::Vector2f (300 , 200 ));
120+ win_place.setFillColor (sf::Color::Red);
121+ win_place.setPosition (sf::Vector2f (130 , 175 ));
122+ win_place.setOutlineThickness (5 .f );
123+ win_place.setOutlineColor (sf::Color::White);
124+
125+ target.draw (win_place, states);
126+
127+ bit_num.setString (" You WIN!" );
128+ bit_num.setCharacterSize (48 );
129+ bit_num.setFillColor (sf::Color::White);
130+ bit_num.setPosition (sf::Vector2f (170 , 200 ));
131+
132+ target.draw (bit_num, states);
133+
134+ bit_num.setString (std::to_string (((int )(((int )timer.getElapsedTime ().asSeconds ()) / 60 ))) + " : " + std::to_string (((int )(((int )timer.getElapsedTime ().asSeconds ()) % 60 ))));
135+ bit_num.setCharacterSize (48 );
136+ bit_num.setPosition (sf::Vector2f (208 , 260 ));
137+
138+ target.draw (bit_num, states);
139+
140+ bit_num.setString (" Press F2 to restart & ESC to exit" );
141+ bit_num.setCharacterSize (14 );
142+ bit_num.setPosition (sf::Vector2f (150 , 330 ));
143+
144+ target.draw (bit_num, states);
145+ }
146+
147+ bool tag_puzzle::is_win () {
148+ for (int i{0 }; i < 15 ; i++){
149+ if (bits[i] != i + 1 ) return false ;
150+ }
151+
152+ return true ;
109153}
0 commit comments