-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsaveMenu.go
More file actions
101 lines (89 loc) · 1.98 KB
/
Copy pathsaveMenu.go
File metadata and controls
101 lines (89 loc) · 1.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package main
import (
"encoding/csv"
"log"
"os"
"strings"
"time"
tea "github.com/charmbracelet/bubbletea"
)
type saveMenu struct {
model *model
initials []rune
cursor int
}
var baseFocusedStyle = createFocusedStyle(baseStyle)
func NewSaveMenu(m *model) *saveMenu {
return &saveMenu{
model: m,
initials: []rune{'A', 'A', 'A'},
cursor: 0,
}
}
func (m *saveMenu) view() string {
b := strings.Builder{}
b.WriteString("\n")
b.WriteString("Change the initials using h, j, k, and l. Press y to save.\n")
b.WriteString("Pressing n will take you to the menu\n\n")
for i, char := range m.initials {
str := string(char)
if i == m.cursor {
b.WriteString(baseFocusedStyle.Render(str))
continue
}
b.WriteString(baseStyle.Render(str))
}
b.WriteString("\n\nSave? (y / n)\n")
return b.String()
}
func (m *saveMenu) update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch msg := msg.(type) {
case tea.KeyMsg:
switch msg.String() {
case "ctrl+c", "q":
return m.model, tea.Quit
case "n":
m.model.game = NewGame(m.model)
m.model.current = m.model.mainMenu
case "y":
save(m.model.game, m.initials)
m.model.game = NewGame(m.model)
m.model.scores.reevaluate()
m.model.current = m.model.scores
case "h":
if m.cursor > 0 {
m.cursor--
}
case "l":
if m.cursor < 2 {
m.cursor++
}
case "j":
if m.initials[m.cursor] < 'Z' {
m.initials[m.cursor]++
}
case "k":
if m.initials[m.cursor] > 'A' {
m.initials[m.cursor]--
}
}
}
return m.model, nil
}
func save(game *game, initials []rune) {
file, err := os.OpenFile("scores.csv", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
log.Fatal(err)
}
defer file.Close()
writer := csv.NewWriter(file)
currentTime, err := time.Now().MarshalText()
if err != nil {
log.Fatal(err)
}
err = writer.Write([]string{string(initials), game.stopwatch.Elapsed().String(), string(currentTime), game.mode.String()})
if err != nil {
log.Fatal(err)
}
writer.Flush()
}