UNPKG

warriorjs-engine

Version:
109 lines (89 loc) 3.04 kB
![banner](https://cdn.rawgit.com/olistic/warriorjs-engine/master/warriorjs-logo.svg) [![Travis](https://img.shields.io/travis/olistic/warriorjs-engine.svg?style=flat-square)](https://travis-ci.org/olistic/warriorjs-engine) [![npm](https://img.shields.io/npm/v/warriorjs-engine.svg?style=flat-square)](https://www.npmjs.com/package/warriorjs-engine) # WarriorJS Engine *There's a small chance that you have played the game WarriorJS before, and an even smaller chance that you have come here intentionally, so you may be wondering what's this all about...* **This is the rules engine behind [WarriorJS](https://github.com/olistic/warriorjs), distributed as a standalone npm package.** ## Installation ```bash $ npm install --save warriorjs-engine ``` ## API Reference The WarriorJS Engine API exposes a single yet important function: ### `playLevel(levelConfig, playerCode, [maxTurns])` Plays a WarriorJS level using the player's code. #### Arguments 1. `levelConfig` *(Object)*: The configuration of the level, with the following members: * `timeBonus` *(Number)*: Amount of turns the player has to complete the level obtaining bonus points. * `floor` *(Object)*: The floor of the level, with the following members: * `size` *(Object)*: The size of the floor. * `stairs` *(Object)*: The position of the stairs. * `warrior` *(Object)*: The player's warrior. * `units` *(Array)*: The other units in the level. 2. `playerCode` *(String)*: The code written by the player. 3. `[maxTurns]` *(Number)*: The maximum number of turns that will be played. #### Returns *(Object)* An object containing the play result with the following members: * `passed` *(Boolean)*: Whether the level was passed or not. * `score` *(Object)*: * `warrior` *(Number)*: The points earned by the warrior by killing units and rescuing captives. * `timeBonus` *(Number)*: A bonus for completing the level in less than a specified amount of turns. * `clearBonus` *(Number)*: A bonus for defeating all enemies and rescuing all captives. * `events` *(Array)*: The sequence of events that took place during the play. #### Example ```javascript import playLevel from 'warriorjs-engine'; const levelConfig = { timeBonus: 15, floor: { size: { width: 8, height: 1 }, stairs: { x: 7, y: 0 }, warrior: { name: 'Spartacus', x: 0, y: 0, facing: 'east', abilities: [ { name: 'walk', args: [] }, { name: 'attack', args: [] }, { name: 'feel', args: [] } ] }, units: [ { type: 'sludge', x: 4, y: 0, facing: 'west' } ] } }; const playerCode = ` class Player { playTurn(warrior) { if (warrior.feel().isEnemy()) { warrior.attack(); } else { warrior.walk(); } } } `; const { passed, score, events } = playLevel(levelConfig, playerCode); ```