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
No related branches found
No related tags found
1 merge request!5Resolve "Improve words lists"
Pipeline #2568 passed
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
app.versionName=0.0.2
app.versionCode=2
app.versionName=0.0.3
app.versionCode=3
This diff is collapsed.
File moved
......@@ -6,10 +6,12 @@ class Data extends ChangeNotifier {
// Configuration available values
List _availableLangValues = ['fr'];
List _availableWordLengthValues = ['5'];
List _availableLevelValues = ['easy', 'normal'];
List _availableSkinValues = ['default'];
List get availableLangValues => _availableLangValues;
List get availableWordLengthValues => _availableWordLengthValues;
List get availableLevelValues => _availableLevelValues;
List get availableSkinValues => _availableSkinValues;
// Application default configuration
......@@ -17,6 +19,8 @@ class Data extends ChangeNotifier {
String _langDefault = 'fr';
String _length = '';
String _lengthDefault = '5';
String _level = '';
String _levelDefault = 'normal';
String _skin = '';
String _skinDefault = 'default';
......@@ -41,6 +45,12 @@ class Data extends ChangeNotifier {
notifyListeners();
}
String get level => _level;
void updateLevel(String level) {
_level = level;
notifyListeners();
}
String get skin => _skin;
void updateSkin(String skin) {
_skin = skin;
......@@ -86,6 +96,8 @@ class Data extends ChangeNotifier {
break;
case 'length': { return _length; }
break;
case 'level': { return _level; }
break;
case 'skin': { return _skin; }
break;
}
......@@ -97,6 +109,8 @@ class Data extends ChangeNotifier {
break;
case 'length': { return _availableWordLengthValues; }
break;
case 'level': { return _availableLevelValues; }
break;
case 'skin': { return _availableSkinValues; }
break;
}
......@@ -109,6 +123,8 @@ class Data extends ChangeNotifier {
break;
case 'length': { updateLength(parameterValue); }
break;
case 'level': { updateLevel(parameterValue); }
break;
case 'skin': { updateSkin(parameterValue); }
break;
}
......@@ -120,6 +136,7 @@ class Data extends ChangeNotifier {
final prefs = await SharedPreferences.getInstance();
setParameterValue('lang', prefs.getString('lang') ?? _langDefault);
setParameterValue('length', prefs.getString('length') ?? _lengthDefault);
setParameterValue('level', prefs.getString('level') ?? _levelDefault);
setParameterValue('skin', prefs.getString('skin') ?? _skinDefault);
}
......
......@@ -28,7 +28,7 @@ class GameUtils {
do {
randomPickWord = RandomPickWord();
int wordLength = int.parse(myProvider.length);
await randomPickWord.init(myProvider.lang, wordLength);
await randomPickWord.init(myProvider.lang, wordLength, myProvider.level);
if (randomPickWord.word != '') {
word = randomPickWord.word;
......
......@@ -8,24 +8,46 @@ class RandomPickWord {
static Set<String> wordList = <String>{};
static Set<String> dictionary = <String>{};
static int _length = 5;
static String _level = '';
RandomPickWord();
String _word = '';
String get word => _word;
init(String lang, int length) async {
init(String lang, int length, String level) async {
_length = length;
_level = level;
_word = '';
await wordFromLocalFile(lang, length);
await wordFromLocalFile(lang, length, level);
}
Future<void> wordFromLocalFile(String lang, int length) async {
if (length != _length || wordList.isEmpty || dictionary.isEmpty) {
Future<void> wordFromLocalFile(String lang, int length, String level) async {
if (length != _length || level != _level || wordList.isEmpty || dictionary.isEmpty) {
_length = length;
_level = level;
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 {
String wordsFile = 'words-' + length.toString() + '-' + lang;
String wordsFile = wordBaseFilename + '-' + level;
var data = await rootBundle.loadString('assets/files/' + wordsFile + '.txt');
LineSplitter.split(data).forEach((line) {
if (line.length == length) {
......@@ -35,9 +57,11 @@ class RandomPickWord {
} catch (e) {
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
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