Subversion Repositories spacemission

Rev

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

Rev Author Line No. Line
3 daniel-mar 1
unit GamSpeicherung;
2
 
3
interface
4
 
5
uses
6
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
6 daniel-mar 7
  StdCtrls, ExtCtrls, Spin{$IF CompilerVersion >= 23.0}, System.UITypes{$IFEND};
3 daniel-mar 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