Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.08.2018, 22:47
Аватар для Paguo-86PK
Профессор
Отправить личное сообщение для Paguo-86PK Посмотреть профиль Найти все сообщения от Paguo-86PK
 
Регистрация: 16.09.2009
Сообщений: 253

Befunge был… Попробуем это в Canvas
Eсли Befunge использует ASCII-символы, то я попробовал сделать собственный эзотерический язык с использованием HTML5-Canvas с цветными операциями…
CodePen/jsFiddle

После загрузки страницы выбирете «File->Demo» для запуска демонстрации…
Правым кликом можно вызвать меню выбора цвета.
Каждый цвет ассоциируется со своей операцией:
  • blacK: Keen - Следовать дальше
  • Red: Register - Занести регистры в стек
  • Orange: Obscure - Отверстие перехода на другую сторону
  • Yellow: Yield - Уступить ячейку (перепрыгнуть одну ячейку)
  • Green: Gate - Порт
  • Cyan: Call - Вызов подпрограммы
  • Blue: Branch - Ветвление
  • Magenta: Mathematic - Выполнить вычислительные действия над регистрами в стеке
  • White: When - Условное выполнение
  • Silver/Grey - Конец
На поле можно рисовать горизонтальные и вертикальные линии.
Черчение диагональных линиий запрещено и определяет регион выделения, который можно перемещать, копировать («Edit->Copy») и переносить («Edit->Cut»)…

P.S.: Естественно, код пока очень сырой, имеет много багов и отсутствие задуманного функционала…
Видео Демонстрации
[map:"Номер №1"]
0123456789
0246897531
1357986420
[/map]
[map:"Номер №2"]
1470369258
0369258147
2581470369
[/map]




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

Последний раз редактировалось Paguo-86PK, 16.11.2018 в 14:14.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Развитие стандарта HTML Paguo-86PK Элементы интерфейса 104 14.12.2015 21:58
Баги Opera пишем сюда devote Оффтопик 101 08.08.2013 05:56
Психологическая деформация программистов DreamTheater Оффтопик 59 24.03.2012 05:03
http://gigalit.info - Мои контакты Маэстро Ваши сайты и скрипты 70 08.12.2011 03:12
фрактальный сыр x-yuri Оффтопик 76 23.11.2011 21:59