Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Hilfe beim "Glücksrad" (https://www.delphipraxis.net/83856-hilfe-beim-gluecksrad.html)

Bansh 7. Jan 2007 14:40


Hilfe beim "Glücksrad"
 
Haloa zusammen, versuche gerade einen Ableger vom bekannten "Glücksrad" zu machen.

Das Poblem liegt nu daran das wenn ich Worte mit 2 gleichen Buchstaben habe er nur eins hinschreibt:

Delphi-Quellcode:
procedure TForm1.btnVersuchClick(Sender: TObject);
var i,v : Integer;
begin
  for i := 0 to length(wort) do
  Begin
  try
    v := pos(LowerCase(edtVersuch.Text),LowerCase(wort))-1;
      if v = 0 then objEdt[0].Text := Uppercase(edtVersuch.Text)
      else objEdt[v].Text := LowerCase(edtVersuch.Text);
    except
    end;
  end;
end;
Das er nur einmal soweit geht bis ers gefunden hat und dann aufhört ist klar. Nur wie bekomm ich hin
das er auch das zweite findet? Und das zweite Problem wäre das wenn ich was falsches eingebe (andren Buchstaben als gesucht) er mir nen .exe error ausgibt :(

Hoffe könnt mir helfen

Mfg Bansh

Klaus01 7. Jan 2007 14:52

Re: Hilfe beim "Glücksrad"
 
Hallo und herzlich willkommen,

Ich weiß nicht welche Delphi Version Du nutzt.
Sollte es aber Delphi 2005 oder höher sein kanst Du Dir einmal posex anschauen.
Da kannst Du angeben ab welcher Stelle des Wortes der Buchstabe gesucht werden soll.

Ansonsten kannst Du das Wort umkopieren (copy) ab der Stelle wo der Buchstabe das erstemal gefunden wurde.

oder:
Delphi-Quellcode:
// Lösungswort initialisieren

 Loesungswort:=wort;
 for i:=1 to length(lösungswort) do
   loesungswort[i]:='_';
...

// suche Button;
 gefunden:=false;
 for i:=1 to length(wort) do
   if buchstabe = wort[i] then
     begin
       loesungswort[i]:=buchstabe;
       gefunden:=true;
     end;
Grüße
Klaus

Bansh 7. Jan 2007 16:34

Re: Hilfe beim "Glücksrad"
 
Ok vielen dank werde mir das mal morgen anschauen, heute schon nen rauchenden kopf :)

Problem also gelöst, vielan dank :)

Bansh 8. Jan 2007 15:34

Re: Hilfe beim "Glücksrad"
 
Grml irgendwie bekomm ich es nicht zum laufen...

versteh grad nicht genau was ich machen soll :(

Klaus01 8. Jan 2007 15:42

Re: Hilfe beim "Glücksrad"
 
Delphi-Quellcode:
// GesuchtesWort initialisieren
// die ganze Prozedure stellt Dir das gesuchte Wort als ____ ____ dar.
// also pro Buchstaben einen Unterstrich
// wobei GesuchtesWort und Wort jeweils ein String sind

GesuchtesWort:=wort;  // das ist nur um die Länge des Wortes zu haben
for i:=1 to length(gesuchtesWort) do
  if gesuchtesWort[i] <> ' ' then   // erhalten der Leerzeichen
    gesuchtesWort[i]:='_';
...

Delphi-Quellcode:
// suche Button;
//durchsuche das ganze Wort nach einem Buchstaben
// wobei Buchstabe ein Char ist, und der Buchstabe sein sollte der gerade "erdreht" wurde
for i:=1 to length(wort) do
   if buchstabe = wort[i] then // Buchstaben gefunden
     begin
       GesuchtesWort[i]:=buchstabe;   // das stellt sich dann z.B. so dar: ___e_ e___
     end;
Habe es einmal ein wenig mehr kommentiert.

Wenn noch Fragen sind, bitte etwas genauer beschreiben was denn nicht geht - oder nicht zum Laufen gebracht werden kann.
Vielleicht haben wir ja verschiedene Ansätze zu dem Problem.

Grüße
Klaus

Bansh 8. Jan 2007 16:35

Re: Hilfe beim "Glücksrad"
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hab das mit edit feldern gemacht :)
Ich post mal mein Programm ist dann vielleicht einfacher zu verstehen.

(Es ist leider noch nichts kommentiert und nicht gerade geordnet. Sorry dafür)

Klaus01 8. Jan 2007 19:01

Re: Hilfe beim "Glücksrad"
 
Liste der Anhänge anzeigen (Anzahl: 1)
Habe Dir mal meine exe angehängt.
Ist meines Erachtens leicher durch einen String zu suchen
als über mehrere Editfelder.


[edit1]
Habe Deine button.click Methode einmal etwas umgestellt.

Delphi-Quellcode:
procedure TForm1.btnVersuchClick(Sender: TObject);
var i,v : Integer;
begin
  for i := 1 to length(wort) do
  Begin
  try
    //v := pos(LowerCase(edtVersuch.Text),LowerCase(wort))-1;
      if lowerCase(edtVersuch.Text) = lowerCase(wort[i]) then
        objEdt[i-1].Text := Uppercase(edtVersuch.Text);
      //else
      //  objEdt[v].Text := LowerCase(edtVersuch.Text);
    except
    end;
  end;
end;
Was Du noch ausbessern könntest, ist die Darstellung des Textes bzw. deren Platzhalter wenn das Wort mal größer als
6 Buchstaben ist.
Und es passiert nichts wenn das Wort erraten wurde.
[edit1]

Grüße
Klaus

Bansh 8. Jan 2007 22:54

Re: Hilfe beim "Glücksrad"
 
Vielen vielen vielen dank :hello:

Nu hab ichs komplett verstanden. Danke dir wirklich :)
Und das nichts passiert, bzw die Felder bei langen Worten spinnen... Das wird alles noch gemacht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz