From 7f011067ca34c1c78bc4b42a820ca3b66420a2b3 Mon Sep 17 00:00:00 2001 From: Crylia Date: Wed, 16 Oct 2024 15:00:43 +0200 Subject: [PATCH] fix compile error --- .devcontainer/devcontainer.json | 17 ++++++++++++++++ CMakeLists.txt | 21 ++++++++++++++++---- Dockerfile.linux | 32 ++++++++++++++++++++++++++++++ docker-compose.yml | 35 +++++++++++++++++++++++++++++++++ src/Game.cpp | 6 ++++-- src/GameBoard.cpp | 2 +- src/Renderer.cpp | 5 +++-- src/Renderer.hpp | 2 +- 8 files changed, 110 insertions(+), 10 deletions(-) create mode 100644 .devcontainer/devcontainer.json create mode 100644 Dockerfile.linux create mode 100644 docker-compose.yml diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..6bd17ff --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,17 @@ +{ + "name": "Linux Development", + "dockerFile": "Dockerfile.linux", + "context": "..", + "customizations": { + "vscode": { + "settings": { + "CMake.configureOnOpen": true + }, + "extensions": [ + "ms-vscode.cmake-tools", + "ms-vscode.cpptools" + ] + } + }, + "postCreateCommand": "cmake . && make" +} diff --git a/CMakeLists.txt b/CMakeLists.txt index 0cfc851..3c2dcc4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,25 +2,32 @@ cmake_minimum_required(VERSION 3.5) project(SDL_TD VERSION 0.1 LANGUAGES CXX) +# Find SDL2 find_package(SDL2 QUIET) +find_package(SDL2_mixer REQUIRED) +# Set SDL include directories and libraries set(SDL_INCLUDE_DIRS ${SDL2_INCLUDE_DIRS}) set(SDL_LIBRARIES ${SDL2_LIBRARIES}) +# Find SDL2_mixer, SDL2_image, and SDL2_ttf find_library(SDL_MIXER_LIBRARY NAMES SDL2_mixer) find_library(SDL_IMAGE_LIBRARY NAMES SDL2_image) find_library(SDL_TTF_LIBRARY NAMES SDL2_ttf) include_directories(${SDL_INCLUDE_DIRS}) +# Gather source and header files file(GLOB_RECURSE PROJECT_SOURCES src/*.cpp) file(GLOB_RECURSE PROJECT_HEADERS src/*.hpp) +# Create executable add_executable(SDL_TD ${PROJECT_SOURCES} ${PROJECT_HEADERS} ) +# Link libraries target_link_libraries(SDL_TD ${SDL_LIBRARIES} ${SDL_MIXER_LIBRARY} @@ -29,10 +36,16 @@ target_link_libraries(SDL_TD fmt ) -file(GLOB ASSETS - "assets/*" -) - +file(GLOB ASSETS "assets/*") foreach(ASSET ${ASSETS}) file(COPY ${ASSET} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/assets) endforeach() + +if(WIN32) + target_compile_definitions(SDL_TD PRIVATE + WIN32_LEAN_AND_MEAN + NOMINMAX + ) + + target_link_libraries(SDL_TD ws2_32) +endif() diff --git a/Dockerfile.linux b/Dockerfile.linux new file mode 100644 index 0000000..53d19db --- /dev/null +++ b/Dockerfile.linux @@ -0,0 +1,32 @@ +FROM ubuntu:latest + +ENV DEBIAN_FRONTEND=noninteractive + +# Install dependencies +RUN apt-get update && apt-get install -y \ + build-essential \ + cmake \ + ninja-build \ + libsdl2-dev \ + libsdl2-image-dev \ + libsdl2-mixer-dev \ + libsdl2-ttf-dev \ + libfmt-dev \ + libx11-dev \ + x11-xserver-utils \ + pulseaudio \ + mesa-utils \ + wget \ + unzip + +# Set the working directory +WORKDIR /app + +# Copy your source code into the container +COPY . . + +# Build the application +RUN cmake . && make + +# Command to run your application (optional) +CMD ["./SDL_TD"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..bdfec4c --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,35 @@ +services: + linux-build: + build: + context: . + dockerfile: Dockerfile.linux + volumes: + - .:/project + working_dir: /project + command: > + /bin/bash -c "cmake -B build && cmake --build build" + + linux-run: + build: + context: . + dockerfile: Dockerfile.linux + depends_on: + - linux-build + volumes: + - .:/project + - /tmp/.X11-unix:/tmp/.X11-unix + - ${XDG_RUNTIME_DIR}/pulse/native:${XDG_RUNTIME_DIR}/pulse/native + working_dir: /project/build + environment: + - DISPLAY=${DISPLAY} + - QT_X11_NO_MITSHM=1 + - PULSE_SERVER=unix:${XDG_RUNTIME_DIR}/pulse/native + devices: + - /dev/snd:/dev/snd + - /dev/dri:/dev/dri + ipc: host + shm_size: '512m' + command: > + /bin/bash -c "./SDL_TD" + + diff --git a/src/Game.cpp b/src/Game.cpp index f3bd96f..f045617 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -7,7 +7,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_SHOWN )); if (!window) { @@ -74,8 +74,10 @@ void Game::run( ) { while (gameState.gameover) { if (gameState.quit) return; + SDL_SetRenderDrawColor(renderer.get( ), 248, 248, 248, 255); + SDL_RenderClear(renderer.get( )); inputHandler( ); - gameRenderer->renderGameOver(gameBoard->getWidth( ), gameBoard->getHeight( )); + gameRenderer->renderGameOver(gameBoard); } } diff --git a/src/GameBoard.cpp b/src/GameBoard.cpp index 464a14d..36ae544 100644 --- a/src/GameBoard.cpp +++ b/src/GameBoard.cpp @@ -7,7 +7,7 @@ GameBoard::GameBoard( ) } bool GameBoard::tryMoveCurrentTetromino(int dx, int dy) { - if (!currentTetromino) return; + if (!currentTetromino) return false; currentTetromino->move(dx, dy); if (checkCollision(*currentTetromino)) { currentTetromino->move(-dx, -dy); diff --git a/src/Renderer.cpp b/src/Renderer.cpp index 0b4e82a..57c1fb7 100644 --- a/src/Renderer.cpp +++ b/src/Renderer.cpp @@ -235,9 +235,10 @@ void Renderer::renderStartScreen( ) { SDL_RenderPresent(renderer.get( )); } -void Renderer::renderGameOver(int gbWidth, int gbHeight) { +void Renderer::renderGameOver(const shared_ptr gameBoard) { //Needed to draw the Walls again - drawWall(gbWidth, gbHeight); + drawWall(gameBoard->getWidth( ), gameBoard->getHeight( )); + drawScoreboard(gameBoard->getScore( ), gameBoard->getLevel( ), gameBoard->getLines( )); auto gameOver = unique_ptr(IMG_Load("assets/sprites/game_over.png"), SDL_FreeSurface); diff --git a/src/Renderer.hpp b/src/Renderer.hpp index 2011de9..ebfe0e8 100644 --- a/src/Renderer.hpp +++ b/src/Renderer.hpp @@ -77,7 +77,7 @@ public: void renderBoard(const shared_ptr gameBoard); void renderStartScreen( ); - void renderGameOver(int gbWidth, int gbHeight); + void renderGameOver(shared_ptr gameBoard); const TextDimensions renderText( const string& text, int x, int y, int fontSize, SDL_Color color, HAlign textHAlign = HAlign::LEFT, VAlign textVAlign = VAlign::TOP