| Autor |
Beitrag |
Goolix
      
Beiträge: 83
|
Verfasst: Di 09.03.04 14:11
hi, ich prigrammiere für die schule momentan an einem Hangman-Prog.
es ist noch nach der einfachen version gefragt, es soll ein einziger fester begriff einprogrammiert werden, nach diesem wird dann gefragt.
das programm soll automatisch die wortlänge erkennen, und in ein lable oder editfeld für jeden buchstaben einen "-" einfügen.
bei eingabe eines buchstabens soll dann der entsprechende "-" durch den buchastaben ersetzt werden.
Den rest schaffe ich glaube ich selbst... die probleme sind:
wie lasse ich delphi die wortlänge erkennen und wie weiß delphi, welchen "-" es ersetzten soll/darf?
Das problem ist vor allem, dass uns keiner die befehle dafür gesagt hat und ich aus der delphi-hilfe nicht schlau werde, es wäre also super, wenn jemand auch einen kleinen code einfügen könnte.
danke in voraus
/goolix
Moderiert von Peter Lustig: Topic verschoben
|
|
Pascal
      
Beiträge: 155
Win 98, Win XP
Delphi 2005, Delphi 5
|
Verfasst: Di 09.03.04 15:38
Ein par Tipps:
Die function length(s:string):integer gibt die Länge eines Strings zurück
Die function pos(substr:string,s:string):integer gibt die Position eines Substrings(z.B.'A') in einem Strings zurück
|
|
Goolix 
      
Beiträge: 83
|
Verfasst: Di 09.03.04 22:34
ok, danke schonmal... mal sehen, ob ich es damit hinbekomme
/goolix
|
|
Jack Falworth
      
Beiträge: 222
Win XP Pro, Slackware 10.0
D5 Enterprise, C++, ABAP
|
Verfasst: Mi 10.03.04 12:40
ich nehme mal an der anwender gibt dann in einem edit oder sonstwo einen buchstaben ein und das Programm überprüft ob der buchstabe im Begriff vorhanden ist. Das könnte man so realisieren:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| var st: string; i: integer; Label1.caption:= ''; st:= begriff; for i:= 1 to length (st) do begin Label1.Caption:= Label1.caption + '-'; end;
for i:= 1 to length (st) do begin if st[i] = Edit1.Text then begin delete(label1.caption,i,1); Insert(st[i], label1.caption, i); end; end; |
das war jetzt einfach mal frei ausm Kopf. Habs nicht ausprobiert, sollte aber funktionieren.
Aber nur benutzen wenn dir sonst nichts einfällt, sonst entfällt der Lerneffekt
Wenn du Fragen hast nur zu!
MfG
Jack Falworth
PS:
@Mod: Falsches Forum, wäre vielleicht besser in Sonstiges aufgehoben. Es geht ja hier mehr um String Operationen.
_________________ Andere zu kritisieren ist mitunter eine Möglichkeit, sich selbst ins bessere Licht zu setzen.
|
|
Pascal
      
Beiträge: 155
Win 98, Win XP
Delphi 2005, Delphi 5
|
Verfasst: Mi 10.03.04 16:31
3 Sachen würde ich da ändern:
1. Label1.caption kann man nicht der Delete-Procedure übergeben, woran das auch immer liegt.
Delphi-Quelltext 1: 2: 3: 4:
| labelcaption:=label1.caption; delete(labelcaption,i,1); Insert(st[i], labelcaption, i); label1.caption:=labelcaption; |
2. Den ersten Teil würde ich in ein Create- oder Neustartclick- Ereigniss tun.
3. ,was aber nicht nötig ist: ich würde kein Editfeld benutzen, sondern die Procedure in onkeypress setzen und statt edit1.text key abfragen. (dann sollte man allerdings auf GROß/klein-Schreibung verzichten.)
aber ansonsten ist der Code ganz gut.
|
|
Goolix 
      
Beiträge: 83
|
Verfasst: Do 11.03.04 20:43
ok, danke schonmal.... der code ist ja relativ verständlich.
als ich ihn nun testen wollte, ist mir ein fehler aufgefallen:
wenn ich jetzt als begriff "goolix" nehme und ein o rate, dann werden mir zwar beide 'o' angezeigt, die noch nicht erratenen '-' verschwinden aber.... wie kann ich das ändern?
achso, eine frage hätte ich noch zu dieser zeile:
Quelltext 1:
| Label1.Caption:= Label1.caption + '-'; // In Label1 kommen so viele '-' wie der Begriff Zeichen hat |
wie erkennt delphi hier, wie lang das wort ist, und wieviele '-' es machen muss?[/code]
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Do 11.03.04 21:03
Hierdurch:
Delphi-Quelltext 1:
| for i:= 1 to length(st) do |
length gibt die Länge des strings zurück.
|
|
Pascal
      
Beiträge: 155
Win 98, Win XP
Delphi 2005, Delphi 5
|
Verfasst: Fr 12.03.04 13:56
| Zitat: | | wenn ich jetzt als begriff "goolix" nehme und ein o rate, dann werden mir zwar beide 'o' angezeigt, die noch nicht erratenen '-' verschwinden aber.... wie kann ich das ändern? |
Das klingt für mich so, als ob dann aus '------' ein 'oo' werden würde. Wenn du das meinst- Der Fehler tritt bei mir nicht auf. Aber, wenn du alles in eine Buttonclick procedure packst, dann wird aus 'g-----' +gedrückt 'o' wird zu '-oo---'. Wenn du das meinst, dann musst du den Quelltext nur wie von mir bereits erwähnt modifizieren: | Zitat: | | 2. Den ersten Teil würde ich in ein Create- oder Neustartclick- Ereigniss tun. |
Der Quellcode sieht dann etwa so aus: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.NeustartClick(Sender: TObject); begin Label1.caption:= ''; st:= 'goolix'; for i:= 1 to length (st) do Label1.Caption:= Label1.caption + '-'; end;
procedure TForm1.NeustartKeyPress(Sender: TObject; var Key: Char); begin for i:= 1 to length (st) do if st[i] = key then begin labelcaption:=label1.Caption; delete(labelcaption,i,1); Insert(st[i], labelcaption, i); label1.caption:=labelCaption; end; end; |
|
|
Goolix 
      
Beiträge: 83
|
Verfasst: Fr 12.03.04 15:58
also, das problem ist, dass er aus ------ wenn ich auf 'g' klicke bzw. es eingebe, nicht g----- ausgibt, sondern nur 'g'. wenn schon meinestwegen
'g' im label steht, und ich o eingebe, dann wird daraus satt 'goo---' oder wenigstens 'goo' nur 'oo'
|
|
Pascal
      
Beiträge: 155
Win 98, Win XP
Delphi 2005, Delphi 5
|
Verfasst: Sa 13.03.04 17:30
Dann schick mal deinen Code. Bei mir tritt der Fehler nämlich nicht auf. (Mein Code: s.o.)
|
|
Goolix 
      
Beiträge: 83
|
Verfasst: So 14.03.04 14:01
ok...
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var st: string; i: integer; // Laufvariable für for - Schleife labelcaption:string; begin
Label1.caption:= ''; st:= 'goolix'; for i:= 1 to length (st) do begin Label1.Caption:= Label1.caption + '-'; // In Label1 kommen so viele '-' wie der Begriff Zeichen hat end;
for i:= 1 to length (st) do // for - Schleife, die alle Zeichen des Begriffs durchgeht begin if st[i] = Edit1.Text then // wenn das eingegebene Zeichen im Begriff gefunden wird, dann.. begin delete(labelcaption,i,1); // löscht '-' an der Stelle i Insert(st[i], labelcaption, i); // fügt das eingegebene Zeichen an der Stelle i ein label1.caption:=labelcaption; end; end; end;
end. | [/code]
|
|
Pascal
      
Beiträge: 155
Win 98, Win XP
Delphi 2005, Delphi 5
|
Verfasst: Mo 15.03.04 17:21
Dann weiß ich jetzt warum der Fehler den du hast nicht der war, den ich erwartet habe: Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| begin >>labelcaption:=label1.caption;<< diesen Teil hast du in deinem Code vergessen delete(labelcaption,i,1); Insert(st[i], labelcaption, i); label1.caption:=labelcaption; end; | ansonsten musst du ihn genau so beheben wie oben ´bereits 2 mal beschrieben:
| Zitat: | | 2. Den ersten Teil würde ich in ein Create- oder Neustartclick- Ereigniss tun. |
(Der erste Teil ist der den ich bei meinem Code in das TForm1.NeustartClick-Ereignis getan habe: | Zitat: | Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.NeustartClick(Sender: TObject); begin Label1.caption:= ''; st:= 'goolix'; for i:= 1 to length (st) do Label1.Caption:= Label1.caption + '-'; end; | |
|
|
Goolix 
      
Beiträge: 83
|
Verfasst: Di 16.03.04 07:30
jo, danke deine super hilfe, programm läuft jetzt...und alles nur wegen einer zeile 
|
|
|