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

Merge branch '5-improve-words-lists' into 'master'

Resolve "Improve words lists"

Closes #5

See merge request !5
parents d0cf1e81 01ec650b
Branches
Tags Release_0.0.3_3
1 merge request!5Resolve "Improve words lists"
Pipeline #2568 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