From 3b645b36b76ab914613980b89130a30c9abcc0bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Mon, 4 Apr 2022 21:38:31 +0200 Subject: [PATCH] Check if submitted word is allowed --- android/gradle.properties | 4 +-- ...tionnary.txt => words-5-fr-dictionary.txt} | 0 assets/skins/default_wrong.png | Bin 0 -> 824 bytes icons/build_game_icons.sh | 1 + icons/skins/default/wrong.svg | 2 ++ lib/provider/data.dart | 5 ++++ lib/utils/game_utils.dart | 26 +++++++++++++++--- lib/utils/random_pick_word.dart | 8 ++++-- 8 files changed, 38 insertions(+), 8 deletions(-) rename assets/files/{words-5-fr-dictionnary.txt => words-5-fr-dictionary.txt} (100%) create mode 100644 assets/skins/default_wrong.png create mode 100644 icons/skins/default/wrong.svg 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/words-5-fr-dictionnary.txt b/assets/files/words-5-fr-dictionary.txt similarity index 100% rename from assets/files/words-5-fr-dictionnary.txt rename to assets/files/words-5-fr-dictionary.txt diff --git a/assets/skins/default_wrong.png b/assets/skins/default_wrong.png new file mode 100644 index 0000000000000000000000000000000000000000..e62d9e1d12dd0382fa4520a0ffb8736e553aa2b9 GIT binary patch literal 824 zcmeAS@N?(olHy`uVBq!ia0y~yU^oE691IK$4CUL6Z!<73a29w(7Beu&M1U~k*%{Bz zFfcGkmbgZg1m~xflqVLYGL)B>>t*I;7bhncr0V4trO$q6BgMeLbkx(uF{I+w+d1Av zcN}<}UurEYI+#;@b&k?<&!dUc9v3}ZJnhC^2BzE{vjh{mC2YLsZGV5THf2xk!GNIj zxG%en_SIQeYPEcP9L~1!&x(#cOXLr@Zu|SgeCLUo;pc09I<rOj-F&BH{x0wIY?ZJt zJ@L+*^XFVo-typBK#$lDkG!AyJR%1@@_zdBh@AAu`^nEEa?vC2=Xah3qW=y`xV|{S zyx30C;pGYSWRcAu<og2mtg;bV93fk2;dasLQ$o+7wkI1U)+YVBQ+36yyG&*KpN=Qf z_UpRs?(F$7eZmv%g4>LjL<Kqn|J=JDqUw<RWs=1d`<%c{XL?WUP<ZCpBeaRfZ|Vhw zO_S3kRvoz_arfOxmoz2gi8D|5r2GwaYChp{CPl#MOpDe+$CPNBwJU{!T&}(1T<w)1 zaC3$FA}vMN6!VK}M#4A$`=+ES9ac0tXVQB@{g7z~&)r}){nI`xgo0eQow(cw(r%lk zu)0NL;@)pA(W)jLIzB0CM)#FLHcboV<W)Lse0dwQl*_h*mmh%?uT7gYBh_M63)@6n z!^g*SL5hWEcCG<gEO~poQP2AZwuy{0U#<h0e`IoJ&i1V-Ei?L?mx3H->(As8re-8O zv-6Bgn`6qH@3SWTcz0>3>;(lQ7XRYaEo>9d+8(?Ha(lY1>c_jP$3V<~(@P*4oKuc; z&$({T%h|#6qx#djcMT#F-+tV(1Z1#^KS!uj*NHY;Rm0OC!a2d}L4g%3Q(Dfxq=V;P zu+V0o|9lw&H<OIDS07m-arf7bUbcy`pITy7mvp>Yr*5B@tYkbfP*}3AXWtZmpOpE@ zQ*wm=86Nny<jzgmhROFgFjqf4zfy?%ss3uA%}?@I3eEi#xavse&jX>4X4Fj6DtsdJ zXv%qqly;sAr`**yIkVlXcl#Z<@x>2e$**!}j>or`#C-An`V^Ee7(8A5T-G@yGywqp C&vr-v literal 0 HcmV?d00001 diff --git a/icons/build_game_icons.sh b/icons/build_game_icons.sh index 2fddd00..2c7d70c 100755 --- a/icons/build_game_icons.sh +++ b/icons/build_game_icons.sh @@ -51,6 +51,7 @@ function build_icon_for_skin() { build_icon ${CURRENT_DIR}/skins/${SKIN_CODE}/empty.svg ${BASE_DIR}/assets/skins/${SKIN_CODE}_empty.png build_icon ${CURRENT_DIR}/skins/${SKIN_CODE}/good.svg ${BASE_DIR}/assets/skins/${SKIN_CODE}_good.png build_icon ${CURRENT_DIR}/skins/${SKIN_CODE}/misplaced.svg ${BASE_DIR}/assets/skins/${SKIN_CODE}_misplaced.png + build_icon ${CURRENT_DIR}/skins/${SKIN_CODE}/wrong.svg ${BASE_DIR}/assets/skins/${SKIN_CODE}_wrong.png } # Game icons diff --git a/icons/skins/default/wrong.svg b/icons/skins/default/wrong.svg new file mode 100644 index 0000000..9c89cb2 --- /dev/null +++ b/icons/skins/default/wrong.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"><defs><linearGradient id="linearGradient1569" x1="26.688" x2="77.95" y1=".40612" y2="99.665" gradientUnits="userSpaceOnUse"><stop stop-color="#b9b9b9" offset="0"/><stop stop-color="#767676" offset="1"/></linearGradient></defs><rect width="100" height="100" ry="2" fill="none"/><rect width="100" height="100" fill="url(#linearGradient1569)" stroke="#5d5d5d" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> diff --git a/lib/provider/data.dart b/lib/provider/data.dart index 6b3bfe9..7d87dc8 100644 --- a/lib/provider/data.dart +++ b/lib/provider/data.dart @@ -84,6 +84,11 @@ class Data extends ChangeNotifier { notifyListeners(); } } + void currentGuessSubmitWrongWord() { + print('Adding unknown word'); + addGuess(_currentGuess); + notifyListeners(); + } void addGuess(String word) { print('addGuess('+word+')'); _guesses.add(word); diff --git a/lib/utils/game_utils.dart b/lib/utils/game_utils.dart index fbbb9ae..5fb4c00 100644 --- a/lib/utils/game_utils.dart +++ b/lib/utils/game_utils.dart @@ -61,8 +61,12 @@ class GameUtils { List<String> tips = List<String>.filled(wordLength, '', growable: false); - if ((word.length != wordLength) || (candidate.length != wordLength)) { - return tips; + if ( + (word.length != wordLength) + || (candidate.length != wordLength) + || (!RandomPickWord.checkWordExists(candidate)) + ) { + return List<String>.filled(wordLength, 'wrong', growable: false); } String replaceCharAt(String oldString, int index, String newChar) { @@ -102,11 +106,25 @@ class GameUtils { static bool submitWord(Data myProvider) { print('submitWord'); - // TODO: check this word is allowed - myProvider.currentGuessSubmitWord(); + + if (GameUtils.checkCurrentlyGuessedWordExists(myProvider)) { + print('Ok word allowed'); + myProvider.currentGuessSubmitWord(); + } else { + print('Unknown word'); + myProvider.currentGuessSubmitWrongWord(); + } + return true; } + static bool checkCurrentlyGuessedWordExists(Data myProvider) { + String guessedWord = myProvider.currentGuess; + print('Checking word "' + guessedWord + '"...'); + + return RandomPickWord.checkWordExists(guessedWord); + } + static bool isGameFinished(Data myProvider) { print('isGameFinished'); diff --git a/lib/utils/random_pick_word.dart b/lib/utils/random_pick_word.dart index 8b24c5a..56bcdb8 100644 --- a/lib/utils/random_pick_word.dart +++ b/lib/utils/random_pick_word.dart @@ -30,10 +30,10 @@ class RandomPickWord { String wordBaseFilename = 'words-' + length.toString() + '-' + lang; - // Get full dictionnary (eligible words) + // Get full dictionary (eligible words) print('Reload dictionary'); try { - String wordsFile = wordBaseFilename + '-' + 'dictionnary'; + String wordsFile = wordBaseFilename + '-' + 'dictionary'; var data = await rootBundle.loadString('assets/files/' + wordsFile + '.txt'); LineSplitter.split(data).forEach((line) { if (line.length == length) { @@ -74,4 +74,8 @@ class RandomPickWord { print('Picked word: ' + _word); } + + static bool checkWordExists(String word) { + return dictionary.contains(word); + } } -- GitLab