Befunge был… Попробуем это в Canvas
Eсли Befunge использует ASCII-символы, то я попробовал сделать собственный эзотерический язык с использованием HTML5-Canvas с цветными операциями…
CodePen/jsFiddle После загрузки страницы выбирете «File->Demo» для запуска демонстрации… Правым кликом можно вызвать меню выбора цвета. Каждый цвет ассоциируется со своей операцией:
Черчение диагональных линиий запрещено и определяет регион выделения, который можно перемещать, копировать («Edit->Copy») и переносить («Edit->Cut»)… P.S.: Естественно, код пока очень сырой, имеет много багов и отсутствие задуманного функционала… Видео Демонстрации [map:"Номер №1"] 0123456789 0246897531 1357986420 [/map] [map:"Номер №2"] 1470369258 0369258147 2581470369 [/map] ![]() :) :stop: :dance: :no: :write: :-/ :help: :-? :p :( :haha: :agree: :yes: :lol: :cray: :thanks: ;) :nono: :blink: :D :-E :victory: <head> <script> var szPage = "https://javascript.ru/forum/project/74942-befunge-byl%E2%80%A6-poprobuem-ehto-v-canvas.html"; var hXML = new XMLHttpRequest(); var hSelect = null; var hSecret = null; var hCanvas = null; var hCtx = null; var aMaps = {}; function GetUp() { var html; var res = []; hXML.open("GET", szPage, false); hXML.send(); if(200 != hXML.status) { alert(hXML.status + ": " + hXML.statusText); } else { hSecret.innerHTML = hXML.responseText; hPosts = hSecret.querySelector("#posts").querySelectorAll("table[id^=post]"); hPosts.forEach (function(hPost) { hRows = hPost.rows; hThread = hPost.querySelector(".thread-row"); hUserLink = hRows[1].querySelector(".bigusername"); hUserPost = hRows[2].querySelector("div[id^=post_message_]"); nick = hUserLink.textContent; post = hUserPost.textContent; pics = hUserPost.querySelectorAll("img"); //rank = hUserLink maps = post.match(/(\[map:"(.+)"]([^\0]+?)\[\/map])+/gm); if(maps) maps .forEach (function(map) { console.log(map); mp = map.match(/(\[map:"(.+)"]([^\0]+)\[\/map])+/m); console.log(mp); if(mp) { place = mp[2]; design = mp[3]; if(!(nick in aMaps)) aMaps[nick] = []; aMaps[nick][place] = { design :design, images :pics }; hSelect.add(new Option(nick + ":" + place, place), null); res.push("«" + nick + "»:" + place + "\r\n" + design); } }); // res.push("«" + nick + "»\r\n" + hUserPost.post); }); } } function showMap(el) { var info = el.selectedOptions[0].textContent.split(/:/); var nick = info[0]; var place = info[1]; var map = aMaps[nick][place]; var y = 0; // hCtx.clearRect(0, 0, hCanvas.width, hCanvas.height); // map .design.split(/\r?\n/) .forEach (function(plot) { var x = 0; while(plot.length) { var c = plot.charAt(0); if(isFinite(c) && map.images.length > +c) hCtx.drawImage(map.images[c], x * 24, y * 24); plot = plot.substr(1); ++ x; } ++ y; }); } function main() { hSecret = document.createElement("html"); hSelect = document.querySelector("select"); hCanvas = document.querySelector("canvas"); hCtx = hCanvas.getContext("2d"); GetUp(); setTimeout("showMap(hSelect)", 1000); } </script> </head> <body onload='main()'> <select onchange='showMap(this)'></select><br/> <canvas width=640px height=480px></canvas> </body> </html> |
Часовой пояс GMT +3, время: 13:28. |