1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
|
#include <SFML/Graphics.hpp>
int main()
{
// Création de la fenêtre de rendu
sf::RenderWindow App(sf::VideoMode(800, 800, 32), "SFML jeu 2D");
////////////////////////////////////////////////////////////
// Chargement des images
////////////////////////////////////////////////////////////
sf::Image Fond;
if (!Fond.LoadFromFile("images/fond.jpg"))
return EXIT_FAILURE;
sf::Image TankBas;
if (!TankBas.LoadFromFile("images/tankbas.jpg"))
return EXIT_FAILURE;
sf::Image TankHaut;
if (!TankHaut.LoadFromFile("images/tankhaut.png"))
return EXIT_FAILURE;
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
// Création des sprite
////////////////////////////////////////////////////////////
sf::Sprite SpriteFond(Fond);
SpriteFond.SetPosition(0.f, 0.f);
sf::Sprite SpriteTankBas(TankBas);
SpriteTankBas.SetPosition(400.f, 400.f);
SpriteTankBas.SetCenter(15, 25);
sf::Sprite SpriteTankHaut(TankHaut);
SpriteTankHaut.SetPosition(400.f, 400.f);
SpriteTankHaut.SetCenter(15, 25);
////////////////////////////////////////////////////////////
bool collisionavancer = false;
bool collisionreculer = false;
double Position_Y = 0;
double Position_X = 0;
double pi = M_PI;
// Boucle de jeu
while (App.IsOpened())
{
// Gestion des événements
sf::Event Event;
while (App.GetEvent(Event))
{
// Ferme la fenêtre si clic croix ou echap
if ((Event.Type == sf::Event::Closed) ||
((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape)))
{
App.Close();
break;
}
}
// Donne elapsed time
float ElapsedTime = App.GetFrameTime();
// Calcul position X et Y
Position_X = sin((SpriteTankBas.GetRotation() * pi) / 180) * 100 * ElapsedTime;
Position_Y = cos((SpriteTankBas.GetRotation() * pi) / 180) * 100 * ElapsedTime;
// Vérification collision si le tank veux avancer
if (SpriteTankBas.GetPosition().y + Position_Y < 30 || SpriteTankBas.GetPosition().y + Position_Y > 770
|| SpriteTankBas.GetPosition().x +Position_X < 30 || SpriteTankBas.GetPosition().x + Position_X > 770) collisionavancer = true;
else collisionavancer = false;
// Vérification collision si le tank veux reculer
if (SpriteTankBas.GetPosition().y -Position_Y < 30 || SpriteTankBas.GetPosition().y -Position_Y > 770
|| SpriteTankBas.GetPosition().x -Position_X < 30 || SpriteTankBas.GetPosition().x -Position_X > 770) collisionreculer = true;
else collisionreculer = false;
// Mouvements du tank
if (App.GetInput().IsKeyDown(sf::Key::Z) && (collisionavancer == false)) {SpriteTankBas.Move(Position_X, Position_Y); // Avancer
SpriteTankHaut.Move(Position_X, Position_Y);} // Avancer
if (App.GetInput().IsKeyDown(sf::Key::S) && (collisionreculer == false)) {SpriteTankBas.Move(-Position_X, -Position_Y); // Reculer
SpriteTankHaut.Move(-Position_X, -Position_Y);} // Reculer
if (App.GetInput().IsKeyDown(sf::Key::Q)) {SpriteTankBas.Rotate(+ 100 * ElapsedTime); // Pivoter a gauche
SpriteTankHaut.Rotate(+ 100 * ElapsedTime);} // Pivoter a gauche
if (App.GetInput().IsKeyDown(sf::Key::D)) {SpriteTankBas.Rotate(- 100 * ElapsedTime); // Pivoter a droite
SpriteTankHaut.Rotate(- 100 * ElapsedTime);} // Pivoter a droite
// Mouvements de la tourelle
if (App.GetInput().IsKeyDown(sf::Key::Right)) SpriteTankHaut.Rotate(+ 100 * ElapsedTime); // Pivoter a droite
if (App.GetInput().IsKeyDown(sf::Key::Left)) SpriteTankHaut.Rotate(- 100 * ElapsedTime); // Pivoter a gauche
// Limitation framerate a 100
App.SetFramerateLimit(100);
// Nettoyage écran
App.Clear();
App.Draw(SpriteFond);
App.Draw(SpriteTankBas);
App.Draw(SpriteTankHaut);
App.Display();
}
return EXIT_SUCCESS;
} |
Partager