|
|
|
@ -2,67 +2,56 @@ |
|
|
|
|
package main |
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
"fmt" |
|
|
|
|
"os" |
|
|
|
|
|
|
|
|
|
"log" |
|
|
|
|
"github.com/gdamore/tcell/v2" |
|
|
|
|
"github.com/gdamore/tcell/v2/encoding" |
|
|
|
|
|
|
|
|
|
"github.com/mattn/go-runewidth" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
func emitStr(s tcell.Screen, x, y int, style tcell.Style, str string) { |
|
|
|
|
for _, c := range str { |
|
|
|
|
func DisplayMap(screen tcell.Screen, level []string) { |
|
|
|
|
screen.Clear() |
|
|
|
|
|
|
|
|
|
for y, line := range level { |
|
|
|
|
for x, cell := range line { |
|
|
|
|
var comb []rune |
|
|
|
|
w := runewidth.RuneWidth(c) |
|
|
|
|
if w == 0 { |
|
|
|
|
comb = []rune{c} |
|
|
|
|
c = ' ' |
|
|
|
|
w = 1 |
|
|
|
|
screen.SetContent(x, y, cell, comb, tcell.StyleDefault) |
|
|
|
|
} |
|
|
|
|
s.SetContent(x, y, c, comb, style) |
|
|
|
|
x += w |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
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() { |
|
|
|
|
level := []string{ |
|
|
|
|
"####################", |
|
|
|
|
"###....#############", |
|
|
|
|
"###....#############", |
|
|
|
|
"###...........######", |
|
|
|
|
"#############.######", |
|
|
|
|
"#############....###", |
|
|
|
|
"#############....###", |
|
|
|
|
"####################", |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
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) |
|
|
|
|
} |
|
|
|
|
screen, err := tcell.NewScreen() |
|
|
|
|
if err != nil { log.Fatal(err) } |
|
|
|
|
|
|
|
|
|
defStyle := tcell.StyleDefault. |
|
|
|
|
Background(tcell.ColorBlack). |
|
|
|
|
Foreground(tcell.ColorWhite) |
|
|
|
|
s.SetStyle(defStyle) |
|
|
|
|
err = screen.Init(); |
|
|
|
|
if err != nil { log.Fatal(err) } |
|
|
|
|
|
|
|
|
|
displayHelloWorld(s) |
|
|
|
|
DisplayMap(screen, level) |
|
|
|
|
|
|
|
|
|
for { |
|
|
|
|
switch ev := s.PollEvent().(type) { |
|
|
|
|
switch ev := screen.PollEvent().(type) { |
|
|
|
|
case *tcell.EventResize: |
|
|
|
|
s.Sync() |
|
|
|
|
displayHelloWorld(s) |
|
|
|
|
screen.Sync() |
|
|
|
|
DisplayMap(screen, level) |
|
|
|
|
case *tcell.EventKey: |
|
|
|
|
if ev.Key() == tcell.KeyEscape { |
|
|
|
|
s.Fini() |
|
|
|
|
screen.Fini() |
|
|
|
|
os.Exit(0) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|