#include <SFML/Graphics.hpp>
#include <cstdlib>
#include <vector>
using namespace sf;
class PlayerShot
{
Sprite sprite;
FloatRect rect;
Clock clock;
PlayerShot(Texture &image, FloatRect source)
{
sprite.setTexture(image);
rect = FloatRect( source.left + source.width / 2, source.top - 5, 92, 160);
sprite.setPosition(rect.left, rect.top);
sprite.scale(0.5, 0.5);
sprite.setColor(Color::Yellow);
}
void update(float time)
{
rect.top -= 0.5*time;
sprite.setPosition(rect.left, rect.top);
}
};
class Player
{
public:
Sprite sprite;
FloatRect rect;
Clock clock;
std::vector<PlayerShot> shots;
Texture shotTexture;
Player(Texture &image)
{
sprite.setTexture(image);
rect = FloatRect((VideoMode::getDesktopMode().width - 92) / 2, VideoMode::getDesktopMode().height - 200, 92, 160);
sprite.setPosition(rect.left, rect.top);
sprite.scale(0.5, 0.5);
sprite.setColor(Color::Green);
shotTexture.loadFromFile("C:/data/2.png");
}
void update(float time)
{
if ((Keyboard::isKeyPressed(Keyboard::A) || Keyboard::isKeyPressed(Keyboard::Left)) && rect.left > 0)
rect.left -= 0.1*time;
if ((Keyboard::isKeyPressed(Keyboard::D) || Keyboard::isKeyPressed(Keyboard::Right)) && rect.left < VideoMode::getDesktopMode().width-92)
rect.left += 0.1*time;
sprite.setPosition(rect.left, rect.top);
if (clock.getElapsedTime().asSeconds() >= 1)
{
shot();
clock.restart();
}
}
private:
void shot()
{
rect.top -= 5;
//shots.push_back(PlayerShot(shotTexture, rect));
}
};
class Enemy
{
public:
float dx = rand()%VideoMode::getDesktopMode().width, dy=0;
Sprite sprite;
FloatRect rect;
Clock clock;
Enemy(Texture &image)
{
sprite.setTexture(image);
rect = FloatRect(rand() % VideoMode::getDesktopMode().width, 0, 18, 32);
sprite.setPosition(rect.left, rect.top);
sprite.scale(0.2, 0.2);
sprite.setColor(Color::Red);
}
void update(float time)
{
rect.top += 0.02*time;
sprite.setPosition(rect.left,rect.top);
if (clock.getElapsedTime().asSeconds() >= 1)
{
shot();
clock.restart();
}
}
private:
void shot()
{
}
};
int main()
{
RenderWindow window(VideoMode::getDesktopMode() , "Test",Style::Fullscreen);
Texture t;
t.loadFromFile("C:/data/1.png");
Player player(t);
Clock clock;
while (window.isOpen())
{
float time = clock.getElapsedTime().asMicroseconds();
clock.restart();
time /= 70;
Event event;
while (window.pollEvent(event))
{
if (event.type == Event::Closed)
window.close();
}
if (Keyboard::isKeyPressed(Keyboard::Escape))
window.close();
player.update(time);
window.clear();
window.draw(player.sprite);
window.display();
}
return 0;
}
I2luY2x1ZGUgPFNGTUwvR3JhcGhpY3MuaHBwPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPHZlY3Rvcj4KCnVzaW5nIG5hbWVzcGFjZSBzZjsKCmNsYXNzIFBsYXllclNob3QKewoJU3ByaXRlIHNwcml0ZTsKCUZsb2F0UmVjdCByZWN0OwoJQ2xvY2sgY2xvY2s7CgoJUGxheWVyU2hvdChUZXh0dXJlICZpbWFnZSwgRmxvYXRSZWN0IHNvdXJjZSkKCXsKCQlzcHJpdGUuc2V0VGV4dHVyZShpbWFnZSk7CgoJCXJlY3QgPSBGbG9hdFJlY3QoIHNvdXJjZS5sZWZ0ICsgc291cmNlLndpZHRoIC8gMiwgc291cmNlLnRvcCAtIDUsIDkyLCAxNjApOwoJCXNwcml0ZS5zZXRQb3NpdGlvbihyZWN0LmxlZnQsIHJlY3QudG9wKTsKCQlzcHJpdGUuc2NhbGUoMC41LCAwLjUpOwoJCXNwcml0ZS5zZXRDb2xvcihDb2xvcjo6WWVsbG93KTsKCX0KCgl2b2lkIHVwZGF0ZShmbG9hdCB0aW1lKQoJewoJCXJlY3QudG9wIC09IDAuNSp0aW1lOwoJCXNwcml0ZS5zZXRQb3NpdGlvbihyZWN0LmxlZnQsIHJlY3QudG9wKTsKCX0KfTsKCmNsYXNzIFBsYXllcgp7CnB1YmxpYzoKCVNwcml0ZSBzcHJpdGU7CglGbG9hdFJlY3QgcmVjdDsKCUNsb2NrIGNsb2NrOwoJc3RkOjp2ZWN0b3I8UGxheWVyU2hvdD4gc2hvdHM7CglUZXh0dXJlIHNob3RUZXh0dXJlOwoKCVBsYXllcihUZXh0dXJlICZpbWFnZSkKCXsKCQlzcHJpdGUuc2V0VGV4dHVyZShpbWFnZSk7CgkJcmVjdCA9IEZsb2F0UmVjdCgoVmlkZW9Nb2RlOjpnZXREZXNrdG9wTW9kZSgpLndpZHRoIC0gOTIpIC8gMiwgVmlkZW9Nb2RlOjpnZXREZXNrdG9wTW9kZSgpLmhlaWdodCAtIDIwMCwgOTIsIDE2MCk7CgkJc3ByaXRlLnNldFBvc2l0aW9uKHJlY3QubGVmdCwgcmVjdC50b3ApOwoJCXNwcml0ZS5zY2FsZSgwLjUsIDAuNSk7CgkJc3ByaXRlLnNldENvbG9yKENvbG9yOjpHcmVlbik7CgkJc2hvdFRleHR1cmUubG9hZEZyb21GaWxlKCJDOi9kYXRhLzIucG5nIik7Cgl9CgoJdm9pZCB1cGRhdGUoZmxvYXQgdGltZSkKCXsKCQlpZiAoKEtleWJvYXJkOjppc0tleVByZXNzZWQoS2V5Ym9hcmQ6OkEpIHx8IEtleWJvYXJkOjppc0tleVByZXNzZWQoS2V5Ym9hcmQ6OkxlZnQpKSAmJiByZWN0LmxlZnQgPiAwKQoJCQlyZWN0LmxlZnQgLT0gMC4xKnRpbWU7CgkJaWYgKChLZXlib2FyZDo6aXNLZXlQcmVzc2VkKEtleWJvYXJkOjpEKSB8fCBLZXlib2FyZDo6aXNLZXlQcmVzc2VkKEtleWJvYXJkOjpSaWdodCkpICYmIHJlY3QubGVmdCA8IFZpZGVvTW9kZTo6Z2V0RGVza3RvcE1vZGUoKS53aWR0aC05MikKCQkJcmVjdC5sZWZ0ICs9IDAuMSp0aW1lOwoJCXNwcml0ZS5zZXRQb3NpdGlvbihyZWN0LmxlZnQsIHJlY3QudG9wKTsKCQlpZiAoY2xvY2suZ2V0RWxhcHNlZFRpbWUoKS5hc1NlY29uZHMoKSA+PSAxKQoJCXsKCQkJc2hvdCgpOwoJCQljbG9jay5yZXN0YXJ0KCk7CgkJfQoJfQpwcml2YXRlOgoJdm9pZCBzaG90KCkKCXsKCQlyZWN0LnRvcCAtPSA1OwoJCS8vc2hvdHMucHVzaF9iYWNrKFBsYXllclNob3Qoc2hvdFRleHR1cmUsIHJlY3QpKTsKCX0KfTsKCmNsYXNzIEVuZW15CnsKcHVibGljOgoJZmxvYXQgZHggPSByYW5kKCklVmlkZW9Nb2RlOjpnZXREZXNrdG9wTW9kZSgpLndpZHRoLCBkeT0wOwoJU3ByaXRlIHNwcml0ZTsKCUZsb2F0UmVjdCByZWN0OwoJQ2xvY2sgY2xvY2s7CgoJRW5lbXkoVGV4dHVyZSAmaW1hZ2UpCgl7CgkJc3ByaXRlLnNldFRleHR1cmUoaW1hZ2UpOwoJCXJlY3QgPSBGbG9hdFJlY3QocmFuZCgpICUgVmlkZW9Nb2RlOjpnZXREZXNrdG9wTW9kZSgpLndpZHRoLCAwLCAxOCwgMzIpOwoJCXNwcml0ZS5zZXRQb3NpdGlvbihyZWN0LmxlZnQsIHJlY3QudG9wKTsKCQlzcHJpdGUuc2NhbGUoMC4yLCAwLjIpOwoJCXNwcml0ZS5zZXRDb2xvcihDb2xvcjo6UmVkKTsKCX0KCgl2b2lkIHVwZGF0ZShmbG9hdCB0aW1lKQoJewoJCXJlY3QudG9wICs9IDAuMDIqdGltZTsKCQlzcHJpdGUuc2V0UG9zaXRpb24ocmVjdC5sZWZ0LHJlY3QudG9wKTsKCQlpZiAoY2xvY2suZ2V0RWxhcHNlZFRpbWUoKS5hc1NlY29uZHMoKSA+PSAxKQoJCXsKCQkJc2hvdCgpOwoJCQljbG9jay5yZXN0YXJ0KCk7CgkJfQoJfQoKcHJpdmF0ZToKCXZvaWQgc2hvdCgpCgl7CgoJfQp9OwoKaW50IG1haW4oKQp7CglSZW5kZXJXaW5kb3cgd2luZG93KFZpZGVvTW9kZTo6Z2V0RGVza3RvcE1vZGUoKSAsICJUZXN0IixTdHlsZTo6RnVsbHNjcmVlbik7CglUZXh0dXJlIHQ7Cgl0LmxvYWRGcm9tRmlsZSgiQzovZGF0YS8xLnBuZyIpOwoJUGxheWVyIHBsYXllcih0KTsKCglDbG9jayBjbG9jazsKCXdoaWxlICh3aW5kb3cuaXNPcGVuKCkpCgl7CgkJZmxvYXQgdGltZSA9IGNsb2NrLmdldEVsYXBzZWRUaW1lKCkuYXNNaWNyb3NlY29uZHMoKTsKCQljbG9jay5yZXN0YXJ0KCk7CgkJdGltZSAvPSA3MDsKCQlFdmVudCBldmVudDsKCQl3aGlsZSAod2luZG93LnBvbGxFdmVudChldmVudCkpCgkJewoJCQlpZiAoZXZlbnQudHlwZSA9PSBFdmVudDo6Q2xvc2VkKQoJCQkJd2luZG93LmNsb3NlKCk7CgkJfQoJCWlmIChLZXlib2FyZDo6aXNLZXlQcmVzc2VkKEtleWJvYXJkOjpFc2NhcGUpKQoJCQl3aW5kb3cuY2xvc2UoKTsKCQlwbGF5ZXIudXBkYXRlKHRpbWUpOwoJCXdpbmRvdy5jbGVhcigpOwoJCXdpbmRvdy5kcmF3KHBsYXllci5zcHJpdGUpOwoJCXdpbmRvdy5kaXNwbGF5KCk7CgkJCgl9CglyZXR1cm4gMDsKfQ==