Select Git revision
gamemaster.cpp
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();
}