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

[c++]Konsolowa gra

Ostatnio zmodyfikowano 2013-11-12 10:22
Autor Wiadomość
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ś:
C/C++
void reset()
{
    for( int i = 0; i < 10; i++ )
    {
        for( int j = 0; j < 10; j++ )
        {
            //level[i][j] = level[i][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:
C/C++
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++ )
        {
            //level[i][j] = level[i][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;
        //Nie wiem...próbowałem Player.x = NULL
    }
   
}

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;
}
P-96105
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:
C/C++
const position2D pos = control( player );
if( level[ pos.y ][ pos.x ] != '#' )
     player = pos;

P-96106
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.
P-96107
« 1 »
  Strona 1 z 1