Untitled
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...