You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
1.9 KiB
TypeScript

import Game from './engine/Game'
import Parser from './engine/Parser'
import Renderer from './engine/Renderer'
import RulesEngine from './engine/RulesEngine'
import { ObjectType, Room, Door } from './engine/types/GameState'
let game = new Game()
let rules = new RulesEngine()
let parser = new Parser(game, rules)
let renderer = new Renderer(parser, game)
parser.understand('look')
.as('look')
.as('describe')
parser.understand('lookDirection')
.as('look [direction]')
parser.understand('lookAt')
.as('look [item]')
.as('look [door]')
.as('look at [item]')
.as('look at [door]')
.as('examine [item]')
.as('examine [door]')
.as('x [item]')
.as('x [door]')
parser.understand('go')
.as('go [direction]')
.as('[direction]')
parser.understand('take')
.as('take [item]')
.as('get [item]')
.as('pick up [item]')
.as('grab [item]')
.as('snatch [item]')
.as('steal [item]')
parser.understand('unlockDoor')
.as('unlock [door|subject] with [item|object]')
.as('unlock [door]')
.as('use [item|object] to unlock [door|subject]')
parser.understand('openDoor')
.as('open [door]')
.as('open [door|subject] with [item|object]')
const entry : Room = {
type: ObjectType.Room,
name: 'entry',
aliases: [],
neighbors: new Map()
}
const door : Door = {
type: ObjectType.Door,
name: 'door',
aliases: ['white door'],
neighbors: new Map(),
locked: true,
key: 'brass key'
}
const office : Room = {
type: ObjectType.Room,
name: 'office',
aliases: [],
neighbors: new Map()
}
entry.neighbors.set('east', 'door')
office.neighbors.set('west', 'door')
door.neighbors.set('east', 'office')
door.neighbors.set('west', 'entry')
game.addRoom(entry)
game.addRoom(office)
game.addDoor(door)
game.addItem({
type: ObjectType.Item,
name: 'brass key',
aliases: ['key'],
location: 'entry'
})
game.getState().player.location = 'entry'
game.saveDraft()
renderer.start()