- Timestamp:
- Oct 12, 2019, 11:01:10 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Forms/UFormComputer.lfm
r29 r32 13 13 OnShow = FormShow 14 14 LCLVersion = '2.0.2.0' 15 object ButtonS olve: TButton16 Left = 15915 object ButtonStart: TButton 16 Left = 40 17 17 Height = 38 18 Top = 2 8118 Top = 24 19 19 Width = 113 20 Caption = 'S olve'21 OnClick = ButtonS olveClick20 Caption = 'Start' 21 OnClick = ButtonStartClick 22 22 TabOrder = 0 23 23 end 24 object ButtonStop: TButton 25 Left = 208 26 Height = 38 27 Top = 24 28 Width = 113 29 Caption = 'Stop' 30 Enabled = False 31 OnClick = ButtonStopClick 32 TabOrder = 1 33 end 24 34 end -
trunk/Forms/UFormComputer.lrj
r29 r32 1 1 {"version":1,"strings":[ 2 2 {"hash":1113,"name":"tformcomputer.caption","sourcebytes":[65,73],"value":"AI"}, 3 {"hash":5923781,"name":"tformcomputer.buttonsolve.caption","sourcebytes":[83,111,108,118,101],"value":"Solve"} 3 {"hash":5941396,"name":"tformcomputer.buttonstart.caption","sourcebytes":[83,116,97,114,116],"value":"Start"}, 4 {"hash":371552,"name":"tformcomputer.buttonstop.caption","sourcebytes":[83,116,111,112],"value":"Stop"} 4 5 ]} -
trunk/Forms/UFormComputer.pas
r31 r32 28 28 29 29 TFormComputer = class(TForm) 30 ButtonSolve: TButton; 31 procedure ButtonSolveClick(Sender: TObject); 30 ButtonStart: TButton; 31 ButtonStop: TButton; 32 procedure ButtonStartClick(Sender: TObject); 33 procedure ButtonStopClick(Sender: TObject); 32 34 procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); 33 35 procedure FormCreate(Sender: TObject); … … 35 37 procedure FormShow(Sender: TObject); 36 38 private 39 Stop: Boolean; 37 40 GameTries1: TGameTries; 38 41 GameTries2: TGameTries; … … 147 150 end; 148 151 149 procedure TFormComputer.ButtonS olveClick(Sender: TObject);152 procedure TFormComputer.ButtonStartClick(Sender: TObject); 150 153 var 151 154 NewTry: TGameTry; … … 155 158 GameTries: TGameTries; 156 159 begin 160 ButtonStart.Enabled := False; 161 ButtonStop.Enabled := True; 162 Stop := False; 157 163 with Core.Game do begin 158 while CanMove do begin164 while CanMove and not Stop do begin 159 165 NewTry := TGameTry.Create; 160 166 NewTry.Game.Assign(Core.Game); … … 182 188 end; 183 189 MoveAllAndUpdate(GameTries[0].Moves[0]); 184 { if CanMergeDirection(drDown) then MoveAll (drDown)185 else if CanMergeDirection(drRight) then MoveAll (drRight)186 else if CanMergeDirection(drLeft) then MoveAll (drLeft)187 else if CanMoveDirection(drDown) then MoveAll (drDown)188 else if CanMoveDirection(drRight) then MoveAll (drRight)189 else if CanMoveDirection(drLeft) then MoveAll (drLeft)190 else if CanMoveDirection(drUp) then MoveAll (drUp)190 { if CanMergeDirection(drDown) then MoveAllAnimate(drDown) 191 else if CanMergeDirection(drRight) then MoveAllAnimate(drRight) 192 else if CanMergeDirection(drLeft) then MoveAllAnimate(drLeft) 193 else if CanMoveDirection(drDown) then MoveAllAnimate(drDown) 194 else if CanMoveDirection(drRight) then MoveAllAnimate(drRight) 195 else if CanMoveDirection(drLeft) then MoveAllAnimate(drLeft) 196 else if CanMoveDirection(drUp) then MoveAllAnimate(drUp) 191 197 else Break; 192 198 } … … 195 201 end; 196 202 end; 203 ButtonStart.Enabled := True; 204 ButtonStop.Enabled := False; 205 end; 206 207 procedure TFormComputer.ButtonStopClick(Sender: TObject); 208 begin 209 Stop := True; 197 210 end; 198 211 … … 224 237 NewTry: TGameTry; 225 238 begin 226 for Direction := Low(TMoveDirection) to High(TMoveDirection)do begin239 for Direction := drLeft to drDown do begin 227 240 if GameTry.Game.CanMoveDirection(Direction) then begin 228 241 NewTry := TGameTry.Create; … … 230 243 NewTry.Game.UndoEnabled := False; 231 244 NewTry.Game.AnimationDuration := 0; 232 NewTry.Game.MoveAll (Direction);245 NewTry.Game.MoveAllAnimate(Direction); 233 246 SetLength(NewTry.Moves, Length(NewTry.Moves) + 1); 234 247 NewTry.Moves[Length(NewTry.Moves) - 1] := Direction; -
trunk/Languages/Game2048.cs.po
r31 r32 72 72 msgstr " " 73 73 74 #: tformcomputer.buttonsolve.caption 75 msgid "Solve" 76 msgstr "Vyřešit" 74 #: tformcomputer.buttonstart.caption 75 msgid "Start" 76 msgstr "Spustit" 77 78 #: tformcomputer.buttonstop.caption 79 msgid "Stop" 80 msgstr "Zastavit" 77 81 78 82 #: tformcomputer.caption -
trunk/Languages/Game2048.po
r31 r32 62 62 msgstr "" 63 63 64 #: tformcomputer.buttonsolve.caption 65 msgid "Solve" 64 #: tformcomputer.buttonstart.caption 65 msgid "Start" 66 msgstr "" 67 68 #: tformcomputer.buttonstop.caption 69 msgid "Stop" 66 70 msgstr "" 67 71 -
trunk/UGame.pas
r31 r32 124 124 procedure Render(Canvas: TCanvas; CanvasSize: TPoint); 125 125 procedure MoveAll(Direction: TMoveDirection); 126 procedure MoveAllAnimate(Direction: TMoveDirection); 126 127 procedure MoveAllAndUpdate(Direction: TMoveDirection); 127 128 procedure MoveTile(SourceTile, TargetTile: TTile); … … 505 506 begin 506 507 case Direction of 507 drLeft: begin 508 Result := TArea.Create(1, 0, Board.Size.X - 1, Board.Size.Y - 1); 509 end; 510 drUp: begin 511 Result := TArea.Create(0, 1, Board.Size.X - 1, Board.Size.Y - 1); 512 end; 513 drRight: begin 514 Result := TArea.Create(Board.Size.X - 2, 0, 0, Board.Size.Y - 1); 515 end; 516 drDown: begin 517 Result := TArea.Create(0, Board.Size.Y - 2, Board.Size.X - 1, 0); 518 end; 508 drNone: Result := TArea.Create(0, 0, 0, 0); 509 drLeft: Result := TArea.Create(1, 0, Board.Size.X - 1, Board.Size.Y - 1); 510 drUp: Result := TArea.Create(0, 1, Board.Size.X - 1, Board.Size.Y - 1); 511 drRight: Result := TArea.Create(Board.Size.X - 2, 0, 0, Board.Size.Y - 1); 512 drDown: Result := TArea.Create(0, Board.Size.Y - 2, Board.Size.X - 1, 0); 519 513 end; 520 514 end; … … 629 623 RenderTile(Canvas, Board.Tiles[Y, X], TileRect); 630 624 end; 625 end; 626 627 procedure TGame.MoveAll(Direction: TMoveDirection); 628 var 629 P: TPoint; 630 PNew: TPoint; 631 I: Integer; 632 Area: TArea; 633 begin 634 if Direction = drNone then Exit; 635 if not CanMoveDirection(Direction) then Exit; 636 FMoving := True; 637 FBoardUndo.Assign(Board); 638 FCanUndo := True; 639 Area := GetMoveArea(Direction); 640 Board.ClearMerged; 641 for I := 0 to Max(Board.Size.X, Board.Size.Y) - 1 do begin 642 P := Area.P1; 643 while P.Y <> Area.P2.Y + Area.Increment.Y do begin 644 P.X := Area.P1.X; 645 while P.X <> Area.P2.X + Area.Increment.X do begin 646 PNew := P + DirectionDiff[Direction]; 647 if IsValidPos(PNew) then begin 648 if (Board.Tiles[P.Y, P.X].Value <> 0) then begin 649 if (Board.Tiles[PNew.Y, PNew.X].Value = 0) then begin 650 Board.Tiles[P.Y, P.X].Moving := True; 651 Board.Tiles[PNew.Y, PNew.X].Value := Board.Tiles[P.Y, P.X].Value; 652 Board.Tiles[PNew.Y, PNew.X].Merged := Board.Tiles[P.Y, P.X].Merged; 653 Board.Tiles[P.Y, P.X].Value := 0; 654 Board.Tiles[P.Y, P.X].Merged := False; 655 end else 656 if (not Board.Tiles[P.Y, P.X].Merged) and (not Board.Tiles[PNew.Y, PNew.X].Merged) and 657 (Board.Tiles[PNew.Y, PNew.X].Value = Board.Tiles[P.Y, P.X].Value) then begin 658 Board.Tiles[P.Y, P.X].Moving := True; 659 Board.Tiles[PNew.Y, PNew.X].Value := Board.Tiles[PNew.Y, PNew.X].Value + Board.Tiles[P.Y, P.X].Value; 660 Board.Tiles[PNew.Y, PNew.X].Merged := True; 661 Board.Tiles[P.Y, P.X].Value := 0; 662 Board.Tiles[P.Y, P.X].Merged := False; 663 Score := Score + Board.Tiles[PNew.Y, PNew.X].Value; 664 end; 665 end; 666 end; 667 Inc(P.X, Area.Increment.X); 668 end; 669 Inc(P.Y, Area.Increment.Y); 670 end; 671 DoChange; 672 end; 673 FMoving := False; 631 674 end; 632 675 … … 707 750 begin 708 751 Result := False; 752 if Direction = drNone then Exit; 709 753 Area := GetMoveArea(Direction); 710 754 P := Area.P1; … … 729 773 end; 730 774 731 procedure TGame.MoveAll (Direction: TMoveDirection);775 procedure TGame.MoveAllAnimate(Direction: TMoveDirection); 732 776 var 733 777 P: TPoint; … … 823 867 begin 824 868 HighestValue := Board.GetHighestTileValue; 825 MoveAll (Direction);869 MoveAllAnimate(Direction); 826 870 827 871 NewTile := FillRandomTile;
Note:
See TracChangeset
for help on using the changeset viewer.