Problem z poruszaniem sie weza.
Ostatnio zmodyfikowano 2013-11-03 16:33
słowik89 Temat założony przez niniejszego użytkownika |
Problem z poruszaniem sie weza. » 2013-11-03 15:16:16 Witam! Jestem początkującym programistą i wziąłem się za pisanie popularnej gry Snake. Niestety z racji mojej małej wiedzy nie jestem w stanie poradzić sobie z jednym problemem. Otóż jeden z elementów węża nie porusza się tak jak powinien a w zasadzie to stoi w miejscu i nie wiem jak temu zaradzić. Z góry dziękuje za pomoc. Wklejam kod mojego pseudo snake'a któremu jeszcze sporo brakuje do dokończenia: #include <iostream> #include <cstdlib> #include <vector> #include <conio.h> #include <windows.h> using namespace std; int const mapx = 21; int const mapy = 21;
struct pozycja { int x, y; };
class Gra { int mapa[ mapx ][ mapy ]; pozycja gracz; pozycja punkt; vector < pozycja > ogon; public: Gra() { for( int i = 0; i < mapx; i++ ) { for( int j = 0; j < mapy; j++ ) { if( i > 0 && j > 0 && i < mapx - 1 && j < mapy - 1 ) mapa[ i ][ j ] = 1; else mapa[ i ][ j ] = 0; } } gracz.x = 10; gracz.y = 10; punkt.x =( rand() % 19 ) + 1; punkt.y =( rand() % 19 ) + 1; pozycja start_ogon = { 11, 10 }; ogon.push_back( start_ogon ); pozycja start_ogon1 = { 12, 10 }; ogon.push_back( start_ogon1 ); pozycja start_ogon2 = { 13, 10 }; ogon.push_back( start_ogon2 ); pozycja start_ogon3 = { 14, 10 }; ogon.push_back( start_ogon3 ); } int score( int & a ) { int b; if( punkt.x == gracz.x && punkt.y == gracz.y ) { a = a + 1; while( punkt.x == gracz.x && punkt.y == gracz.y ) { punkt.x =( rand() % 19 ) + 1; punkt.y =( rand() % 19 ) + 1; } } cout << "Zdobyte Punkty: " << endl << a << endl; return a; } void reset() { for( int i = 0; i < mapx; i++ ) { for( int j = 0; j < mapy; j++ ) { if( i > 0 && j > 0 && i < mapx - 1 && j < mapy - 1 ) mapa[ i ][ j ] = 1; else mapa[ i ][ j ] = 0; } } } void rysuj() { for( int i = 0; i < mapx; i++ ) { for( int j = 0; j < mapy; j++ ) { switch( mapa[ i ][ j ] ) { case 0: cout << "x"; break; case 1: cout << " "; break; case 2: cout << "G"; break; case 3: cout << "*"; break; case 4: cout << "o"; break; } } cout << endl; } } void move_ogon() { for( int i = ogon.size(); i > 0; i-- ) { if( i == 1 ) ogon[ i ].x = gracz.x; else ogon[ i ].x = ogon[ i - 1 ].x; } for( int j = ogon.size(); j > 0; j-- ) { if( j == 1 ) ogon[ j ].y = gracz.y; else ogon[ j ].y = ogon[ j - 1 ].y; } } void move_player( int a ) { switch( a ) { case 'w': if( gracz.x - 1 < 1 ) break; else gracz.x--; break; case 's': if( gracz.x + 1 == mapx - 1 ) break; else gracz.x++; break; case 'a': if( gracz.y - 1 < 1 ) break; else gracz.y--; break; case 'd': if( gracz.y + 1 == mapy - 1 ) break; else gracz.y++; break; } } void wstaw_gracza( pozycja & gracz ) { mapa[ gracz.x ][ gracz.y ] = 2; } pozycja & zwroc_gracza() { return gracz; } void put_punkt( pozycja & punkt ) { mapa[ punkt.x ][ punkt.y ] = 3; } pozycja & return_punkt() { return punkt; } void wstaw_ogon( vector < pozycja >& ogon ) { for( int i = 0; i < ogon.size(); i++ ) mapa[ ogon[ i ].x ][ ogon[ i ].y ] = 4; } vector < pozycja >& zwroc_ogon() { return ogon; } };
int main() { system( "title S N A K E" ); Gra g; int wynik = 0; char kierunek = 'w'; bool repeat = true; while( repeat ) { g.score( wynik ); g.reset(); g.wstaw_gracza( g.zwroc_gracza() ); g.wstaw_ogon( g.zwroc_ogon() ); g.put_punkt( g.return_punkt() ); g.rysuj(); if( kbhit() ) { kierunek = getch(); switch( kierunek ) { case 27: repeat = false; break; } } g.move_ogon(); g.move_player( kierunek ); Sleep( 1000 ); system( "cls" ); } cout << "Twoj wynik to: " << wynik << endl << "K O N I E C G R Y"; return 0; }
[/i] |
|
pekfos |
» 2013-11-03 15:37:44 W move_ogon pomijasz element o indeksie 0. |
|
słowik89 Temat założony przez niniejszego użytkownika |
» 2013-11-03 16:33:24 Hehe takie małe niedopatrzenie. Dzięki wielkie za pomoc teraz śmiga jak trzeba nic tylko kolizje i powiększanie dodać :)
|
|
« 1 » |