string, label, podmiana znaków w labelu zgodnie z znalezioną literą w stringu i jej numerem

0

Piszę grę, wisielec.
Wszystko już mam (90% programu), jednak męczę się z pewną pętlą.
Wpisane słowo do odgadnięcia to załóżmy "alaska"(wpisywany do edita), wciskam start i program zamienia ten wyraz na "_ _ _ _ _ _" który jest wyświetlany w label'u. Zrobiłem tak że słowo do odgadnięcia jest zapisywane do oddzielnego stringa (var slowo:string; / slowo_edit:=slowo;). Po czym przystępuję do szukania wpisanych liter do drugiego edit'a w slowo typu string, odbywa się to w ten sposób:

 for i:=1 to length(slowo) do
  if slowo[i]=literka[1] then ...no i tutaj powinien program podmieniać znalezioną literkę w słowie z podłogą (_) biorąc pod uwagę miejsce na którym literka w słowie jest

. No i właśnie nie wiem co napisać po tym "then" napisałem coś takiego: labelek[i+1]:=literka[1]; no ale nie chce zadziałać?
Mógłbym uzyskać jakąś podpowiedź do rozwiązania tego problemu ?

0

Poczytaj o funkcji

 pos 
0

Sugerujesz że wyszukiwanie mi nie działa ? Funkcje Pos znam, jednak nie wiem jak podmienić odpowiedni znak z labela zgodnie z numerem znalezionego znaku w stringu

0
var s:string;//zmienna pomocnicza
s:=labelek.Caption;
s[i+1]:=literka[1];
labelek.Caption:=s;
0

dobra już kapnąłem się o co kaman no i działa ale nie działa gdy jest w slowie więcej niż jedna taka sama literka np.
wpisane słowo: alabama
szukana litera: a
wygląd label'a:_ _ _ _ _ _ _
wygląd label'a po sprawdzeniu trafienia: a _ _ _ _ _ _
a powinno być tak: a _ a _ a _ a
daje to do pętli w tej sposób:

var
 literka: String;
 labelek,a: string;
 i,j, pose : Integer;

begin
 for i:=1 to length(slowo) do
   if Pos(literka, slowo[i])>0 then
    begin
      pose:=Pos(literka, slowo);
      labelek[pose*2-1]:=slowo[i];
      slowo_label.Caption:=labelek;
    end;
end; 

Co robię źle ??

0

poczytaj o funkcji

PosEx
0

Funkcja PosEx nie działa mi... jest jakieś inne rozwiązanie ??

1
var
 literka: Char;
 labelek,a: string;
 i,j, pose : Integer;
 
begin
 for i:=1 to length(slowo) do if slowo[i]=literka then labelek[i]:=literka;
 slowo_label.Caption:=labelek;
end; 
0

literka jest teraz typu Char,
zatem jak przypisać zawartość edita do literki typu char ?

0

Zgadywaną literkę wpisuje się do Edita?
literka:=Edit1.Text[1] (najpierw sprawdzić czy w edicie cokolwiek jest)
Zainteresuj się też funkcją StringReplace

0

dzięki zapomniałem dodać tej "1" w nawiasie kwadratowym
gra skończona i działa w 100% thx za pomoc :)

0

a tak poza tematem to mam pytanie czy da się wyśrodkować zawartość label'a ?

0

Da się. Poszukaj we właściwościach.

0

No rzeczywiście jest Alignment :)

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