![]() |
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? |
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: |
Ich glaube, das er zufällig eines der 3 Antworten ausgeben will. Deshalb würde ich es so machen:
Delphi-Quellcode:
Aber Achtung: Der Code muß nicht funktionieren, hatte Delphi schon seit MOnaten nichtmehr an und ist also aus dem Kopf!
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'; |
Zitat:
Delphi-Quellcode:
MfG Florian :hi:
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; |
hi,
allerdings solltest du den Befehl "randomize" lieber in das Ereigniss "OnFormCreate" schreiben, denn er brauch nur einmal ausgeführt werden. gruss haegar |
Vom Prinzip her für Newbies OK, aber macht doch bitte ein
Delphi-Quellcode:
in den Code. Random(3) -> 3 Möglichkeiten [0,1,2] :warn:
...Random(3)...
|
Elegantere Lösung:
Delphi-Quellcode:
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.
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; 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: |
OK, ich werd´s versuchen. Vielen Dank für die schnellen Antworten. :D
|
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