diff --git a/game.cpp b/game.cpp new file mode 100644 index 0000000..b2b21a5 --- /dev/null +++ b/game.cpp @@ -0,0 +1,31 @@ +#include +#include "vokzal.hpp" + +int main() { + // Створюємо вікно 800x600 + sf::RenderWindow window(sf::VideoMode(1950, 1200), "Test Game Window"); + + +window.setFramerateLimit(90); //вище 200 не рокимендую піднімати частоту після 600 буде чути писк дроселів + + Player player; + // Простий квадрат для гравця + +sf::Clock clock; + while (window.isOpen()) { + sf::Event event; + while (window.pollEvent(event)) { + if (event.type == sf::Event::Closed) + window.close();} + + //if(event.type== sf::Event::Resized){} + float deltaTime = clock.restart().asSeconds(); + + player.update(deltaTime); // викликаємо логіку гравця + window.clear(sf::Color::Black); // очистка вікна + player.draw(window); // малюємо квадрат + window.display(); // відображення + } + + return 0; +} diff --git a/player.cpp b/player.cpp new file mode 100644 index 0000000..eae8812 --- /dev/null +++ b/player.cpp @@ -0,0 +1,79 @@ +#include "player.hpp" // Включаємо заголовок класу Player, щоб компілятор знав про його методи та змінні. + +// Конструктор класу Player. Він автоматично викликається при створенні об'єкта Player. +Player::Player() + // Список ініціалізації: кращий спосіб задати початкові значення змінним. + // Тут ініціалізуємо `shape` (прямокутник) з розміром 50x50. + : shape(sf::Vector2f(50.f, 50.f)), + // Ініціалізуємо змінну `speed` значенням 200. + speed(500.f), + velocityY(0.f), + jumpStrength(600.f), + onGround(true), + gravity(1500.f), + groundLevel(1040.f) +{ + // Тіло конструктора: тут можна задавати додаткові параметри. + // Встановлюємо зелений колір для прямокутника. + shape.setFillColor(sf::Color::Green); + // Встановлюємо початкову позицію гравця на екрані. + shape.setPosition(50.f, 1040.f); +} + +// Закоментований метод `update` (робота на потім). +// Він призначений для оновлення логіки гравця у кожному кадрі гри. +// Усередині цього методу, ви будете обробляти рух, зіткнення, анімацію тощо. +// `deltaTime` — це час, що минув з попереднього кадру, і він забезпечує плавний рух незалежно від швидкості комп'ютера. +void Player::update(float deltaTime){ // Тут буде логіка руху гравця + float moveX = 0.f; + + + + if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)){ + moveX -= speed * deltaTime;} //рух вліво + + if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)){ + moveX += speed * deltaTime;} //рух вправо + + if (sf::Keyboard::isKeyPressed(sf::Keyboard::W) && onGround==true) { + velocityY = -jumpStrength; + } + velocityY += gravity * deltaTime; + + shape.move(moveX, 0.f); + shape.move(0.f , velocityY * deltaTime); + + //перевірка чи є земля та обмеження щоб фігура не вилитіла + + if(shape.getPosition().y + shape.getSize().y >= groundLevel){ + shape.setPosition(shape.getPosition().x, groundLevel -shape.getSize().y); + velocityY = 0; + onGround = true; + }else{ + onGround = false; + } + + ///////////////////////////////////////////////////// + + if(shape.getPosition().x < 0.f) + shape.setPosition(0.f, shape.getPosition().y); + + if(shape.getPosition().x+shape.getSize().x>1925.f) + shape.setPosition(1925.f - shape.getSize().x ,shape.getPosition().y); + + + if(shape.getPosition().y < 0.f) + shape.setPosition(shape.getPosition().x,0.f); + + if(shape.getPosition().y+shape.getSize().y>1200.f) + shape.setPosition(shape.getPosition().x, 1200.f - shape.getSize().y); + } + + +// Метод `draw` для відмальовування гравця на екрані. +// Приймає посилання на вікно, щоб знати, де малювати. +void Player::draw(sf::RenderWindow& window) +{ + // Викликаємо метод `draw` вікна, щоб намалювати наш об'єкт `shape`. + window.draw(shape); +} diff --git a/player.hpp b/player.hpp new file mode 100644 index 0000000..b563c8b --- /dev/null +++ b/player.hpp @@ -0,0 +1,31 @@ + +#pragma once + +#include + +//float velocityY; +//float gravity; +//float jumpStrength; +//bool isOnGround; + + +class Player { + +private: + sf::RectangleShape shape; // форма гравця + float speed; //швидкість гравця + float velocityY; // швидкість по вертикалі + float jumpStrength; // сила стрибка + bool onGround; //чи стоїть на землі + float gravity; // сила гравітації + float groundLevel; // висота "землі" + + + +public: + Player(); // порожній конструктор + void update(float deltaTime); + + void draw(sf::RenderWindow& window); + +}; diff --git a/vokzal.hpp b/vokzal.hpp new file mode 100644 index 0000000..cf0e8b3 --- /dev/null +++ b/vokzal.hpp @@ -0,0 +1,6 @@ +#pragma once + +#include "player.hpp" +#include "enemy.hpp" +#include "platform.hpp" +#include "bullet.hpp"