游戏机和自己动手做的游戏。 小游戏引擎+ ESPboy

Little Game Engine(LGE)是一种虚拟配置的虚拟游戏机,具有一个虚构的处理器和一个在线Web-SDK ,它由类似C的代码编译器组装成汇编器,并进一步重新编译为机器代码,并能够在同一位置在线执行此代码。仿真器。



顾名思义,为了快速创建2d复古游戏,整套设备经过了改进。 目前已经准备好20多种游戏,其中一些还在开发中。



要在线玩,请点击下面的游戏链接,选择“编译”,然后选择“运行”。

TankCity1916FourInaRowBlackJackZombieDefenceMicroRaceDwarfClicker ,星系,内存, NinjaEscape ,矿山,突围, TowerDefence ,FlappyBird, WormBlastESProgue ,Snake, FishLifeColumnsMarsAttack ,CityRunner, AsteroAstero



一个单独的优点是,除了在线版本外,LGE虚拟机仿真器还为ESPboy小工具编写,该小工具与硬件中包含的LGE VM具有相似的外围功能,我已经写过

  • 128x128彩色屏幕,
  • 8个按钮
  • 一点声音
  • RGB LED
  • 适用于仿真速度的ESP8266微控制器
  • 带有SPIFFS文件系统的内置闪存


这样,您可以将编译成在线LGE SDK的游戏下载到便携式ESPboy中,随身携带,并有兴趣地度过闲暇时光。



您既可以通过有线(也可以通过spiff下载文件 )或通过WiFi下载游戏。 在启动ESPboy时按住“ B”按钮,我们将小工具变成一个接入点,并通过浏览器连接到名称为“ ESPboy”的WiFi网络,然后进入文件系统的Web界面,您可以在其中删除文件或上传新文件。



剩下的只是组装小工具,有关小工具的图表说明和组装工具包,将很快在tindie.com上提供。
在现有游戏中玩够了-您可以很快开始编写自己的游戏。



LGE虚拟机的简要规格:

  • CHIP8 / SCHIP和MOS6502微处理器启发了一组108条指令。
  • 16个16位寄存器,零寄存器是指向堆栈的指针。
  • 每条指令为双字节,有些指令包含两个字节的数据
  • 可寻址内存20Kb。
  • 除了通常的算术指令和移动数据指令外,还有用于处理精灵,屏幕和声音的单独指令。
  • 屏幕尺寸为128x128像素,每个点16种颜色,占用8Kb的内存,用于绘制精灵和粒子的缓冲区数量相同。
  • 屏幕刷新速度约为每秒20帧。
  • 您可以绘制大小不超过128x128像素的图块和32个精灵,并可以旋转和镜像。
  • 支持使用粒子。
  • 为了节省内存,您可以使用单位图像或RLE压缩。
  • 简化了物理过程:检测小精灵与小精灵和图块的碰撞,碰撞分辨率,重力。
  • 仅当行已更改像素时,才逐行更新屏幕。
  • VM速度取决于每秒绘制多少行,每秒的操作数为10万至90万。
  • 您可以使用不同的彩色屏幕,并且可以进行软件图像拉伸。

为了不直接用操作码编写,SDK中包含了自编写的编译器“ LGE C”,这是一种“ C”象征性高级语言。 目前,该编译器还远未完全支持C语言标准,并且在编译时,您很容易在无法理解的地方遇到无法理解的错误。 但这是快速的,因为它需要少于2000行的源代码,并且还在不断发展。

具有编译器和仿真器的LGE在线开发环境
LGE虚拟机的说明
LGE编译器“ C”图形语言指南
LGE C上LGE游戏的源代码

在LGE SDK上已经制作了不少游戏,您现在可以继续创建新游戏,但是它们远非完美。 如果有人想参与在LGE上创建新玩具或改善LGE SDK本身,或者如果有人有兴趣构建ESPboy,请访问论坛www.espboy.com
我们将尝试回答所有问题,并帮助您实施想法。

对于那些执着和感兴趣的人,以下是LGE SDK上的游戏的简短示例。 它以编译形式占用不到一百行且不超过1Kb。 要运行它,您需要转到在线LGE SDK,将代码复制到“源”框中,选择“编译”,然后“运行”。

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; } } 


一切都好,创造力成功。

分别地
一本小说

Source: https://habr.com/ru/post/zh-CN472114/


All Articles