add sounds, finish main game, add new textures, add tetromino preview, fix some bugs
This commit is contained in:
63
src/Game.cpp
63
src/Game.cpp
@@ -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( ));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user