Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Hilfe beim einem Quiz: beliebig viele variablen zur laufzeit (https://www.delphipraxis.net/13210-hilfe-beim-einem-quiz-beliebig-viele-variablen-zur-laufzeit.html)

Pseudemys Nelsoni 13. Dez 2003 15:38


Hilfe beim einem Quiz: beliebig viele variablen zur laufzeit
 
Moin,

ich habe vor langer zeit mal nen bot(fürs irc) in delphi gemacht, ich möchte diesen nun erweitern mit einem Quiz...ok soweit so gut, sagen wir mal das Quiz startet und jemand errät eine frage, dann muss ich für den benutzer eine variable erstellen in dem 1punkt hinzugefügt wird, da aber beliebig viele leute antworten können, frage ich mich wie ich das zur laufzweit hinbekomme.

Luckie 13. Dez 2003 15:41

Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
 
Mach dich in der Delphi-Hilf emal über dynamische Arrays schlau.

Pseudemys Nelsoni 13. Dez 2003 16:25

Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
 
mach ich, danke

Pseudemys Nelsoni 13. Dez 2003 16:56

Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
 
habs mir durchgelesen.

ich habe hierzu 2 frage:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  benutzer: array of string;
begin
  SetLength(benutzer, 1);
end;
1.
wenn jemand in meinem quiz antwortet und diese antwort ist richtig, muss ich für jeden benutzer,
SetLength(benutzer, alterwert+1); neu aufrufen?

2.
wie bekomme ich raus wie gross mein array z.z ist? bzw wieviele strings darin sind?

ustra 13. Dez 2003 17:01

Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
 
Hallo,

lese Dir mal den Abschnitt Dynamische Arrays unter Delphi-Source durch. Dann sollten sich die Fragen erledigt haben. Beachte die Hinweise zu den erwarteten und zurückgegebenen Werten.

Ulrich

Mikko 13. Dez 2003 17:03

Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
 
zu 1.) Ja, da setlength die Größe dem Array zuweist.

zu 2.) high(benutzer)

RomanK 13. Dez 2003 17:14

Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
 
Hoi,
zu 2. mit length(VarName);
Wichtig: Dyn. Arrays fangen imemr mit 0 an!!!

nailor 13. Dez 2003 17:38

Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
 
zu 2: ja, mit length oder high (Erstes Element hat Index "0")

zu 1: Wenn du wirklich unendlich viele Variablen brauchst, oder zumindest sehr sehr sehr viele, dann ist es unklug, jedesmal mit SetLWngth zu arbeiten, sondern lieber das Teil jedes 1000x um 1000 Einträge länger zu machen, die dann halt leer bleiben.

und für dein Quiz: Sagen wir, niemand wird je mehr als 1000 Fragen machen, d.h. du brauchst nur 1000 Variablen, d.h. du könntest auch ein array[0..999] nehmen...

Luckie 13. Dez 2003 17:40

Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
 
Es geht um die Benutzer. Und 1000 Benutzer wird er wohl kaum haben.

nailor 13. Dez 2003 17:44

Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
 
dann nimm meinen obrigen Text, und stell dir vor, es würden maximal XYZ Nutzer mitmachen --> man braucht maximal XYZ Variablen ---> ...

Pseudemys Nelsoni 13. Dez 2003 17:53

Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
 
danke an alle :zwinker:

Pseudemys Nelsoni 13. Dez 2003 20:17

Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
 
hoi,

ich habe mich eben gefragt, wie ich nachher noch weiss, wo im array der wert für einen nick ist.
wenn ich: "myarray: array of integer;" als array definiere und für jeden Nick, der eine richtige antwort gegeben hat eine variable in das array hinzufüge muss ich doch nachher irgendwie noch wissen welcher wert für welchen nick war oder?

Dagon 13. Dez 2003 20:20

Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
 
Du kannst ja auch ein merhdimensionales Array erstellen, oder ein Record.

Luckie 13. Dez 2003 20:22

Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
 
Delphi-Quellcode:
type
  TAntworter = record
    Nick: String;
    Richtig: Integer;
    Gesamt: Integer;
  end;

var
  Antworter : array of TAntworter;
begin
  setlength(Antworter, 10); // erstmal 10 Stück
  Antworter[0].Nick := 'Luckie';
  Antworter[0].Richtig := 5;
  Antworter[0].Gesamt := 5;

Dagon 13. Dez 2003 20:23

Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
 
Wie man sieht, hatte ich mit der Idde eines Records recht :mrgreen:

Pseudemys Nelsoni 13. Dez 2003 20:28

Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
 
das ist perfekt, danke lueckie, dafür das du's extra geschrieben hast. danke @the_master ^^

Luckie 13. Dez 2003 20:29

Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
 
Ich wollte nur bei dem Quiz gewinnen. :mrgreen:

Pseudemys Nelsoni 14. Dez 2003 13:29

Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
 
lol, der thread ist hier sowieso ein quiz, die antworten weiss ich natürlich *g*.

ich hab noch eine:

Delphi-Quellcode:
procedure ChkResult(nick, s: string);
var
  i: integer;
  b: boolean;
begin
  if Form1.Timer1.Enabled then
  begin
    if s = lowercase(Antwort) then
    begin
      b := false;
      Form1.IdIRC1.Say('#united-forum', '14¤03¤09¤ Richtige antwort ' + nick);
      Form1.Timer1.Enabled := false;
      for i := 0 to high(QuizAntwort) do
      begin
        if QuizAntwort[i].nick = nick then
        begin
          inc(QuizAntwort[i].rAntworten);
          b := true;
          Form1.IdIRC1.Say('#united-forum', '14¤03¤09¤ ' + nick + ' hat jetzt ' + IntToStr(QuizAntwort[i].rAntworten) + ' richtige Antworten');
          break;
        end;
      end;
      if b = false then
      begin
        SetLength(QuizAntwort, high(QuizAntwort)+1);
        QuizAntwort[high(QuizAntwort)].nick := nick;
        inc(QuizAntwort[high(QuizAntwort)].rAntworten);
        Form1.IdIRC1.Say('#united-forum', '14¤03¤09¤ ' + nick + ' hat jetzt ' + IntToStr(QuizAntwort[high(QuizAntwort)].rAntworten) + ' richtige Antworten');
      end;
      if QuizOn then
      QuizProc;
    end;
  end;
end;
wenn jemand (in diesem fall ich) die frage richtig beantwortet, geht es bis hier:

Zitat:

[14:21:08] <ism> ¤¤¤ Was bremst die Sinkgeschwindigkeit von Weltraumsonden vor der Landung auf der Erde?
[14:21:10] <moechen-lernt> *hieks
[14:21:15] <shorty> fikh
[14:21:16] <moechen-lernt> doofe fremdwörter
[14:21:17] <shorty> hmm
[14:21:17] <shorty> huhu ihrs
[14:21:20] <michael_g> hallo
[14:21:23] <shorty> quizz0rz
[14:21:29] <michael_g> ein
[14:21:30] <silent> schwerkraft
[14:21:30] <michael_g> schirm
[14:21:35] <silent> fallschirm
[14:21:35] <moechen-lernt> huhu ihr
[14:21:35] <ism> ¤¤¤ Richtige antwort silent
dann bekomme ich eine fehlermeldung:

http://www.angelfire.com/bug/delphi/fehler.jpg


eigentlich müsste nach "richtige antwort silent" noch "silent hat jetzt ... punkte" kommen, das tut es aber nicht.
also, das ist das erste mal das ich mit dynamischen arrays arbeite, also nicht so hart sein :wink:.
"QuizAntwort" ist eine global(damit ich von mehreren prozeduren aus zugreifen kann) definierte variable des typs "TQuizAntwort" und ist von dem aufbau her mit luckies beispiel identisch, bis auf "antworten gesamt"

deLin 8. Jun 2005 12:29

Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
 
Hi ihr,

Ich schreib das mal hier rein und zwar:

Ich mache gerade ein Quiz...es hat 3 Antwortmöglichkeiten. Ich wolte fragen, wie man 1.) einen Joker dazumacht, der eine falsche Antowrt wegstreicht und 2.) die Auswerung macht und 3.) die Fragen in geordneter Reihenfolge erscheinen lässt.
Hier ist mal mein Quellcode:

Delphi-Quellcode:
interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, Buttons;

type
  TForm1 = class(TForm)
    b_frage: TButton;
    b_fertig: TButton;
    Panel1: TPanel;
    RadioGroup1: TRadioGroup;
    BitBtn1: TBitBtn;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure b_frageClick(Sender: TObject);
    procedure b_fertigClick(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

const Max = 7; // 7 Fragen
var
  Form1: TForm1;
  Frage : Array[1..Max] of String; // von 1-5
  Antwort: Array[1..Max, 1..3] of
  String;
  Richtig: Array[1..Max] of Integer;
  Nr   : Integer;  // Die Nummer der jeweils richtigen Antwort
  (*reihe: Array[1..7] of integer;*)

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
(*randomize;
for i:= 1 to 7 do
begin*)

Frage[1] := 'Was ist das von Borland entwickelte Delphi?';
    Antwort[1,1]:= 'Eine griechische Stadt, die von den sogenannten "Borländern" gegründet wurde';
    Antwort[1,2]:= 'Ein von der Firma Borland entwickeltes Programmier-Programm';
    Antwort[1,3]:= 'Ein Roboter, der von einem Mann namens Borland gebaut wurde und "Delphi" heißt';
    Richtig[1]:= 2;

Frage[2] := 'Mit welcher Delphi-Version konnte Borland viele Pascal-Veteranen begeistern?';
    Antwort[2,1]:= 'Delphi 25';
    Antwort[2,2]:= 'Delphi 10';
    Antwort[2,3]:= 'Delphi 1';
    Richtig[2]:= 3;

Frage[3] := 'Welches "Pascal-Dialekt" von Borland wurde besonders berühmt?';
    Antwort[3,1]:= 'TurboPascal';
    Antwort[3,2]:= 'SuperPascal';
    Antwort[3,3]:= 'HyperPascal';
    Richtig[3]:= 1;

Frage[4] := 'Welchen anderen Namen bekam Delphi für kurze Zeit?';
    Antwort[4,1]:= 'Enterprise';
    Antwort[4,2]:= 'Inprise';
    Antwort[4,3]:= 'Surprise';
    Richtig[4]:= 2;

Frage[5] := 'Wann wurde die Programmiersprache, auf der Delphi basiert, entwickelt?';
    Antwort[5,1]:= '500 vor Christus von König Alexander I. von Makedonien';
    Antwort[5,2]:= '1920 von Melina Mercouri, eine griechische Schauspielerin';
    Antwort[5,3]:= 'In den Jahren 1968 - 1972 an der ETH Zürich von Prof. Nikolaus Wirth';
    Richtig[5]:= 3;

Frage[6] := 'Was sind globale Variablen?';
    Antwort[6,1]:= 'Globale Variablen gibt es gar nicht';
    Antwort[6,2]:= 'Globale Variablen können nur durch spezielle Befehle angesprochen werden';
    Antwort[6,3]:= 'Globale Variablen gelten im ganzen Programm';
    Richtig[6]:= 3;

Frage[7] := 'Was ist das Gegenstück zur globalen Variable';
    Antwort[7,1]:= 'Die "normale Variable"';
    Antwort[7,2]:= 'Die "lokale Variable"';
    Antwort[7,3]:= 'Die "Variable"';
    Richtig[7]:= 2;


end;

procedure TForm1.b_frageClick(Sender: TObject);
begin
Nr := random(Max) + 1;
Panel1.caption := Frage[Nr];
RadioGroup1.Items[0] := Antwort[Nr,1]; // beginnt bei 0!
Radiogroup1.Items[1] := Antwort[Nr,2];
Radiogroup1.Items[2] := Antwort[Nr,3];
RadioGroup1.ItemIndex:= -1;
end;

procedure TForm1.b_fertigClick(Sender: TObject);
begin
if Radiogroup1.ItemIndex = Richtig[Nr]-1
then Panel1.Caption := 'Richtig!'
else Panel1.Caption := 'Falsch!';
if Radiogroup1.ItemIndex = -1
then Panel1.Caption :='Bitte geben Sie eine Antwort!';
end;

malo 8. Jun 2005 12:34

Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
 
Hallo deLin,

bitte eröffne zu jeder Frage einen neuen Thread. Das hat Gründe der Übersicht. Wenn jemand nach einer Frage sucht, findet er sonst einen Thread mit mehreren Fragen und er muss sich immer den ganzen langen Thread durchlesen ;)


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