Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Projekt Probleme: Zeitmessung und Highscore (https://www.delphipraxis.net/148025-projekt-probleme-zeitmessung-und-highscore.html)

Swagger Jackin 20. Feb 2010 22:48


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:
Zeit.Enabled:=true;
NeuesSpielClick:
Delphi-Quellcode:
Zeit.Enabled:=true;
start:=now; (start:=TDateTime)
in Unit2:
Delphi-Quellcode:
FormX.Create:
runtime:= now-start; (runtime, start:=TDateTime)
LabelX.Caption := FormatDateTime('ss', runtime);
Problem: wenn ich programm neustarte und bis gameover laufenlasse, aber es länger dauert als es davor dauerte, erhalte ich
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:
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;
dabei entstehen Probleme weil string nicht deklariert ist
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]

rollstuhlfahrer 20. Feb 2010 23:42

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

Swagger Jackin 21. Feb 2010 11:25

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?

rollstuhlfahrer 21. Feb 2010 11:37

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:
 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;
Bernhard

Swagger Jackin 21. Feb 2010 13:37

Re: Projekt Probleme: Zeitmessung und Highscore
 
Delphi-Quellcode:

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.
[edit=Phoenix] Delphi-Tag geschlossen. Mfg, Phoenix[/edit]

Sir Rufo 21. Feb 2010 13:42

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:
[delphi]hier kommt der Code[/delphi]
2. Sowas geht auch als Attachment

Für Dich eine CopyPaste Vorlage:
Code:
[delphi]

[/delphi]
Dat erst einfügen und dann zwischen den delphi-dingern den quelltext rein

rollstuhlfahrer 21. Feb 2010 13:46

Re: Projekt Probleme: Zeitmessung und Highscore
 
ich hab ne Aufgabe für dich:
Delphi-Quellcode:
uses Unit2, Unit3, Unit4, Unit5, Unit7, Unit6, Unit8, Unit10, Unit11, Unit12, Unit13, Unit14;
die kannste alle umbenennen, dass man was erkennt. Ich sag dir, dass es genug gibt, die locker den Überblick verlieren. Was ist mut Unit9?

Bernhard

EDIT: Was geht denn jetzt nicht/ wo meckert denn der Compiler?

DeddyH 21. Feb 2010 13:47

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]

Sir Rufo 21. Feb 2010 13:50

Re: Projekt Probleme: Zeitmessung und Highscore
 
Zitat:

Zitat von DeddyH
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]

jo, jo ... aber das war wohl zu schwierig ... darum die vorlage :mrgreen:

Swagger Jackin 21. Feb 2010 13:58

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:
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.
Was muss verändert werden, damit neben dem Label die Zeit steht und die Zeit nicht immer dieselbe bleibt?
Habt ihr Vorschläge?

Sir Rufo 21. Feb 2010 14:06

Re: Projekt Probleme: Zeitmessung und Highscore
 
Zitat:

Zitat von Swagger Jackin
Was muss verändert werden, damit neben dem Label die Zeit steht und die Zeit nicht immer dieselbe bleibt?

ja, von Zeit zu Zeit die Zeit in das Zeitlabel schreiben

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.

Swagger Jackin 21. Feb 2010 14:18

Re: Projekt Probleme: Zeitmessung und Highscore
 
also in Zeit (Timer in Unit1) reinschreiben
Form13.Label2.Caption...
oder irre ich mich wieder?

Swagger Jackin 21. Feb 2010 14:19

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:

rollstuhlfahrer 21. Feb 2010 14:22

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

Sir Rufo 21. Feb 2010 14:24

Re: Projekt Probleme: Zeitmessung und Highscore
 
Zitat:

Zitat von rollstuhlfahrer
Du kannst nicht verschiedene Datentypen lesen mit Hilfe von ReadLn. Lese eine Zeile ein und splitte die dann auf in Name und Punkte.

Bernhard

:mrgreen: aber genau dieser Source kam von Dir :mrgreen:

upps - kam er doch nicht ... aber du hast den übernommen
Der Fehler müsste also vorher auch schon da gewesen sein!

rollstuhlfahrer 21. Feb 2010 14:31

Re: Projekt Probleme: Zeitmessung und Highscore
 
ok, ich bekenne mich Schuldig des Abschreibens vom TE.

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);
//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;
Bernhard

Swagger Jackin 21. Feb 2010 15:26

Re: Projekt Probleme: Zeitmessung und Highscore
 
danke das ihr so schnell antwortet
folgendes vertstehe ich nicht:
Delphi-Quellcode:
readln(Datei, tempstr);
  Name1[i]:= Copy(tempstr, 1, Pos(Sep, Tempstr) - 1); // Neu
  Punkt1[i]:=StrToInt(Copy(tempstr, Pos(Sep, Tempstr) + 1, MaxInt)); // Neu
Was ist tempstr, Sep, MaxInt oder alle 3 Zeilen gleich?

DeddyH 21. Feb 2010 15:31

Re: Projekt Probleme: Zeitmessung und Highscore
 
Zitat:

Delphi-Quellcode:
var
  ...
  tempstr: string;
  ...
const
  sep = ';'; //neu

Und MAXINT ist eine in Delphi vordefinierte Konstante, einfach mal in die Hilfe schauen.

Swagger Jackin 21. Feb 2010 15:33

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

Sir Rufo 21. Feb 2010 15:51

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?

DeddyH 21. Feb 2010 15:52

Re: Projekt Probleme: Zeitmessung und Highscore
 
Dann ändere sep mal in einen Tabulator.
Delphi-Quellcode:
const
  sep = #9;

Swagger Jackin 21. Feb 2010 16:00

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.

DeddyH 21. Feb 2010 16:01

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.

Sir Rufo 21. Feb 2010 16:07

Re: Projekt Probleme: Zeitmessung und Highscore
 
nö, fragen ist doch einfacher als Augen auf ... da muss man auch noch denken ... igitt :mrgreen:

Swagger Jackin 21. Feb 2010 16:23

Re: Projekt Probleme: Zeitmessung und Highscore
 
Zitat:

Zitat von Sir Rufo
nö, fragen ist doch einfacher als Augen auf ... da muss man auch noch denken ... igitt :mrgreen:

na wenn man nicht weiter kommt oder es sieht was falsch ist, deswegen frage ich auch

DeddyH 21. Feb 2010 16:27

Re: Projekt Probleme: Zeitmessung und Highscore
 
Delphi-Quellcode:
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
Was wird ausgegeben?

Swagger Jackin 21. Feb 2010 16:37

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'.

DeddyH 21. Feb 2010 16:49

Re: Projekt Probleme: Zeitmessung und Highscore
 
Hast Du sep denn auch geändert wie weiter oben gesagt?

Sir Rufo 21. Feb 2010 16:54

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 ] ) );

DeddyH 21. Feb 2010 16:56

Re: Projekt Probleme: Zeitmessung und Highscore
 
Da sagt man es schon vor... :wall:

Sir Rufo 21. Feb 2010 16:58

Re: Projekt Probleme: Zeitmessung und Highscore
 
Zitat:

Zitat von DeddyH

Was meine Aussage aus #24 einfach nur bestätigt :mrgreen:

rollstuhlfahrer 21. Feb 2010 17:24

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 (Bei Google suchendelphi debugging tutorial) scheint das keinen zu interessieren. Übrigens hat mein Informatiklehrer das Debuggen eines Programms seit 1,6 Jahren noch nicht eingeführt. Finde ich eine starke Leistung von ihm.

Also zum Debuggen bitte unbedingt lesen: http://www.delphipraxis.net/internal...t.php?p=326082

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.

Swagger Jackin 21. Feb 2010 18:15

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

Sir Rufo 21. Feb 2010 18:20

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

Swagger Jackin 21. Feb 2010 18:24

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

DeddyH 21. Feb 2010 18:26

Re: Projekt Probleme: Zeitmessung und Highscore
 
Dann zeig uns doch einmal den aktuellen Code, aber bitte nur die Änderungen.

Swagger Jackin 21. Feb 2010 19:54

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:
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.
das was hier geschrieben wurde

DeddyH 22. Feb 2010 08:20

Re: Projekt Probleme: Zeitmessung und Highscore
 
Zitat:

Delphi-Quellcode:
const
  sep = ';'; //neu

Wie bereits 2 mal gesagt, der Separator ist nicht ";". Ändere das also einmal.
Delphi-Quellcode:
const
  sep = #9; //Tabulator

Swagger Jackin 22. Feb 2010 12:20

Re: Projekt Probleme: Zeitmessung und Highscore
 
habe das eingefügt:

Delphi-Quellcode:
const
  sep = #9; //Tabulator
dann kommt Fehlermeldung: '8000 'ist kein gültiger Integerwert


mit dem kommt keine fehlermeldung:

Delphi-Quellcode:
const
  sep = ';'; //neu

DeddyH 22. Feb 2010 12:21

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 09:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz