From 0f87f5ad65cf111dc168fcef963ebd3f99f461ac Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr>
Date: Fri, 23 Jul 2021 21:38:35 +0200
Subject: [PATCH] Finalize gameplay

---
 android/gradle.properties                     |   4 +-
 assets/files/.gitkeep                         |   0
 assets/skins/default_button_mark_mine_off.png | Bin 0 -> 2020 bytes
 assets/skins/default_button_mark_mine_on.png  | Bin 0 -> 4799 bytes
 .../{default_0.png => default_tile_0.png}     | Bin
 .../{default_1.png => default_tile_1.png}     | Bin
 .../{default_2.png => default_tile_2.png}     | Bin
 .../{default_3.png => default_tile_3.png}     | Bin
 .../{default_4.png => default_tile_4.png}     | Bin
 .../{default_5.png => default_tile_5.png}     | Bin
 .../{default_6.png => default_tile_6.png}     | Bin
 .../{default_7.png => default_tile_7.png}     | Bin
 .../{default_8.png => default_tile_8.png}     | Bin
 assets/skins/default_tile_flag.png            | Bin 0 -> 5169 bytes
 assets/skins/default_tile_flag_ko.png         | Bin 0 -> 4865 bytes
 assets/skins/default_tile_flag_ok.png         | Bin 0 -> 5041 bytes
 ...default_mine.png => default_tile_mine.png} | Bin
 assets/skins/default_tile_mine_not_found.png  | Bin 0 -> 6589 bytes
 ...t_unknown.png => default_tile_unknown.png} | Bin
 .../metadata/android/en-US/changelogs/4.txt   |   1 +
 .../metadata/android/fr-FR/changelogs/4.txt   |   1 +
 icons/build_game_icons.sh                     |  28 +++++--
 icons/skins/default/button_mark_mine_off.svg  |   2 +
 icons/skins/default/button_mark_mine_on.svg   |   2 +
 icons/skins/default/{0.svg => tile_0.svg}     |   0
 icons/skins/default/{1.svg => tile_1.svg}     |   0
 icons/skins/default/{2.svg => tile_2.svg}     |   0
 icons/skins/default/{3.svg => tile_3.svg}     |   0
 icons/skins/default/{4.svg => tile_4.svg}     |   0
 icons/skins/default/{5.svg => tile_5.svg}     |   0
 icons/skins/default/{6.svg => tile_6.svg}     |   0
 icons/skins/default/{7.svg => tile_7.svg}     |   0
 icons/skins/default/{8.svg => tile_8.svg}     |   0
 icons/skins/default/tile_flag.svg             |   2 +
 icons/skins/default/tile_flag_ko.svg          |   2 +
 icons/skins/default/tile_flag_ok.svg          |   2 +
 .../skins/default/{mine.svg => tile_mine.svg} |   0
 icons/skins/default/tile_mine_not_found.svg   |   2 +
 .../default/{unknown.svg => tile_unknown.svg} |   0
 lib/entities/cell.dart                        |  70 ++++++++++++++----
 lib/layout/board.dart                         |  42 ++++++++++-
 lib/layout/game.dart                          |   4 +-
 lib/provider/data.dart                        |  27 +++++--
 lib/screens/home.dart                         |   4 +-
 lib/utils/board_utils.dart                    |  23 ++++--
 lib/utils/game_utils.dart                     |   5 +-
 pubspec.lock                                  |   6 +-
 pubspec.yaml                                  |   1 -
 48 files changed, 182 insertions(+), 46 deletions(-)
 delete mode 100644 assets/files/.gitkeep
 create mode 100644 assets/skins/default_button_mark_mine_off.png
 create mode 100644 assets/skins/default_button_mark_mine_on.png
 rename assets/skins/{default_0.png => default_tile_0.png} (100%)
 rename assets/skins/{default_1.png => default_tile_1.png} (100%)
 rename assets/skins/{default_2.png => default_tile_2.png} (100%)
 rename assets/skins/{default_3.png => default_tile_3.png} (100%)
 rename assets/skins/{default_4.png => default_tile_4.png} (100%)
 rename assets/skins/{default_5.png => default_tile_5.png} (100%)
 rename assets/skins/{default_6.png => default_tile_6.png} (100%)
 rename assets/skins/{default_7.png => default_tile_7.png} (100%)
 rename assets/skins/{default_8.png => default_tile_8.png} (100%)
 create mode 100644 assets/skins/default_tile_flag.png
 create mode 100644 assets/skins/default_tile_flag_ko.png
 create mode 100644 assets/skins/default_tile_flag_ok.png
 rename assets/skins/{default_mine.png => default_tile_mine.png} (100%)
 create mode 100644 assets/skins/default_tile_mine_not_found.png
 rename assets/skins/{default_unknown.png => default_tile_unknown.png} (100%)
 create mode 100644 fastlane/metadata/android/en-US/changelogs/4.txt
 create mode 100644 fastlane/metadata/android/fr-FR/changelogs/4.txt
 create mode 100644 icons/skins/default/button_mark_mine_off.svg
 create mode 100644 icons/skins/default/button_mark_mine_on.svg
 rename icons/skins/default/{0.svg => tile_0.svg} (100%)
 rename icons/skins/default/{1.svg => tile_1.svg} (100%)
 rename icons/skins/default/{2.svg => tile_2.svg} (100%)
 rename icons/skins/default/{3.svg => tile_3.svg} (100%)
 rename icons/skins/default/{4.svg => tile_4.svg} (100%)
 rename icons/skins/default/{5.svg => tile_5.svg} (100%)
 rename icons/skins/default/{6.svg => tile_6.svg} (100%)
 rename icons/skins/default/{7.svg => tile_7.svg} (100%)
 rename icons/skins/default/{8.svg => tile_8.svg} (100%)
 create mode 100644 icons/skins/default/tile_flag.svg
 create mode 100644 icons/skins/default/tile_flag_ko.svg
 create mode 100644 icons/skins/default/tile_flag_ok.svg
 rename icons/skins/default/{mine.svg => tile_mine.svg} (100%)
 create mode 100644 icons/skins/default/tile_mine_not_found.svg
 rename icons/skins/default/{unknown.svg => tile_unknown.svg} (100%)

diff --git a/android/gradle.properties b/android/gradle.properties
index db7a1ee..14eed39 100644
--- a/android/gradle.properties
+++ b/android/gradle.properties
@@ -1,5 +1,5 @@
 org.gradle.jvmargs=-Xmx1536M
 android.useAndroidX=true
 android.enableJetifier=true
-app.versionName=0.0.3
-app.versionCode=3
+app.versionName=0.0.4
+app.versionCode=4
diff --git a/assets/files/.gitkeep b/assets/files/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/assets/skins/default_button_mark_mine_off.png b/assets/skins/default_button_mark_mine_off.png
new file mode 100644
index 0000000000000000000000000000000000000000..e94bd696f674b4674317ce8e47ec9f8a88e276fd
GIT binary patch
literal 2020
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
ZZFXp{(p?((g@J*A!PC{xWt~$(69E2C5C{MO

literal 0
HcmV?d00001

diff --git a/assets/skins/default_button_mark_mine_on.png b/assets/skins/default_button_mark_mine_on.png
new file mode 100644
index 0000000000000000000000000000000000000000..844e04be955563ec32beef6f661e2d2970e6d636
GIT binary patch
literal 4799
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

literal 0
HcmV?d00001

diff --git a/assets/skins/default_0.png b/assets/skins/default_tile_0.png
similarity index 100%
rename from assets/skins/default_0.png
rename to assets/skins/default_tile_0.png
diff --git a/assets/skins/default_1.png b/assets/skins/default_tile_1.png
similarity index 100%
rename from assets/skins/default_1.png
rename to assets/skins/default_tile_1.png
diff --git a/assets/skins/default_2.png b/assets/skins/default_tile_2.png
similarity index 100%
rename from assets/skins/default_2.png
rename to assets/skins/default_tile_2.png
diff --git a/assets/skins/default_3.png b/assets/skins/default_tile_3.png
similarity index 100%
rename from assets/skins/default_3.png
rename to assets/skins/default_tile_3.png
diff --git a/assets/skins/default_4.png b/assets/skins/default_tile_4.png
similarity index 100%
rename from assets/skins/default_4.png
rename to assets/skins/default_tile_4.png
diff --git a/assets/skins/default_5.png b/assets/skins/default_tile_5.png
similarity index 100%
rename from assets/skins/default_5.png
rename to assets/skins/default_tile_5.png
diff --git a/assets/skins/default_6.png b/assets/skins/default_tile_6.png
similarity index 100%
rename from assets/skins/default_6.png
rename to assets/skins/default_tile_6.png
diff --git a/assets/skins/default_7.png b/assets/skins/default_tile_7.png
similarity index 100%
rename from assets/skins/default_7.png
rename to assets/skins/default_tile_7.png
diff --git a/assets/skins/default_8.png b/assets/skins/default_tile_8.png
similarity index 100%
rename from assets/skins/default_8.png
rename to assets/skins/default_tile_8.png
diff --git a/assets/skins/default_tile_flag.png b/assets/skins/default_tile_flag.png
new file mode 100644
index 0000000000000000000000000000000000000000..15f2f2f76b687665b134492e44acaef589850bd2
GIT binary patch
literal 5169
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
Z$G-TS?h}T~J<~wyJzf1=);T3K0RVcho@)RA

literal 0
HcmV?d00001

diff --git a/assets/skins/default_tile_flag_ko.png b/assets/skins/default_tile_flag_ko.png
new file mode 100644
index 0000000000000000000000000000000000000000..9e8598af1fd30b3c1bdf524bd815b18d3d1ef9c6
GIT binary patch
literal 4865
zcmeAS@N?(olHy`uVBq!ia0y~yU^oE69Bd2>3_*8t*cliYI14-?iy0VXB0!k&?2PAU
z7#J8NOI#yLg7ec#$`gxH8OqDc^)mCai<1)zQuXqS(r3T3kz!yF>hpAQ45_&FHkNxs
zOz70RwdY=nNzM^GUHB*H#frx~#-?>?e-eI5y6SGdpp`BlyJnVDc7lw%Opwam?VlBO
z9VZ1GVewFS!px<@lj!8+q~PLF;^NVwz{0GeR{7JtQ|U~*zrvBdyWU@(ef#^peSa_g
zjr(4i9s0J)Gw$B&ch%Rd(%%<<yXW4bz|lk)b^LSoeZtQ?aq`#KA8VwJWGMbE6iq%B
zHm7n+(%Fd@_`=u3uKy<bci+Qcr9CdLPgGR@FXQ+)drc1a>QhSVA6!=2!{o7c^S@_0
zpZKE^xV68!bJb+E*l*r%9Q?>-{<Aj|wdYzEE%X*@v~Bk9{lIi8W%ZJOsZ$<kPx-^{
z_3niJm2WF+*L$+GZmlV5k>6bJ>DM`_dfC>}NA9`nZ#`KY-smhPF#X4uj(zSA?i^pl
z6!B&jE5mHrc-A>H4=#8Aq0r#(*7<k-(G<oz>kf4sWzr8_^Vep+f}s{m!;A#KVuwE=
zOEv1xF88R=XSmU~$l7RWB#VEKaHaHom4|y75~RJqd0aI+${elUv8U62@`pHv4b>&8
zE6n64y<I)!$@(8IobOo~qVLLxT)(@pYjW_<5HNqK62~mpf)zPu%zvhU1a|Mvn0!a^
z#-z`#ac9+iDs&lc^qZ>9n4;69&Xm3X%yO_u@~`6Q5wj<`M(xOs3A}f9xo?Fw!;N`W
zk78zVoJs5z&s)*;hjqTy!=(&txqElHi0`~It7-bHR?~B}F%jVoKQtI_<ZYe(wY>Md
z-iDiThR>L;$Q7$_tY<OEu-7+x#n}{gHSJgq&zzNtVJkL%oAJSw;i5w2#AEEjMN?u|
z{k7WA8qJ)1EM#s?0Ba$Wd)JF>MxI*@Qd;MhEoDFL`7P<j$|TRlHJAS_=6cM0!rm(U
zNve$NqI?#Ct?b^tp^06_Z#xuE)-Bb$a(=_zRqL*mW`$3gJ2T8IZPGd=(ZBchvt6qb
z-FilAo_~MwC&kjO_f~E^9(}B1&nuaUN;4f8d3G}_+RDbiS|ab_^?hfy@yywssK0`D
z!L`W!dLa*e0yfTB$yBK=>BPvhdm-CTbt#+st5zSbiIv^=wk=j5usW!9qZ{*=?$WOo
zb3byh8Ype^eybR(dTo`#v{%(f&IxH<Dfks59p@+$<hbT?=preRr?!VS^KdN?&)I*=
zO!T;as7i$Gg!x~Tx9<M(`OeC++3VC!f7L#xmUqEkKjdS~(z2ag8LOms-Cp|fm>=(%
z<*Oy`xtaws)Mg7@2>biyd;6lDfw|Mp?#;E1klgOd{I2t{Yn*#pAj3V5<jL!_vcK%q
zxgeTclxKcY$MLk}E)S80@}>jd-flYc=K5m49p+Ql+IlyqyKf6*xOemXp|`hJuI2x>
zjr~~7+GBlHA`R==!Z~*bKQ@j&Gy87i*5?b<wQssJR%G5boe;N9`_OiybNVHw6+7PC
zQ9t3pbs*X~J$FuY%1-wk`3rSExfxAl`Vhr&BkJsl%3r=WXRN<IgUyfeM^5$OFr$~z
zE6Z#reL3O9bs$@sBYSypS4-T5s|iNUDO?Ats~1cuotE%kTKiL)(G;c+c6K|Q!<#!#
zu09y7)uKOXsYt{3Zxu7Dr`&KoJk$H7P$0u%rL#$uS*uSTdewD8e&R-vhVN}9@0PsI
z4E%PoT0)~CaC2};Ws`TyuV#lQE=JRtK3Fa1cpTtuYr8Fd(oT_v@}JHYDyJtV)vnO_
z^gKn6^?~b!>h(hPaos$ZF3h{`@I%amOF3J!VV_ya$-{Z)UG>6eK27^#CZ+vJYSUDv
z7q4&1x&GSx`HSb)wCO_sZ--7SpRiEG;r{z)3q(`;ZvMNu$+WxF#&5Nu_7tWMi>-9r
zcZ(*==}3R(&C3m9h?AIAem2+kw*6YO+1K3y8SY6)6~*2?wZA+~n<?ttH<1SOHZjfc
zwDUjOwYP0hTJt}(UxDiYzq9nQ)|*G_{lc3q&%9jDu;<ME`BMrLLbpB365AEb5SNze
z=l}jgfcig{iRKeRMH<4lId|IMPyP8LO;P$$5JTLpUt8|{`H*(HYjW^OC9VUf#ni4Z
z-EGaTeQn-Z;b^V{w}0J{)cm?Lt9WO>KV!w)PfJYJ-HI-J7o5Vw`e5zavX!hay)9n{
zGu)F}mwEKL-yXZGGd3O)j^R4++~#lg<nl_szT!`UMlDPqX8qxwbn^e_O(*70loe^X
z{$#(_#6REKzkJtZcz<&KoD*R?YI{zcKFP&(;B~|IUq_hN9qO8OqA-Pp^}$w#X=?Aj
ziA=j*(W}Y&U^hcSd^pq3_s`DwGgjy`#JC0e?wFLZ=7jtNR*{D5Ocgde&p$g*G0|R;
zS%YCcYeUSx?%B=vmTRk8wl4Os&~3PzWjuScReVB_^uxUj-&Vv<oN%e<cZKDvmg`J6
z=9cYjF%~aA!nvNcp-gqUn)v23!fB;KcH9hqEtadOZ=d+5Wj~XJfY@dg(?z<`#iA$u
zE3_MAAM$E@e%<}z@JT^6E2W0JiC0BFJukd?xKZxJiz9312krmulkiqjCU#LWQ^#~3
zztB&2SN`8t&T?mN^(E%JzhZYi_Wm?oCUVhYrWtcD$-H9P>Z-+7;`y#@{=BV`N5ZGG
zujQP1-k)bR!=u%Qg#P~IJ?bWW)6Znl(f7L)cT48hUgMurGi9-7&kBY`W{$k-8_i$7
zKYXTF*XvH}Zu`d{UIqT$-=Uv(alJ<PoD087`LY&N|Fcwb?Nc#a!=xcyJdbVGf7vqc
z)4DxbFU%I+SDSQY*^}MM=6U`J?aS4QnA|5wNHTWp+4t|WQhuPJkDGd{*Ke1+;~^QX
zTSc??JK4{FA<5{{7^d{9|37=z>97C)#It++|DPHiv2_3E7|~lNWpo!UXBBAOrOqa9
z`?}}v(k|o6U(@r}?DjdAbJ5;ja&zp8b6h!zOY7>V{oB8OTK6aO=UsbxlwH0oW#DLH
zQsCffP|#p#T0jJ+Pta6wahQ}J;}xlJzKzn-hJPGF!xG-^*YJEEw&w1F`1zsL>ypmw
z=Wl2DQaydO>@ii5Uv_l?h0m;ieLWpx*s(65=fvt$*XD(8OWQapuRg5up`_Bb*-R_C
z_SkMda&hL`7k3vQvWX4vd~8{DWJ1Bb6WUW<(!+BS=L)?(y2o^zr}&}L5C+%Ec<HbE
z&cFB_zijp4`<uT^Jki=UIr#9*e>WG3%=|usVbQmggtMXr_bpDj$gq|c{&P(K!~W^Z
zotc7Wi=F<TdAafQ!?tLKjJ&OSZ{C=ly&1FC|J1eu_p2w_E#I`TP5HK2YLDF%S1FU3
zyWBdzIji1UCy|+cW1{GR?_bg%ZQs7;;(dGbaN{+HUM<jgugLADcp+!iJtdV^8HMwE
zHuzSC@t=zmcDPcu>h99@r902YNb)^y;%51kax|l`yys_?vO|s<i(YlyswD?~W-Z^D
zqtC67HQRgJJGIm=On+Uk-a0=)?%w-1B4H|m4AULfgfzX$+`PMJKS#oa3pV2G=RcC$
zD`HU`>3d|N?!3e~C+3IEsWj1C!KzrsyK!&De$Ipo+g1rYTVA$UZ_U9J$7?@?UQBx;
zQexf5Z&FrZwzcvl%cI8XsWvxQfAvk;Z*}PQf*B_tKGwf{|7Szpw7<DrjPsvH>wUCq
z@O|FBXV#mS#aCvZTvabEpYY>w_3a&&tOpIsn$))5Nb<2Nc(sJ#nCR2Hk=E7<#(9%(
zPAK$uxTIQ9JjwOLWrrs&n^x49SNUCOydzd#`L5t++F#wH$8vQh7t5Q8zVoV)mlbLF
z_5AqD?`)s;$lu{^*pZfgj{BpS`aETkee<W>bNq5J&;N$gAB|7zPjB4)Iin&t*;M{x
zX{qL&9+w?ar&5LH`n6rIc((OdmE+#EJ5Bwc@APDQa&O|}&HuwUMzW-)FPrH1*X+0X
zCewbY6Ysb0m@jVpwD+a8O7l0SrXvSttbgjO{UXhlA?^9D=oBBxx92zKO>X>MHk)hV
z)w@aEvt0`$HnK-vRd@KXtohsP7YcfLj&(oIY~^`0eeGWNxAWVJ5=`c>8j4Pw95N?)
zQrR9hUQOZI#!dAcPr80QoN35^QS{aHoA+mSKVsge|Jd)&(_eoTX6m$mxxc?#^4pDj
z=Q~1LM5We8@6gQ*osl8EQZ`fRfMY`Of&Bd*WncfTJFi``p-xzK2d^aaUJcX6H5-_A
zexED&<is==rH{TRtLra4kD0vDXkC%->I2Ow5$m}R+}gaTxooDd`~%UGPwE$4)@0lp
zAiRcgS0K~>Xq&UrjsN<)U*6tdxP5~8k?$4(3_`LSwxrhW{a3yDcJlk+OM5qd){A^E
za<u(92lL0+MY@{rUp|X)So1EmSLgN1wde1%@4s>O=G;xsZMRld-j8^FY3`1_*F=-n
zoS6OfyL`vKYfV$8aLt)=JmzrelE{7~nH%?cudNaJ&hA}z=Iu|_Z`XE<Px&4fJ!OGL
z{p}l<c+<a431yhgBHUjW=Fho1@XLz-@9(HDVu_kk^r*Tv=bOIt=iYbkyuPNzE7bO~
zUc4SX_tTy<Q}sW4+j3qXee0inzJu?|CXq#Fdw5?|OuXLf#c1(;Wkp@crQfrz|JfH2
zerK_@!+#Ok6;m~tt4>~Is#tlO-Da;A18>KD$=bcyL5~`;li$CNIPco=j`KnB#l~Hh
ztr_9R*h8M=E)Hbqbz|6HzgJcB{p(dXesj6_sokzB<i2up<;BKbda0~CR#s-eUvyEU
zp~Cmetw$HS>pJ8PuuL>}VShDgO6-F6S=+vyF%F$r&NH21!ZI86gO4(=-xYB<dh7gg
z?(DK<GHpjUCGk(n+`ES>VzctDt>zPoxaM5YOpM;%^l%5mr>N~L4PhF;e*ahZ-}K<G
zZ}hR&)Rf44?gzJQqO1F-%(^@;)WCXo;T8FJJGW~$h-b%I%y6FNKIhL0CGXXp`_@&S
z{$aCe&2rWR|NitQIS<J@ySvSH&R=HuT<fO~`~5J-qovN)Pr?`ZzIsx8@qDq(E|25J
z&W4;eGbTy#PS?2R_S99zY*MN%Pfq5s;@E3xDb4GAyj#uEl5g(Z|Js1l-(hB&wzTr6
zPkj59aau>e_sjZM>VItW&Xt)>8fz2||6*t~eEdo8qXCD?Uam9$I97Y@7j1TM(Rgq%
z^8d#zYzh1+B1aFn_DpZd(kYg@d6j*IDcA9St+xG9t_2FtED|5QH$`*2<D9coKsT)F
zNAc_e?TWHJYD)J4%Bzo^>1R3g(s$*f*4ro6{Oe-1la>FmRQHrpplREzo1SZHO6G>1
zJ{Qxq_Q<Le^8GKKi&$!|X`Hco+xpPy9r7Zv&s-XOZmymky~L(DZdFR?|F;}xyC*-m
zCZij8!Ip9PiOHYX)}FIzJ7Tm$=INq6`@K&lv0l-7!Sg>+<^9XocRNBg^Q)(XTK-Z<
zWQv$^L7ro8$jN2@N?N@%()#%|`u^}gc`>y)cEasg@9P?8|Ai+{Y=6yab?ywuZnHVP
zEw(={@lNhf@{enN+yD5zhu`J*^CRC|B>HTvTgVzU--P8`jP-i?7TL$ww!O%+&8VJ~
zUU$RBXk~xk`-P9sTvM^HSkNohWMO-3Rl!E-NfK>mCv0m7eYY{`-?aW0%_g=xHLuNz
zI`($Di+ra;`W5#{G0nfb-kMKiO}voI(VMxvZ-Iir>G)MG?w7THe7k+?k4^;Z`zz-S
z4L_EPhh38j-za3qu(#=o>@M?84-NJ^VKPzWFAh$7{6e-%L0a?Z3iB1EGu{Yj$4GVX
z<;Gl7zY})3Z{d}~v|ZWde=U_<Hyt}X!{P42$jrCQ6PND%E73Ax%Uq5{3t5ECw<-wi
zU3#NnX+VvTX~_DA_XCeK??_%-=lVQtjoELnxz+v|9jy-LOZkId#U5{QKd^P7r|e?(
zRt6)xOKG>i#F_1|vJW)W^-#Af+hnGk-uXsCS1F^UZ=UqM9rHZ6t{h5wCif!vQ9f_@
zT(Rx$O5ZbWn(qd76$RewzAY3T+uM~i)%y0GSjo<ra(d!rjcHr%?Q(VR$eww}?Mh(j
zC&oMTXJ3uAl$ua?-E^0)eax#h{rCD5IqpSd9pTZ4*{=}q@ORHG(;Y@#i~UTv9iP1I
zHDNC{c+cl+y2kD>pFmmD1G9tAk7aHAE#bM(_)gi;b^KupGLIhStyi4mp2Od>a>G*2
ziQGG0Y4A)FUnqHHV@{&d<u6Xx1vq1bbJF>yIiBmE;u0rTCvR7MHjQP?&)oh0`YaoZ
z<yV((+t(<Oo3ujxx}~x3_q0^jbILjAm20IVSHIx!y(ApVsCROO_*83S)jj1E*EuHq
z-LUVU*x#yP+x!zdFHiY!ytt%8P}ub`SMYDu9PMdqXWrkj_)K2I|GCfg*3bCM#d7>*
z>5Y9U+kSm`{`&rY0g<P%TlGvosdlV$^nA^BT5jU49+}^c&hA|Y-*e7BFT~;~Kp0)r
b{-Nu2ce0P^B+Xq63=9mOu6{1-oD!M<ud_8;

literal 0
HcmV?d00001

diff --git a/assets/skins/default_tile_flag_ok.png b/assets/skins/default_tile_flag_ok.png
new file mode 100644
index 0000000000000000000000000000000000000000..6f87550f930b4ae093d7620d4616f51a4f1139fc
GIT binary patch
literal 5041
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%0A#mgQ$p6-`N<Zj*Ss
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
E0C#7AQvd(}

literal 0
HcmV?d00001

diff --git a/assets/skins/default_mine.png b/assets/skins/default_tile_mine.png
similarity index 100%
rename from assets/skins/default_mine.png
rename to assets/skins/default_tile_mine.png
diff --git a/assets/skins/default_tile_mine_not_found.png b/assets/skins/default_tile_mine_not_found.png
new file mode 100644
index 0000000000000000000000000000000000000000..a28db91fca96e5a509956ddd81d51bea2cd974c1
GIT binary patch
literal 6589
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
UsH-u7fq{X+)78&qol`;+02H{QyZ`_I

literal 0
HcmV?d00001

diff --git a/assets/skins/default_unknown.png b/assets/skins/default_tile_unknown.png
similarity index 100%
rename from assets/skins/default_unknown.png
rename to assets/skins/default_tile_unknown.png
diff --git a/fastlane/metadata/android/en-US/changelogs/4.txt b/fastlane/metadata/android/en-US/changelogs/4.txt
new file mode 100644
index 0000000..60ec69f
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/4.txt
@@ -0,0 +1 @@
+Finalize minimal gameplay.
diff --git a/fastlane/metadata/android/fr-FR/changelogs/4.txt b/fastlane/metadata/android/fr-FR/changelogs/4.txt
new file mode 100644
index 0000000..6f741b5
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/4.txt
@@ -0,0 +1 @@
+Finalisation du jeu minimal.
diff --git a/icons/build_game_icons.sh b/icons/build_game_icons.sh
index aae2bcb..c57007a 100755
--- a/icons/build_game_icons.sh
+++ b/icons/build_game_icons.sh
@@ -43,19 +43,33 @@ function build_icon() {
   optipng ${OPTIPNG_OPTIONS} ${TARGET}
 }
 
-function build_icon_for_skin() {
+function build_icons_for_skin() {
   SKIN_CODE="$1"
 
-  build_icon ${CURRENT_DIR}/skins/${SKIN_CODE}/mine.svg ${BASE_DIR}/assets/skins/${SKIN_CODE}_mine.png
-  build_icon ${CURRENT_DIR}/skins/${SKIN_CODE}/unknown.svg ${BASE_DIR}/assets/skins/${SKIN_CODE}_unknown.png
+  build_icon_for_skin ${SKIN_CODE} button_mark_mine_on
+  build_icon_for_skin ${SKIN_CODE} button_mark_mine_off
+
+  build_icon_for_skin ${SKIN_CODE} tile_mine
+  build_icon_for_skin ${SKIN_CODE} tile_mine_not_found
+
+  build_icon_for_skin ${SKIN_CODE} tile_flag
+  build_icon_for_skin ${SKIN_CODE} tile_flag_ok
+  build_icon_for_skin ${SKIN_CODE} tile_flag_ko
+
+  build_icon_for_skin ${SKIN_CODE} tile_unknown
   for VALUE in {0..8};
   do
-    if [ -f "${CURRENT_DIR}/skins/${SKIN_CODE}/${VALUE}.svg" ]; then
-      build_icon ${CURRENT_DIR}/skins/${SKIN_CODE}/${VALUE}.svg ${BASE_DIR}/assets/skins/${SKIN_CODE}_${VALUE}.png
-    fi
+    build_icon_for_skin ${SKIN_CODE} tile_${VALUE}
   done
 }
 
+function build_icon_for_skin() {
+  SKIN_CODE="$1"
+  IMAGE_CODE="$2"
+
+  build_icon ${CURRENT_DIR}/skins/${SKIN_CODE}/${IMAGE_CODE}.svg ${BASE_DIR}/assets/skins/${SKIN_CODE}_${IMAGE_CODE}.png
+}
+
 # Game icons
 build_icon ${CURRENT_DIR}/button_back.svg ${BASE_DIR}/assets/icons/button_back.png
 build_icon ${CURRENT_DIR}/button_start.svg ${BASE_DIR}/assets/icons/button_start.png
@@ -71,4 +85,4 @@ build_icon ${CURRENT_DIR}/size_20x20.svg ${BASE_DIR}/assets/icons/size_20x20.png
 build_icon ${CURRENT_DIR}/skins/empty.svg ${BASE_DIR}/assets/skins/empty.png
 
 # Skins
-build_icon_for_skin "default"
+build_icons_for_skin "default"
diff --git a/icons/skins/default/button_mark_mine_off.svg b/icons/skins/default/button_mark_mine_off.svg
new file mode 100644
index 0000000..f4ab60e
--- /dev/null
+++ b/icons/skins/default/button_mark_mine_off.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 93.665 93.676" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect x="-.0013123" y="-.0014381" width="93.668" height="93.679" ry="0" fill="#ea9c1f" stroke="#fff" stroke-width=".24146"/><path d="m62.564 39.496c-4.3118 1.5875-7.5974 2.7182-10.487 6.2927-2.5748 3.1852-6.2927 4.2894-10.487 2.1897v11.444h-2.0975v-28.316c0-0.5797 0.46905-1.0487 1.0487-1.0487s1.0487 0.46905 1.0487 1.0487c2.329 3.3859 6.3764 4.1356 10.487 4.195 6.2927 0.09216 10.487 4.195 10.487 4.195zm-18.878 13.913v2.1344c2.4744 0.50594 4.195 1.5793 4.195 2.8309 0 1.737-3.2876 3.1463-7.3413 3.1463s-7.3413-1.4093-7.3413-3.1463c0-1.2516 1.7206-2.3249 4.195-2.8309v-2.1343c-3.8099 0.65962-6.2927 2.5072-6.2927 4.9652 0 3.0869 3.8816 5.2437 9.4389 5.2437s9.4389-2.1569 9.4389-5.2437c0-2.458-2.4826-4.3055-6.2927-4.9652z" fill="#af0303" stroke="#730202" stroke-linejoin="round" stroke-width=".84528"/></svg>
diff --git a/icons/skins/default/button_mark_mine_on.svg b/icons/skins/default/button_mark_mine_on.svg
new file mode 100644
index 0000000..c8c4e65
--- /dev/null
+++ b/icons/skins/default/button_mark_mine_on.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 93.665 93.676" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect x="-.0013123" y="-.0014381" width="93.668" height="93.679" ry="0" fill="#ea9c1f" stroke="#fff" stroke-width=".24146"/><path d="m84.054 29.467c-10.202 3.7561-17.976 6.4314-24.814 14.889-6.0921 7.5364-14.889 10.149-24.814 5.1809v27.078h-4.9628v-66.998c0-1.3716 1.1098-2.4814 2.4814-2.4814s2.4814 1.1098 2.4814 2.4814c5.5105 8.0113 15.087 9.7852 24.814 9.9257 14.889 0.21806 24.814 9.9257 24.814 9.9257zm-44.666 32.918v5.0502c5.8546 1.1971 9.9257 3.7367 9.9257 6.698 0 4.1099-7.7786 7.4443-17.37 7.4443-9.5913 0-17.37-3.3346-17.37-7.4444 0-2.9613 4.0711-5.5009 9.9257-6.698v-5.05c-9.0146 1.5607-14.889 5.9322-14.889 11.748 0 7.3038 9.1842 12.407 22.333 12.407s22.333-5.1034 22.333-12.407c0-5.8158-5.874-10.187-14.889-11.748z" fill="#af0303" stroke="#730202" stroke-linejoin="round" stroke-width="2"/></svg>
diff --git a/icons/skins/default/0.svg b/icons/skins/default/tile_0.svg
similarity index 100%
rename from icons/skins/default/0.svg
rename to icons/skins/default/tile_0.svg
diff --git a/icons/skins/default/1.svg b/icons/skins/default/tile_1.svg
similarity index 100%
rename from icons/skins/default/1.svg
rename to icons/skins/default/tile_1.svg
diff --git a/icons/skins/default/2.svg b/icons/skins/default/tile_2.svg
similarity index 100%
rename from icons/skins/default/2.svg
rename to icons/skins/default/tile_2.svg
diff --git a/icons/skins/default/3.svg b/icons/skins/default/tile_3.svg
similarity index 100%
rename from icons/skins/default/3.svg
rename to icons/skins/default/tile_3.svg
diff --git a/icons/skins/default/4.svg b/icons/skins/default/tile_4.svg
similarity index 100%
rename from icons/skins/default/4.svg
rename to icons/skins/default/tile_4.svg
diff --git a/icons/skins/default/5.svg b/icons/skins/default/tile_5.svg
similarity index 100%
rename from icons/skins/default/5.svg
rename to icons/skins/default/tile_5.svg
diff --git a/icons/skins/default/6.svg b/icons/skins/default/tile_6.svg
similarity index 100%
rename from icons/skins/default/6.svg
rename to icons/skins/default/tile_6.svg
diff --git a/icons/skins/default/7.svg b/icons/skins/default/tile_7.svg
similarity index 100%
rename from icons/skins/default/7.svg
rename to icons/skins/default/tile_7.svg
diff --git a/icons/skins/default/8.svg b/icons/skins/default/tile_8.svg
similarity index 100%
rename from icons/skins/default/8.svg
rename to icons/skins/default/tile_8.svg
diff --git a/icons/skins/default/tile_flag.svg b/icons/skins/default/tile_flag.svg
new file mode 100644
index 0000000..5632b14
--- /dev/null
+++ b/icons/skins/default/tile_flag.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="2" fill="none"/><path d="m87.221 32.63c-10.202 3.7561-17.976 6.4314-24.814 14.889-6.0921 7.5364-14.889 10.149-24.814 5.1809v27.078h-4.9628v-66.998c0-1.3716 1.1098-2.4814 2.4814-2.4814s2.4814 1.1098 2.4814 2.4814c5.5105 8.0113 15.087 9.7852 24.814 9.9257 14.889 0.21806 24.814 9.9257 24.814 9.9257zm-44.666 32.918v5.0502c5.8546 1.1971 9.9257 3.7367 9.9257 6.698 0 4.1099-7.7786 7.4443-17.37 7.4443-9.5913 0-17.37-3.3346-17.37-7.4444 0-2.9613 4.0711-5.5009 9.9257-6.698v-5.05c-9.0146 1.5607-14.889 5.9322-14.889 11.748 0 7.3038 9.1842 12.407 22.333 12.407s22.333-5.1034 22.333-12.407c0-5.8158-5.874-10.187-14.889-11.748z" fill="#e86f04" stroke="#773802" stroke-linejoin="round" stroke-width="2"/></svg>
diff --git a/icons/skins/default/tile_flag_ko.svg b/icons/skins/default/tile_flag_ko.svg
new file mode 100644
index 0000000..dd83b8f
--- /dev/null
+++ b/icons/skins/default/tile_flag_ko.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="2" fill="none"/><path d="m87.221 32.63c-10.202 3.7561-17.976 6.4314-24.814 14.889-6.0921 7.5364-14.889 10.149-24.814 5.1809v27.078h-4.9628v-66.998c0-1.3716 1.1098-2.4814 2.4814-2.4814s2.4814 1.1098 2.4814 2.4814c5.5105 8.0113 15.087 9.7852 24.814 9.9257 14.889 0.21806 24.814 9.9257 24.814 9.9257zm-44.666 32.918v5.0502c5.8546 1.1971 9.9257 3.7367 9.9257 6.698 0 4.1099-7.7786 7.4443-17.37 7.4443-9.5913 0-17.37-3.3346-17.37-7.4444 0-2.9613 4.0711-5.5009 9.9257-6.698v-5.05c-9.0146 1.5607-14.889 5.9322-14.889 11.748 0 7.3038 9.1842 12.407 22.333 12.407s22.333-5.1034 22.333-12.407c0-5.8158-5.874-10.187-14.889-11.748z" fill="#e80604" stroke="#770302" stroke-linejoin="round" stroke-width="2"/></svg>
diff --git a/icons/skins/default/tile_flag_ok.svg b/icons/skins/default/tile_flag_ok.svg
new file mode 100644
index 0000000..a7db810
--- /dev/null
+++ b/icons/skins/default/tile_flag_ok.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="2" fill="none"/><path d="m87.221 32.63c-10.202 3.7561-17.976 6.4314-24.814 14.889-6.0921 7.5364-14.889 10.149-24.814 5.1809v27.078h-4.9628v-66.998c0-1.3716 1.1098-2.4814 2.4814-2.4814s2.4814 1.1098 2.4814 2.4814c5.5105 8.0113 15.087 9.7852 24.814 9.9257 14.889 0.21806 24.814 9.9257 24.814 9.9257zm-44.666 32.918v5.0502c5.8546 1.1971 9.9257 3.7367 9.9257 6.698 0 4.1099-7.7786 7.4443-17.37 7.4443-9.5913 0-17.37-3.3346-17.37-7.4444 0-2.9613 4.0711-5.5009 9.9257-6.698v-5.05c-9.0146 1.5607-14.889 5.9322-14.889 11.748 0 7.3038 9.1842 12.407 22.333 12.407s22.333-5.1034 22.333-12.407c0-5.8158-5.874-10.187-14.889-11.748z" fill="#5aaf03" stroke="#027302" stroke-linejoin="round" stroke-width="2"/></svg>
diff --git a/icons/skins/default/mine.svg b/icons/skins/default/tile_mine.svg
similarity index 100%
rename from icons/skins/default/mine.svg
rename to icons/skins/default/tile_mine.svg
diff --git a/icons/skins/default/tile_mine_not_found.svg b/icons/skins/default/tile_mine_not_found.svg
new file mode 100644
index 0000000..f637966
--- /dev/null
+++ b/icons/skins/default/tile_mine_not_found.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="2" fill="none"/><g transform="matrix(1.0346 0 0 1.0346 -1.7311 -1.7312)" fill="#787878" stroke="#444343" stroke-width="1.9331"><path d="m92.148 55.869c-0.626-0.939-1.482-1.519-2.568-1.739l-6.792-1.242c0.368-5.669-0.727-11.035-3.286-16.096l5.853-4.224c0.939-0.663 1.491-1.574 1.657-2.733 0.202-1.086-0.037-2.071-0.718-2.954l-0.469-0.718c-0.626-0.883-1.537-1.427-2.733-1.629-1.031-0.166-2.016 0.092-2.954 0.773l-5.632 4.059c-3.81-4.215-8.347-7.206-13.611-8.973l1.27-7.731c0.202-1.104-0.037-2.126-0.718-3.065-0.626-0.883-1.482-1.427-2.568-1.629l-0.856-0.166c-1.104-0.147-2.126 0.092-3.065 0.718-0.884 0.681-1.427 1.565-1.629 2.65l-1.16 7.427c-2.503-0.221-4.951-0.175-7.344 0.138-1.362 0.055-2.641 0.294-3.838 0.718-0.626 0.147-1.224 0.331-1.795 0.552l-3.451-7.51c-0.46-0.994-1.215-1.693-2.264-2.098-1.031-0.423-2.043-0.405-3.037 0.055l-0.773 0.414c-0.994 0.405-1.73 1.16-2.209 2.264-0.368 1.031-0.313 2.043 0.166 3.037l3.506 7.648c-0.202 0.11-0.405 0.249-0.607 0.414-5.264 3.681-9.019 8.31-11.265 13.888l-6.958-1.546c-1.086-0.276-2.098-0.074-3.037 0.607-0.994 0.534-1.592 1.344-1.795 2.43l-0.246 0.772c-0.203 1.104-0.018 2.172 0.552 3.203 0.626 0.883 1.491 1.463 2.595 1.739l6.626 1.546c-0.736 5.835 0.101 11.329 2.512 16.483l-5.411 3.672c-0.939 0.626-1.537 1.491-1.795 2.595-0.147 1.086 0.092 2.098 0.718 3.037l0.469 0.635c0.626 0.939 1.454 1.537 2.485 1.795 1.16 0.147 2.209-0.092 3.147-0.718l5.135-3.424c3.7 4.583 8.255 7.887 13.667 9.912l-1.242 6.323c-0.202 1.104 9e-3 2.154 0.635 3.147 0.626 0.883 1.482 1.427 2.568 1.629l0.801 0.166c1.086 0.258 2.098 0.101 3.037-0.469 0.939-0.681 1.509-1.574 1.712-2.678l1.242-6.074c6 0.626 11.651-0.285 16.952-2.733l4.003 6.074c0.626 0.939 1.509 1.518 2.651 1.739 1.049 0.258 2.043 0.074 2.982-0.552l0.69-0.387c0.939-0.626 1.537-1.518 1.795-2.678 0.203-1.086-9e-3 -2.098-0.635-3.037l-3.81-5.936c4.583-3.7 7.841-8.255 9.774-13.667l6.875 1.242c1.086 0.202 2.098-9e-3 3.037-0.635 0.883-0.607 1.427-1.463 1.629-2.568l0.166-0.773c0.202-1.103-0.01-2.143-0.636-3.119zm-50.085-15.013c-0.824 1.929-2.217 3.297-4.178 4.102-1.962 0.806-3.92 0.815-5.876 0.028-1.936-0.778-3.299-2.13-4.09-4.056s-0.774-3.853 0.05-5.782c0.844-1.92 2.247-3.284 4.209-4.089 1.962-0.806 3.91-0.819 5.846-0.041 1.956 0.787 3.329 2.144 4.12 4.069 0.79 1.925 0.763 3.848-0.081 5.769z" fill="#787878" stroke="#444343" stroke-width="1.9331"/></g></svg>
diff --git a/icons/skins/default/unknown.svg b/icons/skins/default/tile_unknown.svg
similarity index 100%
rename from icons/skins/default/unknown.svg
rename to icons/skins/default/tile_unknown.svg
diff --git a/lib/entities/cell.dart b/lib/entities/cell.dart
index e2a6c0d..30b0e1b 100644
--- a/lib/entities/cell.dart
+++ b/lib/entities/cell.dart
@@ -7,6 +7,7 @@ class Cell {
   bool isMined = false;
   bool isExplored = false;
   bool isMarked = false;
+  bool isExploded = false;
   int minesCountAround = 0;
 
   Cell(
@@ -14,17 +15,10 @@ class Cell {
   );
 
   Container widget(Data myProvider, int row, int col) {
-    String imageAsset = 'assets/skins/' + myProvider.skin + '_unknown.png';
+    bool showSolution = myProvider.gameWin || myProvider.gameFail;
 
-    Color backgroundColor = this.getBackgroundColor();
-
-    if (this.isExplored) {
-      if (this.isMined) {
-        imageAsset = 'assets/skins/' + myProvider.skin + '_mine.png';
-      } else {
-        imageAsset = 'assets/skins/' + myProvider.skin + '_' + this.minesCountAround.toString() + '.png';
-      }
-    }
+    Color backgroundColor = this.getBackgroundColor(myProvider);
+    String imageAsset = this.getImageAssetName(myProvider.skin, showSolution);
 
     return Container(
       decoration: BoxDecoration(
@@ -40,14 +34,64 @@ class Cell {
           fit: BoxFit.fill,
         ),
         onTap: () {
-          BoardUtils.walkOnCell(myProvider, row, col);
-          BoardUtils.checkBoardIsSolved(myProvider);
+          if (!(myProvider.gameWin || myProvider.gameFail)) {
+            if (myProvider.reportMode) {
+              BoardUtils.reportCell(myProvider, row, col);
+            } else {
+              BoardUtils.walkOnCell(myProvider, row, col);
+            }
+          }
+          BoardUtils.checkGameIsFinished(myProvider);
         },
       ),
     );
   }
 
-  Color getBackgroundColor() {
+  String getImageAssetName(String skin, bool showSolution) {
+    String imageAsset = 'assets/skins/' + skin + '_tile_unknown.png';
+
+    if (!showSolution) {
+      // Running game
+      if (this.isExplored) {
+        if (this.isMined) {
+          // Boom
+          imageAsset = 'assets/skins/' + skin + '_tile_mine.png';
+        } else {
+          // Show mines count around
+          imageAsset = 'assets/skins/' + skin + '_tile_' + this.minesCountAround.toString() + '.png';
+        }
+      } else {
+        if (this.isMarked) {
+          // Danger!
+          imageAsset = 'assets/skins/' + skin + '_tile_flag.png';
+        }
+      }
+    } else {
+      // Finished game
+      if (this.isMined) {
+        if (this.isExploded) {
+          // Mine exploded
+          imageAsset = 'assets/skins/' + skin + '_tile_mine.png';
+        } else {
+          // Mine not found
+          imageAsset = 'assets/skins/' + skin + '_tile_mine_not_found.png';
+        }
+      } else {
+        // Show all mines counts
+        imageAsset = 'assets/skins/' + skin + '_tile_' + this.minesCountAround.toString() + '.png';
+      }
+    }
+
+    return imageAsset;
+  }
+
+  Color getBackgroundColor(Data myProvider) {
+    if (myProvider.gameWin) {
+      return Colors.green[300];
+    } else if (myProvider.gameFail) {
+      return Colors.pink[200];
+    }
+
     return Colors.white;
   }
 }
diff --git a/lib/layout/board.dart b/lib/layout/board.dart
index b5e1d12..f333605 100644
--- a/lib/layout/board.dart
+++ b/lib/layout/board.dart
@@ -5,14 +5,16 @@ import '../provider/data.dart';
 class Board {
 
   static Container buildGameBoard(Data myProvider) {
+    Color borderColor = myProvider.reportMode ? Colors.blue : Colors.black;
+
     return Container(
       margin: EdgeInsets.all(2),
       padding: EdgeInsets.all(2),
       decoration: BoxDecoration(
-        color: Colors.black,
+        color: borderColor,
         borderRadius: BorderRadius.circular(2),
         border: Border.all(
-          color: Colors.black,
+          color: borderColor,
           width: 2,
         ),
       ),
@@ -41,4 +43,40 @@ class Board {
     );
   }
 
+  static FlatButton buildToggleFlagModeButton(Data myProvider) {
+    String reportModeSuffix = myProvider.reportMode ? 'on' : 'off';
+
+    return FlatButton(
+      child: Container(
+        child: Image(
+          image: AssetImage('assets/skins/' + myProvider.skin  + '_button_mark_mine_' + reportModeSuffix + '.png'),
+          fit: BoxFit.fill,
+        ),
+      ),
+      onPressed: () => myProvider.updateReportMode(!myProvider.reportMode),
+    );
+  }
+
+  static Table buildToggleFlagModeLayout(Data myProvider) {
+    Image paddingBlock = Image(
+      image: AssetImage('assets/skins/empty.png'),
+      fit: BoxFit.fill,
+    );
+
+    return Table(
+      defaultColumnWidth: IntrinsicColumnWidth(),
+      children: [
+        TableRow(
+          children: [
+            TableCell(child: paddingBlock),
+            TableCell(child: paddingBlock),
+            TableCell(child: buildToggleFlagModeButton(myProvider)),
+            TableCell(child: paddingBlock),
+            TableCell(child: paddingBlock),
+          ],
+        ),
+      ],
+    );
+  }
+
 }
diff --git a/lib/layout/game.dart b/lib/layout/game.dart
index 8333c64..5b226c8 100644
--- a/lib/layout/game.dart
+++ b/lib/layout/game.dart
@@ -14,7 +14,9 @@ class Game {
         children: [
           Board.buildGameBoard(myProvider),
           SizedBox(height: 2),
-          (myProvider.gameWin || myProvider.gameFail) ? Game.buildEndGameMessage(myProvider) : SizedBox(height: 2),
+          (myProvider.gameWin || myProvider.gameFail)
+            ? Game.buildEndGameMessage(myProvider)
+            : Board.buildToggleFlagModeLayout(myProvider)
         ],
       ),
     );
diff --git a/lib/provider/data.dart b/lib/provider/data.dart
index d637afa..4f571d8 100644
--- a/lib/provider/data.dart
+++ b/lib/provider/data.dart
@@ -15,9 +15,10 @@ class Data extends ChangeNotifier {
   String _skin = 'default';
 
   // Game data
-  bool _stateRunning = false;
+  bool _gameRunning = false;
   bool _gameWin = false;
   bool _gameFail = false;
+  bool _reportMode = false;
   int _sizeVertical = null;
   int _sizeHorizontal = null;
   List _cells = [];
@@ -79,12 +80,22 @@ class Data extends ChangeNotifier {
 
   void setCellAsExplored(int row, int col) {
     _cells[row][col].isExplored = true;
+    if (_cells[row][col].isMined) {
+      _cells[row][col].isExploded = true;
+    };
+
+    notifyListeners();
+  }
+
+  void toggleCellMark(int row, int col) {
+    _cells[row][col].isMarked = !_cells[row][col].isMarked;
+    updateReportMode(false);
     notifyListeners();
   }
 
-  bool get stateRunning => _stateRunning;
-  void updateStateRunning(bool stateRunning) {
-    _stateRunning = stateRunning;
+  bool get gameRunning => _gameRunning;
+  void updateGameRunning(bool gameRunning) {
+    _gameRunning = gameRunning;
     updateGameWin(false);
     updateGameFail(false);
     notifyListeners();
@@ -92,15 +103,19 @@ class Data extends ChangeNotifier {
 
   bool get gameWin => _gameWin;
   void updateGameWin(bool gameWin) {
-    print('updateGameWin: ' + (gameWin ? 'true' : 'false'));
     _gameWin = gameWin;
     notifyListeners();
   }
 
   bool get gameFail => _gameFail;
   void updateGameFail(bool gameFail) {
-    print('updateGameFail: ' + (gameFail ? 'true' : 'false'));
     _gameFail = gameFail;
     notifyListeners();
   }
+
+  bool get reportMode => _reportMode;
+  void updateReportMode(bool reportMode) {
+    _reportMode = reportMode;
+    notifyListeners();
+  }
 }
diff --git a/lib/screens/home.dart b/lib/screens/home.dart
index 39c0be2..204be18 100644
--- a/lib/screens/home.dart
+++ b/lib/screens/home.dart
@@ -15,7 +15,7 @@ class Home extends StatelessWidget {
 
     List<Widget> menuActions = [];
 
-    if (myProvider.stateRunning) {
+    if (myProvider.gameRunning) {
       menuActions = [
         FlatButton(
           child: Container(
@@ -43,7 +43,7 @@ class Home extends StatelessWidget {
       ),
       body: SafeArea(
         child: Center(
-          child: myProvider.stateRunning
+          child: myProvider.gameRunning
             ? Game.buildGameWidget(myProvider)
             : Parameters.buildParametersSelector(myProvider)
         ),
diff --git a/lib/utils/board_utils.dart b/lib/utils/board_utils.dart
index 743a832..39df1a5 100644
--- a/lib/utils/board_utils.dart
+++ b/lib/utils/board_utils.dart
@@ -5,15 +5,20 @@ class BoardUtils {
 
   static printGrid(List cells) {
     print('');
-    print('-------');
+    String line = '--';
+    for (var i = 0; i < cells[0].length; i++) {
+      line += '-';
+    }
+    print(line);
     for (var rowIndex = 0; rowIndex < cells.length; rowIndex++) {
-      String row = '';
+      String row = '|';
       for (var colIndex = 0; colIndex < cells[rowIndex].length; colIndex++) {
         row += cells[rowIndex][colIndex].isMined ? 'X' : '.';
       }
+      row += '|';
       print(row);
     }
-    print('-------');
+    print(line);
     print('');
   }
 
@@ -89,8 +94,13 @@ class BoardUtils {
     return cells;
   }
 
+  static void reportCell(Data myProvider, int row, int col) {
+    if (!myProvider.cells[row][col].isExplored) {
+      myProvider.toggleCellMark(row, col);
+    }
+  }
+
   static void walkOnCell(Data myProvider, int row, int col) {
-    print('Walk on cell [' + col.toString() + ',' + row.toString() + ']');
     myProvider.setCellAsExplored(row, col);
 
     if (myProvider.cells[row][col].minesCountAround == 0) {
@@ -154,8 +164,7 @@ class BoardUtils {
     return minesCountAround;
   }
 
-  static bool checkBoardIsSolved(Data myProvider) {
-    print('checkBoardIsSolved');
+  static bool checkGameIsFinished(Data myProvider) {
     List cells = myProvider.cells;
     int sizeHorizontal = cells.length;
     int sizeVertical = cells[0].length;
@@ -166,7 +175,7 @@ class BoardUtils {
     for (var row = 0; row < sizeVertical; row++) {
       for (var col = 0; col < sizeHorizontal; col++) {
         // Walked on a mine
-        if (cells[row][col].isMined == true && cells[row][col].isExplored == true) {
+        if (cells[row][col].isExploded == true) {
           myProvider.updateGameFail(true);
           return false;
         }
diff --git a/lib/utils/game_utils.dart b/lib/utils/game_utils.dart
index 03e51b7..909c1ed 100644
--- a/lib/utils/game_utils.dart
+++ b/lib/utils/game_utils.dart
@@ -4,13 +4,13 @@ import '../utils/board_utils.dart';
 class GameUtils {
 
   static void resetGame(Data myProvider) {
-    myProvider.updateStateRunning(false);
+    myProvider.updateGameRunning(false);
   }
 
   static void startGame(Data myProvider) {
     print('Starting game: ' + myProvider.size + ' - ' + myProvider.level);
     myProvider.updateSize(myProvider.size);
-    myProvider.updateStateRunning(true);
+    myProvider.updateGameRunning(true);
     myProvider.updateCells(
       BoardUtils.createBoard(
         myProvider.sizeHorizontal,
@@ -19,4 +19,5 @@ class GameUtils {
       )
     );
   }
+
 }
diff --git a/pubspec.lock b/pubspec.lock
index f57afd8..b6eca0d 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -28,7 +28,7 @@ packages:
       name: charcode
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.2.0"
+    version: "1.3.1"
   clock:
     dependency: transitive
     description:
@@ -73,7 +73,7 @@ packages:
       name: meta
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.4.0"
+    version: "1.7.0"
   nested:
     dependency: transitive
     description:
@@ -141,7 +141,7 @@ packages:
       name: test_api
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.4.0"
+    version: "0.4.1"
   typed_data:
     dependency: transitive
     description:
diff --git a/pubspec.yaml b/pubspec.yaml
index 3915ac9..2b41f4f 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -18,6 +18,5 @@ dev_dependencies:
 flutter:
   uses-material-design: true
   assets:
-    - assets/files/
     - assets/icons/
     - assets/skins/
-- 
GitLab