npm run build:bytewars y recarga la página.
Bytecode generado
0 instr.Ejecución en la VM
listoPila
Variables
Estado
Juego en tiempo real
en espera| # | Tipo | Lexema | Línea:col |
|---|
Compila un programa para ver el árbol.
| Nombre | Tipo | Valor actual |
|---|
Instrucciones
SET x 3
MOVE RIGHT
SHOOT
SHIELD
WAIT 10
REPEAT 5 { ... }
WHILE condicion { ... }
IF condicion { ... } ELSE { ... }
ENDFunciones y variables
enemy_ahead() enemy_left() enemy_right() random(n) health, score, enemies_left level, shield, ticks
Del código a la nave, sin salir del navegador
El compilador, la máquina virtual y el juego están escritos en C. Emscripten los convierte a WebAssembly para que la página los ejecute directamente.
bytewars_cli y bytewars.exe para pruebas y demostración nativa.Una gramática pequeña, un juego completo
Byte Wars Language está diseñado para que la estrategia se lea como un programa y se ejecute como una máquina de verdad.
Gramática
programa := sentencia*
sentencia := 'SET' IDENT expresion
| 'MOVE' ('UP'|'DOWN'|'LEFT'|'RIGHT')
| 'SHOOT' | 'SHIELD'
| 'WAIT' expresion
| 'REPEAT' expresion bloque
| 'WHILE' expresion bloque
| 'IF' expresion bloque ('ELSE' bloque)?
bloque := '{' sentencia* '}'
expresion := comparaciones, sumas, productos,
unarios, llamadas y paréntesis
Funciones integradas
| Nombre | Devuelve |
|---|---|
enemy_ahead() | 1 si hay un enemigo delante |
enemy_left() | 1 si hay un enemigo a la izquierda |
enemy_right() | 1 si hay un enemigo a la derecha |
random(n) | Entero entre 0 y n-1 |
health, score | Variables reservadas de solo lectura |
enemies_left, level, shield, ticks | Estado del juego en tiempo real |
La máquina virtual ejecuta esto
Cada instrucción tiene un opcode, un operando opcional y la línea del fuente para depurar.
| Opcode | Operando | Efecto | Descripción |
|---|---|---|---|
PUSH | número | +1 pila | Empuja una constante |
LOAD / STORE | variable | +1 / −1 | Lee o escribe una variable |
ADD SUB MUL DIV MOD | — | −1 | Aritmética de pila |
LT GT LE GE EQ NE | — | −1 | Comparaciones (1 o 0) |
JMP JZ JNZ | dirección | 0 / −1 | Saltos y control de flujo |
CALL | builtin | variable | Llama a enemy_ahead(), random(n)… |
MOVE_* SHOOT SHIELD | — | 0 | Acciones sobre el juego |
WAIT | — | −1 | Espera n ticks de juego |
REPEAT_START / REPEAT_END | dirección | −1 / 0 | Bucles contados |
HALT | — | 0 | Detiene la VM |
Un solo núcleo, dos destinos
Runner nativo para Windows
bytewars.exe compila y simula programas BWL desde la consola, usando exactamente el mismo núcleo C que la versión web.
