![]() |
Projekt Probleme: Zeitmessung und Highscore
Ich schreibe gerade ein Programm (Collapse) und kam gut voran.
Jedoch habe ich gerade einige Probleme: Bei meiner Zeitmessung wird immer die selbe Zeit angezeigt, wenn ich eine Neues Spiel starte (nicht ganze Programm beenden und neu starten) für Zeitmessung nutze ich 2 Formulare in Unit1: NeuesSpiel:
Delphi-Quellcode:
NeuesSpielClick:
Zeit.Enabled:=true;
Delphi-Quellcode:
in Unit2:
Zeit.Enabled:=true;
start:=now; (start:=TDateTime)
Delphi-Quellcode:
Problem: wenn ich programm neustarte und bis gameover laufenlasse, aber es länger dauert als es davor dauerte, erhalte ich
FormX.Create:
runtime:= now-start; (runtime, start:=TDateTime) LabelX.Caption := FormatDateTime('ss', runtime); immer als beispiel 58s angezeigt. Wenn ich Programm beende und dann wieder starte, das gleiche Problem. Label verschwindet für zeitanzeige und steht nicht dar: benötigte Zeit: 58s (so wärs gut) Highscore: für highscore habe ich erstmal vor das ergebnis anzuzeigen im neuen formular, wenn gameover oder runden durch sind (punktestand soll neben label angezeigt werden) folgendes habe ich: LabelX.Caption:= IntToStr(Punkte) (davor Punkte in Statusbar angezeigt) es wird nur 0Punkte angezeigt gibst da was? Highscore hatte ich vor mithilfe txt-datei anzuzeigen, wollte Position - Name - Punkte über ListBox anzeigen
Delphi-Quellcode:
dabei entstehen Probleme weil string nicht deklariert ist
var:
Name1 : Array[1..10] of string; Punkt1 : Array[1..10] of string; procedure TFormX.LeseHighscore; var Datei : TextFile; Name : string; Punkte, i : integer; begin assignFile(Datei,'highscore.txt'); reset (Datei); i:=0; while not eof (Datei) do begin readln(Datei, Name, Punkte); Name1[i]:=Name; Punkt1[i]:=Punkte i:=i+1; end; CloseFile; end; procedure TFormX.FormActivate(Sender:TObject); var i:integer; begin for i : 0 to 9 do begin Name1[i]:=''; Punkt1[i]:=0; LeseHighscore; end; gibst bessere aber auch verständliche Lösungen (bin Anfänger) 3 Probleme: 1.) Zeitmessung 2.) Punktanzeige 3.) Highscore Vielen Dank schon im voraus [edit=Phoenix] Delphi-Tags eingefügt. Mfg, Phoenix[/edit] |
Re: Schulprojekt Probleme: Zeitmessung und Highscore
Hallo & Herzlich Willkommen in der DP :dp: :dp:
a) Grundsätzlich werden keine Hausaufgaben gemacht b) Es gibt Delphi-Tags für Delphi-Quellcode c) LabelX.Caption ist keine gute Idee. Wenn du Labels während das Programm läuft andere Captions zuweist, solltest du den Labels gescheite Namen geben, da du sonst nicht mehr durchblickst. Andere übrigens auch nicht. d) Punkt1 : Array[1..10] of string; und Punkt1[ i ]:=0; -> das beißt sich. Zahlen sind nun mal Zahlen und Strings sind nun mal Strings. Mixen geht in Delphi nicht. Entweder Zahlen oder Strings. Zahlen haben den Typ Integer oder ein paar andere, die du in der Delphi-Hilfe unter dem Stichwort Integer nachlesen kannst e) eines nach dem anderen. Zuerst mal die Zeitmessung fertig stellen, dann den Rest. f) Was ist der Unterschied zwischen NeuesSpiel und NeuesSpielClick? Bernhard PS: Könntest du nicht nen Screenshot anhängen? So viel Code alleine wird trocken |
Re: Projekt Probleme: Zeitmessung und Highscore
a.) In AGB'S steht Hausaufgaben = wenn Anfrage ob jemand alles schreibt und der Fragende keine Lust hat mitzudenken
aber ich habe Probleme, bei denen ich nicht weiterkomme, deshalb frage ich hier ich habe mir selber schon darüber Gedanken gemacht, aber es sind Fehler enthalten b.) was sind denn Delphi-Tags (ist eine dumme Frage, aber ich nicht so gut in Delphi) c.) LabelX habe ich hingeschrieben, aber habe zum Beispiel Zeit als Caption, Name bleibt aber Label1 oder Label2 d.) wie sollte ich das nun verändern? f.) NeuesSpiel - initialisiert Spielfeld, nach starten Programms NeuesSpielClick - im Menü NeuesSpiel, startet Spiel neu wie erstellt man ein Screenshot von der Unit? |
Re: Projekt Probleme: Zeitmessung und Highscore
zu den Delphi-Tags: Wenn du hier einen Post verfasst, hast du eine Leiste, wo unter anderem B, i und U steht. In der selben Leiste steht auch "Delphi-Code". Dies ist ein BBCode extra für Delphi-Code.
Punkt c: "Name bleibt aber Label1 oder Label2" -> so sollte es aber nicht sein. Mach doch LblZeit für die Zeit und LblPunkte für die Punkte, Lbl* für *. So kann man sich besser zurecht finden. zu deinem Highscore:
Delphi-Quellcode:
Bernhard
var:
Name1 : Array[1..10] of string; Punkt1 : Array[1..10] of integer; // hier Integer procedure TFormX.LeseHighscore; var Datei : TextFile; Name : string; Punkte, i : integer; begin assignFile(Datei,'highscore.txt'); reset (Datei); //i:=0; //while not eof (Datei) do for i := 1 to 10 do begin if eof(Datei) then // Bei Dateiende die Schleife vorzeitig verlassen break; readln(Datei, Name, Punkte); Name1[i]:=Name; Punkt1[i]:=Punkte; // EDIT: Semikolons dürfen von keinem vergessen werden //i:=i+1; end; CloseFile(Datei); // Parameter nicht vergessen end; procedure TFormX.FormActivate(Sender:TObject); var i:integer; begin for i := 1 to 10 do // von 1 bis 10 (nicht 0 bis 9, weil dein Array von 1 bis 10 geht -> siehe Definition) begin Name1[i]:=''; Punkt1[i]:=0; end; LeseHighscore; // LEsehighscore reicht wenn man es 1x aufruft (du hattest 10x) end; |
Re: Projekt Probleme: Zeitmessung und Highscore
Delphi-Quellcode:
[edit=Phoenix] Delphi-Tag geschlossen. Mfg, Phoenix[/edit]unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, Grids, ComCtrls, ExtCtrls, StdCtrls; type TForm1 = class(TForm) MainMenu1: TMainMenu; Spiel1: TMenuItem; NeuesSpiel1: TMenuItem; N1: TMenuItem; Beenden1: TMenuItem; StatusBar1: TStatusBar; Spielfeld: TStringGrid; info1: TMenuItem; Leiste: TStringGrid; Zeit: TTimer; Hilfe1: TMenuItem; Info2: TMenuItem; Optionen1: TMenuItem; Steuerung1: TMenuItem; Musik: TMenuItem; Fortsetzen1: TMenuItem; Stopp1: TMenuItem; N3: TMenuItem; N4: TMenuItem; N5: TMenuItem; N6: TMenuItem; N7: TMenuItem; Sounds1: TMenuItem; Leicht: TMenuItem; N8: TMenuItem; Mittel: TMenuItem; N9: TMenuItem; Schwer: TMenuItem; N10: TMenuItem; Highscore1: TMenuItem; N2: TMenuItem; Spielmodus1: TMenuItem; Musik1: TMenuItem; N11: TMenuItem; Musik2: TMenuItem; N12: TMenuItem; Musik3: TMenuItem; N13: TMenuItem; Memories1: TMenuItem; N14: TMenuItem; SwaggerJackin1: TMenuItem; procedure Beenden1Click(Sender: TObject); procedure FormActivate(Sender: TObject); procedure NeuesSpiel; procedure SpielfeldDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure NeuesSpiel1Click(Sender: TObject); procedure SpielfeldSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); procedure GleicheFarbenFinden(x, y : integer); procedure GleicheFarbenLoeschen; procedure ZeitTimer(Sender: TObject); procedure LeisteDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure Info2Click(Sender: TObject); procedure Hilfe1Click(Sender: TObject); procedure Highscore1Click(Sender: TObject); procedure Steuerung1Click(Sender: TObject); procedure Stopp1Click(Sender: TObject); procedure Fortsetzen1Click(Sender: TObject); procedure LeichtClick(Sender: TObject); procedure MittelClick(Sender: TObject); procedure SchwerClick(Sender: TObject); procedure Spielmodus1Click(Sender: TObject); procedure Musik1Click(Sender: TObject); procedure Musik2Click(Sender: TObject); procedure Musik3Click(Sender: TObject); procedure Memories1Click(Sender: TObject); procedure SwaggerJackin1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1 : TForm1; Zellengroesse : integer = 30; // legt die Zellengröße Zg x Zg anzahlgleichfarbigerbloecke : integer; Punkte : integer; Runden : integer; Kaestchen : integer; // für Belegung der Leiste LetzteZeile : boolean; Classic : boolean; start : TDatetime; Level : integer; PunkteEnde : integer; implementation uses Unit2, Unit3, Unit4, Unit5, Unit7, Unit6, Unit8, Unit10, Unit11, Unit12, Unit13, Unit14; {$R *.DFM} {==============================================================================} procedure TForm1.Beenden1Click(Sender: TObject); begin Application.Terminate; end; {==============================================================================} procedure TForm1.FormActivate(Sender: TObject); begin Spielfeld.DefaultColWidth := Zellengroesse; Spielfeld.DefaultRowHeight := Zellengroesse; Spielfeld.ClientWidth := Spielfeld.ColCount*(Zellengroesse+Spielfeld.GridLineWidth); Spielfeld.ClientHeight := Spielfeld.RowCount*(Zellengroesse+Spielfeld.GridLineWidth); Leiste.DefaultColWidth := Zellengroesse; Leiste.DefaultRowHeight := Zellengroesse; Leiste.ClientWidth := Leiste.ColCount*(Zellengroesse+Leiste.GridLineWidth); Leiste.ClientHeight := Leiste.RowCount*(Zellengroesse+Leiste.GridLineWidth); // Statusbar im Verhältnis 1:3 teilen StatusBar1.Panels[0].Width := StatusBar1.Width div 2; Form1.Width := Spielfeld.ClientWidth+12; Form1.Height := Spielfeld.ClientHeight+80+Leiste.ClientHeight+30; randomize; NeuesSpiel; Spielfeld.Enabled := false; // bei Start Stillstand Zeit.Enabled := false; // Zeit anhalten sofort nach Start Classic:= true; end; {==============================================================================} procedure TForm1.NeuesSpiel; var x,y,i : integer; begin for x := 0 to Spielfeld.ColCount-1 do begin i := random(4)+1; // zufällige Anordnung der Kästchen for y := Spielfeld.RowCount-i to Spielfeld.RowCount-1 do Spielfeld.Cells[x,y] := IntToStr(random(5)); // belegt alle Felder mit Farbe for y := 0 to Spielfeld.RowCount-i-1 do Spielfeld.Cells[x,y] := '-1'; // belegt alle leeren Felder mit schwarz end; for x := 0 to Leiste.ColCount-1 do Leiste.Cells[x,0] := IntToStr(random(5)); // zufällige Belegung der Leiste //Spielfeld.Cells[0,0]:='4'; //Spielfeld.Cells[0,1]:='3'; Zeit.Enabled := true; // Uhr anschalten Zeit.Interval := 500; Kaestchen := Spielfeld.ColCount; LetzteZeile := false; Spielfeld.Enabled := true; if Classic=false then Zeit.Interval := 100; end; {==============================================================================} procedure TForm1.SpielfeldDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if Spielfeld.Cells[ACol,Arow] <> '-1' then case Spielfeld.Cells[ACol,Arow][1] of '0' : Spielfeld.Canvas.Brush.Color := clRed; '1' : Spielfeld.Canvas.Brush.Color := clBlue; '2' : Spielfeld.Canvas.Brush.Color := clYellow; '3' : Spielfeld.Canvas.Brush.Color := clGreen; '4' : Spielfeld.Canvas.Brush.Color := clWhite; else Spielfeld.Canvas.Brush.Color := clBLack; // Farbe für "gelöscht" end; // endcase Spielfeld.Canvas.Pen.Color := clBlack; Spielfeld.Canvas.Rectangle(Rect); end; {==============================================================================} procedure TForm1.LeisteDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if Leiste.Cells[ACol,Arow] <> '-1' then case Leiste.Cells[ACol,ARow][1] of '0' : Leiste.Canvas.Brush.Color := clRed; '1' : Leiste.Canvas.Brush.Color := clBlue; '2' : Leiste.Canvas.Brush.Color := clYellow; '3' : Leiste.Canvas.Brush.Color := clGreen; '4' : Leiste.Canvas.Brush.Color := clWhite; else Leiste.Canvas.Brush.Color := clBlack; // Farbe für "gelöscht" end; // endcase Leiste.Canvas.Pen.Color := clBlack; Leiste.Canvas.Rectangle(Rect); end; {==============================================================================} procedure TForm1.NeuesSpiel1Click(Sender: TObject); begin NeuesSpiel; Statusbar1.Panels[0].Text := 'Punkte : 0'; Statusbar1.Panels[1].Text := 'Runden : 30'; // Statusbar1.Panels[2].Text := 'Level : 1'; // Level := 1; Punkte := 0; Runden := 30; anzahlgleichfarbigerbloecke := 0; Zeit.Enabled := true; start := now; end; {============================================================================} procedure TForm1.GleicheFarbenLoeschen; var x,y ,i ,x1 : integer; Lueckevorhanden,LeereZeile : boolean; ZeileBloecke : integer; begin if anzahlGleichfarbigerbloecke > 1 then begin // es gibt bloecke zu löschen // zu löschende blöcke markieren for x := 0 to Spielfeld.ColCount -1 do for y := 0 to Spielfeld.RowCount -1 do if StrToInt(Spielfeld.Cells[x,y]) > 4 then Spielfeld.Cells[x,y] := '-1'; for x := 0 to Spielfeld.ColCount -1 do begin repeat Lueckevorhanden := false; // Lücke suchen ZeileBloecke := -1; // eine nicht existierende Zeilennummer for y := 0 to Spielfeld.RowCount - 2 do if (Spielfeld.Cells[x,y] <> '-1') and (Spielfeld.Cells[x,y+1]='-1') then begin ZeileBloecke := y; Lueckevorhanden := true; end; if Lueckevorhanden then begin while (ZeileBloecke < Spielfeld.RowCount -1) and (Spielfeld.Cells[x,ZeileBloecke+1]='-1')do begin for y := ZeileBloecke downto 0 do begin Spielfeld.Cells[x,y+1] :=Spielfeld.Cells[x,y]; Spielfeld.Cells[x,y] := '-1'; end; end; end; until not Lueckevorhanden; end; for x := 1 to Spielfeld.ColCount -2 do // ab den vollen Spalten anfangen zuzählen begin i := 0; // Anzahl der leeren Kästchen for y := 0 to Spielfeld.RowCount -1 do begin if Spielfeld.Cells[x,y] = '-1' then i := i+1; // erhöhe die Kästchen um 1 end; if i = Spielfeld.RowCount // wenn die Spalte leer ist then begin if x <= Spielfeld.ColCount/2 // wenn die Hälfte oder weniger mit Kaestchen belegt ist then begin for x1 := x downto 1 do // schieben alles nach links, welche Spalte frei ist begin for y := 0 to Spielfeld.RowCount-1 do Spielfeld.Cells[x1,y] := Spielfeld.Cells[x1-1,y]; // Verschiebung Bloecke end; for y := 0 to Spielfeld.RowCount-1 do Spielfeld.Cells[0,y] := '-1'; // Übertragung Farben Bloecke end else begin for x1 := x to Spielfeld.ColCount -2 do // schieben alles nach rechts, welche Spalte frei ist begin for y := 0 to Spielfeld.RowCount-1 do Spielfeld.Cells[x1,y] := Spielfeld.Cells[x1+1,y]; // Verschiebung Bloecke end; for y := 0 to Spielfeld.RowCount-1 do Spielfeld.Cells[Spielfeld.ColCount-1,y] := '-1'; // Übertragung Farben der Bloecke end; end; end; end else // keine Bloecke zu löschen begin for x := 0 to Spielfeld.ColCount -1 do for y := 0 to Spielfeld.RowCount -1 do if StrToInt(Spielfeld.Cells[x,y]) > 4 then Spielfeld.Cells[x,y] := IntToStr(StrToInt(Spielfeld.Cells[x,y])-5); //alter wert wiederherstellen end; LeereZeile := true; for x := 0 to Spielfeld.ColCount-1 do begin if Spielfeld.Cells[x,Spielfeld.RowCount-1] <> '-1' then LeereZeile := false; end; if LeereZeile = true then Punkte := Punkte + 2000; end; {============================================================================} procedure TForm1.GleicheFarbenFinden(x, y : integer); var farbwert : string; begin anzahlgleichfarbigerbloecke := anzahlgleichfarbigerbloecke+1; // farbcode merken farbwert := Spielfeld.Cells[x,y]; // zelle markieren Spielfeld.Cells[x,y] := IntToStr(StrToInt(Spielfeld.Cells[x,y])+5); // nördliche zelle testen if y > 0 then if Spielfeld.Cells[x,y-1] = farbwert then GleicheFarbenFinden(x,y-1); // östliche if x < Spielfeld.ColCount - 1 then if Spielfeld.Cells[x+1,y] = farbwert then GleicheFarbenFinden(x+1,y); // südliche if y < Spielfeld.RowCount - 1 then if Spielfeld.Cells[x,y+1] = farbwert then GleicheFarbenFinden(x,y+1); // westliche if x > 0 then if Spielfeld.Cells[x-1,y] = farbwert then GleicheFarbenFinden(x-1,y); end; {==============================================================================} procedure TForm1.SpielfeldSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); var b, i : integer; begin anzahlgleichfarbigerbloecke := 0; if Spielfeld.Cells[ACol,Arow] <> '-1' then GleicheFarbenFinden(ACol, ARow); b := anzahlgleichfarbigerbloecke; case b of 0,1 : Punkte := Anzahlgleichfarbigerbloecke * 0 + Punkte; 2 : Punkte := Anzahlgleichfarbigerbloecke * 5 + Punkte; 3 : Punkte := Anzahlgleichfarbigerbloecke * 10 + Punkte; 4 : Punkte := Anzahlgleichfarbigerbloecke * 15 + Punkte; 5 : Punkte := Anzahlgleichfarbigerbloecke * 20 + Punkte; 6 : Punkte := Anzahlgleichfarbigerbloecke * 25 + Punkte; 7 : Punkte := Anzahlgleichfarbigerbloecke * 30 + Punkte; else Punkte := Anzahlgleichfarbigerbloecke * 60 + Punkte; end; Statusbar1.Panels[0].Text := 'Punkte :' + IntToStr(Punkte); GleicheFarbenLoeschen; { QuickRep1.Prepare; i := QuickRep1.anzahlgleichfarbigerbloecke; QuickRep1.Preview; } end; {==============================================================================} procedure TForm1.ZeitTimer(Sender: TObject); var x,y : integer; begin if Kaestchen = Leiste.ColCount // Leiste voll then begin for x := 0 to Spielfeld.ColCount-1 do // für oberste Zeile begin if Spielfeld.Cells[x,0] <> '-1' then begin LetzteZeile := true; // wenn Letzte Zeile belegt Zeit.Enabled := false; Spielfeld.Enabled := false; PunkteEnde := Punkte; Form8.ShowModal; // öffnen Fenster mit Game Over end; if LetzteZeile = true then break; // beendet for-Schleife end; if LetzteZeile = false then begin for y := 0 to Spielfeld.RowCount-1 do begin for x := 0 to Spielfeld.ColCount-1 do Spielfeld.Cells[x,y] := Spielfeld.Cells[x,y+1]; // Spiel läuft weiter end; for x := 0 to Spielfeld.ColCount-1 do Spielfeld.Cells[x,Spielfeld.RowCount-1] := Leiste.Cells[x,0]; // Leiste wird weiter übertragen for x := 0 to Leiste.ColCount-1 do // leeren der Leiste Leiste.Cells[x,0] := '-1'; Kaestchen := 0; Runden := Runden -1; Statusbar1.Panels[1].Text := 'Runden :' + IntToStr(Runden); if Runden = 0 then begin Zeit.Enabled := false; Spielfeld.Enabled := false; PunkteEnde := Punkte; Form13.ShowModal; Runden := 30; if Level = Level+1 then begin Runden :=(Level-1)*5+30; Zeit.Interval := 500; Zeit.Interval := Zeit.Interval-10; Zeit.Enabled := true; Spielfeld.Enabled := true; end; end; end; end else // füllen untere Leiste auf begin Leiste.Cells[Kaestchen,0] := IntToStr(random(5)); Kaestchen := Kaestchen+1; end; end; {==============================================================================} procedure TForm1.Info2Click(Sender: TObject); begin Form3.ShowModal; end; {==============================================================================} procedure TForm1.Hilfe1Click(Sender: TObject); begin Form4.Show; end; {==============================================================================} procedure TForm1.Highscore1Click(Sender: TObject); begin Form5.ShowModal; end; {==============================================================================} procedure TForm1.Steuerung1Click(Sender: TObject); begin Form6.Show; end; {==============================================================================} procedure TForm1.Stopp1Click(Sender: TObject); begin if Zeit.Enabled = true // wenn Zeit läuft dann then begin Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten end; if Spielfeld.Enabled = true // wenn Oberfläche bedienbar then begin Spielfeld.Enabled := false; // Oberfläche deaktivieren end; end; {==============================================================================} procedure TForm1.Fortsetzen1Click(Sender: TObject); begin if Zeit.Enabled = false // wenn Zeit nicht läuft dann then begin Zeit.Enabled := true; // Programm starten/Zeit laufen lassen end; if Spielfeld.Enabled = false then begin Spielfeld.Enabled := true; end; end; {==============================================================================} procedure TForm1.LeichtClick(Sender: TObject); begin NeuesSpiel; Zeit.Enabled := true; // Uhr anschalten Zeit.Interval := 500; // Zeitintervall beträgt 700 Millisekunden Statusbar1.Panels[1].Text := 'Runden : 30'; Runden := 30; Leicht.Enabled := False; // deaktiviert Leicht, da geladen Mittel.Enabled := True; Schwer.Enabled := True; Statusbar1.Panels[0].Text := 'Punkte : 0'; Punkte := 0; if Runden = 0 then begin Level :=Level+1; Runden :=(Level-1)*5+30; Zeit.Interval := Zeit.Interval-5; end; begin if anzahlGleichfarbigerbloecke > 1 then begin GleicheFarbenLoeschen; end; end end; {==============================================================================} procedure TForm1.MittelClick(Sender: TObject); begin NeuesSpiel; Zeit.Enabled := true; // Uhr anschalten Zeit.Interval := 350; // Zeitintervall beträgt 300 Millisekunden Statusbar1.Panels[1].Text := 'Runden : 50'; Runden := 50; Leicht.Enabled := True; Mittel.Enabled := False; // deaktiviert Mittel, da geladen Schwer.Enabled := True; Statusbar1.Panels[0].Text := 'Punkte : 0'; Punkte := 0; end; {==============================================================================} procedure TForm1.SchwerClick(Sender: TObject); begin NeuesSpiel; Zeit.Enabled := true; // Uhr anschalten Zeit.Interval := 200; // Zeitintervall beträgt 100 Millisekunden Statusbar1.Panels[1].Text := 'Runden : 70'; Runden := 70; Leicht.Enabled := True; Mittel.Enabled := True; Schwer.Enabled := False; // deaktiviert Schwer, da geladen Statusbar1.Panels[0].Text := 'Punkte : 0'; Punkte := 0; end; {==============================================================================} procedure TForm1.Spielmodus1Click(Sender: TObject); begin Zeit.Enabled := false; Form9.ShowModal; end; {==============================================================================} procedure TForm1.Musik1Click(Sender: TObject); begin Form7.ShowModal; end; {==============================================================================} procedure TForm1.Musik2Click(Sender: TObject); begin Form11.ShowModal; end; {==============================================================================} procedure TForm1.Musik3Click(Sender: TObject); begin Form12.ShowModal; end; {==============================================================================} procedure TForm1.Memories1Click(Sender: TObject); begin Form2.ShowModal; end; {==============================================================================} procedure TForm1.SwaggerJackin1Click(Sender: TObject); begin Form14.ShowModal; end; {==============================================================================} end. |
Re: Projekt Probleme: Zeitmessung und Highscore
sach mal ... schaust du dir den beitrag nachher auch nochmal an?
1. Delphi-Tags setzen ist doch so schwer nicht ...
Code:
2. Sowas geht auch als Attachment
[delphi]hier kommt der Code[/delphi]
Für Dich eine CopyPaste Vorlage:
Code:
Dat erst einfügen und dann zwischen den delphi-dingern den quelltext rein
[delphi]
[/delphi] |
Re: Projekt Probleme: Zeitmessung und Highscore
ich hab ne Aufgabe für dich:
Delphi-Quellcode:
die kannste alle umbenennen, dass man was erkennt. Ich sag dir, dass es genug gibt, die locker den Überblick verlieren. Was ist mut Unit9?
uses Unit2, Unit3, Unit4, Unit5, Unit7, Unit6, Unit8, Unit10, Unit11, Unit12, Unit13, Unit14;
Bernhard EDIT: Was geht denn jetzt nicht/ wo meckert denn der Compiler? |
Re: Projekt Probleme: Zeitmessung und Highscore
Und per Maus geht das auch: Klick auf "Delphi-Code", Code einfügen, nochmal Klick auf "Delphi-Code"... feddich
[edit] Das bezieht sich auf #6 [/edit] |
Re: Projekt Probleme: Zeitmessung und Highscore
Zitat:
|
Re: Projekt Probleme: Zeitmessung und Highscore
okay, mach ich jetzt so
danke für den Tipp mein Partner mit dem ich arbeite hat die Unit9 und Form10 gelöscht und dafür Unit10 und Form9 zusammengeführt, deswegen nicht mehr findbar noch als Ergänzung für Zeitmessung habe ich Unit13:
Delphi-Quellcode:
Was muss verändert werden, damit neben dem Label die Zeit steht und die Zeit nicht immer dieselbe bleibt?
unit Unit13;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm13 = class(TForm) Label1: TLabel; Label3: TLabel; Label4: TLabel; Label2: TLabel; Label5: TLabel; procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form13: TForm13; start, runtime : TDatetime; i : integer; implementation uses Unit1; {$R *.DFM} {==============================================================================} procedure TForm13.FormCreate(Sender: TObject); begin runtime := now - start; Label2.Caption := FormatDatetime('ss', runtime); // ShowMessage('Punkte: '+IntToStr(Punkte)'; { Report.Prepare; i := QuickRep1.anzahlgleichfarbigerbloecke; Report.Preview; Label3.Caption := IntToStr(i); } end; {==============================================================================} end. Habt ihr Vorschläge? |
Re: Projekt Probleme: Zeitmessung und Highscore
Zitat:
das passiert ja hier nur einmalig beim Form.Create BTW: Bei dem Code wirst nach 10h 22min und 54sec in dem Label lapidar "24" stehen haben. Das ist dir hoffentlich bewusst. |
Re: Projekt Probleme: Zeitmessung und Highscore
also in Zeit (Timer in Unit1) reinschreiben
Form13.Label2.Caption... oder irre ich mich wieder? |
Re: Projekt Probleme: Zeitmessung und Highscore
habe den Highscore übernommen, was hier geschrieben wurde
bei Programmstart folgende Meldung: ProjectProject1.exe raised exeption class EinOutError with message 'Invalid numeric input'. das wird blau angestrichen: readln(Datei, Name, Punkte); Ich weiß nichts damit anzufangen :wiejetzt: |
Re: Projekt Probleme: Zeitmessung und Highscore
Du kannst nicht verschiedene Datentypen lesen mit Hilfe von ReadLn. Lese eine Zeile ein und splitte die dann auf in Name und Punkte.
Bernhard |
Re: Projekt Probleme: Zeitmessung und Highscore
Zitat:
upps - kam er doch nicht ... aber du hast den übernommen Der Fehler müsste also vorher auch schon da gewesen sein! |
Re: Projekt Probleme: Zeitmessung und Highscore
ok, ich bekenne mich Schuldig des Abschreibens vom TE.
Delphi-Quellcode:
Bernhard
var:
Name1 : Array[1..10] of string; Punkt1 : Array[1..10] of integer; // hier Integer procedure TFormX.LeseHighscore; var Datei : TextFile; tempstr: string; Name : string; Punkte, i : integer; const sep = ';'; //neu begin assignFile(Datei,'highscore.txt'); reset (Datei); //i:=0; //while not eof (Datei) do for i := 1 to 10 do begin if eof(Datei) then // Bei Dateiende die Schleife vorzeitig verlassen break; readln(Datei, tempstr); Name1[i]:= Copy(tempstr, 1, Pos(Sep, Tempstr) - 1); // Neu Punkt1[i]:=StrToInt(Copy(tempstr, Pos(Sep, Tempstr) + 1, MaxInt)); // Neu end; CloseFile(Datei); // Parameter nicht vergessen end; |
Re: Projekt Probleme: Zeitmessung und Highscore
danke das ihr so schnell antwortet
folgendes vertstehe ich nicht:
Delphi-Quellcode:
Was ist tempstr, Sep, MaxInt oder alle 3 Zeilen gleich?
readln(Datei, tempstr);
Name1[i]:= Copy(tempstr, 1, Pos(Sep, Tempstr) - 1); // Neu Punkt1[i]:=StrToInt(Copy(tempstr, Pos(Sep, Tempstr) + 1, MaxInt)); // Neu |
Re: Projekt Probleme: Zeitmessung und Highscore
Zitat:
|
Re: Projekt Probleme: Zeitmessung und Highscore
Liste der Anhänge anzeigen (Anzahl: 1)
ProjectProject1.exe raised exeption class EConvertError with message 'Steve 1200'.
Steve sollte als Name gelesen werden 1200 sollten Punkte darstellen Hier muss ich ein Fehler gemacht haben |
Re: Projekt Probleme: Zeitmessung und Highscore
ja, kuck doch mal was die var sep für einen Wert hat
und dann die Frage stellen ... wieso hat sep diesen wert ist keine zahl und im namen kommt dat auch nicht vor Oh ... kommt sep von Seperator (englisch) -> Trenner Oh ... muss vielleicht das Zeichen von sep zwischen Name und Punkte? |
Re: Projekt Probleme: Zeitmessung und Highscore
Dann ändere sep mal in einen Tabulator.
Delphi-Quellcode:
const
sep = #9; |
Re: Projekt Probleme: Zeitmessung und Highscore
in highscore.txt, Programm nun folgendes Problem:
ProjectProject1.exe raised exeption class EConvertError with message "8000 'is not a invalid integer value'.
Delphi-Quellcode:
procedure TForm5.FormActivate(Sender: TObject);
var i : integer; begin for i := 1 to 10 do begin Name1[i] :=''; Punkt1[i] := 0; end; LeseHighscore; end; // hier blau angestrichen {==============================================================================} end. |
Re: Projekt Probleme: Zeitmessung und Highscore
Meine Güte, setz einmal einen Haltepunkt und schau Dir den Inhalt der Variablen an, dann siehst Du, wo es noch hakt.
|
Re: Projekt Probleme: Zeitmessung und Highscore
nö, fragen ist doch einfacher als Augen auf ... da muss man auch noch denken ... igitt :mrgreen:
|
Re: Projekt Probleme: Zeitmessung und Highscore
Zitat:
|
Re: Projekt Probleme: Zeitmessung und Highscore
Delphi-Quellcode:
Was wird ausgegeben?
Name1[i]:= Copy(tempstr, 1, Pos(Sep, Tempstr) - 1);
ShowMessage(Copy(tempstr, Pos(Sep, Tempstr) + 1, MaxInt)); //zur Kontrolle eingefügt Punkt1[i]:=StrToInt(Copy(tempstr, Pos(Sep, Tempstr) + 1, MaxInt)); // Neu |
Re: Projekt Probleme: Zeitmessung und Highscore
Liste der Anhänge anzeigen (Anzahl: 1)
am anfang öffnet es sich und dann kleines Fenster mit Project1 Namen
im fenster steht steve 1200 dann kommt meldung:ProjectProject1.exe raised exeption class EConvertError with message "steve 1200 'is not a invalid integer value'. |
Re: Projekt Probleme: Zeitmessung und Highscore
Hast Du sep denn auch geändert wie weiter oben gesagt?
|
Re: Projekt Probleme: Zeitmessung und Highscore
Vielleicht wird es Dir damit klarer.
Tausche die Zeilen von DeddyH mal mit diesen aus, und wirst es sehen!
Delphi-Quellcode:
if Pos( Sep, Tempstr ) > 0 then
begin Name1[ i ] := Copy( Tempstr, 1, Pos( Sep, Tempstr ) - 1 ); Punkt1[ i ] := StrToInt( Copy( Tempstr, Pos( Sep, Tempstr ) + 1, MaxInt ) ); // Neu end else ShowMessage( Format( 'In "%s" ist kein Sep "%s" enthalten! Wie soll ich das denn bitte schön trennen?', [ Tempstr, Sep ] ) ); |
Re: Projekt Probleme: Zeitmessung und Highscore
Da
![]() |
Re: Projekt Probleme: Zeitmessung und Highscore
Zitat:
|
Re: Projekt Probleme: Zeitmessung und Highscore
bitte nicht noch mit Tipps ala Debugging hier anfangen. Das können doch Anfänger eh nicht. Selbst wenn es genug Tutorials gibt (
![]() Also zum Debuggen bitte unbedingt lesen: ![]() Bernhard PS: Woher sollte ich denn raten, dass das Trennzeichen (Sep) zwischen Name und Punktanzahl ein Leerzeichen oder ein Tabulator ist? Die gehören zumindest nicht in mein Standartrepertoire der Trennzeichen. |
Re: Projekt Probleme: Zeitmessung und Highscore
hab es eingefügt
diesmal kam nur Showmessage und dann waren die 3 ListBox's immer noch leer aber danke für eure Antworten |
Re: Projekt Probleme: Zeitmessung und Highscore
Wir haben hier auch keinen Fitzel von dem Source gesehen, der diese Daten jetzt in eine ListBox schreibt.
Wir haben doch bislang NUR darüber gesprochen, wie du die Daten aus der Datei in ein Array (also in den Speicher) bekommst. so stay relaxed |
Re: Projekt Probleme: Zeitmessung und Highscore
achso
noch nicht darüber nachgedacht (man merkt das ich Anfänger bin) dann geht das doch schon mal |
Re: Projekt Probleme: Zeitmessung und Highscore
Dann zeig uns doch einmal den aktuellen Code, aber bitte nur die Änderungen.
|
Re: Projekt Probleme: Zeitmessung und Highscore
Delphi-Quellcode:
var: Name1 : Array[1..10] of string; Punkt1 : Array[1..10] of integer; // hier Integer procedure TFormX.LeseHighscore; var Datei : TextFile; tempstr: string; Name : string; Punkte, i : integer; const sep = ';'; //neu begin assignFile(Datei,'highscore.txt'); reset (Datei); for i := 1 to 10 do // hier Änderung begin if eof(Datei) then // hier Änderung break; readln(Datei, tempstr); if Pos( Sep, Tempstr ) > 0 then // ab hier Änderung begin Name1[ i ] := Copy( Tempstr, 1, Pos( Sep, Tempstr ) - 1 ); Punkt1[ i ] := StrToInt( Copy( Tempstr, Pos( Sep, Tempstr ) + 1, MaxInt ) ); end else ShowMessage( Format( 'In "%s" ist kein Sep "%s" enthalten! Wie soll ich das denn bitte schön trennen?', [ Tempstr, Sep ] ) ); end; CloseFile(Datei); end;
Delphi-Quellcode:
das was hier geschrieben wurde
procedure TForm5.FormActivate(Sender: TObject);
var i : integer; begin for i := 1 to 10 do // hier Änderung begin Name1[i] :=''; Punkt1[i] := 0; end; LeseHighscore; end; {==============================================================================} end. |
Re: Projekt Probleme: Zeitmessung und Highscore
Zitat:
Delphi-Quellcode:
const
sep = #9; //Tabulator |
Re: Projekt Probleme: Zeitmessung und Highscore
habe das eingefügt:
Delphi-Quellcode:
dann kommt Fehlermeldung: '8000 'ist kein gültiger Integerwert
const
sep = #9; //Tabulator mit dem kommt keine fehlermeldung:
Delphi-Quellcode:
const
sep = ';'; //neu |
Re: Projekt Probleme: Zeitmessung und Highscore
Anscheinend steht am Stringende noch ein Leerzeichen, das kannst Du mit Trim() entfernen, bevor Du versuchst, diesen String in eine Zahl zu wandeln.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:06 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