From edee7a88d609b8795e87906605947cae75ba9037 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Mon, 4 Apr 2022 22:45:51 +0200 Subject: [PATCH] Improve check end game (win/fail) --- android/gradle.properties | 4 ++-- assets/icons/game_fail.png | Bin 0 -> 3621 bytes icons/build_game_icons.sh | 1 + icons/game_fail.svg | 2 ++ lib/layout/game.dart | 17 +++++++++++------ lib/layout/parameters.dart | 2 +- lib/provider/data.dart | 15 +++++++++++++++ lib/screens/home.dart | 2 +- lib/utils/game_utils.dart | 11 ----------- 9 files changed, 33 insertions(+), 21 deletions(-) create mode 100644 assets/icons/game_fail.png create mode 100644 icons/game_fail.svg diff --git a/android/gradle.properties b/android/gradle.properties index 14eed39..aa51064 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.4 -app.versionCode=4 +app.versionName=0.0.5 +app.versionCode=5 diff --git a/assets/icons/game_fail.png b/assets/icons/game_fail.png new file mode 100644 index 0000000000000000000000000000000000000000..155f9118fde35f06a8b84ed7fbf24b66e9d70e99 GIT binary patch literal 3621 zcmeAS@N?(olHy`uVBq!ia0y~yU^oE69Bd2>3_*8t*cliYI14-?iy0W?oEaG8oERJS zYjH3zFi4iTMwA5Sr<If^7Ns(jmzV2h=4BTrCl;jY<rk&TerF@az`(o7)5S5Q;?~=_ z)j1)da>vuJzxlVd@a|O)@8j$j*jYRIw{U&xa*<mbprhDesF)BUXZYgS8fjL+#Z6+1 zwz3Lt6!Bhanj5g|g4RdRDRxG!=k8cvt}IKtb?(NcX<^Is6)daI-!0MM-#YiX?eiM{ zPZ#Z9{yF!(Sg!n>?c&P|7cO*NC+PHV)r7j8i<6Hg1Yd4r^t@HIaN9RuhGSf3`OXTQ zoiu6XNt5U(o<F?Ky1M=BS=rvZw6*-opFH1f^ZNStTXMBiB8-eWY*M)<1_d)p7@Js| zIGcFS<CU(;+_vlVY5&V>V)L?3FT2?t|Ka!VuZ^>29a`saH}TEQo6g5RKK6XPqmaQx zc9!Y$$Nl_eQ>S>;mX@}5aXe18d~{#RqITDn|KD!wF7upxK~Z6y$H|i|X@QbG{Tes- zsLne0|8m30FQ0b){VmI3cVQ97b3U03{1UzYJKcW#U+811{-#^(>*5;@r!^#H_Y}Ok zV(yie-{tee+A63@OWXH~frx~Gq4bg^6XrcW-rFoIdor>0|Dx;F_356SXJ<@lImEQh z?37oUwf)~KWfvdMlneT?()PLi?=!b%OlW9gG7H>vyYk0|-YwhxrC!ha|GtFl;0gX2 z^Etm%eew>y8mW5Oyf2C&_3-ajlS(5ljvqIKmn@s);Cr^-UG!gF<iF|3CxvX@GR8cN z*tKQ<{hWJ$+WW1oySvtCNIaN$?$M)V_iJsWR;<=ubeXk_bw>=>(xnsk{rc5kpZ#V3 zPFwx+txk;dGVgCbUV2wq_%AQ-&l^9O?oGUW*)!hx@bBv!7h=QG92y%q=KTNjnXPJ@ zuEam@yLUI=&A!GGAfv$auJpBD%&S+kKE5vg-_};Uj8iy3MuBCS^?Q|CHfP6xhR?_Q zYP%0HOnk9&%^x)lhxEjStgehswdw&ODROmxEZ60po;E*FL_z4^+uOCT9tS+N=eG)9 zx2Izf!^DEMakfiR{xjZvdhedk??*>9xCCCG-MB`lXyx|ug?T3)S6;Fz*Xv?xX-b=y z7H^)g-TvyA4~I3l1h{5Z&Z^~LP+(wT5MXd+6kuTBU|?WjU|?ckU}R`uU~phyP+(vH z2``9T(!-M!yS>k1Tdwk1R@Nh1^XLDnKQ5gwaQoL+mwDFHADEx5YrW<)&%FPJSx!K< zNsMuL-M*;9%eH1;o#n*9tE@f$;MCdPx1^*y@4x@=Tw^Ak`R{{s(z!DtW<RE_(Ydsz zet%T=#VbA6uKhe`?K00&m?=Z^$Gc5NkG}tOyV`mEaP=pZjXJSfejldmD(lAA%NFg; zSbKNrQkQv#%uGjeZ(V!c`FZX3j`d4bzx3_tde+R|Iq~uQCZlCbCOmU)R|?age|@#y z%#3)428pCuR#PkX|I$j5wVV{z+<2n+S%G-nuJ@VN#cEonpTok1FHg}FP*9V;^YXH1 zc5Q8lmC=rCq1TR-)SkH<wf}5hf7aQk*RQVZYh<`6^Yij$Pj6q}5Njigy}R!onKbuo z&5yI);==PUOHQ73v9a^qIROPJ71foquSS%l1T;NMTV{UzOaAitiqlL#*Zou#u4a11 zQt<AM<mJAU*rtk>dWl~JOiV660@GFIfBUdcrt9gZ=excJ{qmY;E6wD><?rfx$7=G{ znF{li|9jXxeJY@!wD|uV%fk0QVJa8Aezfn`x%}yIN*YVS-tY6$ST1}j(zthe-s^X) zW$)V<5+}~^xRnwaJa^U6nGV6q|4+OR_EEbuV*&%CQ`|odY0b5ztFEOn>Gu6mzWAzA zQH^E6@#3wwHb%|h++y{q|H!X1#sUgY(*IkRW$Y?`tjWmzaQTJ9MFI*gFDh%-mKWGe zbB>Dt)^lWQxjqX=WCMrX-KVK)38_!`<qY+;niv$hKU{P_Q&OUn##H*GeCLc+oO6#V zI;^N}xVwAit2Y_vSl0CZIj9<tr^mt}`kPzd;QGUhGdLq;eztG4{Vv18vHWr5n=c;c zSl0CYIXpvLuZ2Nz@%7b<SFRA+AXjIVeet`6f`i14?(Uhq4i={sr%kt2)|WgGxuD?x z1ySu8e2yB%jIWjd8%%q8TG8Q#ipqp(!OL$<PncrN$gjNrSKSAH`<3mIiViCOZd_eG zlmAFY8dIEGo!8}4Q!5nJ7Uj22onEZV=>KrJ`PYYYA85pMUdl50q<Ap&v|`*e+gH{M zla3s@s^N2w+hxAy=06c%q&TMp#>@V!{ONOwCoOIR!*?dvzbgY|@;f@Vu<U7>|Bdsl z^c^1Y?#&-gPZ!>Q{j_^Qg+Sy>?$fJ6cSwr}Df|&&AcM&GkRW~jp|~GIXww`SkA@H3 z+6*cVKU&2>W*y>Y;1sBP$lAb?)Gp8Dz_jo%Kchn9g@^47i@X&oekeAa09oh|!6{J3 zp|FO9!=6PTjHyMQspH#Yk?S#sccgIs5@YHR|EHa|wC;`J7ef{S{XgL`akFQ3?rURs z)LQ?9|N2aE-6jSBhdm$I-+$PCv!n7~4F?0`5$^w@LN=c`SOg*&0uRf_@M#L2`25U~ zL6B9z_RqnY2a*&&t%($1cqkshw0Y(U<8&v6miPqDl$j@t(;UD|l}-<STNXxvx<=KE z9F<FdzdM74&&^Z4^yMX3W0P@uN6GuWAolcYZEQ++i}_g`ejHu8bXl9n<z<cxE%6U# zHh2|Wj|HiSX1aW3C5TaB`Q`8TBU7fafsOw0&N|7*x0Qio{{x{VOCUDy`#Viy@?=GZ zL;8C6US%cCu@GcZ_`~EK5PEb8iw}3hhisoFVfBu}Lo6HulcR4>(+SkCdh}?j%ks(6 zoHp+Llic>oF}Vo;`nT%*!v~MMRjb}uC^uVd%YW|1R9<M9>EqMFaIwLza6$X#ipq~E zPi}|zU5|V0#&rDJS^)*A9o}9$q<*gdSF`5~%f4%2NpTw(m|RNk?$42&uKeFrsK7{g z#eKmZd45JER$Yzv51;!oy`E(%z_9rLd;RLVU?#q4&R=%0uyin-W#{KI{PfvE_{8RP z=Y|a)UP-^W*Kh3mv*#>JND_y@IrDwo;#|^oaw;F>?D-fE9o$yAIpDP1y=l&0yuCRD z*w)4FZjt?2Ig`^Tc$q`P1oH#GzjNDu`fMPa@pYA}8H+`U$B&8gzs_`+XD!b3!H(Ib z`bm1FTF21^2i7v2n`>?O$=FUf<Lli-HI@x|cRD^8>ol%k$?4yC$m;+4HS!zZB$it~ z(bR7Tl}9W3lq7!MoWuD>e=iH;p?e(SA_-5@3)MdS>?pZkE1>Y^vB2l&$xqS?)IQXF zWc6!y<2t`FnZrI==tA-v0fi?0!@qCe+VCbZ#d66#fyQtp<r=*gcgqbw85;;+c>G%D zO84IEz`WhQwWm2AUf;%YZTb9TYXvSIGRd9w>v3+xw~S)TCwDe7izmC*+AnCC^lw^j zh<jag<I9Qvv))8+bFuxiZjTMPbWAc5zEfL%Wt#K7$?7|Q+v<FMx+s0VYF)p&)^`TW zxH`${kB=q$Ke)3u`fWo;Ns9OB|I0rtQOT>94xeY-zU9vc=O<~WepMx%J9Fggi;s5t zPgbtrcrEQ+9w|A|^54b}+UsV7uxz*gzh~D${>lv-qB{Rh4e$8)?e<4z$ta=5a~zA` z-q^M|y;IwK`iaeHoPvL{FTC#jx^npy=IpxEZ_;OZJmZVD=iWMUC-jBWU!PYW+-8>P z)iOOgbzXg4?eC7)f4_Go-!{9nrA#+m`cB6guJSvMI^NS)88gd@%=-RDaoyhP&f@EO zN%bFHlTMygT;@4>$FDPY{s-BBYkQPN0Fwg)1ET^%1A_pA1A_=Fq)ouYY4GHuP3F}X zvhNsNxIxVbq_ziFb(q-BE0;GrxN}rq*qU`!po_`n(AOiv&R*Z-7ckv<RsA*89whYt z*K0e~-{!9~tivNR90MCXO2kBGmL6WaeA6ds5!Q~DNk7*&GkuZd`RyaK=LOG!3<KXe z9>1ieJ~cDNym~k9Y25B_OkK<_2lnROZS9VY<$vk6?cF9L<}PNJ2Y)UuX1jY;_riq< z>b~=Om>AcA+Gqz7D&9*mawz`KIe)r%p+`fymEDg6D^vc8-TfLBUt7Cy%Ct5o#ya=^ zzkV_Ax}Vi0X<jBK`p}y3fNHFJU&NH2`%8ZBy_Rp5UzU>oePKew>c#w)mW_3hb$;fv zmg%(iB{}m{IC}Z2)^6Q8b=O6+T_V4hu6ng5aJ@St<K+uH-^0S^2O9k~zZ-F@;e5G! zdFINchK7QzEIE@VI9Pdm<ut#2D_pv8OLyM)+Ed34W<B{49?Y;`xjsB|<=3R>+k1Bv z+)8kFFFOD6vD>abr$k2W?0@rCtvWWr{om_1oOxVVuFNS&N&B|=fWv8vO`F)5?f*si ze&4vuW4of~ukSni?YDVrYHFBWxU-^u-G&R-@{RVc=uTT4ugsp6ZU6Q8v#O;}QbgpB znEyDH@aOZo*n1AKcN44TxQnk|_9wZscI#I5U3~Ipmc>PE8w1%4Z$HqAEM6C3c%k%3 z$IA8l{xwWG$`ZS0)~Eja1~+c~nvs-HSnhh%|1B%4-uYv_w%=U4J5-gMPXsStby=7p zxizgltt0K^=FH1Kzu8vDJlEE$TN1hZ&G&T8o4+^vW&8eI{BO|&vn%)J8E0&?u~zVm z*1vLXALoIHg*O*UE{Y5?n(DQAsk5_lcg%13lPkiaZ}z=j$iTqB;OXk;vd$@?2>??a Bp?m-U literal 0 HcmV?d00001 diff --git a/icons/build_game_icons.sh b/icons/build_game_icons.sh index 2c7d70c..e6aa241 100755 --- a/icons/build_game_icons.sh +++ b/icons/build_game_icons.sh @@ -58,6 +58,7 @@ function build_icon_for_skin() { build_icon ${CURRENT_DIR}/button_back.svg ${BASE_DIR}/assets/icons/button_back.png build_icon ${CURRENT_DIR}/button_help.svg ${BASE_DIR}/assets/icons/button_help.png build_icon ${CURRENT_DIR}/button_start.svg ${BASE_DIR}/assets/icons/button_start.png +build_icon ${CURRENT_DIR}/game_fail.svg ${BASE_DIR}/assets/icons/game_fail.png build_icon ${CURRENT_DIR}/game_win.svg ${BASE_DIR}/assets/icons/game_win.png build_icon ${CURRENT_DIR}/key.svg ${BASE_DIR}/assets/icons/key.png diff --git a/icons/game_fail.svg b/icons/game_fail.svg new file mode 100644 index 0000000..2922fd7 --- /dev/null +++ b/icons/game_fail.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=".44662" y=".89101" width="92.772" height="91.894" ry="11.689" fill="#d11717" stroke="#fff" stroke-width=".238"/><path d="m71.624 59.304c3.5089 3.5089 3.5089 9.0561 0 12.565-1.6976 1.6976-3.9623 2.6034-6.2261 2.6034s-4.5275-0.90569-6.2261-2.6034l-12.452-12.452-12.452 12.452c-1.6976 1.6976-3.9623 2.6034-6.2261 2.6034s-4.5275-0.90569-6.2261-2.6034c-3.5089-3.5089-3.5089-9.0561 0-12.565l12.452-12.452-12.452-12.452c-3.5089-3.5089-3.5089-9.0561 0-12.565s9.0561-3.5089 12.565 0l12.452 12.452 12.452-12.452c3.5089-3.5089 9.0561-3.5089 12.565 0s3.5089 9.0561 0 12.565l-12.452 12.452z" fill="#e7e7e7" stroke-width=".20213"/></svg> diff --git a/lib/layout/game.dart b/lib/layout/game.dart index d305e99..8f7de82 100644 --- a/lib/layout/game.dart +++ b/lib/layout/game.dart @@ -10,7 +10,7 @@ import '../utils/game_utils.dart'; class Game { static Container buildGameWidget(Data myProvider) { - bool gameIsFinished = GameUtils.isGameFinished(myProvider); + bool gameIsFinished = myProvider.isGameFinished(); return Container( child: Column( @@ -27,8 +27,8 @@ class Game { ); } - static TextButton buildRestartGameButton(Data myProvider) { - return TextButton( + static FlatButton buildRestartGameButton(Data myProvider) { + return FlatButton( child: Container( child: Image( image: AssetImage('assets/icons/button_back.png'), @@ -40,10 +40,15 @@ class Game { } static Container buildEndGameMessage(Data myProvider) { + String decorationImageAssetName = ''; + if (myProvider.gameWon) { + decorationImageAssetName = 'assets/icons/game_win.png'; + } else { + decorationImageAssetName = 'assets/icons/game_fail.png'; + } + Image decorationImage = Image( - image: AssetImage( - 'assets/icons/game_win.png' - ), + image: AssetImage(decorationImageAssetName), fit: BoxFit.fill ); diff --git a/lib/layout/parameters.dart b/lib/layout/parameters.dart index 3a2ae03..a151ad0 100644 --- a/lib/layout/parameters.dart +++ b/lib/layout/parameters.dart @@ -48,7 +48,7 @@ class Parameters { decorationImage, Column( children: [ - TextButton( + FlatButton( child: Container( child: Image( image: AssetImage('assets/icons/button_start.png'), diff --git a/lib/provider/data.dart b/lib/provider/data.dart index 7d87dc8..e692318 100644 --- a/lib/provider/data.dart +++ b/lib/provider/data.dart @@ -26,6 +26,7 @@ class Data extends ChangeNotifier { // Game data bool _gameIsRunning = false; + bool _foundWord = false; String _word = ''; final int _recentWordsCount = 20; List _recentWords = []; @@ -79,6 +80,7 @@ class Data extends ChangeNotifier { print('wrong'); } else { print('ok found'); + _foundWord = true; } addGuess(_currentGuess); notifyListeners(); @@ -95,6 +97,8 @@ class Data extends ChangeNotifier { _currentGuess = ''; } + bool get gameWon => _foundWord; + getParameterValue(String parameterCode) { switch(parameterCode) { case 'lang': { return _lang; } @@ -151,6 +155,16 @@ class Data extends ChangeNotifier { notifyListeners(); } + bool isGameFinished() { + print('isGameFinished'); + + if (_foundWord || (_guesses.length > (_maxGuessesCount - 1))) { + return true; + } + + return false; + } + String get word => _word; void updateWord(String word) { @@ -170,6 +184,7 @@ class Data extends ChangeNotifier { _word = ''; _guesses = []; _currentGuess = ''; + _foundWord = false; notifyListeners(); } diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 03c6cd9..1381d16 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -31,7 +31,7 @@ class _HomeState extends State<Home> { if (myProvider.gameIsRunning) { menuActions = [ - TextButton( + FlatButton( child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(4), diff --git a/lib/utils/game_utils.dart b/lib/utils/game_utils.dart index 5fb4c00..ec5d24a 100644 --- a/lib/utils/game_utils.dart +++ b/lib/utils/game_utils.dart @@ -125,15 +125,4 @@ class GameUtils { return RandomPickWord.checkWordExists(guessedWord); } - static bool isGameFinished(Data myProvider) { - print('isGameFinished'); - - if (myProvider.guesses.length > 0) { - if (myProvider.guesses[myProvider.guesses.length - 1] == myProvider.word) { - return true; - } - } - return false; - } - } -- GitLab