[c++]Konsolowa gra
Ostatnio zmodyfikowano 2013-11-12 10:22
GGG205 Temat założony przez niniejszego użytkownika |
[c++]Konsolowa gra » 2013-11-12 09:41:38 Witam. Mój ludek nie umie po sobie sprzątać, chciałem zrobić metodę reset(), ale dotychczas używałem pętli for na pustą mapę, a tam jest wiele przeszkód i nie wiem jak zresetować mapę. Próbowałem zrobić takie coś: void reset() { for( int i = 0; i < 10; i++ ) { for( int j = 0; j < 10; j++ ) { } } } Mam taki problem też z logiką, kiedy nasz bohater chce przejść przez ścianę to oczywiście nie może, ale nie wiem jak zrobić by stał w miejscu próbowałem to w ten sposób Player.x = NULL; Cały kod prezentuje się tak: bool gameStart = false;
struct postion2D { int x, y; } Player;
char level[ 10 ][ 10 ] = { "#########", "# # ! #", "# # #", "# ## #", "# # ##", "# # #", "# ## #", "# #", "#########" }; postion2D control( postion2D & Player ) { char button = getch(); if( button == 'w' ) { Player.y--; } else if( button == 's' ) { Player.y++; } else if( button == 'a' ) { Player.x--; } else if( button == 'd' ) { Player.x++; } return Player; }
void reset() { for( int i = 0; i < 10; i++ ) { for( int j = 0; j < 10; j++ ) { } } }
void draw() { for( int i = 0; i < 10; i++ ) { for( int j = 0; j < 10; j++ ) { level[ Player.y ][ Player.x ] = '@'; cout << level[ i ][ j ]; } cout << endl; } cout << Player.x << " " << Player.y << endl; }
void logic() { if( level[ Player.y ][ Player.x ] == '!' ) { cout << "You Win !" << endl; gameStart = true; } if( level[ Player.y ][ Player.x ] == '#' ) { cout << "WALL !" << endl; } }
int main() { Player.x = 1; Player.y = 1; while( gameStart != true ) { system( "cls" ); reset(); logic(); draw(); control( Player ); } cout << "PRESS ENTER..." << endl; getch(); return 0; } |
|
Monika90 |
» 2013-11-12 10:04:25 Niech funkcja control, zamiast modyfikować zmienną globalną, zwraca nową pozycje gracza. Jak już zwróci, to sprawdzasz czy na tej nowej pozycji jest mur, jak jest to nic nie robisz, jak nie ma to modyfikujesz pozycję gracza i rysujesz planszę. Coś jak to: const position2D pos = control( player ); if( level[ pos.y ][ pos.x ] != '#' ) player = pos;
|
|
maly |
» 2013-11-12 10:22:12 Dodam że funkcja reset będzie niepotrzebna jeśli Playera wogóle nie będziesz wpisywał do mapy a jedynie wyświetlał go w odpowiedniej chwili. |
|
« 1 » |