Untitled

 avatar
unknown
plain_text
2 years ago
6.5 kB
5
Indexable
#include <SFML/Graphics.hpp>
#include <iostream>
#include <math.h>
using namespace std;
using namespace sf;
float frame = 0;
int ox, oy,pulx,puly,rex,rey,coins=0,flag=0;
struct blue
{
    int hp = 1;
    float speed = 1;
};
struct red
{
    int hp = 3;
    float speed = 2;
};
int main()
{
    RenderWindow window(VideoMode(1400, 1000), "SFML works!");
    sf::Vector2f target(window.getSize().x / 2, window.getSize().y);
    RectangleShape rect;
    float distance=0,speed=0.03f;
    srand(time(NULL));
    float x = rand() % 1350 + 25;
    float y = rand() % 950 + 25;
    rect.setPosition(x, y);

    // Получаем координаты центра окна
    float targetX = window.getSize().x / 2;
    float targetY = window.getSize().y / 2;

    
    Vector2i mxy = Mouse::getPosition(window);
    CircleShape pulya(10.f);
   
    rect.setSize(Vector2f(50, 100));
    rect.setFillColor(sf::Color::Blue);
    pulya.setFillColor(Color::Blue);
    cout << mxy.x <<" " << mxy.y << endl;
    Image phone;
    phone.loadFromFile("image/pole.png");
    Texture fon;
    fon.loadFromImage(phone);
    Sprite pon;
    pon.setTexture(fon);
    pon.setPosition(0, 0);
    pon.setScale(3.7f, 3.f);
    Image image;
    image.loadFromFile("image/player.png");
    Texture texture;
    texture.loadFromImage(image);
    Sprite player;
    player.setTexture(texture);
    player.setScale(4.f,4.f);
    player.setTextureRect(IntRect(0, 0, 31, 32));
    player.setPosition(10, 10);
    Clock clock;
    while (window.isOpen())
    {
        if (pulx !=ox) pulya.setPosition(ox + 7, oy + 7);
        if (pulx !=ox) pulya.setPosition(ox + 7, oy + 7);
        if (puly !=oy) pulya.setPosition(ox + 7, oy + 7);
        if (puly !=oy) pulya.setPosition(ox + 7, oy + 7);
        Vector2i mxy = Mouse::getPosition(window);
        cout << mxy.x << " " << mxy.y << endl;
        float time = clock.getElapsedTime().asMicroseconds();
        clock.restart();
        time /= 1500;
        Event event;
        while (window.pollEvent(event))
        {
            if (event.type == Event::Closed)
                window.close();
        }
        ox=player.getPosition().x;
        oy = player.getPosition().y;
        pulx = pulya.getPosition().x;
        puly= pulya.getPosition().y;
        rex = rect.getPosition().x;
        rey = rect.getPosition().y;
        //cout << ox << " " << oy<<endl;
        if(ox>1400) player.setPosition(-12, oy);
        if (ox < -12) player.setPosition(1400, oy);
        if (oy > 1000) player.setPosition(ox+10, -12);
        if (oy < -12) player.setPosition(ox+10, 1000);
        if (pulx > 1400&&flag!=1) pulya.setPosition(ox+10, oy+10);
        if (pulx < -12 && flag != 1) pulya.setPosition(ox+10, oy+10);
        if (puly > 1000 && flag != 1) pulya.setPosition(ox+10, oy+10);
        if (puly < -12 && flag != 1) pulya.setPosition(ox+10, oy+10);
       
        if (event.type == sf::Event::MouseButtonPressed && event.mouseButton.button == sf::Mouse::Left)
        {
            flag = 1;
            sf::Vector2i mousePosition = sf::Mouse::getPosition(window);
            sf::Vector2f targetPosition = sf::Vector2f(mousePosition.x - pulya.getRadius(), mousePosition.y - pulya.getRadius());

            // Вычисляем расстояние между текущей позицией круга и целевой позицией
            float distance = sqrt(pow(targetPosition.x - pulya.getPosition().x, 2) + pow(targetPosition.y - pulya.getPosition().y, 2));

            // Вычисляем скорость передвижения круга
            float speed = 50.f;

            // Вычисляем время, за которое круг должен добраться до целевой позиции
            float pul_time = distance / speed;

            // Вычисляем вектор скорости
            sf::Vector2f velocity = (targetPosition - pulya.getPosition()) / pul_time;

            // Передвигаем круг плавно к целевой позиции
            while (-10<distance&&distance > 10)
            {
                float deltaTime = 1.f / 60.f;
                pulya.move(velocity * deltaTime);
                distance = sqrt(pow(targetPosition.x - pulya.getPosition().x, 2) + pow(targetPosition.y - pulya.getPosition().y, 2));
                window.clear();
                
                window.draw(pon);
                window.draw(rect);
                window.draw(player);
                window.draw(pulya);
                window.display();
            }
            flag = 0;
        }
        
        if (Keyboard::isKeyPressed(Keyboard::A)) {
            player.move(-0.2*time, 0);
            frame += 0.005 * time;
            if (frame > 2)frame -= 2;
            player.setTextureRect(IntRect(31 * int(frame), 96, 31, 32));
        }
        if (Keyboard::isKeyPressed(Keyboard::D)) {
            player.move(0.2*time, 0);
            frame += 0.005 * time;
            if (frame > 2)frame -= 2;
            player.setTextureRect(IntRect(31 * int(frame), 32, 31, 32));
        }
        if (Keyboard::isKeyPressed(Keyboard::W)) {
            player.move(0, -0.2*time);
            frame += 0.005 * time;
            if (frame > 2)frame -= 2;
            player.setTextureRect(IntRect(31 * int(frame), 0, 31, 32));
        }
        if (Keyboard::isKeyPressed(Keyboard::S)) {
            player.move(0, 0.2*time);
            frame += 0.005 * time;
            if (frame > 2)frame -= 2;
            player.setTextureRect(IntRect(31 * int(frame), 64, 31, 32));
        }
        if (rey==puly) {
            rect.setPosition(0, 0);
            coins++;
        }
       
        if (rect.getPosition().x < ox)
        {
            rect.move(0.1, 0);
        }
        else if (rect.getPosition().x > ox)
        {
            rect.move(-0.1, 0);
        }
        if (rect.getPosition().y < oy)
        {
            rect.move(0, 0.1);
        }
        else if (rect.getPosition().y > oy)
        {
            rect.move(0, -0.1);
        }
        window.clear();
        window.draw(pon);
        window.draw(player);
        window.draw(pulya);
        window.draw(rect);
       
        window.display();
    }

   
}
Editor is loading...