Skocz do zawartości

[BC++B] Plansza do Sudoku


koko1987

Polecane posty

Witam

Jestem poczatkujacym programista. Obecnie chcialbym stworzyc gre Sudoku...

I juz na samym poczatku mam problem z utworzeniem odpowiedniej planszy, tzn chcialbym aby byl do kazdego pola bardzo latwy dostep... I tutaj mam kilka pytan. Czy istnieje mozliwosc utworzenia, np. dwuwymiarowej tablicy skladajace sie z Editow? Czy moze istnieje jakies inne pole, ktore pozwoliloby stworzyc dwuwymiarowa tablice, w ktorej moglbym dodawac, sprawdzac, zmieniac pola i ich wartosc?

z gory dzieki za pomoc :)

pozdrawiam

Link do komentarza
Udostępnij na innych stronach

  • 8 months later...

Co do tablicy editów to da się.

Musisz stworzyć dwywymiarową tablicę wskaźników do TEdit i zaalokować ją (najlepiej w pętli for, bo trzeba jeszcze nadać każdemu editowi osobno name itd.)

Tutaj wklejam przykład mojego dawnego programu do parsowania danych z pliku csv.

Operuje on na vectorach (bo ilość komórek jest nieznana, dlatego dynamicznie tworzy edity). W przypadku tablic idea jest podobna.

//funkcja działa jak explode w php czyli rozdziela stringa względem jakiejś frazy - separatora
void StringExplode(std::string str, std::string separator, vector<string>* results){
   int found;
   found = str.find_first_of(separator);
   while(found != string::npos){
       if(found > 0){
           results->push_back(str.substr(0,found));
       }
       str = str.substr(found+1);
       found = str.find_first_of(separator);
   }
   if(str.length() > 0){
       results->push_back(str);
   }
}

//--------------------------------------------


//właściwa funkcja która tworzy edity i umieszcza je w odpowiednich miejscach
vector<vector<TEdit*> > __fastcall TForm1::parser(AnsiString nazwa)
{
    std::ifstream plik;
    size_t pos;
    std::string line;
    std::string end("");
    std::string separator(";");
    vector<string> splitted_line;
    vector<TEdit*> edit;
    vector<vector<TEdit*> > tab_edit;
    int lp=1;  //nr pola edit
    //-----------------------------------
    plik.open(nazwa.c_str(), std::ifstream::in);
    if(!plik.is_open()) throw nazwa;

    for (int i=0;;i++)
    {
        getline(plik, line);
        if(line.compare(end)==0) break;
        StringExplode(line, separator, &splitted_line);
        for(int j=0; j<splitted_line.size(); j++)
        {
           edit.push_back(new TEdit(this));
           edit[j]->Name = "Edit"+IntToStr(lp++);
           edit[j]->Left = 250+150*j;
           edit[j]->Top = 30*i;
           edit[j]->Parent = this;
           edit[j]->Text = splitted_line[j].c_str();
        }
        tab_edit.push_back(edit);
        edit.clear();
        splitted_line.clear();

    }
    return tab_edit;

}

 

Mam nadzieję, że to ci ułatwi trochę sprawę

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...