Consola de juegos y juegos de bricolaje. Little Game Engine + ESPboy

Little Game Engine (LGE) es una consola de juegos virtual de configuración ficticia, con un procesador ficticio y un SDK web en línea , que consiste en un compilador de código tipo C en ensamblador y una nueva compilación en código de máquina con la capacidad de ejecutar este código en el mismo lugar, en línea en emulador



Como su nombre lo indica, todo el conjunto se agudiza para la creación rápida de juegos retro 2D. Más de 20 juegos están listos, varios en desarrollo.



Para jugar en línea, siga el enlace del juego a continuación, seleccione "compilar" y luego "ejecutar".

TankCity , 1916 , FourInaRow , BlackJack , ZombieDefence , MicroRace , DwarfClicker , Galaxies, Memories, NinjaEscape , Mines, Breakout, TowerDefence , FlappyBird, WormBlast , ESProgue , Snake, FishLife , Columns , MarsAttack , CityRunner, Astero, Astero



Una ventaja adicional es que el emulador de máquina virtual LGE, además de la versión en línea, está escrito para el dispositivo ESPboy , que tiene una periferia similar a la LGE VM incorporada en el hardware y sobre la que ya escribí .

  • Pantalla a color de 128x128,
  • 8 botones
  • sonido de un solo bit
  • LED RGB
  • Microcontrolador ESP8266 adecuado para velocidad de emulación
  • memoria flash incorporada con el sistema de archivos SPIFFS


De esta manera, puede descargar juegos compilados en el LGE SDK en línea en un ESPboy portátil, llevarlo con usted y pasar minutos gratis con interés.



Puede descargar juegos tanto por cable (consulte descarga de archivos en spiffs ) como a través de WiFi. Manteniendo presionado el botón "B" al iniciar ESPboy, convertimos el dispositivo en un punto de acceso y, al conectarnos a su red WiFi con el nombre "ESPboy" a través de un navegador, accedemos a la interfaz web del sistema de archivos, donde puede eliminar archivos o cargar nuevos.



Solo queda ensamblar el gadget, para el cual hay diagramas , instrucciones y un kit de kit para ensamblar, que pronto estará disponible en tindie.com.
Después de haber jugado lo suficiente en los juegos existentes, puedes comenzar a escribir el tuyo rápidamente.



Breve especificación de la máquina virtual LGE:

  • Un conjunto de 108 instrucciones está inspirado en CHIP8 / SCHIP y el microprocesador MOS6502.
  • 16 registros de 16 bits, el registro cero es un puntero a la pila.
  • Cada instrucción es de doble byte, algunas instrucciones contienen dos bytes de datos.
  • Memoria direccionable 20Kb.
  • Además de las instrucciones aritméticas habituales y las instrucciones para mover datos, hay instrucciones separadas para trabajar con sprites, pantalla y sonido.
  • El tamaño de la pantalla es de 128x128 píxeles, 16 colores por punto, lo que requiere 8Kb de memoria, la misma cantidad de búfer para dibujar sprites y partículas.
  • Actualización de pantalla a unos 20 fotogramas por segundo.
  • Puede dibujar mosaicos y 32 sprites de hasta 128x128 píxeles de tamaño con la posibilidad de rotación y reflejo.
  • El trabajo con partículas es compatible.
  • Para ahorrar memoria, puede usar imágenes de un solo bit o compresión RLE.
  • Hay una física simplificada: detección de colisiones de sprites con sprites y azulejos, resolución de colisión, gravedad.
  • La pantalla se actualiza línea por línea solo si una fila ha cambiado píxeles.
  • La velocidad de la VM, dependiendo de cuántas líneas se dibujan en el marco, varía de 100 mil a 900 mil operaciones por segundo.
  • Puede usar diferentes pantallas a color, hay estiramiento de imagen de software.

Para no escribir directamente en códigos de operación, el compilador auto-escrito "LGE C" está incluido en el SDK, que es un lenguaje figurativo de alto nivel "C". Por el momento, este compilador está lejos de ser compatible con los estándares del lenguaje C, y al compilar, puede encontrar fácilmente un error incomprensible en un lugar incomprensible. Pero es rápido, ya que requiere menos de 2000 líneas de código fuente y también está en constante evolución.

Entorno de desarrollo en línea LGE con compilador y emulador
Descripción de la máquina virtual LGE
Guía para el lenguaje figurativo del compilador LGE "C"
Código fuente para juegos LGE en LGE C

Ya no se han creado algunos juegos en el SDK de LGE, y puede continuar creando nuevos en este momento, pero están lejos de ser perfectos. Si alguien quiere participar en la creación de nuevos juguetes en LGE o mejorar el SDK de LGE, o si alguien está interesado en construir ESPboy, bienvenido al foro www.espboy.com .
Intentaremos responder todas las preguntas y ayudar en la implementación de ideas.

Para aquellos que son persistentes e interesados, a continuación hay un breve ejemplo de un juego en el SDK de LGE. Ocupa menos de cien líneas y no más de 1Kb en forma compilada. Para ejecutarlo, debe ir al LGE SDK en línea, copiar el código en el cuadro "fuente", seleccionar "compilar" y luego "ejecutar".

Un ejemplo de un juego simple en LGE C
int stickCount; char key,previouseKey,takenSticks; void redraw(){ int i; //   setcolor(2); //   for(i = 0; i < stickCount; i++) line(22 + i * 6, 74, 22 + i * 6, 84); //   setcolor(11); //  for(i = stickCount; i < 15; i++) line(22 + i * 6, 74, 22 + i * 6, 84); //     setcolor(1); //   delayredraw(); } void playersMove(){ //    ,     .  while(key == previouseKey){ key = getkey(); } while(key != KEY_LEFT && key != KEY_DOWN && key != KEY_RIGHT){ key = getkey(); } if(key & KEY_LEFT){ takenSticks = 1; }else if(key & KEY_DOWN){ takenSticks = 2; }else{ takenSticks = 3; } printf("%d, ", takenSticks); stickCount -= takenSticks; previouseKey = key; } void computersMove(){ if(stickCount % 4){ //   ,    takenSticks = stickCount % 4; }else{ //      takenSticks = 1 + random(1); } stickCount -= takenSticks; printf("%d, ", takenSticks); } void game(){ // stickCount = 15; clearscreen(); //       gotoxy(8,0); puts(""); gotoxy(2,1); puts(" 1,2  3 .  ,   . :\n"); // 27,25  26   printf(" %c 1 %c 2 %c 3", 27, 25, 26); gotoxy(0,12); redraw(); while(1){ playersMove(); if(stickCount <= 0){ gotoxy(3,8); puts(" "); return; } redraw(); computersMove(); redraw(); if(stickCount <= 0){ gotoxy(3,8); puts(" "); return; } } } void main(){ while(1){ game(); //  settimer(1,1000); while(gettimer(1)){} while(getkey() == 0){} previouseKey = key; } } 


Todo bien y éxito en creatividad.

Respetuosamente
Una novela

Source: https://habr.com/ru/post/472114/


All Articles