diff --git a/state/state.go b/state/state.go index a0ba458..848dbcd 100644 --- a/state/state.go +++ b/state/state.go @@ -41,7 +41,7 @@ type State struct { rowHeaders, colHeaders []header } -func New(sectionSize, cellsPerSection int) *State { +func New(sectionSize, cellsPerSection int, reveal bool) *State { s := &State{ sectionSize: sectionSize, cellsPerSection: cellsPerSection, @@ -58,7 +58,33 @@ func New(sectionSize, cellsPerSection int) *State { s.initSection(Point{x, y}) } } - // TODO reveal 1 row per section, 1 col per sections/2 + if reveal { + for i := 0; i < s.sectionSize; i++ { + reveal := i*s.cellsPerSection + rand.Intn(s.cellsPerSection) + s.history += fmt.Sprintf("ry(%d)", reveal) + for x := 0; x < s.size(); x++ { + p := Point{x, reveal} + if s.cells.state(p) { + s.mark(p) + } else { + s.flag(p) + } + } + + if rand.Int()%2 == 0 { + reveal = i*s.cellsPerSection + rand.Intn(s.cellsPerSection) + s.history += fmt.Sprintf("rx(%d)", reveal) + for y := 0; y < s.size(); y++ { + p := Point{reveal, y} + if s.cells.state(p) { + s.mark(p) + } else { + s.flag(p) + } + } + } + } + } s.initialized = true return s } diff --git a/state/view.go b/state/view.go index 70cdddc..45cb826 100644 --- a/state/view.go +++ b/state/view.go @@ -7,16 +7,18 @@ import ( ) var ( - complete = []string{"██ ", "██ "} - flagged = []string{"╲╱ ", "╱╲ "} - marked = []string{"╭╮ ", "╰╯ "} - blank = []string{".- ", " "} - cursorStyle = lipgloss.NewStyle(). - Background(lipgloss.Color("#005566")) + Background(lipgloss.White) gridStyle = lipgloss.NewStyle(). Foreground(lipgloss.Black) + + markedStyle = lipgloss.NewStyle() + + complete = []string{"██ ", "██ "} + flagged = []string{"╲╱ ", "╱╲ "} + marked = []string{" ", " "} + blank = []string{" ", " "} ) func (c *cell) View() []string { @@ -32,7 +34,7 @@ func (c *cell) View() []string { } func (f *field) View(p *Point, sectionSize, cellsPerSection int) string { - res := gridStyle.Render("┌") + res := gridStyle.Render("┌─") for c := 0; c < cellsPerSection*sectionSize*3; c++ { res += gridStyle.Render("─") if c == cellsPerSection*sectionSize*3-1 { @@ -40,43 +42,48 @@ func (f *field) View(p *Point, sectionSize, cellsPerSection int) string { break } if c%(cellsPerSection*3) == cellsPerSection*3-1 { - res += gridStyle.Render("┬") + res += gridStyle.Render("┬─") } } - resA := gridStyle.Render("│") - resB := gridStyle.Render("│") + resA := gridStyle.Render("│ ") + resB := gridStyle.Render("│ ") for i, c := range f.cells { cellRes := c.View() if i == f.i(*p) { resA += cursorStyle.Render(cellRes[0]) resB += cursorStyle.Render(cellRes[1]) + } else if c.marked() { + markedStyle = lipgloss.NewStyle(). + Background(lipgloss.Color(fmt.Sprintf("%d", i%214+16))) + resA += markedStyle.Render(cellRes[0]) + resB += markedStyle.Render(cellRes[1]) } else { resA += cellRes[0] resB += cellRes[1] } if i%cellsPerSection == cellsPerSection-1 { - resA += gridStyle.Render("│") - resB += gridStyle.Render("│") + resA += gridStyle.Render("│ ") + resB += gridStyle.Render("│ ") } if i%f.size == f.size-1 { res += fmt.Sprintf("%s\n%s\n", resA, resB) - resA = gridStyle.Render("│") - resB = gridStyle.Render("│") + resA = gridStyle.Render("│ ") + resB = gridStyle.Render("│ ") } if i != 0 && i%(cellsPerSection*cellsPerSection*sectionSize) == 0 { - res += gridStyle.Render("├") + res += gridStyle.Render("├─") for section := 0; section < sectionSize; section++ { for sectionCell := 0; sectionCell < cellsPerSection; sectionCell++ { res += gridStyle.Render("───") } if section < sectionSize-1 { - res += gridStyle.Render("┼") + res += gridStyle.Render("┼─") } } res += gridStyle.Render("┤") + "\n" } } - res += gridStyle.Render("└") + res += gridStyle.Render("└─") for c := 0; c < cellsPerSection*sectionSize*3; c++ { res += gridStyle.Render("─") if c == cellsPerSection*sectionSize*3-1 { @@ -84,7 +91,7 @@ func (f *field) View(p *Point, sectionSize, cellsPerSection int) string { break } if c%(cellsPerSection*3) == cellsPerSection*3-1 { - res += gridStyle.Render("┴") + res += gridStyle.Render("┴─") } } return res diff --git a/ui/model.go b/ui/model.go index fc99ac1..c90df53 100644 --- a/ui/model.go +++ b/ui/model.go @@ -25,7 +25,7 @@ func NewModel(sectionSize, cellsPerSection int) model { fieldSize: sectionSize * cellsPerSection, sectionSize: sectionSize, cellsPerSection: cellsPerSection, - state: state.New(sectionSize, cellsPerSection), + state: state.New(sectionSize, cellsPerSection, true), } return m