Skip to content
Snippets Groups Projects
Commit 01ec650b authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Improve words list, add dictionary

parent d0cf1e81
No related branches found
No related tags found
1 merge request!5Resolve "Improve words lists"
Pipeline #2566 passed
org.gradle.jvmargs=-Xmx1536M org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
app.versionName=0.0.2 app.versionName=0.0.3
app.versionCode=2 app.versionCode=3
This diff is collapsed.
File moved
...@@ -6,10 +6,12 @@ class Data extends ChangeNotifier { ...@@ -6,10 +6,12 @@ class Data extends ChangeNotifier {
// Configuration available values // Configuration available values
List _availableLangValues = ['fr']; List _availableLangValues = ['fr'];
List _availableWordLengthValues = ['5']; List _availableWordLengthValues = ['5'];
List _availableLevelValues = ['easy', 'normal'];
List _availableSkinValues = ['default']; List _availableSkinValues = ['default'];
List get availableLangValues => _availableLangValues; List get availableLangValues => _availableLangValues;
List get availableWordLengthValues => _availableWordLengthValues; List get availableWordLengthValues => _availableWordLengthValues;
List get availableLevelValues => _availableLevelValues;
List get availableSkinValues => _availableSkinValues; List get availableSkinValues => _availableSkinValues;
// Application default configuration // Application default configuration
...@@ -17,6 +19,8 @@ class Data extends ChangeNotifier { ...@@ -17,6 +19,8 @@ class Data extends ChangeNotifier {
String _langDefault = 'fr'; String _langDefault = 'fr';
String _length = ''; String _length = '';
String _lengthDefault = '5'; String _lengthDefault = '5';
String _level = '';
String _levelDefault = 'normal';
String _skin = ''; String _skin = '';
String _skinDefault = 'default'; String _skinDefault = 'default';
...@@ -41,6 +45,12 @@ class Data extends ChangeNotifier { ...@@ -41,6 +45,12 @@ class Data extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
String get level => _level;
void updateLevel(String level) {
_level = level;
notifyListeners();
}
String get skin => _skin; String get skin => _skin;
void updateSkin(String skin) { void updateSkin(String skin) {
_skin = skin; _skin = skin;
...@@ -86,6 +96,8 @@ class Data extends ChangeNotifier { ...@@ -86,6 +96,8 @@ class Data extends ChangeNotifier {
break; break;
case 'length': { return _length; } case 'length': { return _length; }
break; break;
case 'level': { return _level; }
break;
case 'skin': { return _skin; } case 'skin': { return _skin; }
break; break;
} }
...@@ -97,6 +109,8 @@ class Data extends ChangeNotifier { ...@@ -97,6 +109,8 @@ class Data extends ChangeNotifier {
break; break;
case 'length': { return _availableWordLengthValues; } case 'length': { return _availableWordLengthValues; }
break; break;
case 'level': { return _availableLevelValues; }
break;
case 'skin': { return _availableSkinValues; } case 'skin': { return _availableSkinValues; }
break; break;
} }
...@@ -109,6 +123,8 @@ class Data extends ChangeNotifier { ...@@ -109,6 +123,8 @@ class Data extends ChangeNotifier {
break; break;
case 'length': { updateLength(parameterValue); } case 'length': { updateLength(parameterValue); }
break; break;
case 'level': { updateLevel(parameterValue); }
break;
case 'skin': { updateSkin(parameterValue); } case 'skin': { updateSkin(parameterValue); }
break; break;
} }
...@@ -120,6 +136,7 @@ class Data extends ChangeNotifier { ...@@ -120,6 +136,7 @@ class Data extends ChangeNotifier {
final prefs = await SharedPreferences.getInstance(); final prefs = await SharedPreferences.getInstance();
setParameterValue('lang', prefs.getString('lang') ?? _langDefault); setParameterValue('lang', prefs.getString('lang') ?? _langDefault);
setParameterValue('length', prefs.getString('length') ?? _lengthDefault); setParameterValue('length', prefs.getString('length') ?? _lengthDefault);
setParameterValue('level', prefs.getString('level') ?? _levelDefault);
setParameterValue('skin', prefs.getString('skin') ?? _skinDefault); setParameterValue('skin', prefs.getString('skin') ?? _skinDefault);
} }
......
...@@ -28,7 +28,7 @@ class GameUtils { ...@@ -28,7 +28,7 @@ class GameUtils {
do { do {
randomPickWord = RandomPickWord(); randomPickWord = RandomPickWord();
int wordLength = int.parse(myProvider.length); int wordLength = int.parse(myProvider.length);
await randomPickWord.init(myProvider.lang, wordLength); await randomPickWord.init(myProvider.lang, wordLength, myProvider.level);
if (randomPickWord.word != '') { if (randomPickWord.word != '') {
word = randomPickWord.word; word = randomPickWord.word;
......
...@@ -8,24 +8,46 @@ class RandomPickWord { ...@@ -8,24 +8,46 @@ class RandomPickWord {
static Set<String> wordList = <String>{}; static Set<String> wordList = <String>{};
static Set<String> dictionary = <String>{}; static Set<String> dictionary = <String>{};
static int _length = 5; static int _length = 5;
static String _level = '';
RandomPickWord(); RandomPickWord();
String _word = ''; String _word = '';
String get word => _word; String get word => _word;
init(String lang, int length) async { init(String lang, int length, String level) async {
_length = length; _length = length;
_level = level;
_word = ''; _word = '';
await wordFromLocalFile(lang, length); await wordFromLocalFile(lang, length, level);
} }
Future<void> wordFromLocalFile(String lang, int length) async { Future<void> wordFromLocalFile(String lang, int length, String level) async {
if (length != _length || wordList.isEmpty || dictionary.isEmpty) { if (length != _length || level != _level || wordList.isEmpty || dictionary.isEmpty) {
_length = length; _length = length;
_level = level;
wordList.clear(); wordList.clear();
String wordBaseFilename = 'words-' + length.toString() + '-' + lang;
// Get full dictionnary (eligible words)
print('Reload dictionary');
try {
String wordsFile = wordBaseFilename + '-' + 'dictionnary';
var data = await rootBundle.loadString('assets/files/' + wordsFile + '.txt');
LineSplitter.split(data).forEach((line) {
if (line.length == length) {
dictionary.add(line.toUpperCase());
}
});
} catch (e) {
throw "Failed loading dictionary database";
}
// Get guessable words list (will pick random word from)
print('Reload words list (' + level + ')');
try { try {
String wordsFile = 'words-' + length.toString() + '-' + lang; String wordsFile = wordBaseFilename + '-' + level;
var data = await rootBundle.loadString('assets/files/' + wordsFile + '.txt'); var data = await rootBundle.loadString('assets/files/' + wordsFile + '.txt');
LineSplitter.split(data).forEach((line) { LineSplitter.split(data).forEach((line) {
if (line.length == length) { if (line.length == length) {
...@@ -35,9 +57,11 @@ class RandomPickWord { ...@@ -35,9 +57,11 @@ class RandomPickWord {
} catch (e) { } catch (e) {
throw "Failed loading words database"; throw "Failed loading words database";
} }
} }
print('Words found in file: ' + wordList.length.toString()); print('Words in dictionary: ' + dictionary.length.toString());
print('Words in words list: ' + wordList.length.toString());
// Check we have enough words // Check we have enough words
if (wordList.length < 1) { if (wordList.length < 1) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment