package Ġgames . n atal and . memory match . game Ċ Ċ import Ġcom . group on . gro x . Store Ċ Ċ class ĠBoard State Store Ġ{ ĊĠĠĠ Ġval Ġstore Ġ= ĠStore ( Board State ()) ĊĊĠĠĠ Ġfun Ġnew Level ( new Level : ĠI Level , Ġnew Remaining Life : ĠInt , Ġnew Game : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstore . dispatch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBoard State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Ġ= Ġnew Level , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard Ġ= Ġnew Level . new Board (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Playing Ġ= Ġ! new Game , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Life Ġ= Ġnew Remaining Life ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcell Clicked ( cell Pos : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstore . dispatch Ġ{ Ġold State Ġ-> Ġold State . copy ( cell Pos Ġ= Ġcell Pos ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Board ( new Board : ĠList < Cell >, Ġnew Total Cells Found : ĠList < Int >, Ġnew Life Count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstore . dispatch Ġ{ Ġold State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold State . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard Ġ= Ġnew Board , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell Pos Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Cells Found Ġ= Ġnew Total Cells Found , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Life Ġ= Ġnew Life Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhint Shown () Ġ{ ĊĠĠĠĠĠĠĠ Ġstore . dispatch Ġ{ Ġold State Ġ-> Ġold State . copy ( is Fresh Ġ= Ġfalse ) Ġ} ĊĠĠĠ Ġ} Ċ }