Skip to content
Snippets Groups Projects
Select Git revision
  • 8da4c928ae36874ea4af4ab99bb665eb2ee93a5b
  • main default protected
2 results

gamemaster.cpp

Blame
  • gamemaster.cpp 2.94 KiB
    #include "gamemaster.hpp"
    
    #define jelenlegi_i 9*jelenlegi.sor+jelenlegi.oszlop
    #define sorszam_i 9*sorszam.sor+sorszam.oszlop
    
    using namespace std;
    
    GameMaster::GameMaster(Application* parent, std::string mo, std::string fe) :
        _parent(parent), _fajl_megoldas(mo), _fajl_feladat(fe), _fajl_save("save.txt")
    {
        _parent->register_gm(this);
    
        _megoldas = fajl_beolvasas(_fajl_megoldas);
        _feladat = fajl_beolvasas(_fajl_feladat);
        _save = fajl_beolvasas(_fajl_save);
    
        // megmondja hogy melyik indexek melyik nagy negyzethez tartoznak
        _negyzetek.resize(9);
        for (int j=0; j<9; j++)  // sor
        {
            for (int i=0; i<9; i++)  // oszlop
            {
                Index sorszam(j,i);
                int negyzet = negyzet_szama(sorszam);
                _negyzetek[negyzet].push_back(sorszam_i);
            }
        }
    }
    
    
    set<int> GameMaster::aura(Index jelenlegi)
    {
        set<int> s;
    
        int negyzet=negyzet_szama(jelenlegi);
    
        for (int i=0; i<9; i++)
        {
            Index sorszam(jelenlegi.sor,i);
            s.insert(sorszam_i);
        }
    
        for (int i=0; i<9; i++)
        {
            Index sorszam(i,jelenlegi.oszlop);
            s.insert(sorszam_i);
        }
    
        for (int i=0; i<9; i++)
        {
            int sorszam = _negyzetek[negyzet][i];
            s.insert(sorszam);
        }
    
        s.erase(jelenlegi_i);
    
        return s;
    }
    
    int GameMaster::negyzet_szama(Index jelenlegi)
    {
        if (jelenlegi.sor <= 2)
        {
            if (jelenlegi.oszlop <= 2)
                return 0;
            else if (jelenlegi.oszlop <= 5)
                return 1;
            else
                return 2;
        }
        else if (jelenlegi.sor <= 5)
        {
            if (jelenlegi.oszlop <= 2)
                return 3;
            else if (jelenlegi.oszlop <= 5)
                return 4;
            else
                return 5;
        }
        else
        {
            if (jelenlegi.oszlop <= 2)
                return 6;
            else if (jelenlegi.oszlop <= 5)
                return 7;
            else
                return 8;
        }
    }
    
    void GameMaster::save(int sorszam, int ertek)
    {
        _save[sorszam]=ertek;
        save_fajlba();
    }
    
    bool GameMaster::szabalyos_e(int jelenlegi_ertek, set<int> ertekek)
    {
    
    }
    
    std::vector<int> GameMaster::get_feladat()
    {
        return _feladat;
    }
    
    std::vector<int> GameMaster::get_save()
    {
        return _save;
    }
    
    std::vector<int> GameMaster::fajl_beolvasas(std::string fajlnev)
    {
        std::ifstream fajl(fajlnev);
        std::vector<int> v;
    
        if (!fajl.good())
        {
            cout << "NEM JO A FAJL" << endl;
        }
    
        for (int i=0; i<81; i++)
        {
            int szam;
            fajl >> szam;
            v.push_back(szam);
        }
        fajl.close();
    
        return v;
    }
    
    void GameMaster::save_fajlba()
    {
        fajl_kiiras(_fajl_save,_save);
    }
    
    void GameMaster::fajl_kiiras(std::string fajlnev,std::vector<int> v) const
    {
        std::ofstream fajl(fajlnev);
        for (int ertek : v)
        {
            fajl << ertek << " ";
        }
        fajl << endl;
        fajl.close();
    }