![]() |
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. |
Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
Mach dich in der Delphi-Hilf emal über dynamische Arrays schlau.
|
Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
mach ich, danke
|
Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
habs mir durchgelesen.
ich habe hierzu 2 frage:
Delphi-Quellcode:
1.
procedure TForm1.Button1Click(Sender: TObject);
var benutzer: array of string; begin SetLength(benutzer, 1); end; 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? |
Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
Hallo,
lese Dir mal den Abschnitt Dynamische Arrays unter ![]() Ulrich |
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) |
Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
Hoi,
zu 2. mit length(VarName); Wichtig: Dyn. Arrays fangen imemr mit 0 an!!! |
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... |
Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
Es geht um die Benutzer. Und 1000 Benutzer wird er wohl kaum haben.
|
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 ---> ...
|
Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
danke an alle :zwinker:
|
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? |
Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
Du kannst ja auch ein merhdimensionales Array erstellen, oder ein Record.
|
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; |
Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
Wie man sieht, hatte ich mit der Idde eines Records recht :mrgreen:
|
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 ^^
|
Re: Hilfe beim einem Quiz: beliebig viele variablen zur lauf
Ich wollte nur bei dem Quiz gewinnen. :mrgreen:
|
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:
wenn jemand (in diesem fall ich) die frage richtig beantwortet, geht es bis hier:
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; Zitat:
![]() 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" |
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; |
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