[ncurses]Problem z napisaniem Snake
Ostatnio zmodyfikowano 2013-01-05 15:26
Kocimientus Temat założony przez niniejszego użytkownika |
[ncurses]Problem z napisaniem Snake » 2013-01-04 20:30:17 #include <curses.h> #include <cstdlib> #include <ctime> int kolumny = 0; int rzedy = 0; char znak; const char lewo = 'a'; const char prawo = 'd'; const char gora = 'w'; const char dol = 's';
class pos { public: int x; int y; pos(); };
pos::pos() : x( 3 ) , y( 0 ) { }
class snake { public: int speed; pos s; char * waz; snake(); void left() { attron( A_INVIS ); mvprintw( s.y, s.x, waz ); attroff( A_INVIS ); s.x--; mvprintw( s.y, s.x, waz ); } void right() { attron( A_INVIS ); mvprintw( s.y, s.x, waz ); attroff( A_INVIS ); s.x++; mvprintw( s.y, s.x, waz ); } void up() { attron( A_INVIS ); mvprintw( s.y, s.x, waz ); attroff( A_INVIS ); s.y--; mvprintw( s.y, s.x, waz ); } void down() { attron( A_INVIS ); mvprintw( s.y, s.x, waz ); attroff( A_INVIS ); s.y++; mvprintw( s.y, s.x, waz ); } };
snake::snake() : waz( "0" ) { mvprintw( s.y, s.x, waz ); };
class punkt { public: char * japko; pos j; punkt(); void losuj() { j.y =( rand() % 21 ) + 2; j.x =( rand() % 74 ) + 2; } };
punkt::punkt() : japko( "@" ) { losuj(); mvprintw( j.y, j.x, japko ); };
class map { public: char * sciana; pos m; map(); void tworzmape() { } void rysujmape() { } };
map::map() : sciana( "X" ) { tworzmape(); rysujmape(); };
int main() { srand( time( 0 ) ); initscr(); keypad( stdscr, TRUE ); noecho(); raw(); getmaxyx( stdscr, rzedy, kolumny ); snake snejk; punkt jabko; while( znak = 44 ) { znak = getch(); if( znak == lewo ) { snejk.left(); } else if( znak == prawo ) { snejk.right(); } else if( znak == gora ) { snejk.up(); } else if( znak == dol ) { snejk.down(); } } getch(); endwin(); }
Mój problem polega na tym że nie wiem jak zrobić by wąż poruszał się sam w danym kierunku przez cały czas. Byłbym wdzięczny gdybyście mnie nakierowali :P I kolejna sprawa: jak porównać współrzędne z dwóch różnych klas np. s.x z j.x ? |
|
pekfos |
» 2013-01-04 20:50:39 1. Nie zatrzymuj programu przez getch() 2. Operatory porównania..? |
|
Kocimientus Temat założony przez niniejszego użytkownika |
» 2013-01-04 20:56:33 1.Jak nie zatrzymam przez getch to nie będe mógł zmienić kierunku węża 2.Wiem że trzeba użyć operatorów porównania ale problem jest w tym że gdy umieszczę współrzędne z klasy w main to wywala że one są niezadeklarowane |
|
crash |
» 2013-01-05 03:09:58 Poszukaj gotowca w necie i przeanalizuj, nie mniej próbuj pisać sam i za bardzo nie zgapiać, w żadnym wypadku ctrl+c... :) Porównanie pół dwóch różnych klas/struktur - tutaj ważny jest dostęp do pól. Jeśli pole jest prywatne to nie można się do niego dostać przez operator . lub -> właśnie dlatego, że to pole jest prywatne i spoza klasy/struktury dane pole jest niewidoczne. Aby móc zmieniać taką wartość lub odczytać ją (czyli mieć do niej dostęp mimo prywatności), należy do tego celu napisać odpowiednie funkcje składowe (metody) danej struktury i uczynić je publicznymi. Chodzi o to, by przypadkowo nie zmieniać takich pól przez swobodny do nich dostęp. #include <iostream>
class Test { private: int n; public: Test() { n = 0; } void Ustaw( int nowaWartosc ) { n = nowaWartosc; } int Pobierz() { return n; } };
int main() { Test T; T.n++; T.Ustaw( 33 ); std::cout << T.Pobierz(); std::cin.ignore(); }
Wywołując metody ciężej jest o przypadkową zmianę wartości danego pola oznaczonego jako prywatne. |
|
Kocimientus Temat założony przez niniejszego użytkownika |
» 2013-01-05 15:26:09 Dzięki, jakoś sobie dalej poradzę :) |
|
« 1 » |