diff --git a/main.go b/main.go index d5f8ff7..54d1f5d 100644 --- a/main.go +++ b/main.go @@ -2,69 +2,58 @@ package main import ( - "fmt" - "os" - - "github.com/gdamore/tcell/v2" - "github.com/gdamore/tcell/v2/encoding" - - "github.com/mattn/go-runewidth" + "os" + "log" + "github.com/gdamore/tcell/v2" + "github.com/gdamore/tcell/v2/encoding" ) -func emitStr(s tcell.Screen, x, y int, style tcell.Style, str string) { - for _, c := range str { - var comb []rune - w := runewidth.RuneWidth(c) - if w == 0 { - comb = []rune{c} - c = ' ' - w = 1 - } - s.SetContent(x, y, c, comb, style) - x += w +func DisplayMap(screen tcell.Screen, level []string) { + screen.Clear() + + for y, line := range level { + for x, cell := range line { + var comb []rune + screen.SetContent(x, y, cell, comb, tcell.StyleDefault) } -} + } -func displayHelloWorld(s tcell.Screen) { - w, h := s.Size() - s.Clear() - style := tcell.StyleDefault.Foreground(tcell.ColorCadetBlue.TrueColor()).Background(tcell.ColorWhite) - emitStr(s, w/2-7, h/2, style, "Hello, World!") - emitStr(s, w/2-9, h/2+1, tcell.StyleDefault, "Press ESC to exit.") - s.Show() + screen.Show() } // This program just prints "Hello, World!". Press ESC to exit. func main() { - encoding.Register() - - s, e := tcell.NewScreen() - if e != nil { - fmt.Fprintf(os.Stderr, "%v\n", e) - os.Exit(1) - } - if e := s.Init(); e != nil { - fmt.Fprintf(os.Stderr, "%v\n", e) - os.Exit(1) - } - - defStyle := tcell.StyleDefault. - Background(tcell.ColorBlack). - Foreground(tcell.ColorWhite) - s.SetStyle(defStyle) - - displayHelloWorld(s) - - for { - switch ev := s.PollEvent().(type) { - case *tcell.EventResize: - s.Sync() - displayHelloWorld(s) - case *tcell.EventKey: - if ev.Key() == tcell.KeyEscape { - s.Fini() - os.Exit(0) - } - } + level := []string{ + "####################", + "###....#############", + "###....#############", + "###...........######", + "#############.######", + "#############....###", + "#############....###", + "####################", + } + + encoding.Register() + + screen, err := tcell.NewScreen() + if err != nil { log.Fatal(err) } + + err = screen.Init(); + if err != nil { log.Fatal(err) } + + DisplayMap(screen, level) + + for { + switch ev := screen.PollEvent().(type) { + case *tcell.EventResize: + screen.Sync() + DisplayMap(screen, level) + case *tcell.EventKey: + if ev.Key() == tcell.KeyEscape { + screen.Fini() + os.Exit(0) + } } + } }