From 624bf28efc8e60097b7f47aaba99e05d2d7373ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Mon, 14 Jun 2021 17:23:31 +0200 Subject: [PATCH] Add minimal home page, settings and gameplay --- android/gradle.properties | 4 +- assets/icons/.gitkeep | 0 assets/icons/button_start.png | Bin 0 -> 4777 bytes assets/icons/difficulty_easy.png | Bin 0 -> 2967 bytes assets/icons/difficulty_hard.png | Bin 0 -> 2811 bytes assets/icons/difficulty_medium.png | Bin 0 -> 3036 bytes assets/icons/size_2.png | Bin 0 -> 863 bytes assets/icons/size_3.png | Bin 0 -> 1885 bytes assets/icons/skin_default.png | Bin 0 -> 5798 bytes assets/skins/.gitkeep | 0 assets/skins/default_1.png | Bin 0 -> 664 bytes assets/skins/default_2.png | Bin 0 -> 2268 bytes assets/skins/default_3.png | Bin 0 -> 2621 bytes assets/skins/default_4.png | Bin 0 -> 1612 bytes assets/skins/default_5.png | Bin 0 -> 2113 bytes assets/skins/default_6.png | Bin 0 -> 3245 bytes assets/skins/default_7.png | Bin 0 -> 1935 bytes assets/skins/default_8.png | Bin 0 -> 3407 bytes assets/skins/default_9.png | Bin 0 -> 3218 bytes assets/skins/empty.png | Bin 0 -> 335 bytes ...ld_icons.sh => build_application_icons.sh} | 1 - icons/build_game_icons.sh | 66 +++++ icons/button_start.svg | 2 + icons/difficulty_easy.svg | 2 + icons/difficulty_hard.svg | 2 + icons/difficulty_medium.svg | 2 + icons/size_2.svg | 2 + icons/size_3.svg | 2 + icons/skin_default.svg | 2 + icons/skins/default/1.svg | 4 + icons/skins/default/2.svg | 2 + icons/skins/default/3.svg | 2 + icons/skins/default/4.svg | 2 + icons/skins/default/5.svg | 2 + icons/skins/default/6.svg | 2 + icons/skins/default/7.svg | 2 + icons/skins/default/8.svg | 2 + icons/skins/default/9.svg | 2 + icons/skins/empty.svg | 2 + lib/entities/cell.dart | 95 +++++++ lib/provider/data.dart | 105 ++++++- lib/screens/home.dart | 256 +++++++++++++++--- pubspec.yaml | 3 +- 43 files changed, 512 insertions(+), 54 deletions(-) create mode 100644 assets/icons/.gitkeep create mode 100644 assets/icons/button_start.png create mode 100644 assets/icons/difficulty_easy.png create mode 100644 assets/icons/difficulty_hard.png create mode 100644 assets/icons/difficulty_medium.png create mode 100644 assets/icons/size_2.png create mode 100644 assets/icons/size_3.png create mode 100644 assets/icons/skin_default.png create mode 100644 assets/skins/.gitkeep create mode 100644 assets/skins/default_1.png create mode 100644 assets/skins/default_2.png create mode 100644 assets/skins/default_3.png create mode 100644 assets/skins/default_4.png create mode 100644 assets/skins/default_5.png create mode 100644 assets/skins/default_6.png create mode 100644 assets/skins/default_7.png create mode 100644 assets/skins/default_8.png create mode 100644 assets/skins/default_9.png create mode 100644 assets/skins/empty.png rename icons/{build_icons.sh => build_application_icons.sh} (92%) create mode 100755 icons/build_game_icons.sh create mode 100644 icons/button_start.svg create mode 100644 icons/difficulty_easy.svg create mode 100644 icons/difficulty_hard.svg create mode 100644 icons/difficulty_medium.svg create mode 100644 icons/size_2.svg create mode 100644 icons/size_3.svg create mode 100644 icons/skin_default.svg create mode 100644 icons/skins/default/1.svg create mode 100644 icons/skins/default/2.svg create mode 100644 icons/skins/default/3.svg create mode 100644 icons/skins/default/4.svg create mode 100644 icons/skins/default/5.svg create mode 100644 icons/skins/default/6.svg create mode 100644 icons/skins/default/7.svg create mode 100644 icons/skins/default/8.svg create mode 100644 icons/skins/default/9.svg create mode 100644 icons/skins/empty.svg create mode 100644 lib/entities/cell.dart diff --git a/android/gradle.properties b/android/gradle.properties index bc2d95e..818e87b 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.1 -app.versionCode=1 +app.versionName=0.0.2 +app.versionCode=2 diff --git a/assets/icons/.gitkeep b/assets/icons/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/assets/icons/button_start.png b/assets/icons/button_start.png new file mode 100644 index 0000000000000000000000000000000000000000..fc68a389653da8a866ee8f94847a0227aa030995 GIT binary patch literal 4777 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 literal 0 HcmV?d00001 diff --git a/assets/icons/difficulty_easy.png b/assets/icons/difficulty_easy.png new file mode 100644 index 0000000000000000000000000000000000000000..0bde256ef61a433321973f3b714cb13a5a76ae36 GIT binary patch literal 2967 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 b@sEAViz(l)-xF>GHGn-`{an^LB{Ts5X}!}4 literal 0 HcmV?d00001 diff --git a/assets/icons/difficulty_hard.png b/assets/icons/difficulty_hard.png new file mode 100644 index 0000000000000000000000000000000000000000..087591fa02fcb21b57b47ebddaeb35b01261b05d GIT binary patch literal 2811 zcmeAS@N?(olHy`uVBq!ia0y~yU^oE69Lx+145>_WOc@v$I14-?iy0VX)-o{2lrV1m z#&UvzfkCpwHKHUqKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IX1_q`n0X`wF3=9lc z1S78sL|hUGzbp`OSs?t1P~>Hy2oMsCxFi^H8H^Yh7#JBCm>3wD85mg@m{=K@*ch1D z8JRg4nK>C*xENWu8CiH3S$P@R_!!yv8QBCF*##Ndg%~-6nK(q4I7FE^#h5t7nYbjF zxFnglq?ov+nYd+`cx0J)<d}HmnRw-yc@>y>6`A>znE8~M`Ba$sRhb3Um<80C1vHoi zHJJsqn1!^Ng>+bibXkP;ScLUiL=0F&3|T~sSVWCkM9o;l%vr=OSj8<_C9GH_tXU;& zSS4*)rR-Rx>{+E8Sfw3VrJY!1oLOaDSY=$<WZl?g-Pz<k*yKFf<h<DAz1ie_*c5!( z6#Uo}{Mi%(*c1cVm4eung4vZr*p)-sRl?X+!r4_K*i|FhRioI|qS@7A*wtb=)Z;kR z<2f`EI5ZMDG?F+plQ}d~IJ8nZw9+`V(mAv<IJ7f4bh0>gvN?5gICXP5^$Ixk3pw?R zI1P$94N5o-N;wV7xD3m=j4HT{D!GiRxQwg0jBB_|YPn46xJ>G~OdGgN8@bGyxXhZl z&0Dz5Te&UTxGmbbEjqX@JGm{pxUIUmt$MhvdbzFpxUDDf*i7WHnZ#o|na6etkKI%r zyJ<Xj(|PP?@Yv7fahS#9Fq_A54zJ@}UZ?rIP78UR7xB6*=5<-Z>#~&Bbs4Yga$dI; zd~PfG+*a|qujX@K!{@P<&tn~*$9g``4SZf3`Mfsqd2QzN-ood-h2MKCzt1*)pY8lU zJNSKf^84=M_uI|yw};<vFTejje*gXa0SEX44hjSu5(qpj5O_o&=%_%@F@d1t0>LK) zLQV>VoDv8*Ef9J}AoQ$Y*g3(l^MYX)1j8>1hC|YuRheEZD9M)u`2{oh`uPV21)n~1 z_T0~364$Q&VPIfC@9E+gQgQ3;?f>z@r84Xvrq*tJv^99&iWLG)_s`}>WGzjsTe{}N zPf-oi{VtJ-ol~~%(+!*xKclVXsfkyB(VCT8eNH(9JMQbzZ+`pjXZo+i=GxuTyKmo3 z=)d<qUgG<McX8+Me*0P0?)Le>2Me*qqUJR-+>CpUme?+-G}*>@*tBpXZ^z{g68cO6 z4Gb&_42&EO3`8^8q#tDLi3!eJQ)HNSZ)0}6XXRPn@HGr?N>#1HedQS$90Yf-Dc$ds zly=TN^n07df~85fn<jo(=~E_BXIdJ3^X)>e756{$v^UH;$fvx*h&$I=FkrrjOsE7y zjzkp0zb{>q?9BGsij12h@2*M}J-3kY#T|QQhV-o-3^`kS*$q7J+x=+h>p#BJSai2q zJHJKwoxjCr=50I3S|Y9XC3V*Edpyz;9@VUT|MbP7ZwHxo_`I}R`RaT-?~O|nUo5sf z!7udSl+gZ=`5#t3WUBjf>;3hgTbmhQ+>*TT!v6H9!z@cI;=bNra5lf+>cOQm2O@6G zUVfM*=N;cGBef7$@dsD>dCsM7=;z}9;OzRr?CrI88BEtWxAvajY?{b;?CUzwTeYbo zj5g|18eZE7Zh6bec;NN7i%z>2t41}5u}5o&C>*?It6p&1Esf{b?p67$pZy;$W`1!= z@orWpKi`DJq%(EjeAXWQb>8&!`K!+^E&B6j`>h+|2j?%~ZMwdGSK-YkL0=hj&oj=r z{5R6!hs|TtiLyD?>OcSI*7<J|c)<KSn1L%si#hK+GsBw);T8V2n>Xlv$y`5O=ljn~ zHT6*%|Bd_185k=4LK)3%-Y>g$XUemg8n0FzuDtwCQoMRn-`lgIC+6P?cv(61@@l0A z*RJdnUUttgoAHd*713|!!ndn4AIR=2WNP>n{rGp>Gm8-BKh}4v-DH1feL7`)NvhB9 zF_TZGjrN54&7UpjJ6ne`nf&gPQ#<jRarT@ye;@qWysPZ@zgf?NSQFx(R8Mlcx%j}R z2YgRXRsNq>xLu0jUOCIm7^#Csp^*=!AGk0_Zo|_Cu7>Tkeg7Zr7d*S@-K#&B(yYVT zzGkHzWjwyu-QPy&W5}I34{c+jCdVy^TpKQt@U`zj`oCodvOKc?yFSRO6O@>)u-QAX z;p}aOmsV3FCmK~H)hEpE;<&c&5KD!6_j}E4Cu$5u8N@701lBF~VmkIM_C2%D&R^+f z6YeC4oa}e)*;xI4PjWEJhFg>OJ6+uRX4|2+VcCl$9;6;Sx0Knki{aKa28ME{kFz<~ zRVMuuzh5X;%n%@KxS;IdEbBKfG7651oIiid^-;0wIk)paO6}wo7nq7lq$lxKXV2i; z>Qqq`d0OlDzH$pW#e~_rzb3v4Ijz(9Cp#)vy4IwxgF)=Og|@3IL$(KZ&-{#p{bxSh zEwB)3IBm>!cZpa-B$HU=ynm-tKfIsq9NWamxZLJ=Mkw!rbA2EFetTDDlFA-8+2|+3 zKh5tQcMpZ=%s&_tC2GvBUu1vqG+T&=?EKTOcz#V+iO<|9p252B>hh;dKXx)Si0Xwh zuBlaGP&j#F-C6ORu<0jRcc?$`G@o%QbS>+IpVr2`LN9NuJH@hwiJ|6T$a<%O-BmfS zj~)}fp~GJg%gx~b=@s*h`{faLLoWXD$eGSsaKC&_(nXE)7kt<B6fyLPFhodA{bN2| zAw_o@^A9<OEz=iI{6Bl6#DafQ7;kVe=({Ta_vDHAy@dHqGQ$EhsRrIv40`Rq-e^Y0 z^NGa&Zt^`QIzxD?+KG9BTDH@d?pItb|3dS2NssIDZ{5q}cV4=olW+IH=<U`G8KLD} z3BOvNwxxyN-RJ+dh+#hSo$^58J<@aPro2mGuYY*9lcDSs;~Dl1VSk_WPCYtZBDtPr ziGNh?t0&pqHm~2kG-8mIX;3P4zj*cN>dVVsNB_FNexKC*>~|Z(#ckf*{WQJgfF;9^ z(6w)5x3=Bc8C7sv`?p)yU-Kiu#b^0;TVDU4_DS$%13zQR3d4zo5xqN$Eg3xYGCt(( zljdg#F8h0=e0FiO+_DqX`A)EH@O}7Z&()9#Qy-k%a^c1Q2H%q}ZodD2s;WPY`>x&$ zRapbU1CgwU@0*FIRlc93@?ur%?YxPOn(5QIHe@p9&JMcS9sXO_G)1J_mZdIsjs0d1 z))<xvl9grAYaPuM6CyV63Hsw#Ham<ZKuxqj;=r|zP360!XC2sG9=%ra`z$r43V*E! zcQ0@!G5heZUDnj<WPIdiTjRUCYegB?Oy-K<ceodGCiGXyo`kj^UlY&he)00voX+rK z!qoc71x-D*<%e(Xbz?CI)Jl+=p!k|eV&UDme}NAk6lJE)=wD#ceU`JLv%zKOX~CHn zjE}AR{cUM-S;XP{_K_|Zw0JM@J}8Z3W<7WJ`I9g6EB!i`)LTR<Fl9_&+oArwQ_9Y6 zVY}fmoAcNEE4I2ls_<GPxl4(+fV&~?ntO&MpW(4Q6()zMiC>OKed}P*^I*Qx9&wgC zw)CU&wi#W)3@KB;pSlsB(|JORw?OoOX64=++mjg-GEa-nT>RE%q3XAd)v3DgPOVn^ z+qUPDnb_P#^=zu7)pf9X@yC3IM@iQIlV`anNgKoz*XJ<HUCC&(mDxOh(Q&zb{-5RF YmUPEXjZbG{U|?YIboFyt=akR{01u*TQvd(} literal 0 HcmV?d00001 diff --git a/assets/icons/difficulty_medium.png b/assets/icons/difficulty_medium.png new file mode 100644 index 0000000000000000000000000000000000000000..67364276383e39456f05791a88fabd3001513b4b GIT binary patch literal 3036 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 Vo8xN_GB7YOc)I$ztaD0e0ssg^20;J- literal 0 HcmV?d00001 diff --git a/assets/icons/size_2.png b/assets/icons/size_2.png new file mode 100644 index 0000000000000000000000000000000000000000..91f7fd436c51769ed22cfd97d9e297de827f17ee GIT binary patch literal 863 zcmeAS@N?(olHy`uVBq!ia0y~yU^oE69Lx+145>_WOc@v$I14-?iy0VX)-o{2lrV1m z#&UvzfkCpwHKHUqKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IX1_p+Q0X`wF3=9le z|Nm$H|DO#;S^xiM{QsZz{~sJ>gV_uW3=E8nj7&_7%*;$IEKIDdOl)k-?CdO@oGe^i ztUNqye0*&D{Oke(>_S2uA|jk(V%$<vJTfvoa&o*13Ve!+d`e3E%F6tzs)AZtLfYEG zy1K%8dSa%g5>{5yj*fEf?h3xXO2NUZ5fQ49k?OIr>Tz+JNlBW?$$EKtdinWAm6gU- zRhC_yR^44T6DK&%neDS<yYJ2&{`>a@9M~Un>SW~gYtgrE#yxzH`0_>S=TGTBzGwXY zmG%E0e_5OWDEvx-{DK*L{rm%if={10d+z5iiECH?FfcGa^K@|xskrs_?oGc#4h*di z14CAYtkmG@*s-WdNpHsjr5)Pu|2y2{F`xWJMO1a}kNL0db>p3aqMQuU)HvGb>G2pH zOKFSCKd1A9m&50Uxq^xFd3I1>F)%QA2tW91`StgdhW4XZ-iv|+Z5Y<P?H0`m5%xW6 zyWT3{rdg_}D)XFGtK;vw)n5EE_xk=dd=<HirA41If>dMR2kRME&rX`ytF>t54*v41 zjNOafPiZ~+4OTou;lUHvoa1h`7r)H8?Dncb+-z4!;FsUwkB+m1KgxKcZHQqSNZ=Cx zjeSDeH&<Nkj6cn&)48oUVX?EQ?#BvQkR${*oMd>lJxSWk>h-brclOE)<ZjPgysT@| zUH$@ZPKXLrvO%7qZ~l>OIVI*D_xCcN=q|gkEil^kWSzj-$E6^Z65Ih+LeU#9<|)@z zzpHe;z2ergRf|#>?7Tpd82Eub)1uOi7ySjh7HRGR`PseRFg!r;K0iq10Tu@N{FV2o zvs9RaxC{&j@*Q4$e|>&t<$lJ-nct)hvVGKEzum1deXh}c)tfc;=l(M904elz^>bP0 Hl+XkKTFEQ6 literal 0 HcmV?d00001 diff --git a/assets/icons/size_3.png b/assets/icons/size_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c0a2df9a253d4a593a380198e56c297e35e3c GIT binary patch literal 1885 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 L{an^LB{Ts5C_V^Q literal 0 HcmV?d00001 diff --git a/assets/icons/skin_default.png b/assets/icons/skin_default.png new file mode 100644 index 0000000000000000000000000000000000000000..a00d6d50e91f04029d6d58b747f3644298504fa2 GIT binary patch literal 5798 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 literal 0 HcmV?d00001 diff --git a/assets/skins/.gitkeep b/assets/skins/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/assets/skins/default_1.png b/assets/skins/default_1.png new file mode 100644 index 0000000000000000000000000000000000000000..81fedf0ce0a6e139a2700780f36b8424ece903ef GIT binary patch literal 664 zcmeAS@N?(olHy`uVBq!ia0y~yU^oE69Lx+145>_WOc@v$I14-?iy0VX)-o{2lrV1m z#&UvzfkCpwHKHUqKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IX1_p*{0X`wF3=9lU zVc;1IzyzT5vuDp37#MhXczAhv`T6+;1Ox;H1=ZBlbaZq~O-(H<EG#W8U0hs}laq^z zimIxr>gwt`J3A*%oH%*%<T-QZELgB$@#4kHmoMM5XV2cfd-v_zcktlBW5<r2JbCim zxpS8;UAl4O#=U#@9zA;W`0?W>Po6w|`ZVC@CMJ-lOM?7@8GQZx1A~H3pE-N(=P!wC zSN||DFlKqWIEGZ*dVBq(ACsd*>&2jufL#YG=dp_fPW)bPsa%-I<KcX1S)JwmU0OTU zSNbm9a!t$4Q9G)4iqzr@xl7jGXb96vV(v2Gl4Aga1N&Kc<kz25Gvi>W*k@^bPjmT~ z3FZ&3zn#f!xBdMz<I_R`h1Js<Dz`mnn^9fu)^K#&bEX%vrKgXcW+(`s1~!3#f#EBY zRr~Ek#<|UtPv0xpA}{!1Yi*3lf$wiGGTfbio0(B9zn@VezkYt5UiyJGZ!4L9UH|L# zd=qO3FHAo*=>$oJe1FkfvpIIGE%>~&?7)IGTZ@s+Z^+ymcjZ>C-27kmoFMUplZ>u! u{=VHJDSg3f^+v|mnx?Z7;{$i^oMgwK<eOl)c5-JKNSUXrpUXO@geCxIEBxXB literal 0 HcmV?d00001 diff --git a/assets/skins/default_2.png b/assets/skins/default_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a1d9df5390311feb5d6b28039dad1a193f84d613 GIT binary patch literal 2268 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 literal 0 HcmV?d00001 diff --git a/assets/skins/default_3.png b/assets/skins/default_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a3144a8b0d4d17e48613cc769ad52dc28a98bb21 GIT binary patch literal 2621 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 Qz`(%Z>FVdQ&MBb@0LF5eq5uE@ literal 0 HcmV?d00001 diff --git a/assets/skins/default_4.png b/assets/skins/default_4.png new file mode 100644 index 0000000000000000000000000000000000000000..e442b9ae5e570c37c2c9f1c219faadfa2ef7fa90 GIT binary patch literal 1612 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 literal 0 HcmV?d00001 diff --git a/assets/skins/default_5.png b/assets/skins/default_5.png new file mode 100644 index 0000000000000000000000000000000000000000..d3942e1bc9cd01718d0f47a94095227f74c123b7 GIT binary patch literal 2113 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 Mr>mdKI;Vst0J(FdwEzGB literal 0 HcmV?d00001 diff --git a/assets/skins/default_6.png b/assets/skins/default_6.png new file mode 100644 index 0000000000000000000000000000000000000000..e881400e5c205a5e94549bd9e6748f8aac30b4ce GIT binary patch literal 3245 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 B=Mw+` literal 0 HcmV?d00001 diff --git a/assets/skins/default_7.png b/assets/skins/default_7.png new file mode 100644 index 0000000000000000000000000000000000000000..96abfbd8ea239500ceb0b2725ead7011398f12df GIT binary patch literal 1935 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 F1ONtwL&pFB literal 0 HcmV?d00001 diff --git a/assets/skins/default_8.png b/assets/skins/default_8.png new file mode 100644 index 0000000000000000000000000000000000000000..b1cda45df085155374036546e26d02b8436dccaf GIT binary patch literal 3407 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 literal 0 HcmV?d00001 diff --git a/assets/skins/default_9.png b/assets/skins/default_9.png new file mode 100644 index 0000000000000000000000000000000000000000..c08765ae77b7c80a72f4bdb44f1c33f067ebffda GIT binary patch literal 3218 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 Z2QTg4|8xJe4h9AW22WQ%mvv4FO#p#m-F^T7 literal 0 HcmV?d00001 diff --git a/assets/skins/empty.png b/assets/skins/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..af78d03efb01bbb072eb1de50a10daf05ebb670a GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0y~yU^oE6EX)iH3=2LLnlLaha29w(7Beu&tYu)3DPi3B zjpYOb1A}CVYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&3=9lf0X`wF3=9lU zVc;1IzyzT5vuDqqK7E?m`)@1AAtgb6!3@5B{((Wkr_Y={_w$#;wX1&^7#MmzT^vIy zZoNHg$lDSi;(Bm;14GY*HH>rCvgjx@N^#!~*reF_o>g?aVlm5{m34Us>*mjj+ETwZ z^1&Kg?mJfxF*1-14%}|A{k=cyBvX2C<bxIOX8*}Q%>3hqYVT(6isv9hJzf1=);T3K F0RYGOdrSZT literal 0 HcmV?d00001 diff --git a/icons/build_icons.sh b/icons/build_application_icons.sh similarity index 92% rename from icons/build_icons.sh rename to icons/build_application_icons.sh index fefc393..336359e 100755 --- a/icons/build_icons.sh +++ b/icons/build_application_icons.sh @@ -4,7 +4,6 @@ command -v inkscape >/dev/null 2>&1 || { echo >&2 "I require inkscape but it's not installed. Aborting."; exit 1; } command -v scour >/dev/null 2>&1 || { echo >&2 "I require scour but it's not installed. Aborting."; exit 1; } command -v optipng >/dev/null 2>&1 || { echo >&2 "I require optipng but it's not installed. Aborting."; exit 1; } -command -v convert >/dev/null 2>&1 || { echo >&2 "I require convert (imagemagick) but it's not installed. Aborting."; exit 1; } CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" BASE_DIR="$(dirname "${CURRENT_DIR}")" diff --git a/icons/build_game_icons.sh b/icons/build_game_icons.sh new file mode 100755 index 0000000..7fac920 --- /dev/null +++ b/icons/build_game_icons.sh @@ -0,0 +1,66 @@ +#! /bin/bash + +# Check dependencies +command -v inkscape >/dev/null 2>&1 || { echo >&2 "I require inkscape but it's not installed. Aborting."; exit 1; } +command -v scour >/dev/null 2>&1 || { echo >&2 "I require scour but it's not installed. Aborting."; exit 1; } +command -v optipng >/dev/null 2>&1 || { echo >&2 "I require optipng but it's not installed. Aborting."; exit 1; } + +CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" +BASE_DIR="$(dirname "${CURRENT_DIR}")" + +OPTIPNG_OPTIONS="-preserve -quiet -o7" + +# optimize svg +function optimize_svg() { + SOURCE="$1" + + cp ${SOURCE} ${SOURCE}.tmp + scour \ + --remove-descriptive-elements \ + --enable-id-stripping \ + --enable-viewboxing \ + --enable-comment-stripping \ + --nindent=4 \ + -i ${SOURCE}.tmp \ + -o ${SOURCE} + rm ${SOURCE}.tmp +} + +# build icons +function build_icon() { + ICON_SIZE=192 + SOURCE="$1" + TARGET="$2" + + optimize_svg "${SOURCE}" + + inkscape \ + --export-width=${ICON_SIZE} \ + --export-height=${ICON_SIZE} \ + --export-filename=${TARGET} \ + ${SOURCE} + + optipng ${OPTIPNG_OPTIONS} ${TARGET} +} + +function build_icon_for_skin() { + SKIN_CODE="$1" + + for VALUE in {1..9}; + do + build_icon ${CURRENT_DIR}/skins/${SKIN_CODE}/${VALUE}.svg ${BASE_DIR}/assets/skins/${SKIN_CODE}_${VALUE}.png + done +} + +# Game icons +build_icon ${CURRENT_DIR}/button_start.svg ${BASE_DIR}/assets/icons/button_start.png +build_icon ${CURRENT_DIR}/difficulty_easy.svg ${BASE_DIR}/assets/icons/difficulty_easy.png +build_icon ${CURRENT_DIR}/difficulty_medium.svg ${BASE_DIR}/assets/icons/difficulty_medium.png +build_icon ${CURRENT_DIR}/difficulty_hard.svg ${BASE_DIR}/assets/icons/difficulty_hard.png +build_icon ${CURRENT_DIR}/size_2.svg ${BASE_DIR}/assets/icons/size_2.png +build_icon ${CURRENT_DIR}/size_3.svg ${BASE_DIR}/assets/icons/size_3.png +build_icon ${CURRENT_DIR}/skin_default.svg ${BASE_DIR}/assets/icons/skin_default.png +build_icon ${CURRENT_DIR}/skins/empty.svg ${BASE_DIR}/assets/skins/empty.png + +# Skins +build_icon_for_skin "default" diff --git a/icons/button_start.svg b/icons/button_start.svg new file mode 100644 index 0000000..52e7fcf --- /dev/null +++ b/icons/button_start.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"><path d="m46.835 0c-25.826 0-46.835 21.009-46.835 46.841 0 25.826 21.009 46.835 46.835 46.835s46.83-21.009 46.83-46.835c0-25.832-21.004-46.841-46.83-46.841zm0 83.709c-20.36 0-36.875-16.508-36.875-36.868 0-20.369 16.515-36.874 36.875-36.874 20.361 0 36.873 16.505 36.873 36.874 0 20.36-16.512 36.868-36.873 36.868z"/><path d="m34.852 25.44c-1.1248-1.1302-4.0012-1.1302-4.0012 0v45.921c0 1.1316 2.8832 1.1316 4.0121 0l37.693-20.918c1.1289-1.1248 1.1479-2.9551 0.02171-4.084z" fill="#479fee" stroke-width="1.3568"/></svg> diff --git a/icons/difficulty_easy.svg b/icons/difficulty_easy.svg new file mode 100644 index 0000000..204ea0b --- /dev/null +++ b/icons/difficulty_easy.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 98.851 99.618" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="98.851" height="99.618" ry="1.795" fill="#41ff6a"/><path d="m22.408 52.415 20.8 13.7c0.2 0.1 0.3 0.2 0.5 0.3 1.3 0.5 2.8-0.1 3.3-1.3 0.5-1.3-0.1-2.8-1.3-3.3l-23.2-9.6c-0.2 0-0.3 0.2-0.1 0.2zm23.7 11.6c0.1 0.8-0.5 1.4-1.3 1.5s-1.4-0.5-1.5-1.3 0.5-1.4 1.3-1.5c0.8 0 1.5 0.5 1.5 1.3z"/><path d="m40.708 35.515c0.1 0.4 0.6 0.7 1 0.7 0.9-0.1 1.9-0.1 2.8-0.1 1.5 0 2.9 0.1 4.3 0.3 0.6 0.1 1.2-0.4 1.2-1v-6.9c0-0.6-0.5-1-1-1-3.2 0.1-6.4 0.7-9.3 1.6-0.5 0.2-0.8 0.7-0.6 1.3z"/><path d="m51.508 36.815c2.1 0.5 4.2 1.3 6.2 2.2 0.5 0.3 1.2 0 1.4-0.6l2.7-8.2c0.2-0.5-0.1-1.1-0.6-1.3-3-0.9-6.1-1.5-9.3-1.6-0.6 0-1 0.4-1 1v7.5c-0.1 0.5 0.2 0.9 0.6 1z"/><path d="m80.508 45.115-8.4 6.1c-0.4 0.3-0.5 0.8-0.3 1.3 0.9 1.6 1.6 3.2 2.2 4.9 0.2 0.5 0.7 0.8 1.2 0.6l9.8-3.2c0.5-0.2 0.8-0.7 0.6-1.3-1-2.9-2.3-5.7-3.8-8.2-0.2-0.4-0.9-0.6-1.3-0.2z"/><path d="m31.908 39.015c2.3-1.1 4.7-2 7.2-2.5 0.6-0.1 1-0.7 0.8-1.3l-1.5-4.7c-0.2-0.5-0.8-0.8-1.3-0.6-2.9 1.2-5.7 2.7-8.2 4.6-0.4 0.3-0.5 0.9-0.2 1.4l2 2.8c0.2 0.4 0.8 0.5 1.2 0.3z"/><path d="m62.408 30.615-2.8 8.6c-0.1 0.4 0 0.9 0.4 1.1 1.7 1 3.4 2.2 4.9 3.6 0.4 0.4 1.1 0.3 1.5-0.1l5.7-7.9c0.3-0.4 0.2-1.1-0.2-1.4-2.5-1.9-5.3-3.4-8.2-4.6-0.5-0.2-1.1 0.1-1.3 0.7z"/><path d="m66.908 45.815c1.3 1.4 2.5 2.8 3.5 4.4 0.3 0.5 0.9 0.6 1.4 0.3l8.3-6c0.4-0.3 0.5-0.9 0.2-1.4-1.8-2.5-3.9-4.8-6.2-6.8-0.4-0.4-1.1-0.3-1.5 0.2l-5.9 8.1c-0.2 0.3-0.2 0.8 0.2 1.2z"/><path d="m23.408 45.315c1.8-2 3.9-3.7 6.2-5.1 0.5-0.3 0.6-1 0.3-1.4l-1.8-2.4c-0.3-0.5-1-0.6-1.5-0.2-2.3 2-4.4 4.3-6.2 6.8-0.3 0.4-0.2 1.1 0.2 1.4l1.4 1c0.5 0.3 1 0.3 1.4-0.1z"/><path d="m12.808 53.815 6 2c0.5 0.2 1-0.1 1.2-0.6 1.1-2.6 2.2-4.3 3.9-6.4 0.4-0.4 0.3-1.1-0.2-1.4l-5.9-4.2c-0.5-0.3-1.1-0.2-1.4 0.3-1.6 2.5-3.2 6.1-4.1 9-0.3 0.6 0 1.2 0.5 1.3z"/><path d="m74.808 59.915c0.4 1.7 0.7 3.5 0.9 5.3 0 0.5 0.5 0.9 1 0.9h10.2c0.6 0 1-0.5 1-1-0.1-3.1-0.5-6-1.3-8.9-0.1-0.6-0.7-0.9-1.3-0.7l-9.8 3.2c-0.6 0.2-0.9 0.7-0.7 1.2z"/><path d="m14.808 66.115c0.1-3.2 0.7-6.3 1.7-9.2 0.2-0.5-0.1-1.1-0.6-1.3l-0.4-0.1c-0.5-0.2-1.1 0.1-1.3 0.7-0.8 3.2-1.3 6.5-1.3 9.9z"/></svg> diff --git a/icons/difficulty_hard.svg b/icons/difficulty_hard.svg new file mode 100644 index 0000000..b9fac20 --- /dev/null +++ b/icons/difficulty_hard.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 98.851 99.618" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="98.851" height="99.618" ry="1.795" fill="#d31158"/><path d="m68.154 58.254-24.4 5.1c-0.2 0-0.4 0.1-0.5 0.1-1.3 0.6-1.9 2-1.4 3.3 0.6 1.3 2 1.9 3.3 1.4l23-9.7c0.2 0 0.1-0.2 0-0.2zm-25 8.7c-0.6-0.5-0.6-1.4-0.1-2s1.4-0.6 2-0.1 0.6 1.4 0.1 2c-0.5 0.5-1.4 0.6-2 0.1z"/><path d="m40.054 37.354c0.1 0.4 0.6 0.7 1 0.7 0.9-0.1 1.9-0.1 2.8-0.1 1.5 0 2.9 0.1 4.3 0.3 0.6 0.1 1.2-0.4 1.2-1v-6.9c0-0.6-0.5-1-1-1-3.2 0.1-6.4 0.7-9.3 1.6-0.5 0.2-0.8 0.7-0.6 1.3z"/><path d="m50.854 38.754c2.1 0.5 4.2 1.3 6.2 2.2 0.5 0.3 1.2 0 1.4-0.6l2.7-8.2c0.2-0.5-0.1-1.1-0.6-1.3-3-0.9-6.1-1.5-9.3-1.6-0.6 0-1 0.4-1 1v7.5c-0.2 0.5 0.1 0.9 0.6 1z"/><path d="m81.754 45.554-12.2 8.9c-0.4 0.3-0.5 0.8-0.3 1.3 0.9 1.6 1.2 2.6 1.8 4.3 0.2 0.5 0.7 0.8 1.2 0.6l14.4-4.7c0.5-0.2 0.8-0.7 0.6-1.3-1-2.9-2.6-6.4-4.1-8.9-0.3-0.5-1-0.6-1.4-0.2z"/><path d="m31.154 40.854c2.3-1.1 4.7-2 7.2-2.5 0.6-0.1 1-0.7 0.8-1.3l-1.5-4.7c-0.2-0.5-0.8-0.8-1.3-0.6-2.9 1.2-5.7 2.7-8.2 4.6-0.4 0.3-0.5 0.9-0.2 1.4l2 2.8c0.3 0.4 0.8 0.5 1.2 0.3z"/><path d="m61.754 32.454-2.8 8.6c-0.1 0.4 0 0.9 0.4 1.1 1.7 1 3.4 2.2 4.9 3.6 0.4 0.4 1.1 0.3 1.5-0.1l5.7-7.9c0.3-0.4 0.2-1.1-0.2-1.4-2.5-1.9-5.3-3.4-8.2-4.6-0.5-0.1-1.1 0.2-1.3 0.7z"/><path d="m66.154 47.654c1.3 1.4 2.5 2.8 3.5 4.4 0.3 0.5 0.9 0.6 1.4 0.3l8.3-6c0.4-0.3 0.5-0.9 0.2-1.4-1.8-2.5-3.9-4.8-6.2-6.8-0.4-0.4-1.1-0.3-1.5 0.2l-5.9 8.1c-0.2 0.3-0.1 0.9 0.2 1.2z"/><path d="m22.654 47.154c1.8-2 3.9-3.7 6.2-5.1 0.5-0.3 0.6-1 0.3-1.4l-1.7-2.4c-0.3-0.5-1-0.6-1.5-0.2-2.3 2-4.4 4.3-6.2 6.8-0.3 0.4-0.2 1.1 0.2 1.4l1.4 1c0.4 0.4 1 0.3 1.3-0.1z"/><path d="m14.954 56.654 0.5 0.2c0.5 0.2 1-0.1 1.2-0.6 1.1-2.6 2.5-5 4.2-7.1 0.4-0.4 0.3-1.1-0.2-1.4l-1.2-0.8c-0.3-0.4-1-0.2-1.3 0.3-1.6 2.5-2.9 5.3-3.8 8.2-0.2 0.5 0.1 1.1 0.6 1.2z"/><path d="m74.054 61.754c0.4 1.7 0.7 3.5 0.9 5.3 0 0.5 0.5 0.9 1 0.9h10.2c0.6 0 1-0.5 1-1-0.1-3.1-0.5-6-1.3-8.9-0.1-0.6-0.7-0.9-1.3-0.7l-9.8 3.2c-0.5 0.2-0.8 0.7-0.7 1.2z"/><path d="m14.054 67.954c0.1-3.2 0.7-6.3 1.7-9.2 0.2-0.5-0.1-1.1-0.6-1.3l-0.3-0.1c-0.5-0.2-1.1 0.1-1.3 0.7-0.8 3.2-1.3 6.5-1.3 9.9z"/></svg> diff --git a/icons/difficulty_medium.svg b/icons/difficulty_medium.svg new file mode 100644 index 0000000..e71cd18 --- /dev/null +++ b/icons/difficulty_medium.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 98.851 99.618" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="98.851" height="99.618" ry="1.795" fill="#eeb517"/><path d="m52.928 42.009-11 21.7c-0.1 0.2-0.1 0.3-0.2 0.5-0.4 1.4 0.4 2.7 1.7 3.2 1.4 0.4 2.7-0.4 3.2-1.7l6.6-23.7c0-0.1-0.2-0.2-0.3 0zm-8.5 24.3c-0.8 0.1-1.5-0.4-1.6-1.1-0.1-0.8 0.4-1.5 1.1-1.6 0.8-0.1 1.5 0.4 1.6 1.1 0.1 0.8-0.4 1.5-1.1 1.6z"/><path d="m40.128 36.409c0.1 0.4 0.6 0.7 1 0.7 0.9-0.1 1.9-0.1 2.8-0.1 1.5 0 2.9 0.1 4.3 0.3 0.6 0.1 1.2-0.4 1.2-1v-6.9c0-0.6-0.5-1-1-1-3.2 0.1-6.4 0.7-9.3 1.6-0.5 0.2-0.8 0.7-0.6 1.3z"/><path d="m50.928 40.209c2.1 0.5 3.5 1 5.5 2 0.5 0.3 1.2 0 1.4-0.6l4.2-12.8c0.2-0.5-0.1-1.1-0.6-1.3-3-0.9-6.9-1.5-10.1-1.7-0.6 0-1 0.4-1 1v12.4c-0.1 0.5 0.2 0.9 0.6 1z"/><path d="m79.928 46.009-8.4 6.1c-0.4 0.3-0.5 0.8-0.3 1.3 0.9 1.6 1.6 3.2 2.2 4.9 0.2 0.5 0.7 0.8 1.2 0.6l9.8-3.2c0.5-0.2 0.8-0.7 0.6-1.3-1-2.9-2.3-5.7-3.8-8.2-0.2-0.4-0.9-0.5-1.3-0.2z"/><path d="m31.328 39.909c2.3-1.1 4.7-2 7.2-2.5 0.6-0.1 1-0.7 0.8-1.3l-1.5-4.7c-0.2-0.5-0.8-0.8-1.3-0.6-2.9 1.2-5.7 2.7-8.2 4.6-0.4 0.3-0.5 0.9-0.2 1.4l2 2.8c0.2 0.4 0.8 0.5 1.2 0.3z"/><path d="m61.828 31.509-2.8 8.6c-0.1 0.4 0 0.9 0.4 1.1 1.7 1 3.4 2.2 4.9 3.6 0.4 0.4 1.1 0.3 1.5-0.1l5.7-7.9c0.3-0.4 0.2-1.1-0.2-1.4-2.5-1.9-5.3-3.4-8.2-4.6-0.5-0.1-1.1 0.2-1.3 0.7z"/><path d="m66.328 46.709c1.3 1.4 2.5 2.8 3.5 4.4 0.3 0.5 0.9 0.6 1.4 0.3l8.3-6c0.4-0.3 0.5-0.9 0.2-1.4-1.8-2.5-3.9-4.8-6.2-6.8-0.4-0.4-1.1-0.3-1.5 0.2l-5.8 8.1c-0.3 0.3-0.3 0.9 0.1 1.2z"/><path d="m22.828 46.209c1.8-2 3.9-3.7 6.2-5.1 0.5-0.3 0.6-1 0.3-1.4l-1.8-2.4c-0.3-0.5-1-0.6-1.5-0.2-2.3 2-4.4 4.3-6.2 6.8-0.3 0.4-0.2 1.1 0.2 1.4l1.4 1c0.5 0.4 1 0.3 1.4-0.1z"/><path d="m15.128 55.709 0.5 0.2c0.5 0.2 1-0.1 1.2-0.6 1.1-2.6 2.5-5 4.2-7.1 0.4-0.4 0.3-1.1-0.2-1.4l-1.2-0.8c-0.5-0.3-1.1-0.2-1.4 0.3-1.6 2.5-2.9 5.3-3.8 8.2-0.1 0.5 0.2 1.1 0.7 1.2z"/><path d="m74.228 60.809c0.4 1.7 0.7 3.5 0.9 5.3 0 0.5 0.5 0.9 1 0.9h10.2c0.6 0 1-0.5 1-1-0.1-3.1-0.5-6-1.3-8.9-0.1-0.6-0.7-0.9-1.3-0.7l-9.8 3.2c-0.6 0.2-0.8 0.7-0.7 1.2z"/><path d="m14.228 67.009c0.1-3.2 0.7-6.3 1.7-9.2 0.2-0.5-0.1-1.1-0.6-1.3l-0.3-0.1c-0.5-0.2-1.1 0.1-1.3 0.7-0.8 3.2-1.3 6.5-1.3 9.9z"/></svg> diff --git a/icons/size_2.svg b/icons/size_2.svg new file mode 100644 index 0000000..6772a5f --- /dev/null +++ b/icons/size_2.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 98.851 99.618" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="98.851" height="99.618" ry="1.795" fill="#6afffe"/><path d="m8.016 8.1944v83.701h83.701v-83.701zm60.683 60.683h-14.648v-14.648h14.648zm0 4.185v14.648h-14.648v-14.648zm4.185 0h14.648v14.648h-14.648zm0-4.185v-14.648h14.648v14.648zm0-23.018v-14.648h14.648v14.648zm-4.185 0h-14.648v-14.648h14.648zm-23.018 0h-14.648v-14.648h14.648zm0 8.3701v14.648h-14.648v-14.648zm0 18.833v14.648h-14.648v-14.648zm41.85-46.035h-14.648v-14.648h14.648zm-18.833-14.648v14.648h-14.648v-14.648zm-23.018 14.648h-14.648v-14.648h14.648zm-33.48-14.648h14.648v14.648h-14.648zm0 18.833h14.648v14.648h-14.648zm0 23.018h14.648v14.648h-14.648zm0 18.833h14.648v14.648h-14.648z" stroke-width="2.0925"/></svg> diff --git a/icons/size_3.svg b/icons/size_3.svg new file mode 100644 index 0000000..727e31a --- /dev/null +++ b/icons/size_3.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 98.851 99.618" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="98.851" height="99.618" ry="1.795" fill="#6afffe"/><path d="m65.824 4.0024h-62v90h90v-90zm9 79v-8h8v8zm8 2v7h-8v-7zm-38-2v-8h8v8zm8 2v7h-8v-7zm-38-2v-8h8v8zm8 2v7h-8v-7zm0-70v8h-8v-8zm-8-2v-7h8v7zm38 2v8h-8v-8zm-8-2v-7h8v7zm0 30v-7h8v7zm8 2v8h-8v-8zm-10-2h-7v-7h7zm0 2v8h-7v-8zm0 10v7h-7v-7zm2 0h8v7h-8zm10 0h7v7h-7zm0-2v-8h7v8zm0-10v-7h7v7zm0-11v-7h7v7zm-2 0h-8v-7h8zm-10 0h-7v-7h7zm-11 0h-7v-7h7zm0 4v7h-7v-7zm0 9v8h-7v-8zm0 10v7h-7v-7zm0 11v7h-7v-7zm4 0h7v7h-7zm9 0h8v7h-8zm10 0h7v7h-7zm11 0h7v7h-7zm0-4v-7h7v7zm0-9v-8h7v8zm0-10v-7h7v7zm0-11v-7h7v7zm0-9v-8h7v8zm-4 0h-7v-8h7zm-19 0h-7v-8h7zm-11 0h-7v-8h7zm-9 2v7h-8v-7zm0 11v7h-8v-7zm0 9v8h-8v-8zm0 10v7h-8v-7zm0 11v7h-8v-7zm2 9h7v8h-7zm11 0h7v8h-7zm19 0h7v8h-7zm11 0h7v8h-7zm9-2v-7h8v7zm0-11v-7h8v7zm0-9v-8h8v8zm0-10v-7h8v7zm0-11v-7h8v7zm0-9v-8h8v8zm0-10v-7h8v7zm-2-7v7h-7v-7zm-11 7h-7v-7h7zm-19-7v7h-7v-7zm-11 7h-7v-7h7zm-26-7h7v7h-7zm0 9h7v8h-7zm0 10h7v7h-7zm0 11h7v7h-7zm0 9h7v8h-7zm0 10h7v7h-7zm0 11h7v7h-7zm0 9h7v8h-7zm0 10h7v7h-7zm19 7v-7h7v7zm11-7h7v7h-7zm19 7v-7h7v7zm11-7h7v7h-7zm26 7h-7v-7h7zm0-9h-7v-8h7zm0-10h-7v-7h7zm0-11h-7v-7h7zm0-9h-7v-8h7zm0-10h-7v-7h7zm0-11h-7v-7h7zm0-9h-7v-8h7zm-7-10v-7h7v7z"/></svg> diff --git a/icons/skin_default.svg b/icons/skin_default.svg new file mode 100644 index 0000000..76c40c2 --- /dev/null +++ b/icons/skin_default.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 98.851 99.618" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="98.851" height="99.618" ry="1.795" fill="#f3ff6a"/><path class="st0" d="m56.096 53.176 26.479-4.2576c2.3483-0.37629 4.5851 1.2404 4.9614 3.5887l3.8395 23.859c0.37628 2.3483-1.2404 4.5851-3.5887 4.9614l-26.479 4.2576c-2.3483 0.37629-4.5851-1.2404-4.9614-3.5887l-3.8395-23.859c-0.37629-2.3483 1.2404-4.5851 3.5887-4.9614zm13.567 11.198-5.1217-0.05575c0.1533-1.6515 0.73864-2.9964 1.7769-4.0416 1.0313-1.0383 2.627-1.7421 4.7733-2.0975 2.4737-0.41113 4.3273-0.25086 5.5886 0.48778 1.2543 0.73864 1.9999 1.8048 2.2298 3.1984 0.13937 0.81529 0.03484 1.5957-0.29964 2.3344-0.33448 0.73864-0.90588 1.4285-1.7281 2.0765 0.75954 0.05575 1.3588 0.17421 1.7839 0.35538 0.69683 0.2857 1.2682 0.71076 1.7212 1.2891 0.45294 0.57837 0.75954 1.3031 0.90588 2.1811 0.18118 1.101 0.07665 2.2089-0.33448 3.3239-0.41113 1.108-1.108 2.0278-2.1044 2.7525-0.99646 0.7247-2.3762 1.2404-4.1461 1.533-1.7212 0.2857-3.1148 0.31357-4.174 0.06968-1.0661-0.23692-1.979-0.69683-2.7525-1.3658-0.76651-0.67592-1.4285-1.5748-1.972-2.7037l5.1496-1.5818c0.38326 1.0313 0.82923 1.7142 1.3309 2.0556 0.50172 0.34145 1.0871 0.45294 1.763 0.34145 0.7038-0.11846 1.2473-0.47384 1.6306-1.0731 0.38326-0.5923 0.50172-1.324 0.35538-2.188-0.14633-0.878-0.48778-1.5191-1.0174-1.9302-0.52959-0.40416-1.1846-0.54353-1.9581-0.4181-0.41113 0.06968-0.96162 0.26479-1.6445 0.5923l-0.35538-3.8117c0.29267-7e-3 0.52262-0.0209 0.68289-0.04878 0.68289-0.11149 1.2125-0.43203 1.5957-0.94072 0.38326-0.51565 0.52262-1.0661 0.42506-1.6654-0.09756-0.57837-0.34841-1.0104-0.73864-1.2891-0.40416-0.2857-0.89891-0.38326-1.4982-0.27873-0.62018 0.10452-1.0871 0.36932-1.4146 0.80832-0.32054 0.439-0.47384 1.1358-0.45294 2.0905zm-20.117-45.663 3.2193 19.316-5.3307 0.89194-2.1044-12.633c-0.75258 0.80135-1.4982 1.4633-2.2438 1.9999-0.73864 0.53656-1.6933 1.094-2.8431 1.6654l-0.71773-4.2994c1.7003-0.88497 2.9755-1.8118 3.8326-2.7943 0.8571-0.98253 1.4703-2.1184 1.8327-3.4145zm-31.357 31.748 25.727 7.5815c2.2856 0.67592 3.6026 3.0939 2.9267 5.3795l-6.8289 23.177c-0.67592 2.2856-3.0939 3.6026-5.3795 2.9267l-25.72-7.5745c-2.2856-0.67592-3.6026-3.0939-2.9267-5.3795l6.8289-23.177c0.66896-2.2856 3.087-3.6026 5.3725-2.9336zm18.612 20.229-3.526-0.50172c-0.19511 0.22298-0.41113 0.439-0.64805 0.64108-0.89194 0.76651-2.3135 1.4842-4.2646 2.1462-1.1567 0.37629-1.9302 0.65502-2.3344 0.82226-0.40416 0.17421-0.88497 0.40416-1.4494 0.7038l7.4421 2.202-1.1498 3.8744-14.292-4.2228c0.57837-1.3588 1.4703-2.5434 2.6689-3.5329 1.1985-0.99646 3.1845-2.0069 5.9718-3.0242 0.52959-0.19511 0.99646-0.37629 1.4146-0.55049 0.93375-0.39022 1.5888-0.7247 1.972-1.0174 0.5505-0.42507 0.89891-0.878 1.0383-1.3588 0.1533-0.52262 0.09756-1.0243-0.18118-1.5121-0.27873-0.48778-0.71076-0.81529-1.2961-0.9895-0.60624-0.18118-1.1637-0.1324-1.6585 0.1324-0.50172 0.27176-0.96162 0.87104-1.3797 1.8048l-4.6478-1.7978c0.58534-1.2891 1.2404-2.2299 1.9581-2.8361 0.7247-0.60624 1.5957-0.97556 2.6201-1.108 1.0313-0.1324 2.3413 0.03484 3.951 0.51565 1.6724 0.49475 2.9197 1.0731 3.742 1.7281 0.81529 0.65502 1.3797 1.4564 1.6724 2.4041 0.29964 0.95466 0.3066 1.9163 0.01394 2.8988-0.22995 0.76651-0.61321 1.4564-1.1567 2.0835zm-5.5677-55.614 26.479-4.2576c2.3483-0.37629 4.5851 1.2404 4.9614 3.5887l3.8395 23.859c0.37629 2.3483-1.2404 4.5851-3.5887 4.9614l-26.479 4.2576c-2.3483 0.37629-4.5851-1.2404-4.9614-3.5887l-3.8395-23.859c-0.37629-2.3483 1.2404-4.5851 3.5887-4.9614z" clip-rule="evenodd" fill-rule="evenodd" stroke-width=".69683"/></svg> diff --git a/icons/skins/default/1.svg b/icons/skins/default/1.svg new file mode 100644 index 0000000..4ae157f --- /dev/null +++ b/icons/skins/default/1.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 98.851 99.618" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="98.851" height="99.618" ry="1.795" fill="#e5e5e5"/> + <g stroke-width="2.8975" aria-label="1"><path d="m28.274 82.939h18.675v-64.458l-20.316 4.0746v-10.413l20.203-4.0746h11.432v74.871h18.675v9.6206h-48.669z"/></g> +</svg> diff --git a/icons/skins/default/2.svg b/icons/skins/default/2.svg new file mode 100644 index 0000000..ebfcf15 --- /dev/null +++ b/icons/skins/default/2.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 98.851 99.618" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="98.851" height="99.618" ry="1.795" fill="#e5e5e5"/><text x="13.899673" y="92.559296" fill="#000000" font-family="sans-serif" font-size="115.9px" letter-spacing="0px" stroke-width="2.8975" word-spacing="0px" style="line-height:1.25" xml:space="preserve"><tspan x="13.899673" y="92.559296" stroke-width="2.8975">2</tspan></text></svg> diff --git a/icons/skins/default/3.svg b/icons/skins/default/3.svg new file mode 100644 index 0000000..784ea45 --- /dev/null +++ b/icons/skins/default/3.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 98.851 99.618" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="98.851" height="99.618" ry="1.795" fill="#e5e5e5"/><text x="13.899673" y="92.559296" fill="#000000" font-family="sans-serif" font-size="115.9px" letter-spacing="0px" stroke-width="2.8975" word-spacing="0px" style="line-height:1.25" xml:space="preserve"><tspan x="13.899673" y="92.559296" stroke-width="2.8975">3</tspan></text></svg> diff --git a/icons/skins/default/4.svg b/icons/skins/default/4.svg new file mode 100644 index 0000000..7f95225 --- /dev/null +++ b/icons/skins/default/4.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 98.851 99.618" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="98.851" height="99.618" ry="1.795" fill="#e5e5e5"/><text x="13.899673" y="92.559296" fill="#000000" font-family="sans-serif" font-size="115.9px" letter-spacing="0px" stroke-width="2.8975" word-spacing="0px" style="line-height:1.25" xml:space="preserve"><tspan x="13.899673" y="92.559296" stroke-width="2.8975">4</tspan></text></svg> diff --git a/icons/skins/default/5.svg b/icons/skins/default/5.svg new file mode 100644 index 0000000..59aa9bf --- /dev/null +++ b/icons/skins/default/5.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 98.851 99.618" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="98.851" height="99.618" ry="1.795" fill="#e5e5e5"/><text x="13.899673" y="92.559296" fill="#000000" font-family="sans-serif" font-size="115.9px" letter-spacing="0px" stroke-width="2.8975" word-spacing="0px" style="line-height:1.25" xml:space="preserve"><tspan x="13.899673" y="92.559296" stroke-width="2.8975">5</tspan></text></svg> diff --git a/icons/skins/default/6.svg b/icons/skins/default/6.svg new file mode 100644 index 0000000..1251bc3 --- /dev/null +++ b/icons/skins/default/6.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 98.851 99.618" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="98.851" height="99.618" ry="1.795" fill="#e5e5e5"/><text x="13.899673" y="92.559296" fill="#000000" font-family="sans-serif" font-size="115.9px" letter-spacing="0px" stroke-width="2.8975" word-spacing="0px" style="line-height:1.25" xml:space="preserve"><tspan x="13.899673" y="92.559296" stroke-width="2.8975">6</tspan></text></svg> diff --git a/icons/skins/default/7.svg b/icons/skins/default/7.svg new file mode 100644 index 0000000..8ed4b06 --- /dev/null +++ b/icons/skins/default/7.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 98.851 99.618" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="98.851" height="99.618" ry="1.795" fill="#e5e5e5"/><text x="13.899673" y="92.559296" fill="#000000" font-family="sans-serif" font-size="115.9px" letter-spacing="0px" stroke-width="2.8975" word-spacing="0px" style="line-height:1.25" xml:space="preserve"><tspan x="13.899673" y="92.559296" stroke-width="2.8975">7</tspan></text></svg> diff --git a/icons/skins/default/8.svg b/icons/skins/default/8.svg new file mode 100644 index 0000000..b563d75 --- /dev/null +++ b/icons/skins/default/8.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 98.851 99.618" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="98.851" height="99.618" ry="1.795" fill="#e5e5e5"/><g stroke-width="2.8975" aria-label="8"><path d="m50.741 52.436q-8.1492 0-12.846 4.3576-4.6405 4.3576-4.6405 11.997 0 7.6399 4.6405 11.997 4.6971 4.3576 12.846 4.3576t12.846-4.3576q4.6971-4.4142 4.6971-11.997 0-7.6399-4.6971-11.997-4.6405-4.3576-12.846-4.3576zm-11.432-4.8669q-7.3569-1.8109-11.488-6.8476-4.0746-5.0367-4.0746-12.28 0-10.13 7.1872-16.015 7.2438-5.8855 19.807-5.8855 12.62 0 19.807 5.8855 7.1872 5.8855 7.1872 16.015 0 7.2438-4.1312 12.28-4.0746 5.0367-11.375 6.8476 8.2624 1.9241 12.846 7.5267 4.6405 5.6026 4.6405 13.695 0 12.28-7.5267 18.845-7.4701 6.5646-21.448 6.5646t-21.505-6.5646q-7.4701-6.5646-7.4701-18.845 0-8.0926 4.6405-13.695 4.6405-5.6026 12.903-7.5267zm-4.1878-18.053q0 6.5646 4.0746 10.243 4.1312 3.6785 11.545 3.6785 7.3569 0 11.488-3.6785 4.1878-3.6785 4.1878-10.243 0-6.5646-4.1878-10.243-4.1312-3.6785-11.488-3.6785-7.4135 0-11.545 3.6785-4.0746 3.6785-4.0746 10.243z"/></g></svg> diff --git a/icons/skins/default/9.svg b/icons/skins/default/9.svg new file mode 100644 index 0000000..974bae0 --- /dev/null +++ b/icons/skins/default/9.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 98.851 99.618" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="98.851" height="99.618" ry="1.795" fill="#e5e5e5"/><g stroke-width="2.8975" aria-label="9"><path d="m26.633 90.805v-10.413q4.301 2.0373 8.7151 3.1125t8.6585 1.0752q11.318 0 17.26-7.5833 5.9987-7.6399 6.8476-23.146-3.2823 4.8669-8.319 7.4701t-11.149 2.6032q-12.677 0-20.09-7.6399-7.3569-7.6965-7.3569-20.996 0-13.016 7.6965-20.882 7.6965-7.8663 20.486-7.8663 14.657 0 22.354 11.262 7.7531 11.205 7.7531 32.597 0 19.977-9.5074 31.918-9.4508 11.884-25.466 11.884-4.301 0-8.7151-0.84888t-9.1679-2.5466zm22.75-35.823q7.6965 0 12.167-5.263 4.5273-5.263 4.5273-14.431 0-9.1113-4.5273-14.374-4.4708-5.3196-12.167-5.3196-7.6965 0-12.224 5.3196-4.4708 5.263-4.4708 14.374 0 9.1679 4.4708 14.431 4.5273 5.263 12.224 5.263z"/></g></svg> diff --git a/icons/skins/empty.svg b/icons/skins/empty.svg new file mode 100644 index 0000000..5cb26d7 --- /dev/null +++ b/icons/skins/empty.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 98.851 99.618" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="98.851" height="99.618" ry="1.795" fill="#e5e5e5"/></svg> diff --git a/lib/entities/cell.dart b/lib/entities/cell.dart new file mode 100644 index 0000000..f5ae942 --- /dev/null +++ b/lib/entities/cell.dart @@ -0,0 +1,95 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +import '../provider/data.dart'; + +class Cell { + int value; + final int col; + final int row; + + Cell( + @required this.value, + @required this.col, + @required this.row, + ); + + Container widget(Data myProvider) { + String imageAsset = 'assets/skins/empty.png'; + if (this.value > 0) { + imageAsset = 'assets/skins/' + myProvider.skin + '_' + this.value.toString() + '.png'; + } + + int size = myProvider.size; + + double borderWidth = 3; + Color borderDarkColor = Colors.black; + Color borderLightColor = Colors.grey; + Color borderSelectedColor = Colors.red; + + Border borders = Border( + top: BorderSide(width: borderWidth, color: ((this.row % size) == 0) ? borderDarkColor : borderLightColor), + left: BorderSide(width: borderWidth, color: ((this.col % size) == 0) ? borderDarkColor : borderLightColor), + right: BorderSide(width: borderWidth, color: (((this.col + 1) % size) == 0) ? borderDarkColor : borderLightColor), + bottom: BorderSide(width: borderWidth, color: (((this.row + 1) % size) == 0) ? borderDarkColor : borderLightColor), + ); + + if (this.col == myProvider.currentCellCol && this.row == myProvider.currentCellRow) { + borders = Border.all( + color: borderSelectedColor, + width: borderWidth, + ); + } + + return Container( + decoration: BoxDecoration( + color: Colors.white, + border: borders, + ), + child: GestureDetector( + child: Image( + image: AssetImage(imageAsset), + fit: BoxFit.fill + ), + onTap: () { + if (this.col != null && this.row != null) { + if (this.col != myProvider.currentCellCol || this.row != myProvider.currentCellRow) { + myProvider.selectCell(this.col, this.row); + } else { + myProvider.selectCell(null, null); + } + } + }, + ) + ); + } + + Container widgetUpdateValue(Data myProvider) { + String imageAsset = 'assets/skins/empty.png'; + if (this.value > 0) { + imageAsset = 'assets/skins/' + myProvider.skin + '_' + this.value.toString() + '.png'; + } + + return Container( + decoration: BoxDecoration( + color: Colors.white, + border: Border.all( + color: Colors.black, + width: 2, + ), + ), + child: GestureDetector( + child: Image( + image: AssetImage(imageAsset), + fit: BoxFit.fill + ), + onTap: () { + if (this.col != null && this.row != null) { + myProvider.updateCellValue(this.col, this.row, this.value); + } + myProvider.selectCell(null, null); + }, + ) + ); + } +} diff --git a/lib/provider/data.dart b/lib/provider/data.dart index 4cc589c..da43d26 100644 --- a/lib/provider/data.dart +++ b/lib/provider/data.dart @@ -2,26 +2,109 @@ import 'package:flutter/foundation.dart'; class Data extends ChangeNotifier { - // randomization - bool _searchingImage = false; - String _image = ''; + // Configuration available values + List _availableDifficultyLevels = ['easy', 'medium', 'hard']; + List _availableSizes = [2, 3]; + List _availableSkins = ['default']; - bool get searchingImage => _searchingImage; + List get availableDifficultyLevels => _availableDifficultyLevels; + List get availableSizes => _availableSizes; + List get availableSkins => _availableSkins; - set searchingImage(bool value) { - _searchingImage = value; + // Application default configuration + String _level = 'medium'; + int _size = 3; + String _skin = 'default'; + + // Game data + bool _stateRunning = false; + List _cells = []; + int _currentCellCol = null; + int _currentCellRow = null; + + String get level => _level; + set updateLevel(String level) { + _level = level; notifyListeners(); } - String get image => _image; + int get size => _size; + set updateSize(int size) { + _size = size; + notifyListeners(); + } + + String get skin => _skin; + set updateSkin(String skin) { + _skin = skin; + notifyListeners(); + } + + getParameterValue(String parameterCode) { + switch(parameterCode) { + case 'difficulty': { return _level; } + break; + case 'size': { return _size; } + break; + case 'skin': { return _skin; } + break; + } + } + + List getParameterAvailableValues(String parameterCode) { + switch(parameterCode) { + case 'difficulty': { return _availableDifficultyLevels; } + break; + case 'size': { return _availableSizes; } + break; + case 'skin': { return _availableSkins; } + break; + } + } + + setParameterValue(String parameterCode, var parameterValue) { + switch(parameterCode) { + case 'difficulty': { updateLevel = parameterValue; } + break; + case 'size': { updateSize = parameterValue; } + break; + case 'skin': { updateSkin = parameterValue; } + break; + } + } + + List get cells => _cells; + set updateCells(List cells) { + _cells = cells; + notifyListeners(); + } + + int get currentCellCol => _currentCellCol; + set updateCurrentCellCol(int currentCellCol) { + _currentCellCol = currentCellCol; + notifyListeners(); + } + + int get currentCellRow => _currentCellRow; + set updateCurrentCellRow(int currentCellRow) { + _currentCellRow = currentCellRow; + notifyListeners(); + } + + selectCell(int col, int row) { + _currentCellCol = col; + _currentCellRow = row; + notifyListeners(); + } - set updateImage(String value) { - _image = value; + updateCellValue(int col, int row, int value) { + _cells[row][col].value = value; notifyListeners(); } - void resetGame() { - _image = ''; + bool get stateRunning => _stateRunning; + set updateStateRunning(bool stateRunning) { + _stateRunning = stateRunning; notifyListeners(); } } diff --git a/lib/screens/home.dart b/lib/screens/home.dart index de5b013..62d2155 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -1,57 +1,235 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import '../entities/cell.dart'; import '../provider/data.dart'; class Home extends StatelessWidget { static const String id = 'home'; - @override - Widget build(BuildContext context) { - Data _myProvider = Provider.of<Data>(context); + static const double _parameterButtonSize = 70; + static const double _startButtonSize = 150; - return Scaffold( - appBar: AppBar( - title: Text('Sudoku'), + Future<void> resetGame(Data myProvider) async { + myProvider.updateStateRunning = false; + } + + Future<void> startGame(Data myProvider) async { + myProvider.updateStateRunning = true; + myProvider.updateCells = createEmptyBoard(myProvider.size); + } + + List createEmptyBoard(int size) { + int index = 0; + List cells = []; + for (var rowIndex = 0; rowIndex < (size * size); rowIndex++) { + List row = []; + for (var colIndex = 0; colIndex < (size * size); colIndex++) { + row.add( + Cell( + (index++ % ((size * size) + 1)), // for debug purpose only :') + colIndex, + rowIndex + ) + ); + } + cells.add(row); + } + + return cells; + } + + Container _buildParametersSelector(Data myProvider) { + return Container( + child: Column( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + _buildParameterSelector(myProvider, 'difficulty'), + _buildParameterSelector(myProvider, 'size'), + _buildParameterSelector(myProvider, 'skin'), + + _buildStartGameButton(myProvider), + ], ), - body: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: <Widget>[ - Container( - child: Column( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Container( - margin: EdgeInsets.all(4), - padding: EdgeInsets.all(4), - decoration: BoxDecoration( - color: Colors.blue, - borderRadius: BorderRadius.circular(4), - border: Border.all( - color: Colors.green, - width: 4, - ), - ), - child: FlatButton( - child: Text( - '🎲', - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 50, - fontWeight: FontWeight.w600, - color: Colors.black, - ), - ), - ), + ); + } + + Column _buildStartGameButton(Data myProvider) { + return Column( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + FlatButton( + child: Image( + image: AssetImage('assets/icons/button_start.png'), + width: _startButtonSize, + height: _startButtonSize, + fit: BoxFit.fill + ), + onPressed: () => startGame(myProvider), + ) + ], + ); + } + + Column _buildParameterSelector(Data myProvider, String parameterCode) { + List availableValues = myProvider.getParameterAvailableValues(parameterCode); + + return Column( + children: [ + Table( + defaultColumnWidth: IntrinsicColumnWidth(), + children: [ + TableRow( + children: [ + for (var index = 0; index < availableValues.length; index++) + Column( + children: [ + _buildParameterButton(myProvider, parameterCode, availableValues[index]) + ] ), - ], - ), + ], ), ], ), + SizedBox(height: 20), + ] + ); + } + + FlatButton _buildParameterButton(Data myProvider, String parameterCode, var parameterValue) { + String currentValue = myProvider.getParameterValue(parameterCode).toString(); + + bool isActive = (parameterValue.toString() == currentValue); + String imageAsset = 'assets/icons/' + parameterCode + '_' + parameterValue.toString() + '.png'; + + return FlatButton( + child: Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + border: Border.all( + color: isActive ? Colors.blue : Colors.white, + width: 10, + ), + ), + child: Image( + image: AssetImage(imageAsset), + width: _parameterButtonSize, + height: _parameterButtonSize, + fit: BoxFit.fill + ), + ), + onPressed: () => myProvider.setParameterValue(parameterCode, parameterValue), + ); + } + + Container _buildGameWidget(Data myProvider) { + return Container( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _buildGameBoard(myProvider), + SizedBox(height: 2), + _buildSelectCellValueBar(myProvider) + ], + ), + ); + } + + Container _buildGameBoard(Data myProvider) { + List cells = myProvider.cells; + int size = myProvider.size; + + Color borderColor = _checkBoardIsSolved(cells) ? Colors.green : Colors.orange; + + return Container( + margin: EdgeInsets.all(2), + padding: EdgeInsets.all(2), + decoration: BoxDecoration( + color: borderColor, + borderRadius: BorderRadius.circular(2), + border: Border.all( + color: borderColor, + width: 2, + ), + ), + + child: Table( + defaultColumnWidth: IntrinsicColumnWidth(), + children: [ + for (var row = 0; row < (size * size); row++) + TableRow(children: [ + for (var col = 0; col < (size * size); col++) + Column(children: [ + cells[row][col].widget(myProvider) + ]), + ]), + ] + ), + ); + } + + Container _buildSelectCellValueBar(Data myProvider) { + List cells = myProvider.cells; + int size = myProvider.size; + + Color borderColor = Colors.blue; + + bool isCellSelected = (myProvider.currentCellCol != null && myProvider.currentCellRow != null); + + return Container( + margin: EdgeInsets.all(2), + padding: EdgeInsets.all(2), + + child: Table( + defaultColumnWidth: IntrinsicColumnWidth(), + children: [ + TableRow( + children: [ + for (var value = 0; value < ((size * size) + 1); value++) + Column( + children: [ + Cell( + isCellSelected ? value : 0, + isCellSelected ? myProvider.currentCellCol : null, + isCellSelected ? myProvider.currentCellRow : null + ).widgetUpdateValue(myProvider) + ] + ), + ] + ), + ] ), ); } + + bool _checkBoardIsSolved(List cells) { + return false; + } + + @override + Widget build(BuildContext context) { + Data myProvider = Provider.of<Data>(context); + + return Scaffold( + appBar: AppBar( + title: Text('🔢'), + actions: [ + if (myProvider.stateRunning) + FlatButton( + child: Text('◀️'), + onPressed: () => resetGame(myProvider), + ), + ], + ), + body: SafeArea( + child: Center( + child: myProvider.stateRunning ? _buildGameWidget(myProvider) : _buildParametersSelector(myProvider) + ), + ) + ); + } } diff --git a/pubspec.yaml b/pubspec.yaml index dc063f6..bbdc442 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -18,4 +18,5 @@ dev_dependencies: flutter: uses-material-design: true assets: - - assets/files/ + - assets/icons/ + - assets/skins/ -- GitLab