DzieckoBezZycia Temat założony przez niniejszego użytkownika |
[C++]Myslalem, patrzylem... Dziwne bledy przy tworzeniu gry i male pytanie » 2012-07-29 10:38:30 Przy probie kompilowania pliku wyswietla mi sie 8 dziwnych bledow: 1 to "multiple types in one declaration". a reszta to niezadeklarowane cout i endl(!). Co zrobilem zle? Jezeli tworze obiekt, przez ktory nie mozna sie poruszac, to czy musze zawsze robic cos takiego: if(player.x == (tu wpisuje liczbe x danego stalego elementu) && player.y == (a tu y)) ? To dosyc czasochlonne. Oto kodzik: #include<iostream> #include<conio.h> #include<windows.h> #include<time.h>
int const MAP_X = 20; int const MAP_Y = 30;
int i, j, lvl = 1, ruch = 0;
struct Position2D { int x, y; }
class Game { Position2D player; int score; public: Game() : score( 0 ) { player.x = 10; player.y = 23; } void move() { switch( lvl ) { case 1: { char move = getch(); switch( move ) { case 'w': { if( player.x-- == 7 && player.y == 11 ) break; if( player.x-- == 7 && player.y == 12 ) break; if( player.x-- == 7 && player.y == 13 ) break; if( player.x-- == 7 && player.y == 17 ) break; if( player.x-- == 7 && player.y == 18 ) break; if( player.x-- == 7 && player.y == 19 ) break; if( player.x-- == 7 && player.y == 23 ) break; if( player.x-- == 7 && player.y == 24 ) break; if( player.x-- == 7 && player.y == 25 ) break; if( player.x-- == 9 && player.y == 11 ) break; if( player.x-- == 9 && player.y == 12 ) break; if( player.x-- == 9 && player.y == 13 ) break; if( player.x-- == 9 && player.y == 17 ) break; if( player.x-- == 9 && player.y == 18 ) break; if( player.x-- == 9 && player.y == 19 ) break; if( player.x-- == 9 && player.y == 23 ) break; if( player.x-- == 9 && player.y == 24 ) break; if( player.x-- == 9 && player.y == 25 ) break; if( player.x-- == 11 && player.y == 11 ) break; if( player.x-- == 11 && player.y == 12 ) break; if( player.x-- == 11 && player.y == 13 ) break; if( player.x-- == 11 && player.y == 17 ) break; if( player.x-- == 11 && player.y == 18 ) break; if( player.x-- == 11 && player.y == 19 ) break; if( player.x-- == 11 && player.y == 23 ) break; if( player.x-- == 11 && player.y == 24 ) break; if( player.x-- == 11 && player.y == 25 ) break; if( player.x-- == 13 && player.y == 11 ) break; if( player.x-- == 13 && player.y == 12 ) break; if( player.x-- == 13 && player.y == 13 ) break; if( player.x-- == 13 && player.y == 17 ) break; if( player.x-- == 13 && player.y == 18 ) break; if( player.x-- == 13 && player.y == 19 ) break; if( player.x-- == 13 && player.y == 23 ) break; if( player.x-- == 13 && player.y == 24 ) break; if( player.x-- == 13 && player.y == 25 ) break; if( player.x-- == 15 && player.y == 11 ) break; if( player.x-- == 15 && player.y == 12 ) break; if( player.x-- == 15 && player.y == 13 ) break; if( player.x-- == 15 && player.y == 17 ) break; if( player.x-- == 15 && player.y == 18 ) break; if( player.x-- == 15 && player.y == 19 ) break; if( player.x-- == 15 && player.y == 23 ) break; if( player.x-- == 15 && player.y == 24 ) break; if( player.x-- == 15 && player.y == 25 ) break; if( player.x-- == 17 && player.y == 11 ) break; if( player.x-- == 17 && player.y == 12 ) break; if( player.x-- == 17 && player.y == 13 ) break; if( player.x-- == 17 && player.y == 17 ) break; if( player.x-- == 17 && player.y == 18 ) break; if( player.x-- == 17 && player.y == 19 ) break; if( player.x-- == 17 && player.y == 23 ) break; if( player.x-- == 17 && player.y == 24 ) break; if( player.x-- == 17 && player.y == 25 ) break; if( player.x - 1 == 0 ) break; else player.x--; ruch++; break; } case 's': { if( player.x++ == 7 && player.y == 11 ) break; if( player.x++ == 7 && player.y == 12 ) break; if( player.x++ == 7 && player.y == 13 ) break; if( player.x++ == 7 && player.y == 17 ) break; if( player.x++ == 7 && player.y == 18 ) break; if( player.x++ == 7 && player.y == 19 ) break; if( player.x++ == 7 && player.y == 23 ) break; if( player.x++ == 7 && player.y == 24 ) break; if( player.x++ == 7 && player.y == 25 ) break; if( player.x++ == 9 && player.y == 11 ) break; if( player.x++ == 9 && player.y == 12 ) break; if( player.x++ == 9 && player.y == 13 ) break; if( player.x++ == 9 && player.y == 17 ) break; if( player.x++ == 9 && player.y == 18 ) break; if( player.x++ == 9 && player.y == 19 ) break; if( player.x++ == 9 && player.y == 23 ) break; if( player.x++ == 9 && player.y == 24 ) break; if( player.x++ == 9 && player.y == 25 ) break; if( player.x++ == 11 && player.y == 11 ) break; if( player.x++ == 11 && player.y == 12 ) break; if( player.x++ == 11 && player.y == 13 ) break; if( player.x++ == 11 && player.y == 17 ) break; if( player.x++ == 11 && player.y == 18 ) break; if( player.x++ == 11 && player.y == 19 ) break; if( player.x++ == 11 && player.y == 23 ) break; if( player.x++ == 11 && player.y == 24 ) break; if( player.x++ == 11 && player.y == 25 ) break; if( player.x++ == 13 && player.y == 11 ) break; if( player.x++ == 13 && player.y == 12 ) break; if( player.x++ == 13 && player.y == 13 ) break; if( player.x++ == 13 && player.y == 17 ) break; if( player.x++ == 13 && player.y == 18 ) break; if( player.x++ == 13 && player.y == 19 ) break; if( player.x++ == 13 && player.y == 23 ) break; if( player.x++ == 13 && player.y == 24 ) break; if( player.x++ == 13 && player.y == 25 ) break; if( player.x++ == 15 && player.y == 11 ) break; if( player.x++ == 15 && player.y == 12 ) break; if( player.x++ == 15 && player.y == 13 ) break; if( player.x++ == 15 && player.y == 17 ) break; if( player.x++ == 15 && player.y == 18 ) break; if( player.x++ == 15 && player.y == 19 ) break; if( player.x++ == 15 && player.y == 23 ) break; if( player.x++ == 15 && player.y == 24 ) break; if( player.x++ == 15 && player.y == 25 ) break; if( player.x++ == 17 && player.y == 11 ) break; if( player.x++ == 17 && player.y == 12 ) break; if( player.x++ == 17 && player.y == 13 ) break; if( player.x++ == 17 && player.y == 17 ) break; if( player.x++ == 17 && player.y == 18 ) break; if( player.x++ == 17 && player.y == 19 ) break; if( player.x++ == 17 && player.y == 23 ) break; if( player.x++ == 17 && player.y == 24 ) break; if( player.x++ == 17 && player.y == 25 ) break; if( player.x + 1 == MAP_X - 1 ) break; else player.x++; ruch++; break; } case 'a': { if( player.x == 7 && player.y-- == 11 ) break; if( player.x == 7 && player.y-- == 12 ) break; if( player.x == 7 && player.y-- == 13 ) break; if( player.x == 7 && player.y-- == 17 ) break; if( player.x == 7 && player.y-- == 18 ) break; if( player.x == 7 && player.y-- == 19 ) break; if( player.x == 7 && player.y-- == 23 ) break; if( player.x == 7 && player.y-- == 24 ) break; if( player.x == 7 && player.y-- == 25 ) break; if( player.x == 9 && player.y-- == 11 ) break; if( player.x == 9 && player.y-- == 12 ) break; if( player.x == 9 && player.y-- == 13 ) break; if( player.x == 9 && player.y-- == 17 ) break; if( player.x == 9 && player.y-- == 18 ) break; if( player.x == 9 && player.y-- == 19 ) break; if( player.x == 9 && player.y-- == 23 ) break; if( player.x == 9 && player.y-- == 24 ) break; if( player.x == 9 && player.y-- == 25 ) break; if( player.x == 11 && player.y-- == 11 ) break; if( player.x == 11 && player.y-- == 12 ) break; if( player.x == 11 && player.y-- == 13 ) break; if( player.x == 11 && player.y-- == 17 ) break; if( player.x == 11 && player.y-- == 18 ) break; if( player.x == 11 && player.y-- == 19 ) break; if( player.x == 11 && player.y-- == 23 ) break; if( player.x == 11 && player.y-- == 24 ) break; if( player.x == 11 && player.y-- == 25 ) break; if( player.x == 13 && player.y-- == 11 ) break; if( player.x == 13 && player.y-- == 12 ) break; if( player.x == 13 && player.y-- == 13 ) break; if( player.x == 13 && player.y-- == 17 ) break; if( player.x == 13 && player.y-- == 18 ) break; if( player.x == 13 && player.y-- == 19 ) break; if( player.x == 13 && player.y-- == 23 ) break; if( player.x == 13 && player.y-- == 24 ) break; if( player.x == 13 && player.y-- == 25 ) break; if( player.x == 15 && player.y-- == 11 ) break; if( player.x == 15 && player.y-- == 12 ) break; if( player.x == 15 && player.y-- == 13 ) break; if( player.x == 15 && player.y-- == 17 ) break; if( player.x == 15 && player.y-- == 18 ) break; if( player.x == 15 && player.y-- == 19 ) break; if( player.x == 15 && player.y-- == 23 ) break; if( player.x == 15 && player.y-- == 24 ) break; if( player.x == 15 && player.y-- == 25 ) break; if( player.x == 17 && player.y-- == 11 ) break; if( player.x == 17 && player.y-- == 12 ) break; if( player.x == 17 && player.y-- == 13 ) break; if( player.x == 17 && player.y-- == 17 ) break; if( player.x == 17 && player.y-- == 18 ) break; if( player.x == 17 && player.y-- == 19 ) break; if( player.x == 17 && player.y-- == 23 ) break; if( player.x == 17 && player.y-- == 24 ) break; if( player.x == 17 && player.y-- == 25 ) break; if( player.y-- == 0 ) break; else player.y++; ruch++; break; } case 'd': { if( player.x == 7 && player.y++ == 11 ) break; if( player.x == 7 && player.y++ == 12 ) break; if( player.x == 7 && player.y++ == 13 ) break; if( player.x == 7 && player.y++ == 17 ) break; if( player.x == 7 && player.y++ == 18 ) break; if( player.x == 7 && player.y++ == 19 ) break; if( player.x == 7 && player.y++ == 23 ) break; if( player.x == 7 && player.y++ == 24 ) break; if( player.x == 7 && player.y++ == 25 ) break; if( player.x == 9 && player.y++ == 11 ) break; if( player.x == 9 && player.y++ == 12 ) break; if( player.x == 9 && player.y++ == 13 ) break; if( player.x == 9 && player.y++ == 17 ) break; if( player.x == 9 && player.y++ == 18 ) break; if( player.x == 9 && player.y++ == 19 ) break; if( player.x == 9 && player.y++ == 23 ) break; if( player.x == 9 && player.y++ == 24 ) break; if( player.x == 9 && player.y++ == 25 ) break; if( player.x == 11 && player.y++ == 11 ) break; if( player.x == 11 && player.y++ == 12 ) break; if( player.x == 11 && player.y++ == 13 ) break; if( player.x == 11 && player.y++ == 17 ) break; if( player.x == 11 && player.y++ == 18 ) break; if( player.x == 11 && player.y++ == 19 ) break; if( player.x == 11 && player.y++ == 23 ) break; if( player.x == 11 && player.y++ == 24 ) break; if( player.x == 11 && player.y++ == 25 ) break; if( player.x == 13 && player.y++ == 11 ) break; if( player.x == 13 && player.y++ == 12 ) break; if( player.x == 13 && player.y++ == 13 ) break; if( player.x == 13 && player.y++ == 17 ) break; if( player.x == 13 && player.y++ == 18 ) break; if( player.x == 13 && player.y++ == 19 ) break; if( player.x == 13 && player.y++ == 23 ) break; if( player.x == 13 && player.y++ == 24 ) break; if( player.x == 13 && player.y++ == 25 ) break; if( player.x == 15 && player.y++ == 11 ) break; if( player.x == 15 && player.y++ == 12 ) break; if( player.x == 15 && player.y++ == 13 ) break; if( player.x == 15 && player.y++ == 17 ) break; if( player.x == 15 && player.y++ == 18 ) break; if( player.x == 15 && player.y++ == 19 ) break; if( player.x == 15 && player.y++ == 23 ) break; if( player.x == 15 && player.y++ == 24 ) break; if( player.x == 15 && player.y++ == 25 ) break; if( player.x == 17 && player.y++ == 11 ) break; if( player.x == 17 && player.y++ == 12 ) break; if( player.x == 17 && player.y++ == 13 ) break; if( player.x == 17 && player.y++ == 17 ) break; if( player.x == 17 && player.y++ == 18 ) break; if( player.x == 17 && player.y++ == 19 ) break; if( player.x == 17 && player.y++ == 23 ) break; if( player.x == 17 && player.y++ == 24 ) break; if( player.x == 17 && player.y++ == 25 ) break; if( player.y + 1 == MAP_Y - 1 ) break; else player.y++; ruch++; break; } } if( player.x == 2 && player.y == 0 ) lvl++; if( player.x == 2 && player.y == 1 ) lvl++; if( player.x == 3 && player.y == 0 ) lvl++; if( player.x == 3 && player.y == 1 ) lvl++; } case 2: { char move = getch(); switch( move ) { case 'w': if( player.x - 1 == 0 ) break; else player.x--; ruch++; break; case 's': if( player.x + 1 == MAP_X - 1 ) break; else player.x++; ruch++; break; case 'a': if( player.y - 1 == 0 ) break; else player.y--; ruch++; break; case 'd': if( player.y + 1 == MAP_Y - 1 ) break; else player.y++; ruch++; break; } } } } void start() { system( "title MtN Game!" ); cout << "Witaj w swiecie MtN!\n" "Dzis twoim zadaniem bedzie wcielenie sie w Matiego i przezycie dnia w szkole. Powodzenia!\n" "Poruszasz sie za pomoca WASD.\n" "Nacisnij dowolny przycisk, by zaczac!\n"; getch(); system( "cls" ); } };
class Map { int map[ MAP_X ][ MAP_Y ]; int map2[ MAP_X ][ MAP_Y ]; public: void draw_map2() { for( i = 0; i < MAP_X; i++ ) { for( j = 0; j < MAP_Y; j++ ) { switch( map2[ i ][ j ] ) { case 0: cout << "."; break; case 1: cout << "&"; break; case 2: cout << "0"; break; case 3: cout << "X"; break; case 4: cout << "|"; break; } } cout << endl; } } void rysuj_mape() { switch( lvl ) { case 1: draw_map(); break; case 2: draw_map2(); break; } } void reset_map() { for( i = 0; i < MAP_X; i++ ) { for( j = 0; j < MAP_Y; j++ ) { map[ i ][ j ] = 0; map2[ i ][ j ] = 0; } } } void draw_map() { for( i = 0; i < MAP_X; i++ ) { for( j = 0; j < MAP_Y; j++ ) { switch( map[ i ][ j ] ) { case 0: cout << "."; break; case 1: cout << "&"; break; case 2: cout << "0"; break; case 3: cout << "X"; break; case 4: cout << "["; break; case 5: cout << "_"; break; case 6: cout << "]"; break; case 7: cout << "|"; break; case 8: cout << "M"; break; case 9: cout << "K"; break; case 10: cout << "D"; break; case 11: cout << "S"; break; case 12: cout << "P"; break; case 13: cout << "-"; } } cout << endl; } } void put_player() { map[ 10 ][ 23 ] = 1; map2[ 17 ][ 27 ] = 1; } void ramka() { for( i = 0; i < MAP_X; i++ ) { map[ MAP_X - 1 ][ i ] = 2; map[ i ][ 0 ] = 2; map2[ MAP_X - 1 ][ i ] = 2; map2[ i ][ 0 ] = 2; } for( j = 0; j < MAP_Y; j++ ) { map[ i ][ MAP_Y - 1 ] = 2; map[ i ][ 0 ] = 2; map2[ i ][ MAP_Y - 1 ] = 2; map2[ i ][ 0 ] = 2; } } void lawki_okna() { map[ 1 ][ 10 ] = 7; map[ 1 ][ 21 ] = 7; for( i = 11; i <= 20; i++ ) { map[ 1 ][ i ] = 7; } map[ 7 ][ 11 ] = 4; map[ 7 ][ 12 ] = 5; map[ 7 ][ 13 ] = 6; map[ 7 ][ 17 ] = 4; map[ 7 ][ 18 ] = 5; map[ 7 ][ 19 ] = 6; map[ 7 ][ 23 ] = 4; map[ 7 ][ 24 ] = 5; map[ 7 ][ 25 ] = 6; map[ 9 ][ 11 ] = 4; map[ 9 ][ 12 ] = 5; map[ 9 ][ 13 ] = 6; map[ 9 ][ 17 ] = 4; map[ 9 ][ 18 ] = 5; map[ 9 ][ 19 ] = 6; map[ 9 ][ 23 ] = 4; map[ 9 ][ 24 ] = 5; map[ 9 ][ 25 ] = 6; map[ 11 ][ 11 ] = 4; map[ 11 ][ 12 ] = 5; map[ 11 ][ 13 ] = 6; map[ 11 ][ 17 ] = 4; map[ 11 ][ 18 ] = 5; map[ 11 ][ 19 ] = 6; map[ 11 ][ 23 ] = 4; map[ 11 ][ 24 ] = 5; map[ 11 ][ 25 ] = 6; map[ 13 ][ 11 ] = 4; map[ 13 ][ 12 ] = 5; map[ 13 ][ 13 ] = 6; map[ 13 ][ 17 ] = 4; map[ 13 ][ 18 ] = 5; map[ 13 ][ 19 ] = 6; map[ 13 ][ 23 ] = 4; map[ 13 ][ 24 ] = 5; map[ 13 ][ 25 ] = 6; map[ 15 ][ 11 ] = 4; map[ 15 ][ 12 ] = 5; map[ 15 ][ 13 ] = 6; map[ 15 ][ 17 ] = 4; map[ 15 ][ 18 ] = 5; map[ 15 ][ 19 ] = 6; map[ 15 ][ 23 ] = 4; map[ 15 ][ 24 ] = 5; map[ 15 ][ 25 ] = 6; map[ 17 ][ 11 ] = 4; map[ 17 ][ 12 ] = 5; map[ 17 ][ 13 ] = 6; map[ 17 ][ 17 ] = 4; map[ 17 ][ 18 ] = 5; map[ 17 ][ 19 ] = 6; map[ 17 ][ 23 ] = 4; map[ 17 ][ 24 ] = 5; map[ 17 ][ 25 ] = 6; map[ 4 ][ 19 ] = 7; map[ 5 ][ 19 ] = 7; map[ 6 ][ 19 ] = 7; map[ 9 ][ 19 ] = 7; map[ 10 ][ 19 ] = 7; map[ 11 ][ 19 ] = 7; map[ 14 ][ 19 ] = 7; map[ 15 ][ 19 ] = 7; map[ 16 ][ 19 ] = 7; map2[ 1 ][ 6 ] = 2; map2[ 2 ][ 6 ] = 2; map2[ 5 ][ 6 ] = 2; map2[ 6 ][ 6 ] = 2; map2[ 1 ][ 14 ] = 2; map2[ 3 ][ 14 ] = 2; map2[ 5 ][ 14 ] = 2; map2[ 7 ][ 14 ] = 2; for( i = 1; i <= 14; i++ ) { map2[ 4 ][ i ] = 2; } for( i = 1; i <= 14; i++ ) { map2[ 8 ][ i ] = 2; } } void otoczenie() { map[ 2 ][ 0 ] = 3; map[ 3 ][ 0 ] = 3; map[ 2 ][ 1 ] = 3; map[ 3 ][ 1 ] = 3; map2[ 16 ][ 28 ] = 3; map2[ 16 ][ 29 ] = 3; map2[ 17 ][ 28 ] = 3; map2[ 17 ][ 29 ] = 3; map2[ 0 ][ 22 ] = 3; map2[ 0 ][ 23 ] = 3; map2[ 1 ][ 22 ] = 3; map2[ 1 ][ 23 ] = 3; ramka(); lawki_okna(); map[ 8 ][ 23 ] = 8; map[ 8 ][ 25 ] = 9; map[ 10 ][ 25 ] = 10; map[ 12 ][ 12 ] = 11; map[ 12 ][ 24 ] = 12; } };
int main() { Game g; Map m; g.start(); for(;; ) { m.reset_map(); m.otoczenie(); m.put_player(); m.rysuj_mape(); g.move(); system( "cls" ); } }
|
|
SeaMonster131 |
» 2012-07-29 11:29:41 Nigdy nie widziałem na oczy takiego kodu. o.O Co do błędu, masz np nazwę funkcji i zmiennej taką samą: void move() { switch( lvl ) { case 1: { char move = getch();
A co do tych wieelkich if'ów - nie trzeba tak robic. Wystarczy że masz zmienną X, Y, i tylko nimi manipulujesz, np: player.x = 10; player.y = 20;
...
if( klawisz_W ) player.y--;
if( klawisz S ) player.y++;
..
...
Wyswietl_Gracza( player.x, player.y );
Co do niezadeklarowane cout i endl sprawa ma się tak, iż są one w przestrzeni nazw std, a co za tym idzie musisz pisać albo: std::cout, std::endl, lub walnąć gdzieś przed ich używaniem using namespace std; |
|
DzieckoBezZycia Temat założony przez niniejszego użytkownika |
. » 2012-07-29 12:20:33 Nie zauwazylem braku namespace, jestem przyzwyczajony do tego, ze c::b sam dopisuje ;p Takze nie wiedzialem, ze nazwy nie moga byc takie same. Ale Sea, tu nie chodzi o poruszanie tylko o zablokowanie mozliwosci poruszania sie na dany element, bo sam zauwaz, ze
else player.x-- break;
to sluzy do poruszania sie ;p
Kod az tak straszny?
WIELKIE DZIEKI! :D |
|
SeaMonster131 |
» 2012-07-29 13:51:36 To nie lepiej zrobić tak? char mapa[ 5 ][ 5 ] = { 'x', 'x', 'x', 'x', 'x', 'x', ' ', 'x', ' ', 'x', 'x', ' ', ' ', ' ', 'x', 'x', ' ', 'x', ' ', 'x', 'x', 'x', 'x', 'x', 'x', };
...
if( klawisz_W && mapa[ player.y - 1 ][ player.x ] == ' ' ) player.y--;
if( klawisz_S && mapa[ player.y + 1 ][ player.x ] == ' ' ) player.y++;
..itd
? Wtedy będzie można poruszać się tylko po wolnym polu (' '). |
|
pekfos |
» 2012-07-29 14:05:20 multiple types in one declaration |
|
|
DzieckoBezZycia Temat założony przez niniejszego użytkownika |
. » 2012-07-29 14:32:47 Ej, a musza byc te klasy? Bez klas by nie dzialalo? Bez nich bylo by lepiej, bo pisze, ze np.cos nie jest zadeklarowane itd.itp?
Dzieki z tym struct, tego tez nie zauwazylem. |
|
SeaMonster131 |
» 2012-07-29 14:36:21 Ej, a musza byc te klasy? Bez klas by nie dzialalo? Bez nich bylo by lepiej, bo pisze, ze np.cos nie jest zadeklarowane itd.itp? |
Przy większych projektach klasy bardzo się przydają, co nie znaczy, że musisz z nich korzystać. |
|
DzieckoBezZycia Temat założony przez niniejszego użytkownika |
. » 2012-07-29 14:51:59 Zauwazylem, ze jezeli nie ma wogole klasy, to pisze, ze player jest undeclarated, chociaz zrobilem
Position2D player;
Korzystam teraz z 1 klasy, dzieki za podpowiedz |
|
« 1 » 2 3 |