Select Git revision
game_utils.dart
-
Benoît Harrault authoredBenoît Harrault authored
game_utils.dart 3.64 KiB
import '../provider/data.dart';
import '../utils/random_pick_word.dart';
class GameUtils {
static Future<void> resetGame(Data myProvider) async {
myProvider.updateGameIsRunning(false);
}
static Future<void> startGame(Data myProvider) async {
print('Starting game');
print('- lang: ' + myProvider.lang);
print('- length: ' + myProvider.length);
myProvider.resetGame();
await pickWord(myProvider);
myProvider.updateGameIsRunning(true);
}
static Future<void> pickWord(Data myProvider) async {
RandomPickWord randomPickWord;
String word = '';
int attempts = 0;
do {
randomPickWord = RandomPickWord();
int wordLength = int.parse(myProvider.length);
await randomPickWord.init(myProvider.lang, wordLength, myProvider.level);
if (randomPickWord.word != '') {
word = randomPickWord.word;
}
attempts++;
if ((word != '') && !myProvider.isRecentlyPicked(word)) {
myProvider.updateWord(word);
}
} while (myProvider.word != word && attempts < 10);
print('Picked word: ' + word);
}
static bool addLetter(Data myProvider, String letter) {
print('addLetter: ' + letter);
myProvider.currentGuessAddLetter(letter);
return true;
}
static bool removeLetter(Data myProvider) {
print('removeLetter');
myProvider.currentGuessRemoveLetter();
return true;
}
static List<String> getTips(Data myProvider, String candidate) {
String word = myProvider.word;
int wordLength = int.parse(myProvider.length);
List<String> tips = List<String>.filled(wordLength, '', growable: false);
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) {
return oldString.substring(0, index) + newChar + oldString.substring(index + 1);
}
print('getTips: candidate "' + candidate + '" / word "' + word + '"');
// Check correctly placed letters
print('Check correctly placed letters');
for (int i = 0; i < wordLength; i++) {
if ((tips[i] == '') && (word[i] == candidate[i])) {
print('Found "' + word[i] + '" on the right place: ' + (i + 1).toString());
word = replaceCharAt(word, i, ' ');
candidate = replaceCharAt(candidate, i, ' ');
tips[i] = 'good';
}
}
// Check misplaced letters
print('Check misplaced letters');
for (int i = 0; i < wordLength; i++) {
for (int j = 0; j < wordLength; j++) {
if ((candidate[j] != ' ') && (candidate[j] == word[i])) {
print('Found "' +
candidate[j] +
'" on the wrong place: ' +
(j + 1).toString() +
' instead of ' +
(i + 1).toString());
word = replaceCharAt(word, i, ' ');
candidate = replaceCharAt(candidate, j, ' ');
tips[j] = 'misplaced';
}
}
}
print('Finished check letters: ' + tips.toString());
return tips;
}
static bool submitWord(Data myProvider) {
print('submitWord');
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);
}
}