corewars-js
TypeScript icon, indicating that this package has built-in type declarations

0.0.5 • Public • Published

MARSjs

This is a JavaScript implementation of the game Core Wars. It consists of:

  1. A parser for the Redcode assembly language, written in Ohm.

  2. A MARS virtual machine, written in TypeScript and exposed as a JS module runnable either in the browser or on the server.

In its current form, it implements the ICWS-88 standard, although optional support for ICWS-94 is on the roadmap.

This is a work-in-progress. More documentation is coming soon.

Some test scripts

yarn test parses and runs validate.rs in a VM. validate.rs is a script (by another author) that validates whether a Redcode VM properly implements the ICWS-88 spec. If you run yarn test, it should loop infinitely (or until it reaches the cycle limit) which means this project is compliant with the spec! 🎉

Parser

As mentioned, the parser is written in Ohm. The grammar lives in redcode.ohm, and parser.ts contains a valid Ohm semantics expression (toMarsJSObject()) that targets the JSON format expected by the VM.

parser.ts exposes very few objects/functions:

  • grammar: An Ohm Grammar object, generated using the aforementioned redcode.ohm

  • semantics: An Ohm Semantics object that operates on the previous grammar, defining a single toMarsJSObject expression

  • parse(text: string): Instruction[] takes in a string of valid Redcode, and outputs an array of Instruction objects readable by the VM.

VM

For now, you likely want to just look at mars.ts for documentation or main.ts as an example.

Tl;dr, a VM object takes in an array of Instruction objects, and optionally a memory size and max number of cycles.

tick() executes a single instruction, exiting early and returning false if a player has lost (and returning true otherwise (not currently returning any information, other than a console log, about the failure).

print() is a helper function that outputs a pretty debug version of the current state of the game world.

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 0.0.5
    1
    • latest

Version History

Package Sidebar

Install

npm i corewars-js

Weekly Downloads

1

Version

0.0.5

License

MIT

Unpacked Size

41.4 kB

Total Files

20

Last publish

Collaborators

  • lazerwalker