Kleine Frage: Hangman- Delphi

Neophyte.

Lt. Junior Grade
Registriert
Juli 2007
Beiträge
369
Halli Hallo,

heute noch müssen wir unserem Informatik Lehrer unsere Arbeit per Mail nach Hause schicken.
Es handelt sich um das sicherlich bekannte Wörter raten, auch Hangman genannt. Ich habe es so gut wie fertig, doch leider hat sich ein Fehler ergeben, den ich nicht loswerde. Vllt ist jemand so nett, und sagt mir, was ich verändern muss.

Um nach einer gespielten Runde eine neue beginnen zu können, habe ich einen weiteren Button erzeugt, in den ich folgendes geschrieben habe:

Code:
procedure TfrmMain.btnstartClick(Sender: TObject);
begin
   wort:=memAuswahl.Lines[random(memauswahl.Lines.Count)];
   lblWort.caption:= RatewortErzeugen(Wort);
   Fehlversuche:=0;
end;

Wenn ich nun nach einer gespielen Runde den Butten betätige, löscht sich nicht das Spiel, sondern es werden hinter den Unterstrichen weitere Unterstriche ausgegeben.

Ich hoffe ich habe mich verständlich ausgedrückt.

mfg,
Neophyte
 
Wäre absolut nicht verkehrt mehr vom Quellcode zu zeigen... woher sollen wir wissen, wie "RatewortErzeugen" implementiert ist?
 
dann gibts jetzt die volle Dröhnung;)






Code:
var
  frmMain: TfrmMain;
  wort: string;
  Ratewort: string ;
  Fehlversuche:integer;
  BuchstabeBenutzt: String;

implementation

{$R *.dfm}
procedure galgenZeichnen(c:TCanvas;schritte:Integer);
{zeichnet je nach anzahl der schritte das hangman bildchen.
es werden die zeichenfläche (TCanvas) und die anzahl der schritte erwartet
Copyright (c) 2008 by C.Muche }
begin
  with c do
  begin
    pen.Width:=2;
    pen.Color:=clNavy;

    if schritte>=1 then Rectangle(10,280,240,290);
    if schritte>=2 then Rectangle(30,10,40,280);
    if schritte>=3 then Rectangle(40,10,150,20);
    if schritte>=4 then Rectangle(140,20,150,60);
    if schritte>=5 then Ellipse(120,50,170,100);
    if schritte>=6 then Ellipse(120,100,170,180);
    if schritte>=7 then Rectangle(90,120,130,130);
    if schritte>=8 then Rectangle(160,120,200,130);
    if schritte>=9 then Rectangle(134,175,144,230);
    if schritte>=10 then Rectangle(146,175,156,230);
  end;
end;

function RatewortErzeugen(wort:string):string;
var i: integer ;

begin
  for i:=1 to length(wort) do
    Ratewort:= Ratewort+' _';
  result:= Ratewort;
end;


procedure TfrmMain.FormActivate(Sender: TObject);
begin
  wort:=memAuswahl.Lines[random(memauswahl.Lines.Count)];
  lblWort.caption:= RatewortErzeugen(Wort);
  Fehlversuche:=0;
end;


procedure TfrmMain.Button1Click(Sender: TObject);
var
    Buchstabe: Char ;
    IstVorhanden: Boolean ;
    i: integer ;
begin
  Buchstabe:= edtBuchstabe.text[1];
  IstVorhanden:= false;
  for i := 1 to length(Wort) do
    if upCase(Buchstabe)=upCase(Wort[i]) then
    begin
      Ratewort[2*i]:= upCase(Buchstabe);
      IstVorhanden:= True;
    end;
  if istVorhanden then
    lblWort.Caption:= Ratewort
  else
  begin
    Fehlversuche:=Fehlversuche+1;
    lblFehlversuche.caption:=intToStr(Fehlversuche);
    BuchstabeBenutzt:=BuchstabeBenutzt+' '+Buchstabe;
    lblBenutzt.caption:=Buchstabebenutzt;
    galgenzeichnen(pbxgalgen.canvas,fehlversuche);
  end;
      if fehlversuche=10 then
      begin
        lblverloren.Caption:='Schade, Du hast leider verloren! Neue Runde neues Glück';
      end;
end;

end.
 
Ah wollte grad dasselbe wie 1668mib schreiben, werds mir jetzt mal angucken ;)

Edit:
Jo du musst das ganze irgendwie wieder initialisieren. Am besten wärs, du würdest mir die ganzen Quellcode-Dateien schicken, damit ich mir ein Bild von machen kann.
Glaube du musst einfach irgendwo das Label oder das Wort mal := "" setzen.

Edit2:
Ich adde dich mal eben bei ICQ, wenn du nichts dagegen hast, dann könn wir n bissl besser schreiben.

Edit3:
Schreib bei RatewortErzeugen gleich hinters begin

Ratewort := "";

das sollte alle Probleme lösen.
 
Zuletzt bearbeitet:
*Doppelpost löschen*
 
Das ist ja Geil.

Kann mir jemand erklären wie sowas geht?
Ich weiß ich sollte ihm helfen aber ich will selber wissen wie sowas geht :D

Ihr könnt mir per PN schreiben.


mfg Kivi
 
@Kivi 123

Das Programm heißt Delphi, wie du bestimmt schon mitbekommen hast. Version 6 gibt es gratis. Einfach mal googlen. Tutorials gibt es auch wie Sand am Meer.


@Hanti

Besten Dank. Das machen wir;)
 
Versuch ma vor der For-Schleife das "Ratewort" auf "" zu setzen

//edit: da war vor mir jemand schneller... und ich habs überlesen :)
 
Zurück
Oben