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"
)
func DisplayMap(screen tcell.Screen, level []string) {
screen.Clear()
for y, line := range level {
for x, cell := range line {
type Game struct {
screen tcell.Screen
level []string
player_x int
player_y int
}
func (game *Game) Render() {
var comb []rune
screen.SetContent(x, y, cell, comb, tcell.StyleDefault)
game.screen.Clear()
for y, line := range game.level {
for x, cell := range line {
game.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 main() {
level := []string{
"####################",
"###....#############",
"###....#############",
"###...........######",
"#############.######",
"#############....###",
"#############....###",
"####################",
func (game *Game) Exit() {
game.screen.Fini()
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()
screen, err := tcell.NewScreen()
game.screen, err = tcell.NewScreen()
if err != nil { log.Fatal(err) }
err = screen.Init();
err = game.screen.Init()
if err != nil { log.Fatal(err) }
DisplayMap(screen, level)
game.player_x = 1
game.player_y = 1
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)
}
return &game
}
// This program just prints "Hello, World!". Press ESC to exit.
func main() {
game := MakeGame()
game.level = []string{
"###########################",
"#...#.....................#",
"#.###.#########.#########.#",
"#.....#.......#...#.....#.#",
"#######.#####.#####.###.#.#",
"#.....#.#.......#...#...#.#",
"#.###.#.#.....#.#.#.#.###.#",
"#...#.#.#.....#.#.#.#.....#",
"###.#.#.#.....#.#.#.#######",
"#...#...#.....#...#.......#",
"###########################",
}
game.Render()
for {
game.HandleEvents()
game.Render()
}
}

Loading…
Cancel
Save