add sounds, finish main game, add new textures, add tetromino preview, fix some bugs

This commit is contained in:
Rene Kievits
2024-10-15 05:14:41 +02:00
parent 24c8c3fe2c
commit f19f183686
21 changed files with 279 additions and 47 deletions

View File

@@ -11,7 +11,7 @@ bool Game::init(const char* title, int w, int h) {
title,
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
w, h,
SDL_WINDOW_SHOWN | SDL_WINDOW_VULKAN | SDL_WINDOW_RESIZABLE
SDL_WINDOW_SHOWN | SDL_WINDOW_VULKAN
));
if (!window) {
@@ -19,8 +19,6 @@ bool Game::init(const char* title, int w, int h) {
return false;
}
SDL_SetWindowMinimumSize(window.get( ), 800, 650);
renderer = std::shared_ptr<SDL_Renderer>(
SDL_CreateRenderer(window.get( ), -1, SDL_RENDERER_ACCELERATED),
[ ](SDL_Renderer* r) { SDL_DestroyRenderer(r); }
@@ -69,15 +67,24 @@ void Game::run( ) {
gameOver = true;
Mix_PauseMusic( );
Mix_Chunk* rotateSound = Mix_LoadWAV("assets/sound_effects/game_over.wav");
if (rotateSound == nullptr)
SDL_Log("Failed to play rotate sound effect: %s", Mix_GetError( ));
else {
Mix_PlayChannel(-1, rotateSound, 0);
}
while (gameOver) {
if (quit) return;
inputHandler( );
gameRenderer->renderGameOver(gameBoard->getScore( ), gameBoard->getLevel( ));
render( );
gameRenderer->renderGameOver(gameBoard->getScore( ), gameBoard->getLevel( ), gameBoard->getLines( ));
}
}
void Game::inputHandler( ) {
SDL_Event event;
Mix_Chunk* movePieceSound = Mix_LoadWAV("assets/sound_effects/move_piece.wav");
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
SDL_Quit( );
@@ -87,10 +94,20 @@ void Game::inputHandler( ) {
case SDLK_LEFT:
case SDLK_a:
gameBoard->tryMoveCurrentTetromino(-1, 0);
if (movePieceSound == nullptr)
SDL_Log("Failed to play rotate sound effect: %s", Mix_GetError( ));
else {
Mix_PlayChannel(-1, movePieceSound, 0);
}
break;
case SDLK_RIGHT:
case SDLK_d:
gameBoard->tryMoveCurrentTetromino(1, 0);
if (movePieceSound == nullptr)
SDL_Log("Failed to play rotate sound effect: %s", Mix_GetError( ));
else {
Mix_PlayChannel(-1, movePieceSound, 0);
}
break;
case SDLK_DOWN:
case SDLK_s:
@@ -102,8 +119,15 @@ void Game::inputHandler( ) {
case SDLK_ESCAPE:
break;
case SDLK_g:
if (startSequence)
if (startSequence) {
startSequence = false;
Mix_Chunk* menuSound = Mix_LoadWAV("assets/sound_effects/menu.wav");
if (menuSound == nullptr)
SDL_Log("Failed to play rotate sound effect: %s", Mix_GetError( ));
else {
Mix_PlayChannel(-1, menuSound, 0);
}
}
break;
case SDLK_r:
if (isGameOver( ))
@@ -112,10 +136,38 @@ void Game::inputHandler( ) {
case SDLK_q:
SDL_Quit( );
quit = true;
case SDLK_EQUALS:
SDL_Log("Test %d", Mix_GetMusicVolume(bgm.get( )));
Mix_VolumeMusic(Mix_GetMusicVolume(bgm.get( )) + 8);
break;
case SDLK_MINUS:
SDL_Log("Test %d", Mix_GetMusicVolume(bgm.get( )));
Mix_VolumeMusic(Mix_GetMusicVolume(bgm.get( )) - 8);
break;
case SDLK_m:
if (Mix_PausedMusic( ))
Mix_ResumeMusic( );
else
Mix_PauseMusic( );
break;
default:
break;
}
} else if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_RESIZED) {
int TARGET_ASPECT_RATIO = 3 / 4;
int newHeight = event.window.data2, newWidth = event.window.data1;
float newAspectRatio = static_cast<float>(newWidth) / newHeight;
if (newAspectRatio > TARGET_ASPECT_RATIO)
newWidth = static_cast<int>(newHeight * TARGET_ASPECT_RATIO);
else
newHeight = static_cast<int>(newWidth / TARGET_ASPECT_RATIO);
SDL_SetWindowSize(window.get( ), newWidth, newHeight);
handleWindowResize( );
}
}
@@ -150,6 +202,7 @@ void Game::render( ) {
SDL_RenderClear(renderer.get( ));
gameRenderer->renderBoard(*gameBoard);
gameRenderer->renderTetrominoPreview(gameBoard->getNextTetromino( ));
SDL_RenderPresent(renderer.get( ));
}