Błąd w kodzie gry

0

Witam,
Czy mógłby mi ktoś pomoc znaleźć błąd w kodzie programu? Ja siedze i patrze i patrze i nie mam pojecia co jest nie tak, może jak ktoś spojrzy "świeżym" okiem to powie mi co jest źle.

// GRA.H--------------------------------------------------------------
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <vector>

using namespace std;

int const MAP_X=20;
int const MAP_Y=30;

struct Position2D
{
    int x, y;
};

class Game
{
private:
    Position2D player;
    vector<Position2D> monsters;
    int score;
    int monster_selected;
    bool not_failed;
public:
    Game() : monster_selected(0), score(0), not_failed(true)
    {
        player.x=10;
        player.y=15;
    }
    void fail ();
    bool fail_check()
    {
        return not_failed;
    }
    void start();
    void create_monsters(int);
    void score_up()
    {
        score++;
    }

    vector<Position2D>& return_ref_to_monster()
    {
        return monsters;
    }
    void move_player();
    void monster_ai();
    Position2D& return_ref_to_player()
    {
        return player;
    }
};

class Map
{
private:
    int mapa[MAP_X][MAP_Y];
public:
    Map()
    {
        for(int i=0;i<MAP_X;i++)
        {
            for(int j=0;j<MAP_Y;j++)
            {
                mapa[i][j]=0;
            }
        }
    }
    void draw();
    void reset();
    void put_player(Position2D& player)
    {
        mapa[player.x][player.y]=2;
    }
    void put_monster(vector<Position2D>& monsters)
    {
        for(int i=0;i<monsters.size();i++)
        {
            mapa[monsters[i].x][monsters[i].y]=1;
        }
    }
};

//GRA.CPP-------------------------------------------------------

#include "gra.h"

void Game::fail()
{
    system("cls");
    cout << "GAME OVER!"<<endl;
    cout<< "Monsters: "<< monster_selected<<endl;
    cout<< "Score: "<< score * monster_selected<<endl;
    Beep(500, 200);
    Beep(500, 200);
    Beep(500, 200);
    not_failed = false;
}
void Game::start()
{
    system ("title Simple Game");
    char menu='f';
    cout<<"------------------------"<<endl
        <<"--WITAJ W PROSTEJ GRZE--"<<endl
        <<"------------------------"<<endl
        <<"Wybierz liczbe potworow"<<endl
        <<"a)1, b)2, c)3, d)4"<<endl;
        cin>>menu;

    switch(menu)
    {
        case 'a':
            create_monsters(1);
            monster_selected =1;
        break;
        case 'b':
            create_monsters(2);
            monster_selected =2;
        break;
        case 'c':
            create_monsters(3);
            monster_selected =3;
        break;
        case 'd':
            create_monsters(4);
            monster_selected =4;
        break;
    }
    not_failed = true;
    system ("cls");
}

void Game::create_monsters(int number)
{
    Position2D monster = {19,29};
    Position2D monster2 = {0,0};
    Position2D monster3 = {0,29};
    Position2D monster4 = {19,0};

    switch(number)
    {
    case 1:
        monsters.push_back(monster);
    break;
    case 2:
        monsters.push_back(monster);
        monsters.push_back(monster2);
    break;
    case 3:
        monsters.push_back(monster);
        monsters.push_back(monster2);
        monsters.push_back(monster3);
    break;
    case 4:
        monsters.push_back(monster);
        monsters.push_back(monster2);
        monsters.push_back(monster3);
        monsters.push_back(monster4);
    break;
    }
}
void Game::move_player()
{
    char ruch = getch();
    switch(ruch)
    {
    case 'w':
        if(player.x-1==-1)
            break;
        else
            player.x--;
    break;
    case 's':
        if(player.x+1==MAP_X)
            break;
        else
            player.x++;
    break;
    case 'a':
        if(player.y-1==-1)
            break;
        else
            player.y--;
    break;
    case 'd':
        if(player.y+1==MAP_Y)
            break;
        else
            player.y++;
    break;
    }
}

void Game::monster_ai()
{
    for(int i=0;i<monsters.size();i++)
    {
        if(monsters[i].x<player.x)
            monsters[i].x++;
        if(monsters[i].x>player.x)
            monsters[i].x--;
        if(monsters[i].y<player.y)
            monsters[i].y++;
        if(monsters[i].y>player.y)
            monsters[i].y--;
        if(monsters[i].x<player.x)
            monsters[i].x++;

        if(monsters[i].y==player.y && monsters[i].x==player.x)
        {
            cout<< "MAM CIE!" << endl;
            fail();
        }
    }
}

void Map::draw()
{
    for(int i=0;i<MAP_X;i++)
    {
        for(int j=0;j<MAP_Y;j++)
        {
            switch(mapa[i][j])
            {
            case 0:
                cout <<".";
            break;
            case 1:
                cout <<"M";
            break;
            case 2:
                cout <<"@";
            break;
            }
        }
        cout << endl;
    }
}

void Map::reset()
{
        for(int i=0;i<MAP_X;i++)
        {
            for(int j=0;j<MAP_Y;j++)
            {
                mapa[i][j]=0;
            }
        }
}

//MAIN.CPP---------------------------------------------------
#include "gra.h"


using namespace std;

int main()
{
    Map m;
    Game g;
    g.start();
    while(g.fail_check())
    {
        m.reset();
        m.put_player(g.return_ref_to_player());
        m.put_monster(g.return_ref_to_monster());
        m.draw();
        g.monster_ai();
        g.move_player();
        g.score_up();
        system("cls");
    }
    return 0;
}



 
0
  1. A jaki jest błąd?
  2. Z dobrego serca podpowiem ci coś, a trudu sobie oszczędzisz:
    a) Wartość przechowywana przez blok (ID) niech reprezentuje bezpośrednio znak jakim jest rysowana
    b) Nigdy nie czyść ekranu - ustaw gotoxy w (0,0), narysuj mapę (y{x{rysuj} znak nowej linii} - potem tylko ustawiaj gracza i moby.
0

Błąd polega na tym, że podczas gry plancza sie w ogole nie zmienia. Cały czas jest ten sam ekran początkowy

1 użytkowników online, w tym zalogowanych: 0, gości: 1