Как я могу решить этот графический c вопрос с помощью библиотеки sfml? - PullRequest
0 голосов
/ 29 мая 2020

Я написал простую игру-змейку, у меня очень мало опыта работы с графическими c библиотеками, я впервые с такими вещами. Код написан на c ++ с использованием библиотек SFML / Graphics.hpp и time.h. У него нет проблем, но когда я запускаю его, я вижу какой-то квадрат, который sh вместо игры змейки, которая идет нормально.

#include <SFML/Graphics.hpp>
#include <time.h>
using namespace sf;

int N=30,M=20;
int width = 600;
int height = 600;
int scl = 20;
int dir, num = 1;

struct Snake 
{ int x,y;}  s[100];

struct Apple
{ int x,y;}  a;

void Move(){
    for (int i = num; i > 0; i--)
    {
        s[i].x=s[i-1].x;
        s[i].y=s[i-1].y;
    }

    if (dir==0){s[0].x+=scl;}
    if (dir==1){s[0].y-=scl;}
    if (dir==2){s[0].y+=scl;}
    if (dir==3){s[0].x-=scl;}

    if (s[0].x==a.x && s[0].y==a.y)
    {
        num++;
        a.x=rand()%scl;
        a.y=rand()%scl;
    }
    for (int i=num; i>0; i--)
    {
        if (s[i].x==a.x && s[i].y==a.y)
        {
            a.x=rand()%N;
            a.y=rand()%M;
        }
    }

    if (s[0].x>N) {s[0].x=0;}  if (s[0].x<0) {s[0].x=N;}
    if (s[0].y>M) {s[0].y=0;}  if (s[0].y<0) {s[0].y=M;}
}

void game(){

}

int main()
{
    srand(time(0));

    RenderWindow window(VideoMode(width, height), "Snake");

    RectangleShape rectangle(Vector2f(scl, scl));
    RectangleShape rectapple(Vector2f(scl, scl));

    Clock clock;   
    float timer=0, delay=0.5;

    a.x=10;
    a.y=10;

    while (window.isOpen())
    {
        float time = clock.getElapsedTime().asSeconds();
        clock.restart();
        timer+=time;

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

        if (Keyboard::isKeyPressed(Keyboard::Left)) dir=1;   
        if (Keyboard::isKeyPressed(Keyboard::Right)) dir=2;    
        if (Keyboard::isKeyPressed(Keyboard::Up)) dir=3;
        if (Keyboard::isKeyPressed(Keyboard::Down)) dir=0;

        window.clear(Color::Black);
        window.display();
        if (timer>delay)
        {
            timer=0;
            Move();
        }

        // draw //

        window.clear();

        for (int i=0;i<num;i++)
        { 
            rectapple.setPosition(s[i].x*scl, s[i].y*scl);
            window.draw(rectapple);
        }

        rectangle.setPosition(a.x*scl, a.y*scl);
        window.draw(rectangle);    

        window.display();
    }
    return 0;
}
...