Я написал простую игру-змейку, у меня очень мало опыта работы с графическими 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;
}