Skip to content

Commit 07aa376

Browse files
committed
feat: add a wordlist to verify if words are valid
1 parent d1d1fbf commit 07aa376

File tree

3 files changed

+48
-2
lines changed

3 files changed

+48
-2
lines changed

internal/ui/game.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66

77
tea "github.com/charmbracelet/bubbletea"
88
"github.com/charmbracelet/lipgloss"
9+
"github.com/f-gillmann/wordle-ssh/internal/wordle"
910
)
1011

1112
const (
@@ -44,6 +45,7 @@ type GameModel struct {
4445
state GameState
4546
errorMessage string
4647
letterMap map[rune]LetterState
48+
invalidWord bool
4749
}
4850

4951
func NewGameModel(targetWord string) GameModel {
@@ -81,12 +83,20 @@ func (m GameModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
8183
}
8284

8385
if len([]rune(m.currentGuess)) != WordLength {
84-
m.errorMessage = fmt.Sprintf("Word must be %d letters", WordLength)
86+
m.errorMessage = fmt.Sprintf("Word must be %d letters\n", WordLength)
87+
return m, nil
88+
}
89+
90+
// Validate the guess against the wordlist
91+
if !wordle.IsValidWord(strings.ToLower(m.currentGuess)) {
92+
m.invalidWord = true
93+
m.errorMessage = "Invalid word\n"
8594
return m, nil
8695
}
8796

8897
// Process the guess
8998
m.errorMessage = ""
99+
m.invalidWord = false
90100
m.guesses = append(m.guesses, m.currentGuess)
91101
result := m.evaluateGuess(m.currentGuess)
92102
m.guessResults = append(m.guessResults, result)
@@ -119,6 +129,7 @@ func (m GameModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
119129
if len(m.currentGuess) > 0 {
120130
m.currentGuess = m.currentGuess[:len(m.currentGuess)-1]
121131
m.errorMessage = ""
132+
m.invalidWord = false
122133
}
123134

124135
default:
@@ -223,7 +234,12 @@ func (m GameModel) View() string {
223234
// Render current guess being typed
224235
for j := 0; j < WordLength; j++ {
225236
if j < len([]rune(m.currentGuess)) {
226-
tiles = append(tiles, TileStyleEmpty.Render(string([]rune(m.currentGuess)[j])))
237+
// Use red style if word is invalid
238+
style := TileStyleEmpty
239+
if m.invalidWord {
240+
style = TileStyleInvalid
241+
}
242+
tiles = append(tiles, style.Render(string([]rune(m.currentGuess)[j])))
227243
} else {
228244
tiles = append(tiles, TileStyleEmpty.Render(" "))
229245
}

internal/ui/styles.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,15 @@ var (
4949
Width(1).
5050
Align(lipgloss.Center)
5151

52+
TileStyleInvalid = lipgloss.NewStyle().
53+
Foreground(colorWhite).
54+
Padding(0, 1).
55+
Bold(true).
56+
Border(lipgloss.NormalBorder()).
57+
BorderForeground(colorRed).
58+
Width(1).
59+
Align(lipgloss.Center)
60+
5261
MenuTitleStyle = lipgloss.NewStyle().
5362
Bold(true).
5463
Foreground(colorLightGray).

internal/wordle/wordlist.go

Lines changed: 21 additions & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)