extends CenterContainer const letter_count := 5 const guess_count := 6 const Letter = preload("res://src/Letter.tscn") export var color_incorrect: Color = Color() export var color_misplaced: Color = Color() export var color_correct: Color = Color() # An array of arrays of the letter nodes var letters := [] var target_word: String var current_guess: int func _ready() -> void: for _i in range(guess_count): var letter_array := [] for _j in range(letter_count): var letter := Letter.instance() letter_array.append(letter) $V/LetterGrid.add_child(letter) letters.append(letter_array) target_word = "godot".to_upper() current_guess = 0 func _on_GuessButton_pressed() -> void: var guess_text_node := find_node("GuessText") as LineEdit var guess := guess_text_node.text.to_upper() guess_entered(guess) func _on_GuessText_text_entered(new_text: String) -> void: guess_entered(new_text) func guess_entered(guess: String) -> void: if current_guess >= guess_count: return guess = guess.to_upper() if guess.length() != letter_count: return var letters_remaining = [] for letter in target_word: letters_remaining.append(letter) # Mark all greens for i in range(letter_count): var guess_letter := guess[i] var target_letter := target_word[i] var letter_instance := letters[current_guess][i] as ColorRect letter_instance.get_node("Label").text = guess_letter if guess_letter == target_letter: letter_instance.color = color_correct # Remove that one letter from remaining letters (is there a function for this?) for j in range(letters_remaining.size()): if letters_remaining[j] == guess_letter: letters_remaining.remove(j) break print(letters_remaining) # Mark all yellows (and grays) for i in range(letter_count): var letter_instance := letters[current_guess][i] as ColorRect if letter_instance.color == color_correct: # Ignore things that are already green continue var guess_letter := guess[i] var found := false for j in range(letters_remaining.size()): if letters_remaining[j] == guess_letter: found = true letters_remaining.remove(j) break if found: letter_instance.color = color_misplaced else: letter_instance.color = color_incorrect current_guess += 1 var guess_text_node := find_node("GuessText") as LineEdit guess_text_node.text = ""