![]() |
Delphi -newbie!
Hi erstmal an alle hier im Forum!
Es geht um folgendes, ich bin Schüler einer 11. Klasse des Gymnasiums Wettin und wir haben die Aufgabe im Informatik Unterricht ein Delphi-Projekt (Delphi4-Standard verwendet) zu erstellen in dem es möglich ist ein Ratespiel zu spielen.... ja... egal .. Auf jeden Fall haben wir gerade ein Problem damit. Uns fehlt es ..sagen wir mal an fachlicher Kenntnis :? ... Daher wollte ich fragen ob uns jmd mit den Prozeduren, zum Eingeben des zu erratenden Wortes helfen könnte... Die Spielregeln solen folgendermaßen aussehen: Es ist jeweils ein Wort mit angegebener Länge zu erraten. Sie können einen Buchstaben angeben, den Sie im Wort vermuten. Dieser Buchstabe wird, falls er im Wort vorkommt, in einem Hilfs- wort an den richtigen Stellen ausgeben. Sie können aber auch das ganze Wort eingeben, wenn Sie meinen, es erraten zu haben. Damit das Raten nicht zu schwer fällt, wird zu jedem Wort ein Hinweis gegeben, der sich in gewisser Weise auf das zu erratende Wort bezieht. Ich bedanke mich schonmal im Vorraus! :) |
Re: Delphi -newbie!
Wie weit bist du schon?
|
Re: Delphi -newbie!
Also wir haben grad angefangen und sind gerade mal soweit das wir das zu erratende Wort eingeben wollen. Dazu wollen wir eine Editbox nutzen .. das Programm soll dann erkennen wie lang das Wort ist und welche Buchstaben enthalten sind. Wenn dir das weiterhelfen würde, wir haben eine Pascal Vorlage bekommen in der das Programm vollständig geschrieben ist.
|
Re: Delphi -newbie!
Zitat:
Frank :gruebel: |
Re: Delphi -newbie!
Das Prob ist das wir nicht in der Lage sind die Programmiersprache von Pascal in Delphi zu übersetzen.
Wie gesagt wir sind in der Hinsicht nicht unbedingt die Pros.. |
Re: Delphi -newbie!
Zitat:
Mal abgesehen von einer "anderen" GUI. Aber formuliere doch mal Deine/eine Frage... Dann kann Dir vielleicht hier jemand helfen... Frank :stupid: |
Re: Delphi -newbie!
Hi
Erst mal, willkommen. So, nun zur Hilfe, ja, die solltet ihr benutzen und zwar die von Delphi selbst. Also, ihr wollt Delphi lernen und dazu muß man einfach wissen, dieses Programm arbeitet wie fast alle Programmiersprachen mit englischen Begriffen. Die Länge eines Strings, und das ist der Text in TEdit nun mal, wird mit einer Function mit der englischen Namen für Länge abgefragt. Wie das geht, nun, öffnet die Delphi-Hilfe, gebt unter Index das gesuchte Wort ein und dann bekommt ihr in den meisten Fällen auch eine gute Erklärung. Also, wie ich schon sagte, die Länge eines Strings wird ermittelt durch die Function Length Ach ja, was Pascal und Delphi betrifft, Delphi ist in der Programmierung Pascal. @Frank: vermutlich ist das Programm nicht vollständig "geschrieben" sondern gemeinerweise nur vollständig "beschrieben".... :P Gruß oldmax |
Re: Delphi -newbie!
mkay.. also nochmal von vorne..
Wir möchten ein Wort eingeben. Dieses Wort soll gespeichert werden. Für denjenigen der Raten muss werden die Buchstaben durch "*" ersetzt. Tja soweit erstmal wäre scho gut.. Die Eingabe haben wir uns ungefähr so gedacht: procedure TForm1.Button1Click(Sender: TObject); var c:integer; s:string; begin j:=j+1; str(j,s); a[j].:=edit1.text; edit1.Text:=''; end; Ob das richtig is oder nich sei dahingestellt.. @oldmax .. ma schaun und danke für die Hilfe |
Re: Delphi -newbie!
Hi
noch hab ich doch gar nicht geholfen... Aber nun zu eurer Vorstellung, so wird's nix.... Beginnen wir mal von vorn.... Ihr habt eine Form, auf dieser ist ein Editfeld und ein Button nun machst du folgendes: Du brauchst eine globale Stringvariable.. ich nenn sie mal Geheim Also,
Delphi-Quellcode:
nun machst du einen Doppelklick auf deine Form und erhälst die
Var Form1 : TForm1; // ist schon deklariert.....
Geheim : String;
Delphi-Quellcode:
kommen wir nun zum Editfeld. Du hast den Objektinspektor. Dort gehst du auf die Registerkarte Ereignisse und suchst den Eintrag "OnKeyPress". Da gehst du af das rechte weiße Feld und machst einen Doppelclick. Automatisch wird dir nun der Procedure-Rumpf erstellt.
Procedure TForm1.FormCreate(Sender : TObject);
Begin Geheim:=''; // das fügst du ein und machst den Geheim-String leer; Edit1.Text:='';// Auch das Editfeld wird geleert. end;
Delphi-Quellcode:
Nun kannst du in das Editfeld etwas eintragen und es kann keiner lesen. Also müssen wir nun raten. Dazu würde ich ein zweites Editfeld benutzen in welchem 1 Buchstabe eingegeben werden kann.
Procedure Form1.Edit1KeyPress(Sender : Tobject; var Key: Char);
Begin Geheim:=Geheim+Key; // hier beschreibst du dein unsichtbares geheimes Wort. Key:='*'; // Das Sternchen überschreibt den Text im Editfeld, also ist deine Eingabe unsichtbar end; Ähnliche Vorgehensweise um das KeyPress- Ereignis zu bekommen
Delphi-Quellcode:
evtl. kannst du damit experimentieren, den Text zu überschreiben und immer die letzte Eingabe anzeigen
Procedure Form1.Edit2KeyPress(Sender : Tobject; var Key: Char);
Begin if Length(Edit2.Text)>1 then Key:=''; // begrenzt die Eingabe auf 1 Zeichen. end; einfach die "If" Zeile durch diese Eingabe ersetzen
Delphi-Quellcode:
So, das war schon ordentlich hilfe. Nun müßt ihr auch was tun. Versucht einmal die Button-Routine anzupassen.
Edit2.Text:='';
Hilfreich wäre die Function "Pos". Schaut mal nach und überlegt, wie ihr nun einer Lösung näher kommen könnt. Ach ja, das zweite Editfeld kann natürlich ohne dem onKeypress-Ereignis auch das ganze zu erratende Wort enthalten und du markierst im Prinzip nur die Buchstaben, die richtig sind. Benutze aber als Referenz deine Variable "Geheim". Und nun tobt euch mal aus Gruß oldmax |
Re: Delphi -newbie!
Das ist völliger Quatsch... (schon einmal einen Blick in den OI geworfen? :stupid: )
Zitat:
Delphi-Quellcode:
Edit1.PasswordChar:='*';
Zitat:
Delphi-Quellcode:
Edit1.MaxLength:=1
|
Re: Delphi -newbie!
Das mit dem Passwordchar ist blöd. Da werden ja später auch die hinzugefügten Buchstaben durch * ersetzt.
evtl so (bischen kompliziert) :
Delphi-Quellcode:
Das beste wäre noch anzugeben, wie lange man gebraucht hat dieses Wort zu finden...
procedure button1click; //speichern und unsichtbar machen
begin geheim:=edit1.text; //geheim enthält jetzt das gesuchte wort editlength:=length(edit1.text); //länge wird abgespeichert edit1.clear; //editfeld wird gelöscht (der inhalt) for i:=0 to editlength do //entsprechend der länge werden * gemacht edit1.text:=edit1.text+'*'; end; procedure buttton2click; //raten begin for i:=0 to editlength do if copy(edit1.text,i,1)=edit2.text then begin delete(edit1.text,i,1); //wenn der entsprechende Buchstabe übereinstimmt wird das entsprechende sternchen gelöscht insert {hier weiß ich die parameter momentan nicht}; //und hier der Buchstabe eingefügt. end; end; Oder noch ne bestenliste :) Bei uns machen wir sowas in Info leider nicht :-(. Kann sein, dass da oben Fehler sind (alles ausm Kopf aufgeschrieben). um die kümmer ich mich aber jetzt nicht weiter, da ihr ja auch noch was tun müsst. Hab glaube ich schon viel zu viel gemacht... mfG J.P. |
Re: Delphi -newbie!
Zitat:
|
Re: Delphi -newbie!
Hä? nein, tust du icht. In kanns zwar grad nicht selbst in Delphi ausprobieren, aber ich lösche ja erst den inhalt von edit1 und kopiere dorthinein so viele * wie das Wort Buchstaben hatte. ?? Entdweder versteh ich nicht ganz was du meinst, oder ich hab das falsch dokumentiert.
EDIT: ich hab grad selbst verstanden, was du falsch verstanden hast. Als erstes kommt der eine User, gibt sein Wort ein und klickt auf button1 Daraufhin wird alles chiffriert und gespeichert. Dann kommt User 2 und rädt einfach drauflos. Gibt einenBuchstaben ein, und klickt button2. Nach ein paar versuchen ist dann das Wort geknackt. Es geht gar nicht darum das Wort von Anfang an zu chiffrieren. :) |
Re: Delphi -newbie!
Ok, du hattest wohl doch recht. Sehe erst jetzt nachdem ich einmal nochmal drübergeflogen bin das ich anstatt copy(geheim... copy(edit1.text... geschrieben hab.
Totaler Anfängerfehler ;-( Hier steht es jetzt nochmal richtig:
Delphi-Quellcode:
Entschuldigung. Jetzt stimmt es aber.
procedure button1click; //speichern und unsichtbar machen
begin geheim:=edit1.text; //geheim enthält jetzt das gesuchte wort editlength:=length(edit1.text); //länge wird abgespeichert edit1.clear; //editfeld wird gelöscht (der inhalt) for i:=0 to editlength do //entsprechend der länge werden * gemacht edit1.text:=edit1.text+'*'; end; procedure buttton2click; //raten begin for i:=0 to editlength do if copy(geheim,i,1)=edit2.text then begin delete(edit1.text,i,1); //wenn der entsprechende Buchstabe übereinstimmt wird das entsprechende sternchen gelöscht insert {hier weiß ich die parameter momentan nicht}; //und hier der Buchstabe eingefügt. end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz