Ostatnio zacząłem pisać swojego pierwszego w życiu snake'a. Natknąłem się jednak na przeszkody w czasie pisania algorytmu poruszania się węża. Postanowiłem, że przy każdym poruszeniu, głowa zostanie narysowana tam, gdzie wskazuje kierunek, a ostatni element węża będzie usuwany. Natomiast wszystkie części węża będą pobierały dane od następnej. Zresztą, co ja będę pisał, po prostu spójrzcie na kodzik:
#include <iostream>
#include <windows.h>
#include <vector>
using namespace std;
const int width=45;
const int height=15;
struct position
{
int x,y;
};
int n = 4; // Dlugosc weza
char pole[width][height];
bool start_game = false;
char moved='r';
vector<position> pkt(n);
void cursor(int x, int y) // USTAWIA KURSOR NA PLANSZY
{
COORD c;
c.X=x;
c.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
}
void draw() // RYSUJE PLANSZE
{
for(int i=0; i<width; i++)
{
for(int j=0; j<height; j++)
{
if((j==0) || (j==height-1))
{
pole[i][j] = 'x';
cursor(i, j);
cout << "#";
}
else if((i==0) || (i==width-1))
{
pole[i][j] = 'x';
cursor(i, j);
cout << "#";
}
else
{
pole[i][j] = 'o';
}
}
}
cursor(0,height);
}
void game() // START GRY
{
if(start_game==false)
{
n=4;
pkt[0].x=5;
pkt[0].y=5;
pkt[1].x=6;
pkt[1].y=5;
pkt[2].x=7;
pkt[2].y=5;
pkt[3].x=8;
pkt[3].y=5;
start_game=true;
}
for(int i=0; i<n; i++)
{
cursor(pkt[i].x, pkt[i].y);
cout << char(219);
cursor(0,height);
}
if(moved=='r')
{
pkt[n-2]=pkt[n-1];
pkt[n-1].x+=1;
cursor(pkt[0].x, pkt[0].y);
cout << " ";
cursor(0,height);
for(int i=0; i<n-1; i++)
{
pkt[i] = pkt[i+1];
}
}
}
int main()
{
draw();
for(;;)
{
game();
Sleep(20);
}
return 0;
}
No i problem taki, że ten algorytm nie działa jak powinien. Nie mam zielonego pojęcia, czemu pierwszy element węża zostaje, a reszta działa poprawnie i się porusza. Może to niejasno wyjaśniłem, ale jak ktoś odpali program będzie wiedział o co chodzi. Nie proszę oczywiście o gotowce, tylko nakierowanie mnie co źle zrobiłem. Z góry dzięki za porady :)