From 0a2943c6bf7b9c8762f8b230b56fbf37f5e5d318 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matt=C3=A9o=20Delabre?= Date: Fri, 4 Mar 2016 16:29:31 +0100 Subject: [PATCH] Initial commit --- Makefile | 18 + ball.cpp | 52 + ball.hpp | 38 + build/ball.o | Bin 0 -> 13936 bytes build/engine.o | Bin 0 -> 32656 bytes build/main.o | Bin 0 -> 35864 bytes build/ptf | Bin 0 -> 42760 bytes engine.cpp | 117 + engine.hpp | 33 + main.cpp | 12 + res/balle.png | Bin 0 -> 1589 bytes res/balle.svg | 84733 +++++++++++++++++++++++++++++++++++++++++++++++ 12 files changed, 85003 insertions(+) create mode 100644 Makefile create mode 100644 ball.cpp create mode 100644 ball.hpp create mode 100644 build/ball.o create mode 100644 build/engine.o create mode 100644 build/main.o create mode 100755 build/ptf create mode 100644 engine.cpp create mode 100644 engine.hpp create mode 100644 main.cpp create mode 100644 res/balle.png create mode 100644 res/balle.svg diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..20570eb --- /dev/null +++ b/Makefile @@ -0,0 +1,18 @@ +CC=g++ +CFLAGS=-Wall -std=c++11 +TARGET=ptf + +$(TARGET): main.o ball.o engine.o + $(CC) $(CFLAGS) -o build/$(TARGET) build/engine.o build/main.o build/ball.o -lsfml-graphics -lsfml-window -lsfml-system -lpthread + +ball.o: ball.cpp + $(CC) $(CFLAGS) -o build/ball.o -c ball.cpp + +engine.o: engine.cpp + $(CC) $(CFLAGS) -o build/engine.o -c engine.cpp + +main.o: main.cpp + $(CC) $(CFLAGS) -o build/main.o -c main.cpp + +clean: + rm build/* diff --git a/ball.cpp b/ball.cpp new file mode 100644 index 0000000..fe4143e --- /dev/null +++ b/ball.cpp @@ -0,0 +1,52 @@ +#include "ball.hpp" +#include "engine.hpp" + +// TODO réécrire cette classe + +Ball::Ball() { + if (!texture.loadFromFile("res/balle.png")) { + std::cerr << "Failed to load texture" << std::endl; + } + + velocity.x = velocity.y = 0; + position.x = 150; position.y = 150; + + sprite.setOrigin(12, 12); + sprite.setTexture(texture); +} + +void Ball::update(float delta) { + int verticalPos = std::ceil(position.y); + + // gravity + velocity.y += Engine::GRAVITY * delta; + + // jump + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up) && verticalPos >= 150) { + velocity.y = -Engine::JUMP; + } + + // go left/right + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) { + velocity.x -= Engine::MOVE; + } + + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) { + velocity.x += Engine::MOVE; + } + + if (verticalPos > 150) { + position.y = 150; + velocity.y = -.3f * std::abs(velocity.y); + } + + velocity.x *= .95f; + position += velocity * delta; +} + +void Ball::draw(sf::RenderWindow& window) { + sprite.setPosition(position + sf::Vector2f(0, -12)); + sprite.rotate(velocity.x / 10); + + window.draw(sprite); +} diff --git a/ball.hpp b/ball.hpp new file mode 100644 index 0000000..25e6d46 --- /dev/null +++ b/ball.hpp @@ -0,0 +1,38 @@ +#ifndef PTF_BALL_HPP +#define PTF_BALL_HPP + +#include +#include + +class Ball { +protected: + sf::Vector2f position; + sf::Vector2f velocity; + float mass; + int charge; + +public: + Ball(); + + void update(float delta); + void draw(sf::RenderWindow& window); + + // getters et setters + sf::Vector2f getPosition() { + return position; + } + + sf::Vector2f getVelocity() { + return velocity; + } + + float getMass() { + return mass; + } + + int getCharge() { + return charge; + } +}; + +#endif diff --git a/build/ball.o b/build/ball.o new file mode 100644 index 0000000000000000000000000000000000000000..911488e137aafedf533a45f55f5e2172630a96b5 GIT binary patch literal 13936 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 Cn7g0= literal 0 HcmV?d00001 diff --git a/build/engine.o b/build/engine.o new file mode 100644 index 0000000000000000000000000000000000000000..d1577c94746829cac74808834c746217f0c11bea GIT binary patch literal 32656 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 literal 0 HcmV?d00001 diff --git a/build/ptf b/build/ptf new file mode 100755 index 0000000000000000000000000000000000000000..25e518486b5425c1df64074d93759ce3e8ec6580 GIT binary patch literal 42760 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 + +/** + * Fonction d'initialisation de la classe Engine + */ +Engine::Engine() { + // initialise et ouvre la fenêtre + window.create( + sf::VideoMode(300, 150), "La cage de Jacob", + sf::Style::Default & ~sf::Style::Resize, + sf::ContextSettings(0, 0, 2) + ); + + window.setVerticalSyncEnabled(true); + + // au démarrage, aucune touche n'est enfoncée + goLeftKey = false; + goRightKey = false; + + // boucle d'événements sur la fenêtre + while (window.isOpen()) { + sf::Event event; + + // traitement des évènements reçus + while (window.pollEvent(event)) { + // fermeture de la fenêtre + if (event.type == sf::Event::Closed) { + window.close(); + } + + // une touche a été enfoncée + if (event.type == sf::Event::KeyPressed) { + if (event.key.code == sf::Keyboard::Left) { + goLeftKey = true; + } + + if (event.key.code == sf::Keyboard::Right) { + goRightKey = true; + } + } + + // une touche a été relâchée + if (event.type == sf::Event::KeyReleased) { + if (event.key.code == sf::Keyboard::Left) { + goLeftKey = false; + } + + if (event.key.code == sf::Keyboard::Right) { + goRightKey = false; + } + } + } + + // réinitialise l'horloge à zéro + // et stocke la différence de temps dans delta + float delta = clock.restart().asSeconds(); + update(delta); + draw(); + } +} + +/** + * Mise à jour de la physique du jeu + */ +void Engine::update(float delta) { + for (int i = 0; i < balls.size(); i++) { + sf::Vector2f forces(0, 0); + + // ajout de la force de gravité + forces += sf::Vector2f(0, Engine::GRAVITY); + + // déplacement de la balle + if (goLeftKey) { + forces += sf::Vector2f(-Engine::MOVE, 0); + } + + if (goRightKey) { + forces += sf::Vector2f(Engine::MOVE, 0); + } + + // force d'attraction + for (int j = 0; j < balls.size(); j++) { + if (i != j) { + sf::Vector2f attraction(balls[i].getPosition() - balls[j].getPosition()); + float distanceSquared = attraction.x * attraction.x + attraction.y * attraction.y; + + attraction /= std::sqrt(distanceSquared); + attraction *= Engine::ATTRACTION * ((balls[i].getCharge() * balls[j].getCharge()) / distanceSquared); + + forces += attraction; + } + } + + // TODO: COLLISIONS + + balls[i].update(forces, delta); + } +} + +/** + * Dessine la scène du jeu couche par couche + */ +void Engine::draw() { + // couche de fond + window.clear(sf::Color(66, 165, 245)); + + // grille de blocs + for (int i = 0; i < blocks.size(); i++) { + blocks[i].draw(); + } + + // dessin des balles + for (int i = 0; i < balls.size(); i++) { + balls[i].draw(); + } +} diff --git a/engine.hpp b/engine.hpp new file mode 100644 index 0000000..e2cbb0c --- /dev/null +++ b/engine.hpp @@ -0,0 +1,33 @@ +#ifndef PTF_ENGINE_HPP +#define PTF_ENGINE_HPP + +#include +#include +#include "ball.hpp" + +/** + * La classe principale Engine coordonne les éléments + * du jeu et organise le dessin des frames + */ +class Engine { +private: + sf::Clock clock; + sf::RenderWindow window; + + bool goLeftKey; + bool goRightKey; + +public: + static constexpr float GRAVITY = 10; + static constexpr float ATTRACTION = 10; + static constexpr float MOVE = 10; + + std::vector balls; + std::vector> blocks; + + Engine(); + void draw(); + void update(float delta); +}; + +#endif diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..c2e5e7f --- /dev/null +++ b/main.cpp @@ -0,0 +1,12 @@ +#include "ball.hpp" +#include "engine.hpp" + +int main() { + Engine engine; + Ball ball; + + engine.balls.push_back(ball); + engine.start(); + + return 0; +} diff --git a/res/balle.png b/res/balle.png new file mode 100644 index 0000000000000000000000000000000000000000..887adf70b8de5c39c3fab4f4c7af2b137fa62f3b GIT binary patch literal 1589 zcmV-52Fm$~P)K5dga{((ts`!b0EoAwE9gKZ21WgR1=ymVp=tpcU0+AeKEnwG># z{E|A3kKcWq<8#hFB;LAF0hjcAc|P2~`+1&A_w@*TzM{Ybz#*U)2ygBufdnuCya_CS zL7mU22Y4Q60?rpK3pl>nz-J`fVDB*S65y3(iJ`CVCKB%FXWuzYyf==ZY9tFK&V9PX z8-G5*U&hC=EDN9vJPwS19^gm7vw*lQelv%U9w4%Hn1^D0w7Kedv;Zzq!4(W3gd*Vf za`o&acRlsCSO|2ls`5JYj`zI_aRZ7B1s;~)jHl8%wp6rT+vyt`=Jn&RV%zoz@Pf#O&!ztUK1O1_EGfAY6z@1-OPNHz-jB}(uHfJQVOQOhvsSywNl~W?PD$D+$RJ5 z01w^sC>@TUr%(Noh_{=XN1?9ySh;+W*sWWru2=A?TUbjakqn#u-BE@Hw&Ck~lz;{< z%b_WGaA?q>b+rI-5eNbV{oQ!o3VvxTfLo=iP^xFXZ{_@mDywb340&oj9U}B-B`MdQcPrM{6VU6@lIDJFrwY3(E^s9Eon* z#r#T!?wh)~ypn1G=0)Hnz}b&KWbR6Wx!FZTSw(Xz?G?gAWIHjm%z?w6pyH( z2q0M&0uFAU2VW#adoY48md=shf7o#gF_6R?p9M>ntjKLFTBq9*}6n_Zz$E^zjfPmm;;YOzkKYErWt zDpiwkd^S)=W_rh;9=lpzJvn6uK<%T7y5q$LN_XOqtL%zVgCDV niSfVRmU%X=;!QT*@P_&~w>Dl-l+6d$00000NkvXXu0mjf7Kqev literal 0 HcmV?d00001 diff --git a/res/balle.svg b/res/balle.svg new file mode 100644 index 0000000..7dad9ff --- /dev/null +++ b/res/balle.svg @@ -0,0 +1,84733 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + +