Changeset 128 for trunk/UGame.pas
- Timestamp:
- Jun 17, 2017, 5:55:16 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/UGame.pas
r127 r128 7 7 uses 8 8 Classes, SysUtils, ExtCtrls, Graphics, Contnrs, XMLConf, XMLRead, XMLWrite, 9 DOM, Math, FileUtil, UXMLUtils, Dialogs, Types, LCLType, LCLIntf;9 DOM, Math, LazFileUtils, UXMLUtils, Dialogs, Types, LCLType, LCLIntf; 10 10 11 11 const … … 243 243 end; 244 244 245 { TGameTurnStat } 246 247 TGameTurnStat = class 248 OccupiedCells: Integer; 249 Units: Integer; 250 DiscoveredCells: Integer; 251 Cities: Integer; 252 procedure LoadFromNode(Node: TDOMNode); 253 procedure SaveToNode(Node: TDOMNode); 254 end; 255 256 { TGameTurnStats } 257 258 TGameTurnStats = class(TObjectList) 259 procedure LoadFromNode(Node: TDOMNode); 260 procedure SaveToNode(Node: TDOMNode); 261 end; 262 245 263 TPlayerMode = (pmHuman, pmComputer); 246 264 TComputerAgressivity = (caLow, caMedium, caHigh); … … 262 280 TotalCells: Integer; 263 281 TotalCities: Integer; 282 TotalDiscovered: Integer; 264 283 StartUnits: Integer; 265 284 StartCell: TCell; … … 267 286 Defensive: Boolean; 268 287 Agressivity: TComputerAgressivity; 288 TurnStats: TGameTurnStats; 289 procedure Clear; 269 290 procedure LoadFromNode(Node: TDOMNode); 270 291 procedure SaveToNode(Node: TDOMNode); … … 385 406 procedure MoveAll(Player: TPlayer); 386 407 procedure ClearMovesFromCell(Cell: TCell); 408 procedure RecordTurnStats; 387 409 procedure SetMapType(AValue: TMapType); 388 410 function SetMove(CellFrom, CellTo: TCell; Power: Integer; Confirmation: Boolean = True): TUnitMove; … … 543 565 end; 544 566 567 { TGameTurnStat } 568 569 procedure TGameTurnStat.LoadFromNode(Node: TDOMNode); 570 begin 571 OccupiedCells := ReadInteger(Node, 'OccupiedCells', 0); 572 Units := ReadInteger(Node, 'Units', 0); 573 DiscoveredCells := ReadInteger(Node, 'DiscoveredCells', 0); 574 Cities := ReadInteger(Node, 'Cities', 0); 575 end; 576 577 procedure TGameTurnStat.SaveToNode(Node: TDOMNode); 578 begin 579 WriteInteger(Node, 'OccupiedCells', OccupiedCells); 580 WriteInteger(Node, 'Units', Units); 581 WriteInteger(Node, 'DiscoveredCells', DiscoveredCells); 582 WriteInteger(Node, 'Cities', Cities); 583 end; 584 585 { TGameTurnStats } 586 587 procedure TGameTurnStats.LoadFromNode(Node: TDOMNode); 588 var 589 Node2: TDOMNode; 590 NewTurnStat: TGameTurnStat; 591 begin 592 Count := 0; 593 Node2 := Node.FirstChild; 594 while Assigned(Node2) and (Node2.NodeName = 'TurnStat') do begin 595 NewTurnStat := TGameTurnStat.Create; 596 NewTurnStat.LoadFromNode(Node2); 597 Add(NewTurnStat); 598 Node2 := Node2.NextSibling; 599 end; 600 end; 601 602 procedure TGameTurnStats.SaveToNode(Node: TDOMNode); 603 var 604 I: Integer; 605 NewNode: TDOMNode; 606 begin 607 for I := 0 to Count - 1 do begin; 608 NewNode := Node.OwnerDocument.CreateElement('TurnStat'); 609 Node.AppendChild(NewNode); 610 TGameTurnStat(Items[I]).SaveToNode(NewNode); 611 end; 612 end; 613 545 614 { TClients } 546 615 … … 1817 1886 end; 1818 1887 1888 procedure TPlayer.Clear; 1889 begin 1890 TurnStats.Clear; 1891 end; 1892 1819 1893 procedure TPlayer.SetClient(AValue: TClient); 1820 1894 begin … … 1843 1917 PlayerMap.LoadFromNode(NewNode); 1844 1918 end; 1919 with Node do begin 1920 NewNode := FindNode('TurnStats'); 1921 if Assigned(NewNode) then 1922 TurnStats.LoadFromNode(NewNode); 1923 end; 1845 1924 end; 1846 1925 … … 1862 1941 AppendChild(NewNode); 1863 1942 PlayerMap.SaveToNode(NewNode); 1943 end; 1944 with Node do begin 1945 NewNode := OwnerDocument.CreateElement('TurnStats'); 1946 AppendChild(NewNode); 1947 TurnStats.SaveToNode(NewNode); 1864 1948 end; 1865 1949 end; … … 2247 2331 PlayerMap := TPlayerMap.Create; 2248 2332 PlayerMap.Player := Self; 2333 TurnStats := TGameTurnStats.Create; 2249 2334 end; 2250 2335 2251 2336 destructor TPlayer.Destroy; 2252 2337 begin 2338 FreeAndNil(TurnStats); 2253 2339 FreeAndNil(PlayerMap); 2254 2340 inherited Destroy; … … 2884 2970 var 2885 2971 I: Integer; 2972 J: Integer; 2886 2973 begin 2887 2974 for I := 0 to Players.Count - 1 do … … 2890 2977 TotalCells := 0; 2891 2978 TotalCities := 0; 2892 end; 2979 2980 TotalDiscovered := 0; 2981 for J := 0 to PlayerMap.Cells.Count - 1 do 2982 with TPlayerCell(PlayerMap.Cells[J]) do begin 2983 if Explored then Inc(TotalDiscovered); 2984 end; 2985 end; 2986 2893 2987 Map.ComputePlayerStats; 2988 end; 2989 2990 procedure TGame.RecordTurnStats; 2991 var 2992 I: Integer; 2993 NewStat: TGameTurnStat; 2994 begin 2995 for I := 0 to Players.Count - 1 do 2996 with TPlayer(Players[I]) do begin 2997 NewStat := TGameTurnStat.Create; 2998 NewStat.DiscoveredCells := TotalDiscovered; 2999 NewStat.OccupiedCells := TotalCells; 3000 NewStat.Units := TotalUnits; 3001 NewStat.Cities := TotalCities; 3002 TurnStats.Add(NewStat); 3003 end; 2894 3004 end; 2895 3005 … … 2927 3037 UpdateRepeatMoves(CurrentPlayer); 2928 3038 ComputePlayerStats; 3039 RecordTurnStats; 2929 3040 PrevPlayer := CurrentPlayer; 2930 3041 // Skip dead players … … 3045 3156 for I := 0 to Players.Count - 1 do 3046 3157 with TPlayer(Players[I]) do begin 3158 Clear; 3047 3159 PlayerMap.Update; 3048 3160 if (Map.Size.X > 0) and (Map.Size.Y > 0) then begin
Note:
See TracChangeset
for help on using the changeset viewer.