Subversion Repositories jumper

Rev

Rev 8 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. unit HighScore;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  7.   Dialogs, ComCtrls, StdCtrls;
  8.  
  9. type
  10.   THighScoreForm = class(TForm)
  11.     PageControl: TPageControl;
  12.     RemainingTab: TTabSheet;
  13.     TimeTab: TTabSheet;
  14.     RemainingList: TListView;
  15.     ScoreTab: TTabSheet;
  16.     PPMTab: TTabSheet;
  17.     TimeList: TListView;
  18.     ScoreList: TListView;
  19.     PPMList: TListView;
  20.     CloseBtn: TButton;
  21.     ClearBtn: TButton;
  22.     procedure CompareDesc(Sender: TObject; Item1, Item2: TListItem;
  23.       Data: Integer; var Compare: Integer);
  24.     procedure CompareAsc(Sender: TObject; Item1, Item2: TListItem;
  25.       Data: Integer; var Compare: Integer);
  26.     procedure CloseBtnClick(Sender: TObject);
  27.     procedure ClearBtnClick(Sender: TObject);
  28.   private
  29.     FLevelName: String;
  30.     procedure Parse(JournalEntry: String);
  31.     procedure ReadOutJournal;
  32.     procedure ClearLists;
  33.   public
  34.     procedure Execute(LevelName: String);
  35.   end;
  36.  
  37. var
  38.   HighScoreForm: THighScoreForm;
  39.  
  40. implementation
  41.  
  42. {$R *.dfm}
  43.  
  44. uses
  45.   Functions, Constants;
  46.  
  47. procedure THighScoreForm.CompareDesc(Sender: TObject; Item1,
  48.   Item2: TListItem; Data: Integer; var Compare: Integer);
  49. var
  50.   n1, n2: integer;
  51. begin
  52.   if item1.SubItems.Count < 1 then exit;
  53.   if item2.SubItems.Count < 1 then exit;
  54.  
  55.   n1 := StrToIntDef(Item1.SubItems[1], 0);
  56.   n2 := StrToIntDef(Item2.SubItems[1], 0);
  57.  
  58.   if (n1 = n2)
  59.     then Compare := 0 else
  60.   if (n1 > n2)
  61.     then Compare := 1
  62.     else Compare := -1;
  63. end;
  64.  
  65. procedure THighScoreForm.Parse(JournalEntry: String);
  66. var
  67.   res: TStringList;
  68.   Date, Name: String;
  69.   Score, Seconds, Removed, Total: Integer;
  70.   Remaining, PPM: integer;
  71. begin
  72.   res := Explode(JNL_SEP, JournalEntry);
  73.  
  74.   // VARIABLES
  75.  
  76.   Date := res.Strings[0];
  77.   Name := res.Strings[1];
  78.   Score := StrToIntDef(res.Strings[2], 0);
  79.   Seconds := StrToIntDef(res.Strings[3], 0);
  80.   Removed := StrToIntDef(res.Strings[4], 0);
  81.   Total := StrToIntDef(res.Strings[5], 0);
  82.  
  83.   Remaining := Total - Removed;
  84.   PPM := Round(Score / Seconds * 60);
  85.  
  86.   // CATEGORY A - LOWEST REMAINING STONES
  87.  
  88.   RemainingList.SortType := stNone;
  89.  
  90.   with RemainingList.Items.Add do
  91.   begin
  92.     Caption := Name;
  93.     SubItems.Add(Date);
  94.     SubItems.Add(IntToStr(Remaining));
  95.   end;
  96.  
  97.   RemainingList.SortType := stText;
  98.  
  99.   // CATEGORY B - HIGHEST SCORE
  100.  
  101.   ScoreList.SortType := stNone;
  102.  
  103.   with ScoreList.Items.Add do
  104.   begin
  105.     Caption := Name;
  106.     SubItems.Add(Date);
  107.     SubItems.Add(IntToStr(Score));
  108.   end;
  109.  
  110.   ScoreList.SortType := stText;
  111.  
  112.   // CATEGORY C - LOWEST TIME
  113.  
  114.   TimeList.SortType := stNone;
  115.  
  116.   with TimeList.Items.Add do
  117.   begin
  118.     Caption := Name;
  119.     SubItems.Add(Date);
  120.     SubItems.Add(IntToStr(Seconds));
  121.   end;
  122.  
  123.   TimeList.SortType := stText;
  124.  
  125.   // CATEGORY D - HIGHEST POINTS PER MINUTE
  126.  
  127.   PPMList.SortType := stNone;
  128.  
  129.   with PPMList.Items.Add do
  130.   begin
  131.     Caption := Name;
  132.     SubItems.Add(Date);
  133.     SubItems.Add(IntToStr(PPM));
  134.   end;
  135.  
  136.   PPMList.SortType := stText;
  137. end;
  138.  
  139. procedure THighScoreForm.ReadOutJournal;
  140. var
  141.   f: textfile;
  142.   tmp: string;
  143. begin
  144.   ClearLists;
  145.  
  146.   tmp := Format(JNL_FILE, [FLevelName]);
  147.   if FileExists(tmp) then
  148.   begin
  149.     AssignFile(f, tmp);
  150.     Reset(f);
  151.     while not eof(f) do
  152.     begin
  153.       ReadLn(f, tmp);
  154.       Parse(tmp);
  155.     end;
  156.     CloseFile(f);
  157.   end;
  158. end;
  159.  
  160. procedure THighScoreForm.Execute(LevelName: String);
  161. begin
  162.   FLevelName := LevelName;
  163.  
  164.   ReadOutJournal;
  165.   ShowModal;
  166. end;
  167.  
  168. procedure THighScoreForm.CompareAsc(Sender: TObject; Item1,
  169.   Item2: TListItem; Data: Integer; var Compare: Integer);
  170. var
  171.   n1, n2: integer;
  172. begin
  173.   if item1.SubItems.Count < 1 then exit;
  174.   if item2.SubItems.Count < 1 then exit;
  175.  
  176.   n1 := StrToIntDef(Item1.SubItems[1], 0);
  177.   n2 := StrToIntDef(Item2.SubItems[1], 0);
  178.  
  179.   if (n1 = n2)
  180.     then Compare := 0 else
  181.   if (n1 > n2)
  182.     then Compare := -1
  183.     else Compare := 1;
  184. end;
  185.  
  186. procedure THighScoreForm.CloseBtnClick(Sender: TObject);
  187. begin
  188.   Close();
  189. end;
  190.  
  191. procedure THighScoreForm.ClearBtnClick(Sender: TObject);
  192. begin
  193.   // TODO: Benutzer fragen, ob OK
  194.   DeleteFile(Format(JNL_FILE, [FLevelName]));
  195.   ClearLists;
  196. end;
  197.  
  198. procedure THighScoreForm.ClearLists;
  199. begin
  200.   RemainingList.Clear;
  201.   ScoreList.Clear;
  202.   TimeList.Clear;
  203.   PPMList.Clear;
  204. end;
  205.  
  206. end.
  207.