- PVSM.RU - https://www.pvsm.ru -
Little Game Engine (LGE) [1] – это виртуальная игровая консоль выдуманной конфигурации, с выдуманным процессором и онлайн web-SDK [2], состоящий из компилятора С-подобного кода в ассемблер и дальнейшей перекомпиляцией его в машинный код с возможностью исполнения этого кода там же, в онлайн в эмуляторе.
Как видно из названия, заточен весь комплект на быстрое создания 2d ретро игр. Более 20 игр уже готовы, несколько в разработке.
Чтобы поиграть онлайн, перейдите по ссылке игры ниже, выберете «compile» и затем «run».
TankCity [3], 1916 [4], FourInaRow [5], BlackJack [6], ZombieDefence [7], MicroRace [8], DwarfClicker [9], Galaxies, Memories, NinjaEscape [10], Mines, Breakout, TowerDefence [11], FlappyBird, WormBlast [12], ESProgue [13], Snake, FishLife [14], Columns [15], MarsAttack [16], CityRunner, Asteroids, Bashe [17]…
Отдельный плюс в том, что эмулятор LGE virtual machine помимо онлайн версии написан и для ESPboy гаджета [18], который имеет сходную с LGE VM переферию воплощенную в железе и про который я уже писал [19].
Таким образом можно загружать откомпилированные в онлайн LGE SDK игры в портативный ESPboy, брать его с собой и с интересом коротать свободные минуты.
Загружать игры можно, как по проводу (см. заргрузка файлов на spiffs [20]), так и через WiFi. Удерживая при запуске ESPboy кнопку «B», мы превращаем гаджет в точку доступа, и подключившись к ее WiFi сети с именем «ESPboy» через браузер, попадаем в веб интерфейс файловой системы, где можно, как удалять файлы, так и загружать новые.
Остается только собрать гаджет, на что есть схемы [21], инструкции [22] и kit набор для сборки, который вскоре будет доступен на tindie.com.
Наигравшись в существующие игры – можно довольно быстро начать писать свои.
Краткая спецификация LGE виртуальной машины:
Чтобы не писать напрямую в опкодах, в SDK входит самописный компилятор «LGE С», представляющий из себя «C» образный язык высокого уровня. На данный момент этому компилятору далеко до полной поддержки стандартов языка C и при компиляции можно легко столкнуться с непонятной ошибкой в непонятном месте. Зато он быстр, ведь он занимает меньше 2000 строк исходного кода, а также постоянно развивается.
LGE онлайн среда разработки с компилятором и эмулятором [2]
Описание виртуальной машины LGE [23]
Руководство по LGE компилятору «C» образного языка [24]
Исходный код игр LGE на LGE C [25]
На LGE SDK уже сделано не мало игр и можно продолжать создавать новые прямо сейчас, однако до совершенства далеко. Если кто-то желает принять участие в создании новых игрушек на LGE или улучшении самого LGE SDK, а так же если кто-то заинтересовался сборкой ESPboy, добро пожаловать на форум www.espboy.com [26].
Там постараемся ответить на все вопросы и помочь в реализации идей.
Для настойчивых и заинтересовавшихся ниже короткий пример игры на 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;
}
}
Всем добра и успехов в творчестве.
С уваженеием,
Роман
Автор: RomanSk
Источник [27]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/333728
Ссылки в тексте:
[1] Little Game Engine (LGE): https://hackaday.io/project/164205-esp-little-game-engine
[2] онлайн web-SDK: https://corax89.github.io/esp8266Game/index.html
[3] TankCity: https://corax89.github.io/esp8266Game/index.html?src=8a1a7364aaea25625eadc971dc383644
[4] 1916: https://corax89.github.io/esp8266Game/index.html?src=ac92a491cb80cf65b7741877bfb21e2a
[5] FourInaRow: https://corax89.github.io/esp8266Game/index.html?src=2aa481d0b7511c7c22d8faa971475b6f
[6] BlackJack: https://corax89.github.io/esp8266Game/index.html?src=3df6f51b6bb06f472bf6beb839a1f57d
[7] ZombieDefence: https://corax89.github.io/esp8266Game/index.html?src=0efd4445900ed81410c1cc03eb03ec1d
[8] MicroRace: https://corax89.github.io/esp8266Game/index.html?src=9d1af8e3aac1d6616c990ff52503abf7
[9] DwarfClicker: https://corax89.github.io/esp8266Game/index.html?src=3a428b5cf4409cb87a9e59e08d74d3bb
[10] NinjaEscape: https://corax89.github.io/esp8266Game/index.html?src=d7ddb9590c429f3f5818cd99be6588aa
[11] TowerDefence: https://corax89.github.io/esp8266Game/index.html?src=6d26cfe7c9a3518fdf3bfacc81884a4e
[12] WormBlast: https://corax89.github.io/esp8266Game/index.html?src=e6615c103455495539efa5e0fc71bbd9
[13] ESProgue: https://corax89.github.io/esp8266Game/index.html?src=a6f1966fef4e388240743121f228570b
[14] FishLife: https://corax89.github.io/esp8266Game/index.html?src=10229352aa5d8061251ef1ab9c4e6e2c
[15] Columns: https://corax89.github.io/esp8266Game/index.html?src=ff9900f564775ddda422d28958b737c0
[16] MarsAttack: https://corax89.github.io/esp8266Game/index.html?src=fa37869a6fad2bf9e098ee34f621ba97
[17] Bashe: https://corax89.github.io/esp8266Game/index.html?src=6ca18ff8b2718c059d07c93374145d36
[18] ESPboy гаджета: https://hackaday.io/project/164830-espboy-games-iot-stem-for-education-fun
[19] уже писал: https://habr.com/ru/post/469647/
[20] заргрузка файлов на spiffs: https://www.youtube.com/watch?v=25eLIdLKgHs
[21] схемы: https://easyeda.com/roman.sokolov/espboy-rev2-0a
[22] инструкции: https://hackaday.io/project/164830/instructions
[23] Описание виртуальной машины LGE: https://github.com/corax89/esp8266_game_engine/blob/master/esp_little_game_engine_description.pdf
[24] Руководство по LGE компилятору «C» образного языка: https://github.com/corax89/esp8266_game_engine/blob/master/esp_little_game_engine_user_guide.pdf
[25] Исходный код игр LGE на LGE C: https://github.com/corax89/game_engine_for_esp8266_with_compiler/tree/master/example
[26] www.espboy.com: http://www.espboy.com
[27] Источник: https://habr.com/ru/post/472114/?utm_campaign=472114&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.