[Gelöst] Ein Fehler bei der CASE Funktion..

Für Fragen rund um die Ide und zum Debugger
Antworten
LordBukkit
Beiträge: 5
Registriert: Mo 29. Apr 2013, 12:49

[Gelöst] Ein Fehler bei der CASE Funktion..

Beitrag von LordBukkit »

Hallo.
Ich noch ein blutiger Anfänger in Lazarus, und deshalb habe ich eine kleine Frage.
Ich habe ein Programm geschrieben, das in etwa so wie das Spiel "Mastermind" funktioniert:
Man wählt eine Farbe aus (bei mir sind es 3 verschiedene) und dann wird mit der random Funktion eine Farbe geniert.
Falls man die richtige Farbe geraten hat, soll ein Fenster erscheinen mit der Schrift, dass es richtig ist, und wenn man falsch geraten hat,
dann soll selbstverständlich eine Nachricht erscheinen, mit der Schrift, dass man falsch geraten hat.
Und genau an dem Punkt, dass das Programm überprüft, ob man richtig oder falsch gelegen hat, komme ich nicht weiter.
Meine Idee war diese hier:

Code: Alles auswählen

 
procedure TForm1.ErgebnisBitBtnClick(Sender: TObject);
  begin
  case Farbe of
  shape1.Brush.Color = clBlue,shape2.Brush.Color = clBlue:
    begin
         ShowMessage ('Diese Kombination ist richtig');
    end;
  otherwise
    begin
         ShowMessage ('Diese Kombinatoin ist falsch');
    end;
  end;
end;
"Shape1" ist die random generierte Farbe, und "Shape2" steht für die selbst ausgewählte Farbe.
Aber diese scheint wohl nicht zu funktionieren. Ich wollte es erst mit einer IF Schleife lösen, habe es allerdings nicht hinbekommen. Aus diesen Grund habe ich es mit der CASE Funktion versucht, es leider aber auch nicht geschafft. Habe ich mit dem Code einen Fehler gemacht, oder muss man das auf eine ganz andere Weise lösen?
Danke schonmal für eure Hilfe.

LG
LordBukkit
Zuletzt geändert von LordBukkit am Di 30. Apr 2013, 14:49, insgesamt 2-mal geändert.

Namos

Re: Ein Fehler bei der CASE Funktion..

Beitrag von Namos »

So vielleicht ?

Code: Alles auswählen

 
procedure TForm1.ErgebnisBitBtnClick(Sender: TObject);
begin
  if (shape1.Brush.Color = clBlue) and (shape2.Brush.Color = clBlue) and (Farbe = clBlue) then
  begin
    ShowMessage ('Diese Kombination ist richtig');
  end
  else
  begin
    ShowMessage ('Diese Kombinatoin ist falsch');
  end;
end;
  
oder so
 

Code: Alles auswählen

 
procedure TForm1.ErgebnisBitBtnClick(Sender: TObject);
begin
  case Farbe of
    clBlue:
      if (shape1.Brush.Color = clBlue) and (shape2.Brush.Color = clBlue) then
            ShowMessage ('Diese Kombination ist richtig');
    else
      ShowMessage ('Diese Kombinatoin ist falsch');
  end;
end;
 
Für die Case Anweisung können nur Ordinale (Ganzzahlige) Datentypen und String Datentypen verwendet werden.
Hier mal das Wiki zur Case Anweisung: http://wiki.freepascal.org/Case/de
Zuletzt geändert von Namos am Mo 29. Apr 2013, 13:30, insgesamt 1-mal geändert.

grl
Beiträge: 36
Registriert: Fr 17. Okt 2008, 19:24
OS, Lazarus, FPC: Debian X64, Lazarus 1.1, FPC 2.7.1
CPU-Target: x86, ARM

Re: Ein Fehler bei der CASE Funktion..

Beitrag von grl »

Also, ich denk da jetzt vielleicht ein bischen zu einfach - aber willst du nicht einfach die gewählte Farbe mit der zufälligen Farbe vergleichen? Was ist denn dann die Variable Farbe?

Denn wenn' nur um das Vergleichen der Farbe geht sollte da wohl stehen:

Code: Alles auswählen

 
procedure TForm1.ErgebnisBitBtnClick(Sender: TObject);
begin
  if shape1.Brush.Color = shape2.Brush.Color then
  begin
    ShowMessage ('Diese Kombination ist richtig');
  end
  else
  begin
    ShowMessage ('Diese Kombinatoin ist falsch');
  end;
end;
 
Ein Case macht da irgendwie keinen Sinn - das ist für den vergleich von einem Wert mit mehreren anderen. Das könnte z.B. so aussehen:

Code: Alles auswählen

 
procedure TForm1.ErgebnisBitBtnClick(Sender: TObject);
begin
  case shape1.Brush.Color of
    clBlue: ShowMessage ('Die Farbe ist blau');
    clRed: ShowMessage ('Die Farbe ist rot');
    clYellow: ShowMessage ('Die Farbe ist gelb');
  else
     ShowMessage ('Die Farbe wurde nicht erkannt');
  end;
end;
 
Gruß
Luggi

Luggi

Soner
Beiträge: 739
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Ein Fehler bei der CASE Funktion..

Beitrag von Soner »

Hier sind gute Infos für Case und andere Fallunterscheidungsfunktionen:
http://www.marcocantu.com/epascal/German/ch05statde.htm
http://www.freepascal.org/docs-html/ref ... 300013.2.2

LordBukkit
Beiträge: 5
Registriert: Mo 29. Apr 2013, 12:49

Re: Ein Fehler bei der CASE Funktion..

Beitrag von LordBukkit »

Alles klar, danke Leute :)

Antworten