Как видно из названия, заточен весь комплект на быстрое создания 2d ретро игр. Более 20 игр уже готовы, несколько в разработке.
Чтобы поиграть онлайн, перейдите по ссылке игры ниже, выберете «compile» и затем «run».
TankCity, 1916, FourInaRow, BlackJack, ZombieDefence, MicroRace, DwarfClicker, Galaxies, Memories, NinjaEscape, Mines, Breakout, TowerDefence, FlappyBird, WormBlast, ESProgue, Snake, FishLife, Columns, MarsAttack, CityRunner, Asteroids, Bashe…
Отдельный плюс в том, что эмулятор LGE virtual machine помимо онлайн версии написан и для ESPboy гаджета, который имеет сходную с LGE VM переферию воплощенную в железе и про который я уже писал.
- цветной экран разрешением 128х128,
- 8 кнопок,
- однобитный звук
- RGB светодиод
- подходящий по скорости эмуляции микроконтроллер ESP8266
- встроенную флеш память с файловой системой SPIFFS
Таким образом можно загружать откомпилированные в онлайн LGE SDK игры в портативный ESPboy, брать его с собой и с интересом коротать свободные минуты.
Загружать игры можно, как по проводу (см. заргрузка файлов на spiffs), так и через WiFi. Удерживая при запуске ESPboy кнопку «B», мы превращаем гаджет в точку доступа, и подключившись к ее WiFi сети с именем «ESPboy» через браузер, попадаем в веб интерфейс файловой системы, где можно, как удалять файлы, так и загружать новые.
Остается только собрать гаджет, на что есть схемы, инструкции и kit набор для сборки, который вскоре будет доступен на tindie.com.
Наигравшись в существующие игры – можно довольно быстро начать писать свои.
Краткая спецификация LGE виртуальной машины:
- Набор из 108 инструкций навеян CHIP8/SCHIP и микропроцессором MOS6502.
- 16 регистров по 16 бит, нулевой регистр является указателем стека.
- Каждая инструкция двухбайтовая, некоторые инструкции содержат после себя два байта данных
- Адресуемая память 20Kб.
- Кроме обычных арифметических инструкций и инструкций перемещения данных, есть отдельные инструкции для работы со спрайтами, экраном и звуком.
- Размер экрана 128х128 пикселей, 16 цветов на точку, что занимает 8Kб памяти, еще столько же занимает буфер для рисования спрайтов и частиц.
- Обновление экрана около 20 кадров в секунду.
- Можно рисовать тайлы и 32 спрайта размером до 128х128 пикселей с возможностью вращения и зеркалирования.
- Поддерживается работа с частицами.
- Для экономии памяти можно использовать однобитные изображения или RLE сжатие.
- Присутствует упрощенная физика: обнаружение столкновений спрайтов со спрайтами и тайлами, разрешение столкновений, гравитация.
- Экран обновляется построчно, только если в строке произошло изменение пикселей.
- Скорость VM в зависимости от того, сколько строк отрисовывается в кадре, варьируется от 100 тысяч до 900 тысяч операций в секунду.
- Можно использовать разные цветные экраны, есть программное растягивание изображения.
Чтобы не писать напрямую в опкодах, в SDK входит самописный компилятор «LGE С», представляющий из себя «C» образный язык высокого уровня. На данный момент этому компилятору далеко до полной поддержки стандартов языка C и при компиляции можно легко столкнуться с непонятной ошибкой в непонятном месте. Зато он быстр, ведь он занимает меньше 2000 строк исходного кода, а также постоянно развивается.
LGE онлайн среда разработки с компилятором и эмулятором
Описание виртуальной машины LGE
Руководство по LGE компилятору «C» образного языка
Исходный код игр LGE на LGE C
На LGE SDK уже сделано не мало игр и можно продолжать создавать новые прямо сейчас, однако до совершенства далеко. Если кто-то желает принять участие в создании новых игрушек на LGE или улучшении самого LGE SDK, а так же если кто-то заинтересовался сборкой ESPboy, добро пожаловать на форум www.espboy.com.
Там постараемся ответить на все вопросы и помочь в реализации идей.
Для настойчивых и заинтересовавшихся ниже короткий пример игры на LGE SDK. Занимает меньше ста строк и размером не более 1Kб в скомпилированном виде. Чтобы его запустить, необходимо зайти на онлайн LGE SDK, скопировать код в окошко «source», выбрать «compile» и затем «run».
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;
}
}
Всем добра и успехов в творчестве.
С уваженеием,
Роман