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 :)