From 2b9a9b778173022b27aa3becb695f2d94a274ac3 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Sun, 9 Feb 2025 23:54:50 +0100 Subject: [PATCH] fix: no more compile warnings --- COMPILE.txt | 6 +++++- TEST.txt | 2 +- adventura | Bin 243112 -> 244328 bytes block.hpp | 32 ++++++++++++++++---------------- blockPos.hpp | 30 ++++++++++++++++++++---------- blockRegistry.hpp | 2 +- blockSettings.hpp | 2 +- color.hpp | 4 ++-- fileUtils.hpp | 8 ++++---- identifier.hpp | 16 +++++++--------- main.cpp | 17 +++++++++-------- movementHandler.hpp | 24 ++++++++++++------------ output.hpp | 14 +++++++------- player.hpp | 40 ++++++++++++++++++++-------------------- world.hpp | 12 ++++++------ 15 files changed, 111 insertions(+), 98 deletions(-) diff --git a/COMPILE.txt b/COMPILE.txt index 174c397..29720f1 100644 --- a/COMPILE.txt +++ b/COMPILE.txt @@ -1 +1,5 @@ -g++ -std=c++23 -Wall ./main.cpp -o ./adventura && ./adventura \ No newline at end of file +g++ -std=c++23 -Wall main.cpp -o adventura +ODER +clang++ -std=c++23 -Weverything -Wno-c++98-compat -Wno-padded -Wall main.cpp -o adventura + +Ausführen mit: ./adventura \ No newline at end of file diff --git a/TEST.txt b/TEST.txt index 622a721..e3bd3ea 100644 --- a/TEST.txt +++ b/TEST.txt @@ -1,4 +1,4 @@ -Für einen automatisierten Test, führe das Programm mit dem Argument --test aus. Zum Spielen einfach ohne Parameter. +Für einen automatisierten Test, führe das Programm mit dem Argument --test aus. Zum Spielen einfach ohne Parameter. Die untenstehenden Eingaben sind eine mögliche Kombination zum durchspielen – jede Zeile steht dabei für ein Level. asdddddddddddddddwwwwwwddddddwwwwdddd aaaaaaassssssddddssssdddddddddddwwwwwddddddwwwwdddddddddddddddddddd diff --git a/adventura b/adventura index edc148bf3c02a5cecea7541869154019359847a3..9d7793117a3ab6cf9adba5632cfb4b88f5588b05 100755 GIT binary patch delta 66175 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

|3(*{=MO)-x!40n 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 delta 65065 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�e7|%$4$>2U^5dOYAykqF+)F*FRm=ytY`}i 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 muL}~@iS52G#W<=ehN=ANoPD&J?m!T%3Q*pI~k diff --git a/block.hpp b/block.hpp index 5679c19..a8c78ee 100644 --- a/block.hpp +++ b/block.hpp @@ -5,10 +5,10 @@ class Block { private: - Identifier id = Identifier("adventure", "missing"); - char encoding; - Color color; - BlockSettings settings; + Identifier id_ = Identifier("adventure", "missing"); + char encoding_; + Color color_; + BlockSettings settings_; public: /** @@ -18,7 +18,7 @@ public: * @param encoding The encoding of the block, which is the character used to represent it in the game world. * @param settings The settings of the block, which define how the block behaves in the game world. */ - Block(Identifier id, char encoding, BlockSettings settings) : Block(id, encoding, Color::RESET, settings) {}; + Block(Identifier id, char encoding, BlockSettings settings) : Block(id, encoding, Color::RESET, settings) {} /** * Constructs a block with the given identifier, encoding, color and settings. * @@ -28,11 +28,11 @@ public: * @param settings The settings of the block, which define how the block behaves in the game world. */ Block(Identifier id, char encoding, Color color, BlockSettings settings) { - this->id = id; - this->encoding = encoding; - this->color = color; - this->settings = settings; - }; + this->id_ = id; + this->encoding_ = encoding; + this->color_ = color; + this->settings_ = settings; + } /** * Returns the settings associated with the block. @@ -40,7 +40,7 @@ public: * @return The settings of the block, including solidity, pushability, and more. */ BlockSettings getSettings() { - return settings; + return settings_; } /** @@ -51,7 +51,7 @@ public: * @return The identifier of the block. */ Identifier getId() { - return id; + return id_; } /** @@ -62,7 +62,7 @@ public: * @return The color of the block. */ Color getColor() { - return color; + return color_; } /** @@ -73,7 +73,7 @@ public: * @return The character encoding of the block. */ char getEncoding() { - return encoding; + return encoding_; } /** @@ -84,11 +84,11 @@ public: * @param encoding The character encoding to set for the block. */ void setEncoding(char encoding) { - this->encoding = encoding; + this->encoding_ = encoding; } std::ostream& operator<<(std::ostream& out) { - out << encoding; + out << encoding_; return out; } bool operator==(Block otherBlock) { diff --git a/blockPos.hpp b/blockPos.hpp index 8356205..524d1c2 100644 --- a/blockPos.hpp +++ b/blockPos.hpp @@ -6,12 +6,22 @@ public: /** * Define an in-world position. * - * @param x The x-coordinate of the BlockPos. - * @param y The y-coordinate of the BlockPos. + * @param xCoord The x-coordinate of the BlockPos. + * @param yCoord The y-coordinate of the BlockPos. */ - BlockPos(int x, int y) { - this->x = x; - this->y = y; + BlockPos(int xCoord, int yCoord) { + this->x = xCoord; + this->y = yCoord; + } + /** + * Define an in-world position. + * + * @param xCoord The x-coordinate of the BlockPos. + * @param yCoord The y-coordinate of the BlockPos. + */ + BlockPos(unsigned int xCoord, unsigned int yCoord) { + this->x = static_cast(xCoord); + this->y = static_cast(yCoord); } /** @@ -56,12 +66,12 @@ public: /** * Add the given coordinates to the BlockPos. * - * @param x The x-coordinate to add. - * @param y The y-coordinate to add. + * @param xOffset The x-coordinate to add. + * @param yOffset The y-coordinate to add. * @return The BlockPos with the given coordinates added. */ - BlockPos add(int x, int y) { - return BlockPos(this->x + x, this->y + y); + BlockPos add(int xOffset, int yOffset) { + return BlockPos(this->x + xOffset, this->y + yOffset); } BlockPos operator+(BlockPos offset) { @@ -70,4 +80,4 @@ public: BlockPos operator-(BlockPos offset) { return BlockPos(this->getX() - offset.getX(), this->getY() - offset.getY()); } -}; \ No newline at end of file +}; diff --git a/blockRegistry.hpp b/blockRegistry.hpp index 30934b2..c7862e4 100644 --- a/blockRegistry.hpp +++ b/blockRegistry.hpp @@ -60,4 +60,4 @@ private: registeredBlocks.push_back(block); } vector registeredBlocks; -}; \ No newline at end of file +}; diff --git a/blockSettings.hpp b/blockSettings.hpp index 25cc788..ab404b5 100644 --- a/blockSettings.hpp +++ b/blockSettings.hpp @@ -174,4 +174,4 @@ class BlockSettingsBuilder { } private: BlockSettings blockSettings = BlockSettings(); -}; \ No newline at end of file +}; diff --git a/color.hpp b/color.hpp index 7bf8a4c..0a79931 100644 --- a/color.hpp +++ b/color.hpp @@ -13,6 +13,6 @@ enum class Color { BRIGHT_WHITE= 97 }; -std::ostream& operator<<(std::ostream& os, Color color) { +static std::ostream& operator<<(std::ostream& os, Color color) { return os << "\033[" << static_cast(color) << "m"; -} \ No newline at end of file +} diff --git a/fileUtils.hpp b/fileUtils.hpp index 6b66f5b..195d927 100644 --- a/fileUtils.hpp +++ b/fileUtils.hpp @@ -23,7 +23,7 @@ using std::vector; * @param extension The file extension to filter by * @return A list of all filtered file names in the specified directory, sorted alphabetically. */ -vector getOrderedFileNames(string dir, string extension) { +static vector getOrderedFileNames(string dir, string extension) { vector worlds; // This used to be elegant and iterate over all files in the worlds directory, // but because of the weird restriction with no folders being allowed, we just filter the files based on their extension. @@ -44,7 +44,7 @@ vector getOrderedFileNames(string dir, string extension) { * @param fileLocation The location of the file to read. * @return The content of the file as a vector of strings. */ -vector readFileAsVector(const string& fileLocation) { +static vector readFileAsVector(const string& fileLocation) { vector lines; std::ifstream file(fileLocation); @@ -65,10 +65,10 @@ vector readFileAsVector(const string& fileLocation) { * @param fileLocation Path to the file to be printed. * @param color Color to be used for the output. */ -void printFile(string fileLocation, Color color) { +static void printFile(string fileLocation, Color color) { cout << color; vector file = readFileAsVector(fileLocation); for (unsigned int y = 0; y < file.size(); y++) { cout << file.at(y) << endl; } -} \ No newline at end of file +} diff --git a/identifier.hpp b/identifier.hpp index ec0e9c0..b023675 100644 --- a/identifier.hpp +++ b/identifier.hpp @@ -5,8 +5,8 @@ using std::string; class Identifier { public: - std::string nameSpace; - std::string path; + std::string nameSpace_; + std::string path_; /** @@ -16,22 +16,20 @@ public: * @param nameSpace The namespace of the Identifier. * @param path The path of the Identifier. */ - Identifier(std::string nameSpace, std::string path) : nameSpace(nameSpace), path(path) { - - } + Identifier(std::string nameSpace, std::string path) : nameSpace_(nameSpace), path_(path) {} std::ostream& operator<<(std::ostream& out) { - out << nameSpace << ":" << path; + out << nameSpace_ << ":" << path_; return out; } std::istream& operator>>(std::istream& in) { string input; in >> input; - nameSpace = input.substr(0, input.find(":")); - path = input.substr(input.find(":") + 1, input.length()); + nameSpace_ = input.substr(0, input.find(":")); + path_ = input.substr(input.find(":") + 1, input.length()); return in; } bool operator==(Identifier otherId) { - return this->nameSpace == otherId.nameSpace && this->path == otherId.path; + return this->nameSpace_ == otherId.nameSpace_ && this->path_ == otherId.path_; } }; diff --git a/main.cpp b/main.cpp index d58f839..5d11f62 100644 --- a/main.cpp +++ b/main.cpp @@ -17,8 +17,8 @@ using std::endl; bool startWorld(string worldFile); bool parseArgs(int argc, char *argv[]); -bool testMode = false; -unsigned int worldIndex = 2; +static bool testMode = false; +static unsigned int worldIndex = 2; /** * Entry point of the program. @@ -31,15 +31,16 @@ int main(int argc, char *argv[]) { if (parseArgs(argc, argv)) return 0; if (!testMode) { - printFile("./start.screen.txt", Color::BRIGHT_YELLOW); + printFile("./start.screen.txt", Color::BRIGHT_YELLOW); // Show the story introduction waitForInput(); - printGuide(); + printGuide(); // Show the block guide waitForInput(); } // Load every world in order for (const auto & world : getOrderedFileNames("./", ".world.txt")) - if (!startWorld(world)) return 0; + if (!startWorld(world)) return 0; // If the player dies, exit + // Print the victory screen once all levels have been completed printFile("./victory.screen.txt", Color::BRIGHT_GREEN); @@ -85,14 +86,14 @@ bool startWorld(string worldFile) { bool parseArgs(int argc, char *argv[]) { if (argc > 1) { for (int i = 1; i < argc; i++) { - string arg = string(argv[i]); + string arg = string(argv[i]); // Unsafe buffer usage warnings can be safely ignored, as we do check for the size if (arg == "-h" || arg == "--help") break; else if (arg == "-t" || arg == "--test") testMode = true; else if ((arg == "-l" || arg == "--level") && argc > i + 1) { - if (!startWorld("./" + string(argv[i+1]))) + if (!startWorld("./" + string(argv[i+1]))) // This warning can also be ignored, again – we do this in a safe way return true; // Load only the specified world else printFile("./completed_single_level.screen.txt", Color::BRIGHT_GREEN); @@ -105,4 +106,4 @@ bool parseArgs(int argc, char *argv[]) { } } return false; -} \ No newline at end of file +} diff --git a/movementHandler.hpp b/movementHandler.hpp index b8629c7..8c8ea3f 100644 --- a/movementHandler.hpp +++ b/movementHandler.hpp @@ -6,8 +6,8 @@ #include "blockRegistry.hpp" #include "output.hpp" -void tryPushBlock(BlockPos& blockPos, World& world, bool left); -void tryBlockGravity(BlockPos& blockPos, World& world); +static void tryPushBlock(BlockPos& blockPos, World& world, bool left); +static void tryBlockGravity(BlockPos& blockPos, World& world); /** * Checks if a given value is in a parameter pack of values. @@ -22,7 +22,7 @@ void tryBlockGravity(BlockPos& blockPos, World& world); * @return true if the value is found in the parameter pack, false otherwise. */ template -bool is_in(First &&first, T && ... t) { +static bool is_in(First &&first, T && ... t) { return ((first == t) || ...); } @@ -30,7 +30,7 @@ bool is_in(First &&first, T && ... t) { * Waits until the user enters a valid key. * Used to prompt the user to press any key to continue. */ -void waitForInput() { +static void waitForInput() { char lastChar = ' '; while (!is_in(lastChar, 'w', 'a', 's', 'd')) cin >> lastChar; } @@ -48,7 +48,7 @@ void waitForInput() { * @param left Whether to move left (true) or right (false). * @return true if the player's position was successfully updated, false otherwise. */ -bool tryWalk(World& world, Player& player, bool left) { +static bool tryWalk(World& world, Player& player, bool left) { BlockPos playerPos = player.getPos(); BlockPos neighbourPosTorso = playerPos+(left ? BlockPos(-1, 0) : BlockPos(1, 0)); BlockPos neighbourPosFeet = playerPos+(left ? BlockPos(-1, 1) : BlockPos(1, 1)); @@ -76,7 +76,7 @@ bool tryWalk(World& world, Player& player, bool left) { * @param player Reference to the Player object representing the player's state. * @return true if the player's position was successfully updated, false otherwise. */ -bool tryGoDown(World& world, Player& player) { +static bool tryGoDown(World& world, Player& player) { if (world.getBlockAt(player.getPos()+BlockPos(0, 2)).getSettings().isClimbableFromTop() || world.getBlockAt(player.getPos()+BlockPos(0, 3)).getSettings().isClimbableFromTop()) { player.move(0, 1); return true; @@ -95,7 +95,7 @@ bool tryGoDown(World& world, Player& player) { * @param player Reference to the Player object representing the player's state. * @return true if the player's position was successfully updated, false otherwise. */ -bool tryGoUp(World& world, Player& player) { +static bool tryGoUp(World& world, Player& player) { if (world.getBlockAt(player.getPos()+BlockPos(0, 1)).getSettings().isClimbableFromBottom() || world.getBlockAt(player.getPos()+BlockPos(0, 2)).getSettings().isClimbableFromBottom()) { player.move(0, -1); return true; @@ -115,7 +115,7 @@ bool tryGoUp(World& world, Player& player) { * @param world Reference to the World object representing the current world. * @param left Whether to push the block to the left (true) or right (false). */ -void tryPushBlock(BlockPos& blockPos, World& world, bool left) { +static void tryPushBlock(BlockPos& blockPos, World& world, bool left) { BlockPos neighbourBlockPos = blockPos+(left ? BlockPos(-1, 0) : BlockPos(1, 0)); if (world.getBlockAt(blockPos).getSettings().isPushable()) { if (world.getBlockAt(neighbourBlockPos).getSettings().isPushable()) { @@ -135,7 +135,7 @@ void tryPushBlock(BlockPos& blockPos, World& world, bool left) { * @param playerPos The position of the player. * @param world Reference to the World object representing the current world. */ -void tryBlockGravity(BlockPos& playerPos, World& world) { +static void tryBlockGravity(BlockPos& playerPos, World& world) { if (world.getBlockAt(playerPos.add(0, 2)).getSettings().hasGravity() && world.getBlockAt(playerPos.add(0, 3)) == world.getBlockRegistry().AIR) { world.setBlockAt(playerPos.add(0, 3), world.getBlockAt(playerPos.add(0, 2))); world.setBlockAt(playerPos.add(0, 2), world.getBlockRegistry().AIR); @@ -153,7 +153,7 @@ void tryBlockGravity(BlockPos& playerPos, World& world) { * @return true if the player's position was successfully updated, false otherwise. */ -bool onInput(char lastChar, World& world, Player& player) { +static bool onInput(char lastChar, World& world, Player& player) { switch (lastChar) { case ' ': case 'w': @@ -182,7 +182,7 @@ bool onInput(char lastChar, World& world, Player& player) { * In this case, the game state is updated every 100 milliseconds (to simulate the player's input). * If the player dies or reaches the goal, exit the loop. */ -void inputLoop(Player& player, World& world, bool testMode, unsigned int worldIndex) { +static void inputLoop(Player& player, World& world, bool testMode, unsigned int worldIndex) { vector testFile = readFileAsVector("TEST.txt"); unsigned int inputIndex = 0; while (player.isAlive() && !player.hasReachedGoal()) { @@ -204,4 +204,4 @@ void inputLoop(Player& player, World& world, bool testMode, unsigned int worldIn } } inputIndex = 0; -} \ No newline at end of file +} diff --git a/output.hpp b/output.hpp index dad7010..c506320 100644 --- a/output.hpp +++ b/output.hpp @@ -12,7 +12,7 @@ using std::endl; * Move the console cursor up by one line. * Used to overwrite the previous line. */ -void jumpBackOneLine() { +static void jumpBackOneLine() { std::cout << "\033[1A"; } @@ -22,9 +22,9 @@ void jumpBackOneLine() { * On positions that overlap with the player texture, the relevant character of the player's texture is printed instead. * * @param world Reference to the World object representing the current world. - * @param player Reference to the Player object representing the player's state. + * @param playerTexture Reference to the current Player texture. */ -void render(World &world, vector> playerTexture) { +static void render(World &world, vector> playerTexture) { vector> canvas = world.getFieldState(); @@ -51,9 +51,9 @@ void render(World &world, vector> playerTexture) { * and the player. * * @param world Reference to the World object representing the current world. - * @param player Reference to the Player object representing the player's state. + * @param playerTexture Reference to the current Player texture. */ -void redraw(World &world, vector> playerTexture) { +static void redraw(World &world, vector> playerTexture) { for (unsigned int y = 0; y <= world.getMaxY(); y++) { jumpBackOneLine(); } @@ -64,7 +64,7 @@ void redraw(World &world, vector> playerTexture) { * Prints a guide for the player, explaining what each block in the game * represents. */ -void printGuide() { +static void printGuide() { // We use a vector here instead of a map, because we want to keep this order std::vector> guide = { {"- Plattform", Color::RESET}, @@ -81,4 +81,4 @@ void printGuide() { cout << p.second << p.first << endl; } cout << endl << Color::RESET << "WASD + Enter -> Spiel starten" << endl; -} \ No newline at end of file +} diff --git a/player.hpp b/player.hpp index e655fdd..9991424 100644 --- a/player.hpp +++ b/player.hpp @@ -11,16 +11,16 @@ public: /** * Initializes a new Player at the specified starting position in the provided world. * - * @param pos The initial position of the player within the world. - * @param world A reference to the World object representing the game world. + * @param initialPos The initial position of the player within the world. + * @param currentWorld A reference to the World object representing the game world. */ - Player(BlockPos pos, World& world) : world(world) { - this->pos = pos; - this->world = world; + Player(BlockPos initialPos, World& currentWorld) : world(currentWorld) { + this->pos = initialPos; + this->world = currentWorld; playerTexture = REGULAR_PLAYER_TEXTURE; } - /** + /*initialP * Retrieves the current position of the player in the world. * * @return The current BlockPos representing the player's position. @@ -52,20 +52,20 @@ public: /** * Updates the player's position and checks for any conditions that would update the state of the player. * - * @param pos The position to move the player to. + * @param newPos The position to move the player to. */ - void setPos(BlockPos pos) { - if (!world.containsPos(pos)) { + void setPos(BlockPos newPos) { + if (!world.containsPos(newPos)) { alive = false; return; } - this->pos = pos; + this->pos = newPos; - if (world.getBlockAt(pos) == world.getBlockRegistry().GOAL) reachedGoal = true; + if (world.getBlockAt(newPos) == world.getBlockRegistry().GOAL) reachedGoal = true; - if (world.getBlockAt(pos.add(0, 2)) == world.getBlockRegistry().WATER) fallLength = 0; + if (world.getBlockAt(newPos.add(0, 2)) == world.getBlockRegistry().WATER) fallLength = 0; - isFreeFalling = !world.getBlockAt(pos.add(0, 2)).getSettings().isSolid(); + isFreeFalling = !world.getBlockAt(newPos.add(0, 2)).getSettings().isSolid(); if (isFreeFalling) { fallLength += 1; if (fallLength > 2) playerTexture = FALLING_PLAYER_TEXTURE; @@ -79,7 +79,7 @@ public: fallLength = 0; } - if (world.getBlockAt(pos.add(0, 2)).getSettings().isLethal()) unalive(); + if (world.getBlockAt(newPos.add(0, 2)).getSettings().isLethal()) unalive(); } /** @@ -121,13 +121,13 @@ public: while (map.size() <= y) map.push_back({}); while (map[y].size() <= x) map[y].push_back(' '); - int yOffset = y-pos.getY() + 1; - int xOffset = x-pos.getX() + 1; + int yOffset = static_cast(y)-static_cast(pos.getUnsignedY()) + 1; + int xOffset = static_cast(x)-static_cast(pos.getUnsignedX()) + 1; char encoding = ' '; - if (yOffset >= 0 && yOffset < static_cast(playerTexture.size()) && - xOffset >= 0 && xOffset < static_cast(playerTexture.at(yOffset).size())) { - encoding = playerTexture.at(yOffset).at(xOffset); + if (yOffset >= 0 && yOffset < (static_cast(static_cast(playerTexture.size()))) && + xOffset >= 0 && xOffset < (static_cast(playerTexture.at(static_cast(yOffset)).size()))) { + encoding = playerTexture.at(static_cast(yOffset)).at(static_cast(xOffset)); } map[y][x] = encoding; @@ -161,4 +161,4 @@ private: {'/', '-', 'X'}, {'/', ' ', '\\'} }}; -}; \ No newline at end of file +}; diff --git a/world.hpp b/world.hpp index 084b2e4..88bf8be 100644 --- a/world.hpp +++ b/world.hpp @@ -13,10 +13,10 @@ public: /** * Create a World object using the blocks defined in BlockRegistry. * - * @param blockRegistry The BlockRegistry to use. + * @param worldBlockRegistry The BlockRegistry to use. */ - World(BlockRegistry blockRegistry) { - this->blockRegistry = blockRegistry; + World(BlockRegistry worldBlockRegistry) { + this->blockRegistry = worldBlockRegistry; } /** @@ -54,7 +54,7 @@ public: while (field.size() <= pos.getUnsignedY()) field.push_back({}); while (field[pos.getUnsignedY()].size() <= pos.getUnsignedX()) field[pos.getUnsignedY()].push_back(blockRegistry.AIR); - field[pos.getUnsignedY()][pos.getX()] = block; + field[pos.getUnsignedY()][pos.getUnsignedX()] = block; if (block.getSettings().hasGravity() && containsPos(pos.add(0, 1)) && getBlockAt(pos.add(0, 1)) == blockRegistry.AIR) { setBlockAt(pos.add(0, 1), block); setBlockAt(pos, blockRegistry.AIR); @@ -71,7 +71,7 @@ public: */ Block& getBlockAt(BlockPos pos) { if (pos.getUnsignedY() < field.size() && pos.getUnsignedX() < field[pos.getUnsignedY()].size()) { - return field[pos.getY()][pos.getX()]; + return field[pos.getUnsignedY()][pos.getUnsignedX()]; } //cout << "Out of bounds: " << pos.getX() << ", " << pos.getY() << endl; return blockRegistry.AIR; @@ -136,4 +136,4 @@ private: unsigned int maxX = 0; unsigned int maxY = 0; BlockPos startPos = BlockPos(0, 0); -}; \ No newline at end of file +};