Upload files to "/"

This commit is contained in:
Wolf 2025-09-24 14:22:47 +00:00
parent c898dd8996
commit 9fe18da843
5 changed files with 84 additions and 26 deletions

View file

@ -1,31 +1,50 @@
#include <SFML/Graphics.hpp> #include <SFML/Graphics.hpp>
#include "vokzal.hpp" #include "vokzal.hpp"
using namespace std;
int main() { int main() {
// Створюємо вікно 800x600 // Створюємо вікно 1950x1200
sf::RenderWindow window(sf::VideoMode(1950, 1200), "Test Game Window"); sf::RenderWindow window(sf::VideoMode(1950, 1200), "Test Game Window");
//
vector<Platform> platforms;
platforms.push_back(Platform(299.f, 900.f, 200.f, 40.f));
platforms.push_back(Platform(700.f, 725.f, 200.f, 40.f));
platforms.push_back(Platform(1300.f, 700.f, 300.f, 50.f));
platforms.push_back(Platform(400.f, 600.f, 250.f, 30.f));
Platform ground(100.f, 1050.f, 300.f, 50.f);
window.setFramerateLimit(90); //вище 200 не рокимендую піднімати частоту після 600 буде чути писк дроселів window.setFramerateLimit(90); //вище 200 не рокимендую піднімати частоту після 600 буде чути писк дроселів
Player player; Player player;
// Простий квадрат для гравця
sf::Clock clock; sf::Clock gameClock;
while (window.isOpen()) { while (window.isOpen()) {
sf::Event event; sf::Event event;
while (window.pollEvent(event)) { while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed) if (event.type == sf::Event::Closed)
window.close();} window.close();
}
//if(event.type== sf::Event::Resized){} float deltaTime = gameClock.restart().asSeconds();
float deltaTime = clock.restart().asSeconds();
player.update(deltaTime, platforms); // логіка гравця
player.update(deltaTime); // викликаємо логіку гравця
window.clear(sf::Color::Black); // очистка вікна window.clear(sf::Color::Black); // очистка вікна
player.draw(window); // малюємо квадрат
// малюємо платформи
for (auto& platform : platforms) {
platform.draw(window);
}
ground.draw(window);
// малюємо гравця
player.draw(window);
window.display(); // відображення window.display(); // відображення
} }
return 0; return 0;
} }

15
platform.cpp Normal file
View file

@ -0,0 +1,15 @@
#include "platform.hpp"
Platform::Platform(float x , float y, float width, float height)
:shape(sf::Vector2f(width, height))
{
shape.setPosition(x ,y);
shape.setFillColor(sf::Color::Blue);
}
void Platform::draw(sf::RenderWindow& window){
window.draw(shape);
}
sf::FloatRect Platform::getBounds() const {
return shape.getGlobalBounds();}

View file

@ -1,30 +1,28 @@
#include "player.hpp" // Включаємо заголовок класу Player, щоб компілятор знав про його методи та змінні. #include "player.hpp" // Включаємо заголовок класу Player, щоб компілятор знав про його методи та змінні.
using namespace std;
// Конструктор класу Player. Він автоматично викликається при створенні об'єкта Player. // Конструктор класу Player. Він автоматично викликається при створенні об'єкта Player.
Player::Player() Player::Player()
// Список ініціалізації: кращий спосіб задати початкові значення змінним. : shape(sf::Vector2f(50.f, 50.f)), // тут лише "чисте" створення
// Тут ініціалізуємо `shape` (прямокутник) з розміром 50x50. speed(500.f), //швидкість
: shape(sf::Vector2f(50.f, 50.f)), velocityY(0.f),
// Ініціалізуємо змінну `speed` значенням 200. jumpStrength(700.f), // пиржок
speed(500.f), onGround(true),
velocityY(0.f), gravity(1500.f),
jumpStrength(600.f), groundLevel(1040.f)
onGround(true),
gravity(1500.f),
groundLevel(1040.f)
{ {
// Тіло конструктора: тут можна задавати додаткові параметри. // А тут уже викликаємо методи, які налаштовують shape
// Встановлюємо зелений колір для прямокутника.
shape.setFillColor(sf::Color::Green); shape.setFillColor(sf::Color::Green);
// Встановлюємо початкову позицію гравця на екрані.
shape.setPosition(50.f, 1040.f); shape.setPosition(50.f, 1040.f);
} }
// Закоментований метод `update` (робота на потім). // Закоментований метод `update` (робота на потім).
// Він призначений для оновлення логіки гравця у кожному кадрі гри. // Він призначений для оновлення логіки гравця у кожному кадрі гри.
// Усередині цього методу, ви будете обробляти рух, зіткнення, анімацію тощо. // Усередині цього методу, ви будете обробляти рух, зіткнення, анімацію тощо.
// `deltaTime` — це час, що минув з попереднього кадру, і він забезпечує плавний рух незалежно від швидкості комп'ютера. // `deltaTime` — це час, що минув з попереднього кадру, і він забезпечує плавний рух незалежно від швидкості комп'ютера.
void Player::update(float deltaTime){ // Тут буде логіка руху гравця void Player::update(float deltaTime, const std::vector<Platform>& platforms) { // Тут буде логіка руху гравця
float moveX = 0.f; float moveX = 0.f;
@ -52,6 +50,28 @@ void Player::update(float deltaTime){ // Тут буде логіка руху
}else{ }else{
onGround = false; onGround = false;
} }
/////////////////////////////////////////////////////
sf::FloatRect playerBounds = shape.getGlobalBounds();
for (const auto& platform : platforms) {
sf::FloatRect platformBounds = platform.getBounds();
if (playerBounds.intersects(platformBounds)){
if (playerBounds.intersects(platformBounds)) {
// Додатковий if — перевіряємо, чи гравець зверху
if (playerBounds.top + playerBounds.height <= platformBounds.top + 20.f) {
shape.setPosition(shape.getPosition().x, platformBounds.top - shape.getSize().y);
velocityY = 0.f;
onGround = true;
}else if(playerBounds.top> platformBounds.top){shape.setPosition(shape.getPosition().x, platformBounds.top +platformBounds.height);
velocityY =0.f;}
}
}
}
///////////////////////////////////////////////////// /////////////////////////////////////////////////////

View file

@ -1,7 +1,9 @@
#pragma once #pragma once
#include <SFML/Graphics.hpp> #include <SFML/Graphics.hpp>
#include <vector>
#include "platform.hpp"
//float velocityY; //float velocityY;
//float gravity; //float gravity;
@ -24,7 +26,7 @@ private:
public: public:
Player(); // порожній конструктор Player(); // порожній конструктор
void update(float deltaTime); void update(float deltaTime, const std::vector<Platform>& platforms);
void draw(sf::RenderWindow& window); void draw(sf::RenderWindow& window);

View file

@ -4,3 +4,5 @@
#include "enemy.hpp" #include "enemy.hpp"
#include "platform.hpp" #include "platform.hpp"
#include "bullet.hpp" #include "bullet.hpp"