@@ -83,7 +83,19 @@ type Gameplay =
8383 else step ( neck :: tail) ( compacted @ [ head], score)
8484 step line ([], score)
8585
86- static member shiftLeft gameplay =
86+ static member private addTile ( gameplay : Gameplay ) =
87+ let position = Gen.randomItem gameplay.PositionsUnoccupied
88+ { gameplay with Tiles = Tile.make position ( if Gen.random1 10 = 0 then 4 else 2 ) :: gameplay.Tiles }
89+
90+ static member private detectTileChange ( gameplay : Gameplay ) ( gameplay2 : Gameplay ) =
91+ gameplay.TilesOrdered <> gameplay2.TilesOrdered
92+
93+ static member private detectMoveAvailability gameplay =
94+ let movesPossible = [ Gameplay.shiftUp; Gameplay.shiftRight; Gameplay.shiftDown; Gameplay.shiftLeft]
95+ let movesAvailable = List.filter ( fun shift -> Gameplay.detectTileChange gameplay ( shift gameplay)) movesPossible
96+ List.notEmpty movesAvailable
97+
98+ static member private shiftLeft gameplay =
8799 let ( rows , score ) =
88100 List.foldMap ( fun row score ->
89101 let ( row , score ) = Gameplay.compact row score
@@ -95,7 +107,7 @@ type Gameplay =
95107 Tiles = List.concat rows
96108 Score = score }
97109
98- static member shiftRight gameplay =
110+ static member private shiftRight gameplay =
99111 let ( rows , score ) =
100112 List.foldMap ( fun row score ->
101113 let ( row , score ) = Gameplay.compact ( List.rev row) score
@@ -107,7 +119,7 @@ type Gameplay =
107119 Tiles = List.concat rows
108120 Score = score }
109121
110- static member shiftUp gameplay =
122+ static member private shiftUp gameplay =
111123 let ( rows , score ) =
112124 List.foldMap ( fun row score ->
113125 let ( row , score ) = Gameplay.compact row score
@@ -119,7 +131,7 @@ type Gameplay =
119131 Tiles = List.concat rows
120132 Score = score }
121133
122- static member shiftDown gameplay =
134+ static member private shiftDown gameplay =
123135 let ( rows , score ) =
124136 List.foldMap ( fun row score ->
125137 let ( row , score ) = Gameplay.compact ( List.rev row) score
@@ -145,18 +157,6 @@ type Gameplay =
145157 else gameplay
146158 else gameplay
147159
148- static member addTile ( gameplay : Gameplay ) =
149- let position = Gen.randomItem gameplay.PositionsUnoccupied
150- { gameplay with Tiles = Tile.make position ( if Gen.random1 10 = 0 then 4 else 2 ) :: gameplay.Tiles }
151-
152- static member detectTileChange ( gameplay : Gameplay ) ( gameplay2 : Gameplay ) =
153- gameplay.TilesOrdered <> gameplay2.TilesOrdered
154-
155- static member detectMoveAvailability gameplay =
156- let movesPossible = [ Gameplay.shiftUp; Gameplay.shiftRight; Gameplay.shiftDown; Gameplay.shiftLeft]
157- let movesAvailable = List.filter ( fun shift -> Gameplay.detectTileChange gameplay ( shift gameplay)) movesPossible
158- List.notEmpty movesAvailable
159-
160160 // this represents the gameplay model in an unutilized state, such as when the gameplay screen is not selected.
161161 static member empty =
162162 { GameplayTime = 0 L
0 commit comments