Stránka 1 z 1

Programování v Object pascal  Vyřešeno

Napsal: 11 led 2018 18:07
od radekzatec
Dobrý den,
mám úkol, naprogramovat hru v object pascal (jde o hru šibenice) celou jí mam naprogramovanou jen si nevím rady dvěmi drobnostmi.

Zaprvé potřebuji v této podobě kódu, aby zmačknutí tlačítka akceptovalo "A" i "Á" nebo "E", "É" i "Ě" nevím jak to provést.

Kód: Vybrat vše

procedure TForm1.Button10Click(Sender: TObject);
begin
     Button10.Enabled := False;
     DostatZnak('e');
     AktualizaceObrazku;
end;


Druhý problém je při ukládání slov do souboru vždy mi data uložené v souboru přepíše a uloží nové - potřebuji slova přidávat.

Kód: Vybrat vše

procedure TForm1.Button2Click(Sender: TObject); //Tlačítko přidat slovo
Var
   Slovo: String;
begin                            // Vstupní dotaz
     MessageDlg('Slova s více než 10 písmeny a méně než 3 písmena se nebudou brát v úvahu.', mtWarning, [mbOK], 0);
     if InputQuery('Přidat slovo, zadejte slovo', 'které chcete přidat do seznamu: ', Slovo) = True then
     begin
      if (Length(Slovo) > 2) and (Length(Slovo) < 10) then   // Zkontrolujeme velikost
        begin
          ListBox1.Items.Add(Slovo);  // Slovo přidáme
          ListBox1.Sorted := False;
          ListBox1.Sorted := True;
          ListBox1.Items.SaveToFile(Dirr + 'seznam_slov.txt'); // Uložíme
          Label3.Caption := IntToStr(ListBox1.Items.Count);  // Změníme zobrazený počet slov
        end;
     end;
end;


Děkuji za pomoc Radek

Re: Programování v Object pascal

Napsal: 11 led 2018 18:32
od satik
Co dela funkce dostatznak?

Seznam slov by bylo dobry asi nejdriv nacist, abys v seznamu mel ty slova, co jsou v souboru, takhle je v souboru prepises jen tim, co je v seznamu.

Re: Programování v Object pascal

Napsal: 11 led 2018 18:45
od faraon
radekzatec píše: ListBox1.Items.SaveToFile(Dirr + 'seznam_slov.txt'); // Uložíme

Neexistuje tam něco jako "AppendToFile"?

Znaky s diakritikou se ti nenačtou vůbec, nebo je potřebuješ převést na tvar bez nabodeníček?

Re: Programování v Object pascal

Napsal: 11 led 2018 18:55
od radekzatec
Načítá stisklé buton písmeno přímo ve hře.
Zde je screen hry https://ctrlv.cz/8ydA
Diakritiku Mi to načítá normálně jen nevím jak vyřešit že stisknuté "e" načte všechny "e" včetně diakritiky.

Kód: Vybrat vše

procedure TForm1.DostatZnak(C:Char);   // Postup, který skenuje slovo a přidá znak C, pokud je ve slově
Var
   I: Integer;
   Nalezeno: Boolean;
begin
     Nalezeno := False;
     for I := 1 to Length(PouziteSlovo) do  // Hledáme slovo
begin
     if UpperCase(PouziteSlovo[I]) = UpperCase(C) then begin StringGrid1.Cells[I - 1, 0] := C; Nalezeno := True; end;
end;
    if Nalezeno = False then StavZivota := StavZivota + 1;  // Pokud jsme znak nenašli, přidáme 1 do stavu života
end;


Tak práce se souborem je již vyřešena SATIK MOC díky

Řešení takto:

Kód: Vybrat vše

 ListBox1.Items.LoadFromFile(Dirr + 'seznam_slov.txt');


Celý kód pak takto:

Kód: Vybrat vše

procedure TForm1.Button2Click(Sender: TObject); //Tlačítko přidat slovo
Var
   Slovo: String;
begin                            // Vstupní dotaz
     MessageDlg('Slova s více než 10 písmeny a méně než 3 písmena se nebudou brát v úvahu.', mtWarning, [mbOK], 0);
     if InputQuery('Přidat slovo, zadejte slovo', 'které chcete přidat do seznamu: ', Slovo) = True then
     begin
      if (Length(Slovo) > 2) and (Length(Slovo) < 10) then   // Zkontrolujeme velikost
        begin
          ListBox1.Items.LoadFromFile(Dirr + 'seznam_slov.txt');
          ListBox1.Items.Add(Slovo);  // Slovo přidáme
          ListBox1.Sorted := False;
          ListBox1.Sorted := True;
          ListBox1.Items.SaveToFile(Dirr + 'seznam_slov.txt'); // Uložíme
          Label3.Caption := IntToStr(ListBox1.Items.Count);  // Změníme počet slov
        end;
     end;
end;

Re: Programování v Object pascal

Napsal: 13 led 2018 13:36
od satik
Asi bych si pro kazdy pismenko ulozil pole s znakama, co mu odpovidaji a pri kontrole vyzkousel vsechny z toho pole a az pokud se ani jedno nenajde, tak to oznacil ze tam neni.