Console de jeux et jeux de bricolage. Little Game Engine + ESPboy

Little Game Engine (LGE) est une console de jeu virtuelle d'une configuration fictive, avec un processeur fictif et un web-SDK en ligne , composé d'un compilateur de code de type C en assembleur et d'une recompilation supplémentaire en code machine avec la possibilité d'exécuter ce code au même endroit, en ligne dans émulateur.



Comme son nom l'indique, l'ensemble est affiné pour la création rapide de jeux rétro 2D. Plus de 20 jeux sont prêts, plusieurs en développement.



Pour jouer en ligne, suivez le lien du jeu ci-dessous, sélectionnez «compiler» puis «exécuter».

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



Un autre avantage est que l'émulateur de machine virtuelle LGE, en plus de la version en ligne, est écrit pour le gadget ESPboy , qui a une périphérie similaire à la VM LGE incorporée dans le matériel et à propos de laquelle j'ai déjà écrit .

  • Écran couleur 128x128,
  • 8 boutons
  • son simple bit
  • LED RGB
  • Microcontrôleur ESP8266 adapté à la vitesse d'émulation
  • mémoire flash intégrée avec le système de fichiers SPIFFS


De cette façon, vous pouvez télécharger des jeux compilés dans le SDK LGE en ligne dans un ESPboy portable, l'emporter avec vous et passer des minutes gratuites avec intérêt.



Vous pouvez télécharger des jeux à la fois par fil (voir téléchargement de fichiers sur spiffs ) et via WiFi. En maintenant le bouton «B» enfoncé lors du démarrage d'ESPboy, nous transformons le gadget en point d'accès, et en nous connectant à son réseau WiFi avec le nom «ESPboy» via un navigateur, nous arrivons à l'interface Web du système de fichiers, où vous pouvez supprimer des fichiers ou en télécharger de nouveaux.



Il ne reste plus qu'à assembler le gadget, pour lequel il existe des schémas , des instructions et un kit kit à assembler, qui sera prochainement disponible sur tindie.com.
Ayant suffisamment joué dans les jeux existants, vous pouvez commencer à écrire le vôtre assez rapidement.



Brève spécification de la machine virtuelle LGE:

  • Un ensemble de 108 instructions est inspiré de CHIP8 / SCHIP et du microprocesseur MOS6502.
  • 16 registres de 16 bits, le registre zéro est un pointeur vers la pile.
  • Chaque instruction est codée sur deux octets, certaines instructions contiennent deux octets de données
  • Mémoire adressable 20Kb.
  • En plus des instructions arithmétiques habituelles et des instructions pour déplacer des données, il existe des instructions distinctes pour travailler avec les images-objets, l'écran et le son.
  • La taille de l'écran est de 128x128 pixels, 16 couleurs par point, ce qui prend 8 Ko de mémoire, la même quantité de tampon pour dessiner les sprites et les particules.
  • Rafraîchissement de l'écran à environ 20 images par seconde.
  • Vous pouvez dessiner des tuiles et 32 ​​sprites jusqu'à 128x128 pixels avec la possibilité de rotation et de mise en miroir.
  • Le travail avec des particules est pris en charge.
  • Pour économiser de la mémoire, vous pouvez utiliser des images mono-bit ou la compression RLE.
  • Il y a la physique simplifiée: détection des collisions de sprites avec des sprites et des tuiles, résolution des collisions, gravité.
  • L'écran est mis à jour ligne par ligne uniquement si une ligne a changé de pixels.
  • La vitesse de la machine virtuelle, en fonction du nombre de lignes tracées dans le cadre, varie de 100 000 à 900 000 opérations par seconde.
  • Vous pouvez utiliser différents écrans couleur, il y a un étirement d'image du logiciel.

Afin de ne pas écrire directement dans les opcodes, le compilateur auto-écrit «LGE C» est inclus dans le SDK, qui est un langage figuratif de haut niveau «C». Pour le moment, ce compilateur est loin d'être entièrement compatible avec les normes du langage C, et lors de la compilation, vous pouvez facilement rencontrer une erreur incompréhensible dans un endroit incompréhensible. Mais il est rapide, car il prend moins de 2000 lignes de code source et évolue également en permanence.

Environnement de développement en ligne LGE avec compilateur et émulateur
Description de la machine virtuelle LGE
Guide du langage figuratif «C» du compilateur LGE
Code source des jeux LGE sur LGE C

Pas mal de jeux ont déjà été créés sur le SDK LGE, et vous pouvez continuer d'en créer de nouveaux en ce moment, mais ils sont loin d'être parfaits. Si quelqu'un veut participer à la création de nouveaux jouets sur LGE ou à l'amélioration du SDK LGE lui-même, ou si quelqu'un est intéressé à construire ESPboy, bienvenue sur le forum www.espboy.com .
Nous essaierons de répondre à toutes les questions et d'aider à la mise en œuvre des idées.

Pour ceux qui sont persistants et intéressés, voici un petit exemple de jeu sur le SDK LGE. Il prend moins d'une centaine de lignes et pas plus de 1 Ko sous forme compilée. Pour l'exécuter, vous devez vous rendre sur le SDK LGE en ligne, copier le code dans la case «source», sélectionner «compiler» puis «exécuter».

Un exemple de jeu simple sur 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; } } 


Tout bon et succès en créativité.

Respectueusement,
Un roman

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


All Articles