Skip to content

Commit bdcaed2

Browse files
committed
Better encapsulation for Twenty 48.
1 parent e50ad6b commit bdcaed2

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed

Projects/Twenty 48/Gameplay.fs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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 = 0L

0 commit comments

Comments
 (0)