Consola de jogos e jogos "faça você mesmo". Little Game Engine + ESPboy

O Little Game Engine (LGE) é um console de jogos virtual de configuração fictícia, com um processador fictício e um SDK da web on-line , consistindo em um compilador de código do tipo C no assembler e uma recompilação adicional no código da máquina com a capacidade de executar esse código no mesmo local, on-line no emulador.



Como o nome indica, todo o conjunto é afiado para a criação rápida de 2d jogos retro. Mais de 20 jogos estão prontos, vários em desenvolvimento.



Para jogar online, siga o link do jogo abaixo, selecione "compilar" e depois "executar".

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



Uma vantagem separada é que o emulador de máquina virtual LGE, além da versão online, também foi escrito para o gadget ESPboy , que possui uma periferia semelhante à VM LGE incorporada no hardware e sobre a qual eu já escrevi .

  • Tela colorida de 128 x 128,
  • 8 botões
  • som de bit único
  • LED RGB
  • Microcontrolador ESP8266 adequado para velocidade de emulação
  • memória flash embutida com o sistema de arquivos SPIFFS


Dessa forma, você pode baixar jogos compilados no LGE SDK on-line em um ESPboy portátil, levá-lo com você e passar minutos gratuitos com juros.



Você pode fazer o download de jogos por cabo (consulte o download de arquivos em spiffs ) e via Wi-Fi. Mantendo pressionado o botão "B" ao iniciar o ESPboy, transformamos o dispositivo em um ponto de acesso e, conectando-o à sua rede WiFi com o nome "ESPboy" por meio de um navegador, chegamos à interface da web do sistema de arquivos, onde é possível excluir arquivos ou fazer upload de novos.



Resta apenas montar o gadget, para o qual existem diagramas , instruções e um kit de kit para montagem, que em breve estará disponível no tindie.com.
Tendo jogado o suficiente em jogos existentes - você pode começar rapidamente a escrever seus próprios.



Breve especificação da máquina virtual LGE:

  • Um conjunto de 108 instruções é inspirado no CHIP8 / SCHIP e no microprocessador MOS6502.
  • 16 registradores de 16 bits, o registrador zero é um ponteiro para a pilha.
  • Cada instrução é de byte duplo, algumas instruções contêm dois bytes de dados
  • Memória endereçável 20Kb.
  • Além das instruções aritméticas comuns e das instruções para mover dados, há instruções separadas para trabalhar com sprites, tela e som.
  • O tamanho da tela é de 128x128 pixels, 16 cores por ponto, o que requer 8 KB de memória, a mesma quantidade de buffer para desenhar sprites e partículas.
  • Atualização da tela em cerca de 20 quadros por segundo.
  • Você pode desenhar blocos e 32 sprites de até 128x128 pixels, com a possibilidade de rotação e espelhamento.
  • O trabalho com partículas é suportado.
  • Para economizar memória, você pode usar imagens de um bit ou compactação RLE.
  • A física é simplificada: detecção de colisões de sprites com sprites e ladrilhos, resolução de colisões, gravidade.
  • A tela é atualizada linha por linha somente se uma linha tiver alterado pixels.
  • A velocidade da VM, dependendo de quantas linhas são desenhadas no quadro, varia de 100 mil a 900 mil operações por segundo.
  • Você pode usar telas coloridas diferentes, há um alongamento da imagem do software.

Para não escrever diretamente nos opcodes, o compilador auto-escrito "LGE C" é incluído no SDK, que é uma linguagem figurativa de alto nível "C". No momento, esse compilador está longe de oferecer suporte total aos padrões da linguagem C e, ao compilar, é possível encontrar facilmente um erro incompreensível em um local incompreensível. Mas é rápido, porque leva menos de 2000 linhas de código fonte e também está em constante evolução.

Ambiente de desenvolvimento on-line da LGE com compilador e emulador
Descrição da máquina virtual LGE
Guia para a linguagem figurativa “C” do LGE Compiler
Código-fonte para jogos LGE no LGE C

Poucos jogos já foram feitos no LGE SDK e você pode continuar criando novos agora, mas eles estão longe de serem perfeitos. Se alguém quiser participar da criação de novos brinquedos no LGE ou melhorar o próprio LGE SDK, ou se alguém estiver interessado em criar o ESPboy, seja bem-vindo ao fórum www.espboy.com .
Vamos tentar responder a todas as perguntas e ajudar na implementação de idéias.

Para aqueles que são persistentes e interessados, abaixo está um pequeno exemplo de um jogo no LGE SDK. Leva menos de cem linhas e não mais de 1 KB na forma compilada. Para executá-lo, você precisa acessar o LGE SDK on-line, copiar o código na caixa "fonte", selecionar "compilar" e depois "executar".

Um exemplo de um jogo simples no 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; } } 


Tudo de bom e sucesso na criatividade.

Respeitosamente,
Um romance

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


All Articles