Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++]Myslalem, patrzylem... Dziwne bledy przy tworzeniu gry i male pytanie

Ostatnio zmodyfikowano 2012-07-31 09:02
Autor Wiadomość
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?
P-61375
SeaMonster131
» 2012-07-29 15:44:01
Trzymaj przykład:
C/C++
do
{
    czyscisz ekran;
    map[ player.y ][ player.x ] = '&';
    rysujesz mape;
    sterowanie;
} while();
P-61376
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?

C/C++
#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;
}
P-61380
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
P-61382
OSA_PL
» 2012-07-29 16:21:07
I tutaj
for( j = 0; j <= MAP_Y; i++ )
 powinno być j++.
P-61383
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:

C/C++
#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;
}
P-61385
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:
C/C++
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()
P-61390
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++ ) /*  zły operator porównania, powinien być "<"  */
 
Problem z kolizjami:
C/C++
if( map[ player.x-- ][ player.y ] == '.' ) // player.x-- != player.x - 1
     player.x--;

i instrukcja break powinna się wykonywać niezależnie od prawdziwości warunku więc wywal else



P-61402
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona