DzieckoBezZycia Temat założony przez niniejszego użytkownika |
. » 2012-07-29 14:58:56 Alke jezeli robie tak, ze odrazu jest mapa tzn map[5][5] { 'a','b' itd.... }
To jak mam zrobic, zeby byl tam widoczny gracz(jako '&') i zeby mapa sie rysowala razem z nim? |
|
SeaMonster131 |
» 2012-07-29 15:44:01 Trzymaj przykład: do { czyscisz ekran; map[ player.y ][ player.x ] = '&'; rysujesz mape; sterowanie; } while();
|
|
DzieckoBezZycia Temat założony przez niniejszego użytkownika |
. » 2012-07-29 16:02:35 Zrobilem w ten sposob. Wywala mi mase dziwnego tekstu, co poprawic? #include <iostream> #include <conio.h> #include <windows.h>
using namespace std;
int MAP_X = 10; int MAP_Y = 15;
char map[ 10 ][ 15 ] = { '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#' };
int i, j;
struct Position2D { int x, y; };
class Game { Position2D player; int score; public: Game() : score( 0 ) { player.x = 1; player.y = 1; } void move_player() { char move = getch(); switch( move ) { case 'w': if( map[ player.x-- ][ player.y ] = '.' ) player.x--; else break; case 's': if( map[ player.x++ ][ player.y ] = '.' ) player.x++; else break; case 'a': if( map[ player.x ][ player.y-- ] = '.' ) player.y--; else break; case 'd': if( map[ player.x ][ player.y++ ] = '.' ) player.y++; else break; } } void put_player() { map[ player.x ][ player.y ] = '&'; } void draw_map() { for( i = 0; i <= MAP_X; i++ ) { for( j = 0; j <= MAP_Y; i++ ) { cout << map[ i ][ j ]; } cout << endl; } } };
int main() { Game g; for(;; ) { system( "cls" ); g.put_player(); g.draw_map(); g.move_player(); } return 0; }
|
|
kampar |
» 2012-07-29 16:11:09 if( map[ player.x-- ][ player.y ] = '.' )
Powinno być ==
cout << map[ j ];
Powinno byc map[ j ][ i ] , ale możliwe, że tak masz bo strona traktuje to jako znacznik |
|
OSA_PL |
» 2012-07-29 16:21:07 I tutaj for( j = 0; j <= MAP_Y; i++ ) powinno być j++. |
|
DzieckoBezZycia Temat założony przez niniejszego użytkownika |
. » 2012-07-29 17:30:23 Dziekuje, nie dopatrzylem tego. Teraz jest ok to o czym mowiliscie? Nie resetuje mapy, moge poruszac sie po elementach, po ktorych okreslilem, ze nie mozna, buduje lewa sciane podwojnie, nie pokazuje ostatniego elementu i na dole pokazuje sie znak usmiechu(LOL?). Kodzik: #include <iostream> #include <conio.h> #include <windows.h>
using namespace std;
int MAP_X = 10; int MAP_Y = 15;
char map[ 10 ][ 15 ] = { '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#' };
int i, j;
struct Position2D { int x, y; };
class Game { Position2D player; int score; public: Game() : score( 0 ) { player.x = 1; player.y = 1; } void move_player() { char move = getch(); switch( move ) { case 'w': if( map[ player.x-- ][ player.y ] == '.' ) player.x--; else break; case 's': if( map[ player.x++ ][ player.y ] == '.' ) player.x++; else break; case 'a': if( map[ player.x ][ player.y-- ] == '.' ) player.y--; else break; case 'd': if( map[ player.x ][ player.y++ ] == '.' ) player.y++; else break; } } void put_player() { map[ player.x ][ player.y ] = '&'; } void draw_map() { for( i = 0; i <= MAP_X; i++ ) { for( j = 0; j <= MAP_Y; j++ ) { cout << map[ i ][ j ]; } cout << endl; } } };
int main() { cout << "SIEMA XD"; getch(); Game g; for(;; ) { system( "cls" ); g.put_player(); g.draw_map(); g.move_player(); } return 0; }
|
|
kampar |
» 2012-07-29 20:02:15 map[ 10 ][ 15 ]
10 to jest Y, a 15 X. Ty w kodzie masz odwrotnie, pozmieniaj to przy wyświetlaniu i warunkach. Po ruszeniu postaci, musisz z powrotem zmieniać poprzedni znak na mapie, albo zmienić sposób wyświetlania, np:
void draw_map() { for( i = 0; i <= MAP_X; i++ ) { for( j = 0; j <= MAP_Y; j++ ) { if( i == player.x && j == player.y ) { cout << "&"; } else cout << map[ i ][ j ]; } cout << endl; } }
i wywalić funkcje put_player() |
|
OSA_PL |
» 2012-07-30 02:41:59 Co do błędu z wyświetlaniem, powoduje go przekraczanie wymiarów tablicy: for( i = 0; i <= MAP_X; i++ ) Problem z kolizjami: if( map[ player.x-- ][ player.y ] == '.' ) player.x--; i instrukcja break powinna się wykonywać niezależnie od prawdziwości warunku więc wywal else |
|
1 « 2 » 3 |