gordle/src/Main.gd

92 lines
2.3 KiB
GDScript3
Raw Normal View History

2022-02-20 14:35:55 -05:00
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 := []
2022-02-20 15:55:10 -05:00
var target_word: String
var current_guess: int
2022-02-20 14:35:55 -05:00
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)
2022-02-20 15:55:10 -05:00
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 = ""