63 lines
1.5 KiB
GDScript
63 lines
1.5 KiB
GDScript
extends Node
|
|
|
|
|
|
const MIN_LENGTH := 5
|
|
const MAX_LENGTH := 5
|
|
const GENERABLE_WORDS_FILENAME = "res://words/popular-filtered.txt"
|
|
const ALL_WORDS_FILENAME := "res://words/enable1.txt"
|
|
|
|
|
|
var daily_mode := true
|
|
|
|
|
|
var generable_words: Dictionary
|
|
var all_words: Dictionary
|
|
|
|
|
|
func _ready() -> void:
|
|
randomize()
|
|
generable_words = parse_words(GENERABLE_WORDS_FILENAME, MIN_LENGTH, MAX_LENGTH)
|
|
all_words = parse_words(ALL_WORDS_FILENAME, MIN_LENGTH, MAX_LENGTH)
|
|
|
|
|
|
func parse_words(filename: String, min_len: int, max_len: int) -> Dictionary:
|
|
var dict := {}
|
|
for i in range(min_len, max_len + 1):
|
|
dict[i] = []
|
|
|
|
var file := File.new()
|
|
var error := file.open(filename, File.READ)
|
|
assert(not error)
|
|
while not file.eof_reached():
|
|
var line := file.get_line()
|
|
var length = line.length()
|
|
if length < min_len || length > max_len:
|
|
continue
|
|
dict[length].append(line.to_upper())
|
|
file.close()
|
|
|
|
return dict
|
|
|
|
|
|
func generate_word(length: int, random_seed = null) -> String:
|
|
var random_value: int
|
|
if typeof(random_seed) == TYPE_INT:
|
|
var rng = RandomNumberGenerator.new()
|
|
rng.set_seed(random_seed)
|
|
random_value = rng.randi()
|
|
else:
|
|
random_value = randi()
|
|
|
|
var words_list := generable_words[length] as Array
|
|
|
|
return words_list[random_value % words_list.size()]
|
|
|
|
|
|
func is_valid_word(word: String) -> bool:
|
|
var length := word.length()
|
|
if length < MIN_LENGTH or length > MAX_LENGTH:
|
|
return false
|
|
|
|
var words_list := all_words[length] as Array
|
|
|
|
return word.to_upper() in words_list
|