Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Delphi -newbie! (https://www.delphipraxis.net/88223-delphi-newbie.html)

ziNk 12. Mär 2007 07:50


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! :)

mkinzler 12. Mär 2007 07:52

Re: Delphi -newbie!
 
Wie weit bist du schon?

ziNk 12. Mär 2007 08:00

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.

Mavarik 12. Mär 2007 08:04

Re: Delphi -newbie!
 
Zitat:

Zitat von ziNk
wir haben eine Pascal Vorlage bekommen in der das Programm vollständig geschrieben ist.

Na dann... Was gibt es dann noch zu tun?

Frank :gruebel:

ziNk 12. Mär 2007 08:10

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..

Mavarik 12. Mär 2007 08:13

Re: Delphi -newbie!
 
Zitat:

Zitat von ziNk
von Pascal in Delphi zu übersetzen.

Also weitesgeht würde ich sagen dass: Pascal=Delphi

Mal abgesehen von einer "anderen" GUI.

Aber formuliere doch mal Deine/eine Frage... Dann kann Dir vielleicht hier jemand helfen...

Frank :stupid:

oldmax 12. Mär 2007 08:22

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

ziNk 12. Mär 2007 08:23

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

oldmax 12. Mär 2007 12:14

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:
Var Form1    : TForm1; // ist schon deklariert.....
    Geheim  : String;
nun machst du einen Doppelklick auf deine Form und erhälst die
Delphi-Quellcode:
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;
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.

Delphi-Quellcode:
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;
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.
Ähnliche Vorgehensweise um das KeyPress- Ereignis zu bekommen

Delphi-Quellcode:
Procedure Form1.Edit2KeyPress(Sender : Tobject; var Key: Char);
Begin
  if Length(Edit2.Text)>1 then Key:=''; // begrenzt die Eingabe auf 1 Zeichen.
 
end;
evtl. kannst du damit experimentieren, den Text zu überschreiben und immer die letzte Eingabe anzeigen

einfach die "If" Zeile durch diese Eingabe ersetzen
Delphi-Quellcode:
Edit2.Text:='';
So, das war schon ordentlich hilfe. Nun müßt ihr auch was tun. Versucht einmal die Button-Routine anzupassen.
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

fLaSh11 10. Apr 2007 18:42

Re: Delphi -newbie!
 
Das ist völliger Quatsch... (schon einmal einen Blick in den OI geworfen? :stupid: )
Zitat:

Zitat von oldmax
Delphi-Quellcode:
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;

Wie wär's mit:
Delphi-Quellcode:
Edit1.PasswordChar:='*';
Zitat:

Zitat von oldmax
Delphi-Quellcode:
Procedure Form1.Edit2KeyPress(Sender : Tobject; var Key: Char);
Begin
  if Length(Edit2.Text)>1 then Key:=''; // begrenzt die Eingabe auf 1 Zeichen.
 
end;

Warum einfach, wenns auch umständlich geht?
Delphi-Quellcode:
Edit1.MaxLength:=1

J.P. 11. Apr 2007 17:56

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:
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;
Das beste wäre noch anzugeben, wie lange man gebraucht hat dieses Wort zu finden...
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.

fLaSh11 11. Apr 2007 18:43

Re: Delphi -newbie!
 
Zitat:

Zitat von J.P.
Das mit dem Passwordchar ist blöd. Da werden ja später auch die hinzugefügten Buchstaben durch * ersetzt.

Jo, aber mit Edit1.Text bekommst du immernoch den unchiffrierten Text...

J.P. 11. Apr 2007 20:30

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. :)

J.P. 13. Apr 2007 09:57

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:
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;
Entschuldigung. Jetzt stimmt es aber.


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