A Go version of the https://lcthw.dev/learn-code-the-hard-way/curseyou-python-rogue that makes a tiny Rogue in Go.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
curse-you-go-rogue/main.go

121 lines
2.2 KiB

package main
import (
"os"
"log"
"github.com/gdamore/tcell/v2"
"github.com/gdamore/tcell/v2/encoding"
)
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 {
game.screen.SetContent(x, y, cell, comb, tcell.StyleDefault)
}
}
game.screen.SetContent(game.player_x, game.player_y, '@', comb, tcell.StyleDefault)
game.screen.Show()
}
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()
game.screen, err = tcell.NewScreen()
if err != nil { log.Fatal(err) }
err = game.screen.Init()
if err != nil { log.Fatal(err) }
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 {
game.HandleEvents()
game.Render()
}
}