RCRPG/Go: Difference between revisions

133 bytes removed ,  12 years ago
library changes
m (Typo)
(library changes)
Line 2:
 
import (
"container/vector"
"fmt"
"io"
"math/rand"
"os"
"rand"
"sort"
"strings"
Line 482 ⟶ 481:
name := strings.ToLower(args[0])
switch name {
case "north", "south", "east", "west", "up", "down", "attack", "drop", "take", "inventory", "name", "equip", "alias":
"drop", "take", "inventory", "name", "equip", "alias":
fmt.Printf("Can't overwrite the %q command.\n", name)
return
Line 544:
// Resolves aliases and dispatches to the correct handler
func (g *Game) Dispatch(args []string) {
argv := vector.StringVector(args)
seen := make(map[string]bool)
name := argv.At(args[0)]
for ok {
seen[name] = true
prefix, ok := g.Aliases[name]
for ok {
if !ok {
argv.Cut(0, 1)
break
prefixv := vector.StringVector(prefix)
}
argv.InsertVector(0, &prefixv)
args = append(prefix, args[1:]...)
name = argv.At(args[0)]
if seen[name] {
fmt.Print("Recursive alias.\n")
return
}
seen[name] = true
prefix, ok = g.Aliases[name]
}
cb := g.Commands[name]
Line 566 ⟶ 564:
return
}
cb(argvargs[1:])
return
}
Line 627 ⟶ 625:
// Read a single line of input
func readLine(in io.Reader) (string, bool) {
var line []string
line := new(vector.StringVector)
buf := []byte{0}
_, err := in.Read(buf)
for err == nil && buf[0] != '\n' && buf[0] != '\r' {
line.Push = append(line, string(buf))
_, err = in.Read(buf)
}
Line 637 ⟶ 635:
in.Read(buf)
}
return strings.Join(line.Copy(), ""), err == nil
}
 
// Returns a sorted array of command and alias names
func (g *Game) GetCommands() []string {
var commandNames []string
commandNames := new(vector.StringVector)
for name := range g.Commands {
commandNames.Push = append(commandNames, name)
}
for name := range g.Aliases {
commandNames.Push = append(commandNames, name)
}
sort.SortStrings(commandNames)
return commandNames.Copy()
}
 
// Main game loop
func (g *Game) Run() {
fmt.Printf("Welcome to RC Minimalist RPG, Go version %d.%d.\n", VERSION_MAJOR, VERSION_MINOR)
VERSION_MAJOR, VERSION_MINOR)
fmt.Print("You start in room 0,0,0. Your goal is at 1,1,5. Good luck!\n")
fmt.Printf("Commands: %s\n", strings.Join(g.GetCommands(), ", "))
Line 666 ⟶ 665:
}
for ok {
tokens := strings.Split(line, " ", -1)
g.Dispatch(tokens)
fmt.Print("\n> ")
1,707

edits