diff --git a/CMakeLists.txt b/CMakeLists.txt index 7792dc5..775bad9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ add_executable(${ProjectName} ${SRC_FILES}) target_include_directories(${ProjectName} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) find_package(SFML 2.5 COMPONENTS system window graphics network audio REQUIRED) -target_link_libraries(${ProjectName} sfml-graphics) +target_link_libraries(${ProjectName} sfml-graphics sfml-audio) # Generates compile_commands.json in build folder, which clangd will pick up # Without this, clangd might assume the wrong C++ version diff --git a/res/game_over.wav b/res/game_over.wav new file mode 100644 index 0000000..a071dc3 Binary files /dev/null and b/res/game_over.wav differ diff --git a/res/level_up.wav b/res/level_up.wav new file mode 100644 index 0000000..9758683 Binary files /dev/null and b/res/level_up.wav differ diff --git a/res/new_highscore.wav b/res/new_highscore.wav new file mode 100644 index 0000000..cb32c29 Binary files /dev/null and b/res/new_highscore.wav differ diff --git a/res/rotate.wav b/res/rotate.wav new file mode 100644 index 0000000..08f2fc6 Binary files /dev/null and b/res/rotate.wav differ diff --git a/res/row_clear.wav b/res/row_clear.wav new file mode 100644 index 0000000..2400a9d Binary files /dev/null and b/res/row_clear.wav differ diff --git a/res/snap.wav b/res/snap.wav new file mode 100644 index 0000000..a8a7d82 Binary files /dev/null and b/res/snap.wav differ diff --git a/src/Main.cpp b/src/Main.cpp index 209f8d2..f85a9e0 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -1,4 +1,6 @@ - +#include +#include +#include #include #include #include @@ -346,6 +348,48 @@ int main() uint update_interval = get_update_interval(0); + // https://sfxr.me/#57uBnWWZeyDTsBRrJsAp2Vwd76cMVrdeRQ7DirNQW5XekKxcrCUNx47Zggh7Uqw4R5FdeUpyk362uhjWmpNHmqxE7JBp3EkxDxfJ1VjzMRpuSHieW6B5iyVFM + sf::SoundBuffer rotate_buffer; + rotate_buffer.loadFromFile("../res/rotate.wav"); + + sf::Sound rotate_sound; + rotate_sound.setBuffer(rotate_buffer); + + // https://sfxr.me/#57uBnWTMa2LUtaPa3P8xWZekiRxNwCPFWpRoPDVXDJM9KHkiGJcs6J62FRcjMY5oVNdT73MtmUf5rXCPvSZWL7AZuTRWWjKbPKTpZjT85AcZ6htUqTswkjksZ + sf::SoundBuffer snap_buffer; + snap_buffer.loadFromFile("../res/snap.wav"); + + sf::Sound snap_sound; + snap_sound.setBuffer(snap_buffer); + + // https://sfxr.me/#57uBnWbareN7MJJsWGD8eFCrqjikS9f8JXg8jvmKzMdVtqmRsb81eToSUpnkqgFhvxD2QoAjpw4SmGZHZjbhEiPQKetRSHCHXYFZzD7Q6RVVS9CRSeRAb6bZp + sf::SoundBuffer game_over_buffer; + game_over_buffer.loadFromFile("../res/game_over.wav"); + + sf::Sound game_over_sound; + game_over_sound.setBuffer(game_over_buffer); + + // https://sfxr.me/#7BMHBGMfGk8EHV8czJkUucUm8EMAnMNxiqYyTfKkMpHFJu44GEdD7xP6E8NM3K7RKRExTpagPBAiWf7BLtC52CEWJVGHh8hwDLygoEG86tcPth2UtmfdrXLoh + sf::SoundBuffer row_clear_buffer; + row_clear_buffer.loadFromFile("../res/row_clear.wav"); + + sf::Sound row_clear_sound; + row_clear_sound.setBuffer(row_clear_buffer); + + // https://sfxr.me/#57uBnWg8448kTPqWAxeDvZ5CP5JWbrfJGWuRcTjva5uX3vvBnEAZ6SfiH9oLKMXgsusuJwGWx6KPfvLfHtqnhLxr476ptGv4jPbfNhQaFMYeMHFdHk9SotQ4X + sf::SoundBuffer level_up_buffer; + level_up_buffer.loadFromFile("../res/level_up.wav"); + + sf::Sound level_up_sound; + level_up_sound.setBuffer(level_up_buffer); + + // https://sfxr.me/#34T6PkzvrkfdahGDBAh1uYGXTwZ8rG54kxfHpgdVCPxqG7yyK5UuqgiK9Z8Q5177itxbkSNfLSHm4zTkemT4iyxJpW89VJx82feaq8qxZeA5AJR2nWZZR59hq + sf::SoundBuffer new_highscore_buffer; + new_highscore_buffer.loadFromFile("../res/new_highscore.wav"); + + sf::Sound new_highscore_sound; + new_highscore_sound.setBuffer(new_highscore_buffer); + while (window.isOpen()) { sf::Event event; @@ -414,6 +458,7 @@ int main() } } rotate = false; + rotate_sound.play(); } // Horizontal movement @@ -452,6 +497,7 @@ int main() if (snap) { block.position.y += snap_offset; snap = false; + snap_sound.play(); } // Land checking @@ -509,6 +555,7 @@ int main() grid[y][x] = nullptr; } } + game_over_sound.play(); } else { tiles += block.get_tiles().size(); blocks++; @@ -553,17 +600,26 @@ int main() scored = POINTS_4_LINES; break; } - int level = get_level(lines); - scored *= level + 1; - score += scored; - lines += cleared_lines; - if (score > highscore) { - highscore = score; - std::ofstream highscore_file(highscore_file_path); - highscore_file << highscore; - highscore_file.close(); + if (scored > 0) { + int level = get_level(lines); + scored *= level + 1; + if (score + scored > highscore && score < highscore) { + new_highscore_sound.play(); + } + score += scored; + lines += cleared_lines; + if (level != get_level(lines)) { + level_up_sound.play(); + } + if (score > highscore) { + highscore = score; + std::ofstream highscore_file(highscore_file_path); + highscore_file << highscore; + highscore_file.close(); + } + update_interval = get_update_interval(level); + row_clear_sound.play(); } - update_interval = get_update_interval(level); } block = next_block; next_block = Block();