Cleaned up the code some and made the player and can move them around with wall collision.

master
Zed A. Shaw 10 months ago
parent cb210cb12c
commit 2329d1d550
  1. 122
      main.go

@ -8,52 +8,114 @@ import (
"github.com/gdamore/tcell/v2/encoding" "github.com/gdamore/tcell/v2/encoding"
) )
func DisplayMap(screen tcell.Screen, level []string) {
screen.Clear()
for y, line := range level { type Game struct {
screen tcell.Screen
level []string
player_x int
player_y int
}
func (game *Game) Render() {
var comb []rune
game.screen.Clear()
for y, line := range game.level {
for x, cell := range line { for x, cell := range line {
var comb []rune game.screen.SetContent(x, y, cell, comb, tcell.StyleDefault)
screen.SetContent(x, y, cell, comb, tcell.StyleDefault)
} }
} }
screen.Show() game.screen.SetContent(game.player_x, game.player_y, '@', comb, tcell.StyleDefault)
game.screen.Show()
} }
// This program just prints "Hello, World!". Press ESC to exit. func (game *Game) Exit() {
func main() { game.screen.Fini()
level := []string{ os.Exit(0)
"####################", }
"###....#############",
"###....#############", func (game *Game) Occupied(x int, y int) bool {
"###...........######", return game.level[y][x] != '.'
"#############.######", }
"#############....###",
"#############....###", func (game *Game) MovePlayer(x_delta int, y_delta int) {
"####################", if !game.Occupied(game.player_x + x_delta, game.player_y + y_delta) {
game.player_x += x_delta
game.player_y += y_delta
} }
}
func (game *Game) HandleKeys(ev *tcell.EventKey) {
switch ev.Key() {
case tcell.KeyEscape:
game.Exit()
case tcell.KeyUp:
game.MovePlayer(0, -1)
case tcell.KeyDown:
game.MovePlayer(0, 1)
case tcell.KeyRight:
game.MovePlayer(1, 0)
case tcell.KeyLeft:
game.MovePlayer(-1, 0)
}
switch ev.Rune() {
case 'q':
game.Exit()
}
}
func (game *Game) HandleEvents() {
switch ev := game.screen.PollEvent().(type) {
case *tcell.EventResize:
game.screen.Sync()
case *tcell.EventKey:
game.HandleKeys(ev)
}
}
func MakeGame() (*Game) {
var game Game
var err error
encoding.Register() encoding.Register()
screen, err := tcell.NewScreen() game.screen, err = tcell.NewScreen()
if err != nil { log.Fatal(err) } if err != nil { log.Fatal(err) }
err = screen.Init(); err = game.screen.Init()
if err != nil { log.Fatal(err) } if err != nil { log.Fatal(err) }
DisplayMap(screen, level) game.player_x = 1
game.player_y = 1
return &game
}
// This program just prints "Hello, World!". Press ESC to exit.
func main() {
game := MakeGame()
game.level = []string{
"###########################",
"#...#.....................#",
"#.###.#########.#########.#",
"#.....#.......#...#.....#.#",
"#######.#####.#####.###.#.#",
"#.....#.#.......#...#...#.#",
"#.###.#.#.....#.#.#.#.###.#",
"#...#.#.#.....#.#.#.#.....#",
"###.#.#.#.....#.#.#.#######",
"#...#...#.....#...#.......#",
"###########################",
}
game.Render()
for { for {
switch ev := screen.PollEvent().(type) { game.HandleEvents()
case *tcell.EventResize: game.Render()
screen.Sync()
DisplayMap(screen, level)
case *tcell.EventKey:
if ev.Key() == tcell.KeyEscape {
screen.Fini()
os.Exit(0)
}
}
} }
} }

Loading…
Cancel
Save