Subversion Repositories spacemission

Rev

Rev 4 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. unit GamSpeicherung;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls, ExtCtrls, Spin{$IF CompilerVersion >= 23.0}, System.UITypes{$IFEND};
  8.  
  9. type
  10.   TSpeicherungForm = class(TForm)
  11.     Bevel1: TBevel;
  12.     LadenBtn: TButton;
  13.     LoeschenBtn: TButton;
  14.     AktualisierenBtn: TButton;
  15.     SpeichernBtn: TButton;
  16.     AbbrechenBtn: TButton;
  17.     LevelListBox: TListBox;
  18.     Label2: TLabel;
  19.     Label3: TLabel;
  20.     Label1: TLabel;
  21.     LevelName: TEdit;
  22.     ElPanel1: TPanel;
  23.     li4a: TLabel;
  24.     li1: TLabel;
  25.     li3b: TLabel;
  26.     li3a: TLabel;
  27.     li4b: TLabel;
  28.     liu: TLabel;
  29.     liw: TLabel;
  30.     li2a: TLabel;
  31.     li2b: TLabel;
  32.     procedure LoeschenBtnClick(Sender: TObject);
  33.     procedure LadenBtnClick(Sender: TObject);
  34.     procedure SpeichernBtnClick(Sender: TObject);
  35.     procedure LevelListBoxClick(Sender: TObject);
  36.     procedure LevelNameChange(Sender: TObject);
  37.     procedure Button4Click(Sender: TObject);
  38.     procedure FormShow(Sender: TObject);
  39.     procedure DsFancyButton2Click(Sender: TObject);
  40.     procedure AbbrechenBtnClick(Sender: TObject);
  41.     procedure FormHide(Sender: TObject);
  42.     procedure LevelListBoxDblClick(Sender: TObject);
  43.   public
  44.     procedure SearchSaves;
  45.   end;
  46.  
  47. var
  48.   SpeicherungForm: TSpeicherungForm;
  49.  
  50. implementation
  51.  
  52. uses
  53.   Global, GamMain;
  54.  
  55. {$R *.DFM}
  56.  
  57. procedure TSpeicherungForm.SearchSaves;
  58. var
  59.   sr: TSearchRec;
  60.   res: integer;
  61. begin
  62.   LevelName.text := '';
  63.   LevelListBox.items.clear;
  64.   li1.visible := false;
  65.   li2a.visible := false;
  66.   li2b.visible := false;
  67.   li3a.visible := false;
  68.   li3b.visible := false;
  69.   li4a.visible := false;
  70.   li4b.visible := false;
  71.   liu.visible := false;
  72.   liw.visible := true;
  73.   li1.caption := 'n/a';
  74.   li2b.caption := 'n/a';
  75.   li3b.caption := 'n/a';
  76.   li4b.caption := 'n/a';
  77.   LadenBtn.enabled := false;
  78.   LoeschenBtn.enabled := false;
  79.   res := FindFirst(fdirectory+'Spielstände\*.sav', 0, sr);
  80.   try
  81.     while (res = 0) do
  82.     begin
  83.       if (sr.name <> '.') and (sr.name <> '..') then
  84.         LevelListBox.items.Add(copy(sr.Name, 0, length(sr.name)-4));
  85.       res := FindNext(sr);
  86.     end;
  87.   finally
  88.     FindClose(sr);
  89.   end;
  90. end;
  91.  
  92. procedure TSpeicherungForm.LoeschenBtnClick(Sender: TObject);
  93. var
  94.   Markiert: boolean;
  95.   i: integer;
  96. begin
  97.   Markiert := false;
  98.   for i := 0 to LevelListBox.items.Count-1 do
  99.   begin
  100.     if LevelListBox.Selected[i] then Markiert := true;
  101.   end;
  102.   if not Markiert then exit;
  103.   if MessageDlg('Diesen Spielstand wirklich löschen?',
  104.     mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  105.   begin
  106.     li1.visible := false;
  107.     li2a.visible := false;
  108.     li2b.visible := false;
  109.     li3a.visible := false;
  110.     li3b.visible := false;
  111.     li4a.visible := false;
  112.     li4b.visible := false;
  113.     liu.visible := false;
  114.     liw.visible := false;
  115.     li1.caption := 'n/a';
  116.     li2b.caption := 'n/a';
  117.     li3b.caption := 'n/a';
  118.     li4b.caption := 'n/a';
  119.     LadenBtn.enabled := false;
  120.     LoeschenBtn.enabled := false;
  121.     deletefile(FDirectory+'Spielstände\'+LevelListBox.Items.strings[LevelListBox.itemindex]+'.sav');
  122.     searchsaves;
  123.   end;
  124. end;
  125.  
  126. procedure TSpeicherungForm.LadenBtnClick(Sender: TObject);
  127. var
  128.   Markiert: boolean;
  129.   i: integer;
  130.   SavGame: textfile;
  131. begin
  132.   Markiert := false;
  133.   for i := 0 to LevelListBox.items.Count-1 do
  134.   begin
  135.     if LevelListBox.Selected[i] then Markiert := true;
  136.   end;
  137.   if not Markiert then exit;
  138.   if LevelListBox.items.count = 0 then
  139.   begin
  140.     li1.visible := false;
  141.     li2a.visible := false;
  142.     li2b.visible := false;
  143.     li3a.visible := false;
  144.     li3b.visible := false;
  145.     li4a.visible := false;
  146.     li4b.visible := false;
  147.     liu.visible := false;
  148.     liw.visible := false;
  149.     li1.caption := 'n/a';
  150.     li2b.caption := 'n/a';
  151.     li3b.caption := 'n/a';
  152.     li4b.caption := 'n/a';
  153.     LadenBtn.enabled := false;
  154.     LoeschenBtn.enabled := false;
  155.   end;
  156.   {if liu.visible or (LevelListBox.items.count=0) then
  157.     exit;}
  158.   AssignFile(SavGame, FDirectory+'Spielstände\'+LevelListBox.Items.strings[LevelListBox.itemindex]+'.sav');
  159.   Reset(SavGame);
  160.   ReadLN(SavGame);
  161.   ReadLN(SavGame);
  162.   ReadLN(SavGame, mainform.FScore);
  163.   ReadLN(SavGame, mainform.FLife);
  164.   ReadLN(SavGame, mainform.Flevel);
  165.   ReadLN(SavGame, mainform.FMenuItem);
  166.   CloseFile(SavGame);
  167.   mainform.playsound('SceneMov', false);
  168.   mainform.FNextScene := gsNewLevel;
  169.   mainform.FCheat := false;
  170.   close;
  171. end;
  172.  
  173. procedure TSpeicherungForm.SpeichernBtnClick(Sender: TObject);
  174. var
  175.   SavGame: textfile;
  176.   i: integer;
  177. begin
  178.   if Levelname.text = '' then
  179.   begin
  180.     MessageDlg('Dies ist kein gültiger Spielstandname!', mtError, [mbOK], 0);
  181.     LevelName.setfocus;
  182.     exit;
  183.   end;
  184.   for i := 0 to length(LevelName.text) do
  185.   begin
  186.     if (copy(LevelName.text, i, 1) = '\') or
  187.       (copy(LevelName.text, i, 1) = '/') or
  188.       (copy(LevelName.text, i, 1) = ':') or
  189.       (copy(LevelName.text, i, 1) = '*') or
  190.       (copy(LevelName.text, i, 1) = '?') or
  191.       (copy(LevelName.text, i, 1) = '"') or
  192.       (copy(LevelName.text, i, 1) = '<') or
  193.       (copy(LevelName.text, i, 1) = '>') or
  194.       (copy(LevelName.text, i, 1) = '|') then
  195.     begin
  196.       MessageDlg('Dies ist kein gültiger Spielstandname!', mtError, [mbOK], 0);
  197.       LevelName.setfocus;
  198.       exit;
  199.     end;
  200.   end;
  201.   if LevelListBox.items.IndexOf(LevelName.text) > -1 then
  202.   begin
  203.     if MessageDlg('Spielstand ist bereits vorhanden. Ersetzen?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then
  204.       exit;
  205.   end;
  206.   AssignFile(SavGame, FDirectory+'Spielstände\'+LevelName.text+'.sav');
  207.   Rewrite(SavGame);
  208.   WriteLN(SavGame, '; SpaceMission '+FCompVersion);
  209.   WriteLN(SavGame, '; SAV-File');
  210.   WriteLN(SavGame, mainform.FScore);
  211.   WriteLN(SavGame, mainform.FLife);
  212.   WriteLN(SavGame, mainform.FLevel);
  213.   WriteLN(SavGame, mainform.FMenuItem);
  214.   CloseFile(SavGame);
  215.   SearchSaves;
  216. end;
  217.  
  218. procedure TSpeicherungForm.LevelListBoxClick(Sender: TObject);
  219. var
  220.   Ergebniss: String;
  221.   SavGame: textfile;
  222.   Punkte, Leben, Level, Art: integer;
  223. begin
  224.   ladenbtn.enabled := true;
  225.   loeschenbtn.enabled := true;
  226.   li1.visible := false;
  227.   li2a.visible := false;
  228.   li2b.visible := false;
  229.   li3a.visible := false;
  230.   li3b.visible := false;
  231.   li4a.visible := false;
  232.   li4b.visible := false;
  233.   liu.visible := false;
  234.   liw.visible := false;
  235.   li1.caption := 'n/a';
  236.   li2b.caption := 'n/a';
  237.   li3b.caption := 'n/a';
  238.   li4b.caption := 'n/a';
  239.   if (LevelListBox.items.count=0) or (LevelListBox.itemindex = -1) then
  240.   begin
  241.     ladenbtn.enabled := false;
  242.     loeschenbtn.enabled := false;
  243.     liw.visible := true;
  244.     exit;
  245.   end;
  246.   LevelName.Text := LevelListBox.Items.strings[LevelListBox.itemindex];
  247.   AssignFile(SavGame, FDirectory+'Spielstände\'+LevelListBox.Items.strings[LevelListBox.itemindex]+'.sav');
  248.   Reset(SavGame);
  249.   ReadLN(SavGame, Ergebniss);
  250.   if Ergebniss <> '; SpaceMission '+FCompVersion then
  251.   begin
  252.     liu.visible := true;
  253.     ladenbtn.enabled := false;
  254.     CloseFile(SavGame);
  255.     exit;
  256.   end;
  257.   ReadLN(SavGame, Ergebniss);
  258.   if Ergebniss <> '; SAV-File' then
  259.   begin
  260.     liu.visible := true;
  261.     ladenbtn.enabled := false;
  262.     CloseFile(SavGame);
  263.     exit;
  264.   end;
  265.   ReadLN(SavGame, Punkte);
  266.   ReadLN(SavGame, Leben);
  267.   ReadLN(SavGame, Level);
  268.   ReadLN(SavGame, Art);
  269.   CloseFile(SavGame);
  270.   li1.visible := true;
  271.   li2a.visible := true;
  272.   li2b.visible := true;
  273.   li3a.visible := true;
  274.   li3b.visible := true;
  275.   li4a.visible := true;
  276.   li4b.visible := true;
  277.   if Art = 1 then
  278.     li1.caption := 'Das Level ist ein normales Level.'
  279.   else
  280.     li1.caption := 'Das Level ist ein Zufallslevel.';
  281.   li3b.caption := inttostr(Level);
  282.   li4b.caption := inttostr(Leben);
  283.   li2b.caption := inttostr(Punkte);
  284. end;
  285.  
  286. procedure TSpeicherungForm.LevelNameChange(Sender: TObject);
  287. begin
  288.   //listbox1.Items.indexof('Level '+spinedit1.text);
  289. end;
  290.  
  291. procedure TSpeicherungForm.Button4Click(Sender: TObject);
  292. begin
  293.   mainform.dxtimer.enabled := not mainform.gamepause.checked;
  294.   close;
  295. end;
  296.  
  297. procedure TSpeicherungForm.FormShow(Sender: TObject);
  298. begin
  299.   mainform.dxtimer.enabled := false;
  300.   SearchSaves;
  301.   if mainform.FNotSave then
  302.   begin
  303.     label1.enabled := false;
  304.     LevelName.enabled := false;
  305.     SpeichernBtn.enabled := false;
  306.   end
  307.   else
  308.   begin
  309.     label1.enabled := true;
  310.     LevelName.enabled := true;
  311.     SpeichernBtn.enabled := true;
  312.   end;
  313. end;
  314.  
  315. procedure TSpeicherungForm.DsFancyButton2Click(Sender: TObject);
  316. begin
  317.   SearchSaves;
  318. end;
  319.  
  320. procedure TSpeicherungForm.AbbrechenBtnClick(Sender: TObject);
  321. begin
  322.   close;
  323. end;
  324.  
  325. procedure TSpeicherungForm.FormHide(Sender: TObject);
  326. begin
  327.   if not mainform.gamepause.checked then mainform.dxtimer.enabled := true;
  328. end;
  329.  
  330. procedure TSpeicherungForm.LevelListBoxDblClick(Sender: TObject);
  331. begin
  332.   LadenBtn.click;
  333. end;
  334.  
  335. end.
  336.  
  337.