From c2da282e1784de6bb8c8107c5119bb8536c32cc2 Mon Sep 17 00:00:00 2001 From: thatscringebro Date: Tue, 10 Oct 2023 11:09:12 -0400 Subject: [PATCH] acceleration, deceleration and steer --- game.cpp | 48 +++++++++++++++++++++++-------------- game.h | 3 ++- racecar.cpp | 63 ++++++++++++++++++++++++++++++++++++++++++++++--- racecar.h | 27 +++++++++++++++++++-- terminal_racer | Bin 32824 -> 45296 bytes 5 files changed, 117 insertions(+), 24 deletions(-) diff --git a/game.cpp b/game.cpp index 90ee2f8..0368924 100644 --- a/game.cpp +++ b/game.cpp @@ -3,21 +3,25 @@ #define DELAY 30000 Game::Game() - : x(0), y(0), max_x(800), max_y(600), direction(0), - window(sf::VideoMode(max_x, max_y), "SFML Window") { + : x(0), y(0), max_x(800), max_y(600), direction(0), window(sf::VideoMode(max_x, max_y), "SFML Window"), + racecar(200.0f, 10.0f, 1.0f) { // Adjust maxSpeed, acceleration, and steerSpeed values as needed if (!font.loadFromFile("cascaydia.otf")) { std::cerr << "Failed to load font" << std::endl; exit(1); } - text.setString("o"); - text.setFont(font); - text.setCharacterSize(24); + sf::Text text("o", font, 24); // This is just for the track, you can modify it as needed text.setFillColor(sf::Color::White); + + racecar.setPosition(max_x / 2, max_y / 2); // Set initial position for the racecar } void Game::run() { + sf::Clock clock; + while (window.isOpen()) { + float dt = clock.restart().asSeconds(); + sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) { @@ -25,23 +29,31 @@ void Game::run() { } } - if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up) && y > 0) { - y--; - } - if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down) && y < max_y - 1) { - y++; - } - if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left) && x > 0) { - x--; - } - if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right) && x < max_x - 1) { - x++; + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) { + racecar.accelerate(dt); + } else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) { + if (racecar.getSpeed() > 0) { + racecar.brake(dt); // Apply brakes + } else { + racecar.reverse(dt); // Reverse the car + } + } else { + racecar.decelerate(dt); // No key pressed, decelerate as usual } + + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) { + racecar.steer(dt, -1.0f); // Steer left + } else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) { + racecar.steer(dt, 1.0f); // Steer right + } + + racecar.update(dt); + window.clear(); - text.setPosition(x, y); - window.draw(text); + window.draw(racecar.getDrawable()); // Draw the racecar window.display(); + sf::sleep(sf::microseconds(DELAY)); } } diff --git a/game.h b/game.h index 22de421..97b09c9 100644 --- a/game.h +++ b/game.h @@ -3,6 +3,7 @@ #include #include +#include "racecar.h" class Game { public: @@ -17,7 +18,7 @@ private: int direction; sf::RenderWindow window; sf::Font font; - sf::Text text; + Racecar racecar; }; #endif // GAME_H diff --git a/racecar.cpp b/racecar.cpp index 3d49b03..797c7ff 100644 --- a/racecar.cpp +++ b/racecar.cpp @@ -1,7 +1,64 @@ #include "racecar.h" -Racecar::Racecar() { - // Add the implementation for the Racecar class constructor here if needed. - // You can include any member variables and functions specific to Racecar. +Racecar::Racecar(float maxSpeed, float acceleration, float steerSpeed) + : maxSpeed(maxSpeed), acceleration(acceleration), steerSpeed(steerSpeed), dx(0), dy(0), steeringAngle(0) { + if (!font.loadFromFile("cascaydia.otf")) { + std::cerr << "Failed to load font" << std::endl; + exit(1); + } + + carText.setString("0"); // Replace "o" with a racecar emoji or any desired character + carText.setFont(font); + carText.setCharacterSize(24); + carText.setFillColor(sf::Color::White); + speed = 0; +} + +void Racecar::update(float dt) { + carText.move(speed * dt * cos(steeringAngle), speed * dt * sin(steeringAngle)); +} + +void Racecar::accelerate(float dt) { + if (speed < maxSpeed) { + speed += acceleration * dt; + } +} + +void Racecar::decelerate(float dt) { + if (speed < 0) { + speed += acceleration * dt; + } else if (speed > 0) { + speed -= acceleration * dt; + } else if (speed > -maxSpeed / 2) { + speed -= 1.5 * acceleration * dt; + } +} + +void Racecar::steer(float dt, float direction) { + steeringAngle += steerSpeed * direction * dt; +} + +void Racecar::brake(float dt) { + if (speed > 0) { + speed -= 3 * acceleration * dt; + } +} + +void Racecar::reverse(float dt) { + if (speed > -maxSpeed / 2) { + speed -= 1.5 * acceleration * dt; + } +} + +sf::Text Racecar::getDrawable() { + return carText; +} + +void Racecar::setPosition(float x, float y) { + carText.setPosition(x, y); +} + +float Racecar::getSpeed() const { + return speed; } diff --git a/racecar.h b/racecar.h index c301646..3ae4890 100644 --- a/racecar.h +++ b/racecar.h @@ -1,10 +1,33 @@ #ifndef RACECAR_H #define RACECAR_H +#include +#include +#include + class Racecar { public: - Racecar(); - // Add any member functions or variables for the Racecar class here if needed. + Racecar(float maxSpeed, float acceleration, float steerSpeed); + void update(float dt); + void accelerate(float dt); + void decelerate(float dt); + void brake(float dt); // Brake the car + void reverse(float dt); // Reverse the car + void steer(float dt, float direction); // -1 for left, 1 for right + sf::Text getDrawable(); + void setPosition(float x, float y); + float getSpeed() const; // Get the current speed of the car + +private: + sf::Text carText; + sf::Font font; + float speed; + float maxSpeed; + float acceleration; + float steerSpeed; + float steeringAngle; + float dx; + float dy; }; #endif // RACECAR_H diff --git a/terminal_racer b/terminal_racer index 2287ac3c4da918492c784008033c458a7be24bbc..071ba9a62919a9400121fc4983d137169a5fe2f7 100755 GIT binary patch literal 45296 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 Bt8D-P literal 32824 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 A&Hw-a