Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie varriert man die Ausgabe von Texten? - Vorsicht Newbie (https://www.delphipraxis.net/4048-wie-varriert-man-die-ausgabe-von-texten-vorsicht-newbie.html)

TDO 12. Apr 2003 22:52


Wie varriert man die Ausgabe von Texten? - Vorsicht Newbie
 
Ich hätte da eine absolute Anfänger-Frage:

Wie kann ich Ausgaben zufällig variieren?

Ich arbeite zur Zeit an einem kleinen Quiz und möchte nicht jedesmal die gleiche Antwort ausgeben, wenn etwas falsch ist. Stattdessen sollte zufällig entweder "Das war falsch" oder "Schlechte Antwort" oder "Da lagst du nicht richtig" angezeigt werden.

Ich möchte also, dass entweder der Befehl

Label1.caption:='Das war falsch';
{oder} Label1.caption:='Schlechte Antwort';
{oder} Label1.caption:='Da lagst du nicht richtig';

ausgeführt wird.

Wie drücke ich so etwas in Delphi aus?

Daniel B 12. Apr 2003 22:56

Hallo und herzlich Willkommen im Forum!

Das musst Du mit if..then abfragen.
Kommt halt drauf an worauf Du Dich beziehst, wird da die Eingabe in einem Edit überprüft, oder CheckBoxen, oder RadioButtons usw. usw., aber wenn Du hier die Suche benutzt, dann wirst Du fündig, denn nach sowas auch wegen einem Quiz hat schonmal jemand gefragt.

Grüsse, Daniel :hi:

theomega 12. Apr 2003 22:58

Ich glaube, das er zufällig eines der 3 Antworten ausgeben will. Deshalb würde ich es so machen:

Delphi-Quellcode:
var i:integer

randomize;
i:=random(2)+1;

if i=1 then label1.caption := 'Erster Text';
if i=2 then label1.caption := 'Zweiter Text';
if i=3 then label1.caption := 'Dritter Text';
Aber Achtung: Der Code muß nicht funktionieren, hatte Delphi schon seit MOnaten nichtmehr an und ist also aus dem Kopf!

flomei 12. Apr 2003 23:12

Zitat:

Zitat von theomega
Der Code muß nicht funktionieren...

Funktioniert aber:
Delphi-Quellcode:
var
   i: integer;

procedure Tmainfrm.checkanswer(Sender: TObject);
begin
  Randomize;
  i:=random(2)+1;
if
  i=1
then
  Label1.Caption:= 'Leider falsch!'
else
if
  i=2
then
  Label1.Caption:= 'Das war nicht richtig!'
else
if
  i=3
then
  Label1.Caption:= 'Du hast leider einen Fehler gemacht!';
end;
MfG Florian :hi:

Haegar 12. Apr 2003 23:40

hi,

allerdings solltest du den Befehl "randomize" lieber in das Ereigniss "OnFormCreate" schreiben, denn er brauch nur einmal ausgeführt werden.

gruss haegar

nailor 12. Apr 2003 23:41

Vom Prinzip her für Newbies OK, aber macht doch bitte ein
Delphi-Quellcode:
...Random(3)...
in den Code. Random(3) -> 3 Möglichkeiten [0,1,2] :warn:

Alfons_G 12. Apr 2003 23:53

Elegantere Lösung:
Delphi-Quellcode:
const
  MaxAntwort = 3;

var
  arrFehler: array [1..MaxAntwort] of string;

// Initialisierung
  arrFehler[1] := 'Leider falsch!';
  arrFehler[2] := 'Das war nicht richtig!';
  arrFehler[3] := 'Du hast leider einen Fehler gemacht!';

...

function WaehleAntwort: string;

var
  i: integer;

begin
  Randomize;
  i := random(MaxAntwort + 1);
  result := arrFehler[i];
end;

...

// Aufruf
if falsch then
  begin
  Label1.Caption := WaehleAntwort;
  ...
end;
Dabei hast Du den Vorteil, dass Du die Funktion von beliebigen Stellen aus aufrufen kannst und dabei ist es möglich, jederzeit weitere Antworten hinzufügen. Du musst lediglich die Konstante MaxAntwort anpassen.

Erweiterungsmöglichkeiten:
Falls Du auch Antworten für richtige Ergebnisse brauchst, machst Du das Array zweidimensional und übergibst der Funktion einen Parameter, durch den festgelegt wird, ob eine Richtig- oder Falsch-Antwort gebraucht wird.
Du könntest die Antworten dann auch aus einer Datei auslesen oder ...

:coder:

TDO 13. Apr 2003 10:40

OK, ich werd´s versuchen. Vielen Dank für die schnellen Antworten. :D

nailor 13. Apr 2003 12:44

MaxAntwort kann man sich sparen, da (MaxAntwort = (Length(arrFehler) + 1)) bzw. (MaxAntwort = High(arrFehler)) :wink:

Des Weiteren:
- Randomize NUR UND WIRKLICH NUR ins OnCreate (oder ähnliches)
- Aufrufen besser einfach mit:
Delphi-Quellcode:
Label1.Caption := arrFehler[random(high(arrFehler))];


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:38 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