Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - cChaD

Pages: [1] 2 3 ... 6 Suivante »
1
Graphique / Déplacement style bomberman
« le: Janvier 24, 2015, 03:55:45 pm »
Bonjour à tous,

je viens vous demandé votre aide car j'ai essayé au maximum de me débrouiller mais j'y suis pas arrivé  :-X

Je cherche à reproduire les déplacements comme dans super bomberman 2 sur SNES.

C'est à dire, que si le joueur se déplace en appuyant sur 2 touches simultanément, le joueur commence d'abord par les déplacements prévu pour pour la première touche enfoncé jusqu'a rentré en colision avec un block puis il passe la main à la seconde touche

Exemple avec

HAUT + DROITE



Et donc je ne sais pas comment réorganiser mon code pour pouvoir gérer ça...

voici l'actuel qui gére seulement 1 touche à la fois.

(click to show/hide)


Merci d'avance.

2
Général / Re : Coder proprement un snake
« le: Septembre 08, 2014, 07:09:56 pm »
D'accord merci !

3
Général / Coder proprement un snake
« le: Septembre 07, 2014, 03:09:54 pm »
Bonjour,

je viens de reprendre la SFMLet pour me remettre en condition j'ai coder un snake vraiment basique, mais j'aimerais savoir si il est proprement coder, et si il exploite au mieux les concepts de la POO.

Merci.

#include <iostream>
#include <SFML/Graphics.hpp>
#include "Snake.h"

#define SCREEN_WIDTH 800
#define SCREEN_HEIGHT 640

int main(int, char const**)
{
    sf::RenderWindow window(sf::VideoMode(SCREEN_WIDTH, SCREEN_HEIGHT), "SFML window");

    window.setFramerateLimit(60);
    window.setKeyRepeatEnabled(false);

    Snake snake(window, 32, 32);

    while (window.isOpen())
    {
        snake.Move();

        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
            {
                window.close();
            }

            snake.Update(event);

        }

        window.clear(sf::Color(0,162,255));
        snake.Draw();
        window.display();
    }

    return EXIT_SUCCESS;
}
 


#ifndef SNAKE_H_INCLUDED
#define SNAKE_H_INCLUDED

#include <iostream>
#include <SFML/Graphics.hpp>
#include <cstdlib>
#include <ctime>

class Snake
{
    public:
        Snake(sf::RenderWindow &window, int sSize, int sSpeed);

        void Move();
        void Update(sf::Event &event);
        void Draw();

    private:
        sf::RenderWindow &mWindow;
        sf::Clock mClock;
        sf::CircleShape mFood;
        int mTimeToUpdate;
        int mSize;
        int mSpeed;
        bool mLeft, mRight, mUp, mDown;
        float mCurrentTime;
        std::vector<sf::RectangleShape> mSnakes;

        void CheckCollision();
        void AddCase();
        void FoodGenerator();
};

#endif // SNAKE_H_INCLUDED
 

#include "Snake.h"

using namespace std;
using namespace sf;

Snake::Snake(RenderWindow &window, int sSize, int sSpeed) : mWindow(window), mSize(sSize), mSpeed(sSpeed)
{
    mTimeToUpdate = 250; // 1/4 second
    mCurrentTime = 0.0f;
    mLeft = mUp = mDown = false;
    mRight = true;
    srand(std::time(0));
    AddCase();
    AddCase();

    mFood.setRadius(mSize / 2); // Food circle
    mFood.setFillColor(sf::Color::Green);
    FoodGenerator();
}

void Snake::FoodGenerator() // Generates the new food position
{
    int randomX = rand() % (mWindow.getSize().x / mSize);
    int randomY = rand() % (mWindow.getSize().y / mSize);

    for(unsigned int i = 0; i < mSnakes.size(); i++)
    {
        if((mSnakes[0].getPosition().x != randomX * mSize) && (mSnakes[0].getPosition().y != randomY))
        {
            mFood.setPosition(randomX * mSize, randomY * mSize);
        }
    }
}

void Snake::AddCase() // Add 1 more case
{
    sf::RectangleShape rect;
    rect.setSize(sf::Vector2f(32, 32));
    rect.setOutlineColor(sf::Color::Black);
    rect.setOutlineThickness(1.0f);

    if (mSnakes.empty())
    {
        rect.setFillColor(sf::Color::Red);
        rect.setPosition(320, 256);
    }
    else
    {
        rect.setFillColor(sf::Color::Yellow);
        rect.setPosition(mSnakes[mSnakes.size() - 1].getPosition().x - rect.getSize().x, mSnakes[mSnakes.size() - 1].getPosition().y);
    }

    mSnakes.push_back(rect);
}

void Snake::Move() // Move the snake every 250 ms and check collision
{
    if (mCurrentTime < mTimeToUpdate)
    {
        mCurrentTime += mClock.restart().asMilliseconds();
    }
    else
    {
        mCurrentTime = 0.0f;

        if (mSnakes.size() > 1)
        {
            for (unsigned int i = mSnakes.size() - 1; i > 0; i--)
            {
                mSnakes[i].setPosition(sf::Vector2f(mSnakes[i-1].getPosition().x, mSnakes[i-1].getPosition().y));
            }
        }

        if (mLeft)
        {
            mSnakes[0].move(-mSpeed, 0);
        }

        if (mRight)
        {
            mSnakes[0].move(mSpeed, 0);
        }

        if (mUp)
        {
            mSnakes[0].move(0, -mSpeed);
        }

        if (mDown)
        {
            mSnakes[0].move(0, mSpeed);
        }

        CheckCollision();
    }
}

void Snake::CheckCollision()
{
    for (unsigned int i = 2; i < mSnakes.size(); i++) // Snake's boxes
    {
        if (mSnakes[0].getPosition().x == mSnakes[i].getPosition().x
        && mSnakes[0].getPosition().y == mSnakes[i].getPosition().y)
        {
            mWindow.close();
        }
    }

    if (mSnakes[0].getPosition().x < 0 || mSnakes[0].getPosition().x + mSnakes[0].getSize().x > mWindow.getSize().x // Window collision
    || mSnakes[0].getPosition().y < 0 || mSnakes[0].getPosition().y + mSnakes[0].getSize().y > mWindow.getSize().y)
    {
        mWindow.close();
    }

    if (mSnakes[0].getPosition().x == mFood.getPosition().x // Food collision
    && mSnakes[0].getPosition().y == mFood.getPosition().y)
    {
        AddCase();
        FoodGenerator();
    }
}

void Snake::Update(Event &event) // Check key input
{
    if (event.type == sf::Event::KeyPressed)
    {
        if (event.key.code == sf::Keyboard::Left)
        {
            if(mSnakes[0].getPosition().x - mSnakes[0].getSize().x != mSnakes[1].getPosition().x)
            {
                if(!mLeft && !mRight)
                {
                    mLeft = true;
                    mRight = false;
                    mUp = false;
                    mDown = false;
                }
            }
        }

        if (event.key.code == sf::Keyboard::Right)
        {
            if(mSnakes[0].getPosition().x + mSnakes[0].getSize().x != mSnakes[1].getPosition().x)
            {
                if(!mRight && !mLeft)
                {
                    mLeft = false;
                    mRight = true;
                    mUp = false;
                    mDown = false;
                }
            }
        }

        if (event.key.code == sf::Keyboard::Up)
        {
            if(mSnakes[0].getPosition().y - mSnakes[0].getSize().x != mSnakes[1].getPosition().y)
            {
                if(!mUp && !mDown)
                {
                    mLeft = false;
                    mRight = false;
                    mUp = true;
                    mDown = false;
                }
            }
        }

        if (event.key.code == sf::Keyboard::Down)
        {
            if(mSnakes[0].getPosition().y + mSnakes[0].getSize().x != mSnakes[1].getPosition().y)
            {
                if(!mUp && !mDown)
                {
                    mLeft = false;
                    mRight = false;
                    mUp = false;
                    mDown = true;
                }
            }
        }
    }
}

void Snake::Draw()
{
    mWindow.draw(mFood);

    for (unsigned int i = 0; i < mSnakes.size(); i++)
        mWindow.draw(mSnakes[i]);
}
 

4
Général / Re : Délai avant changement de touche
« le: Septembre 01, 2014, 04:06:13 pm »
Quel c*n !!!!

Merci laurent et désole du dérangement.

5
Général / Délai avant changement de touche
« le: Septembre 01, 2014, 03:14:24 pm »
Bonjour,

je souhaite déplacer un petit carré, j'y arrive bien sauf que lorsque je change de touche en plein déplacement, je constate une petit délai avant que mon carré se déplace à nouveau.

Voici le code :

    // Boucle
    while (window.isOpen())
    {
        sf::Time elapsedTime = clock.restart();

        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
            {
                window.close();
            }

            if(!isKeyPressed || keyPressed == LEFT)
            {
                if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
                {
                    rect.move(-RECT_SPEED*elapsedTime.asMilliseconds(), 0);
                    isKeyPressed = true;
                    keyPressed = LEFT;
                }
            }

            if(!isKeyPressed || keyPressed == RIGHT)
            {
                if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
                {
                    rect.move(RECT_SPEED*elapsedTime.asMilliseconds(), 0);
                    isKeyPressed = true;
                    keyPressed = RIGHT;
                }
            }

            if(!isKeyPressed || keyPressed == UP)
            {
                if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
                {
                    rect.move(0, -RECT_SPEED*elapsedTime.asMilliseconds());
                    isKeyPressed = true;
                    keyPressed = UP;
                }
            }

            if(!isKeyPressed || keyPressed == DOWN)
            {
                if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
                {
                    rect.move(0, RECT_SPEED*elapsedTime.asMilliseconds());
                    isKeyPressed = true;
                    keyPressed = DOWN;
                }
            }

            if(event.type == sf::Event::KeyReleased)
                isKeyPressed = false;
        }

        window.clear(sf::Color(0,162,255));
        window.draw(rect);
        window.display();
    }

6
Général / Re : Compiler SFML avec CMAKE
« le: Août 27, 2014, 12:24:16 am »
J'ai finalement réussi ^^, juste des erreurs liées aux déclaration de sf::Music seul l'audio ne semble pas être reconnu...

En tout cas merci de ton aide.


7
Général / Re : Compiler SFML avec CMAKE
« le: Août 26, 2014, 09:55:54 pm »
J'ai réussi à compiler la SFML mais ensuite je ne sais pas quoi faire...

Que faire des dynlib ? Faut il supprimé les .frameworks de l'ancienne installation ? Mais je n'ai pas de dossier include

8
Général / Re : Compiler SFML avec CMAKE
« le: Août 26, 2014, 08:01:54 pm »
Mais quel commande dois-je utiliser pour générer mon makefile ?

9
Général / Re : Compiler SFML avec CMAKE
« le: Août 26, 2014, 05:05:57 pm »
Je n'ai jamais utilisé de makefile, mais a priori je ne le trouve pas et j'ai bel est bien un .xcodeproj comme tu peut le voir

http://www.hostingpics.net/viewer.php?id=259255Capturedcran20140826170113.png

10
Général / Compiler SFML avec CMAKE
« le: Août 26, 2014, 04:34:23 pm »
Re-bonjour,

J'ai suivis le tutoriel pour compiler la sfml avec cmake mais pour mac os x, je trouve le tuto vraiment mal fais pour les utilisateurs de mac.

j'ai reussi à  générer les makefiles avec cmake mais une fois cette étapes passé je ne sais pas quoi faire d'autre...

Faut il compiler le projet xcode ou bien autre chôse ?

11
Général / Re : Résolution fenetre Mac os x
« le: Août 26, 2014, 03:47:14 pm »
D'accord merci je vais faire ça !

12
Général / Re : Résolution fenetre Mac os x
« le: Août 25, 2014, 09:45:12 pm »
Oui

13
Général / Re : Résolution fenetre Mac os x
« le: Août 25, 2014, 08:37:46 pm »
Le titre et les boutons "réduire" "fermer" sont pixelisée...

Si l'ont zoom dessus ont vois bien la différence avec les boutons de la fenêtre du coin en haut gauche.

14
Général / Re : Résolution fenetre Mac os x
« le: Août 25, 2014, 07:24:50 pm »
Ont le vois un petit peu, au niveau du titre de la fenêtre.

http://www.hostingpics.net/viewer.php?id=576720Capturedcran20140825192223.png

15
Général / Résolution fenetre Mac os x
« le: Août 25, 2014, 07:04:13 pm »
Bonsoir,

je viens tout juste d'installer la SFML sur mon Macbook et je viens de remarquer que lorsque j'ouvre une fenêtre celle ci est pixelisée.

Je sais pas si c'est normal mais c'est pas jolie en tout cas ^^

Merci d'avance.

Pages: [1] 2 3 ... 6 Suivante »