minesweeper: reduce duplicated code for click/mark/open cells.

windows-high-dpi
John Benediktsson 2018-03-06 15:50:47 -08:00
parent 551144b8a2
commit 02e231633e
1 changed files with 16 additions and 34 deletions

View File

@ -253,6 +253,19 @@ M: grid-gadget draw-gadget*
[ draw-cells ] [ draw-cells ]
} cleave ; } cleave ;
:: on-grid ( gadget quot: ( cells row col -- ? ) -- )
gadget hand-rel first2 :> ( w h )
h 58 >= [
h 58 - w [ 32 /i ] bi@ :> ( row col )
gadget cells>> :> cells
cells game-over? [
cells row col quot call [
gadget start>> [ now gadget start<< ] unless
cells game-over? [ now gadget end<< ] when
] when
] unless
] when gadget relayout-1 ; inline
:: on-click ( gadget -- ) :: on-click ( gadget -- )
gadget hand-rel first2 :> ( w h ) gadget hand-rel first2 :> ( w h )
h 58 < [ h 58 < [
@ -261,42 +274,11 @@ M: grid-gadget draw-gadget*
gadget [ reset-cells ] change-cells gadget [ reset-cells ] change-cells
f >>start f >>end drop f >>start f >>end drop
] when ] when
] [ ] when gadget [ click-cell-at ] on-grid ;
h 58 - w [ 32 /i ] bi@ :> ( row col )
gadget cells>> :> cells
cells game-over? [
cells row col click-cell-at [
gadget start>> [ now gadget start<< ] unless
cells game-over? [ now gadget end<< ] when
] when
] unless
] if gadget relayout-1 ;
:: on-mark ( gadget -- ) : on-mark ( gadget -- ) [ mark-cell-at ] on-grid ;
gadget hand-rel first2 :> ( w h )
h 58 >= [
h 58 - w [ 32 /i ] bi@ :> ( row col )
gadget cells>> :> cells
cells game-over? [
cells row col mark-cell-at [
gadget start>> [ now gadget start<< ] unless
cells game-over? [ now gadget end<< ] when
] when
] unless
] when gadget relayout-1 ;
:: on-open ( gadget -- ) : on-open ( gadget -- ) [ open-cell-at ] on-grid ;
gadget hand-rel first2 :> ( w h )
h 58 >= [
h 58 - w [ 32 /i ] bi@ :> ( row col )
gadget cells>> :> cells
cells game-over? [
cells row col open-cell-at [
gadget start>> [ now gadget start<< ] unless
cells game-over? [ now gadget end<< ] when
] when
] unless
] when gadget relayout-1 ;
: new-game ( gadget rows cols mines -- ) : new-game ( gadget rows cols mines -- )
[ make-cells ] dip place-mines update-counts >>cells [ make-cells ] dip place-mines update-counts >>cells