суббота, 18 августа 2012 г.

Интерактивная литература и дискеты

Да, почему-то совсем ничего нету на блоге про, пожалуй, самый главный на сегодняшний день мой интерес. Это ни что иное как интерактивная литература. Что это вообще такое? А вот что. Собственно, сам интерес существует уже очень давно. Первая моя текстовая игра была написана на Бейсике ещё на ПЭВМ "Байт" (48 КБ оперативки между прочим). Игра носила пафосное название "Лабиринт смерти" и была парсерной (т.е. инструкции нужно было вводить с клавиатуры). К моему глубочайшему сожалению, до наших дней игра не дожила. Как оказалось, 5-дюймовая дискета — крайне ненадёжное хранилище информации. Но доподлинно известно, что в игре был лабиринт (подсказывает нам К.О.) а кроме этого: книга по демонологии, пентаграмма и, собственно, демон, которого можно было присуммонить. Были и примитивные как-бы-шутки, вроде: "Как Вы ни старались, но так и не смогли поднять стену"; "Вы попытались взять дверь с собой, но она не влезла в сумку". И хотя в основном игра сводилась к т.н. угадыванию глаголов, всё равно любые деньги отдал бы сейчас за её листинг. (Ностальгический режим активирован.)

среда, 9 мая 2012 г.

Длинное тире и угловые кавычки с клавиатуры

Некоторые текстовые редакторы, вроде Майкрософтского Ворда, умеют автоматически заменять дефис на длинное тире и обычные прямые кавычки на угловые. Как быть, если нужно ввести требуемые знаки препинания или символы прямо с клавиатуры? Всё очень просто! Нужно всего лишь нажать клавишу Alt и, не отпуская её, набрать код символа на цифровой клавиатуре. Как только закончите набирать код, отпустите Alt — и ваш символ появится. Код символа нужно набирать именно на цифровом блоке клавиатуры, который справа. Убедитесь, что у вас включен режим Num Lock. Если же на вашем ноутбуке нету специального цифрового блока клавиш, скорее всего, он упакован в основную клавиатуру. Поищите на клавишах маленькие цифры (они, возможно, даже того же цвета, что и надпись на клавише Fn). Таким образом, кроме клавиши Alt, зажимаете Fn и набираете код.

Некоторые символы и их коды

Наименование Символ Комбинация клавиш Для ноутбука
Длинное тире Alt+0151 Alt+Fn+MJIJ
Открывающие кавычки « Alt+0171 Alt+Fn+MJ7J
Закрывающие кавычки » Alt+0187 Alt+Fn+MJ87
Знак параграфа § Alt+0167 Alt+Fn+MJO7
Знак авторского права © Alt+0169 Alt+Fn+MJO9
Знак градуса ° Alt+0176 Alt+Fn+MJ7O
Плюс-минус ± Alt+0177 Alt+Fn+MJ77
В квадрате ² Alt+0178 Alt+Fn+MJ78
В кубе ³ Alt+0179 Alt+Fn+MJ79
Знак торговой марки Alt+0153 Alt+Fn+MJIL
Элемент списка Alt+0149 Alt+Fn+MJU9

Полный список отсутствующих на клавиатуре знаков можно посмотреть в таблице символов (Пуск/Программы/Стандартные/Служебные/Таблица символов).

вторник, 29 ноября 2011 г.

JavaScript. Рандомайзер

А вот небольшой скрипт для получения случайного числа в заданном диапазоне. Диапазон задаётся в текстовых полях: первое поле — минимальное возможное число, второе — максимальное. Генерация начинается при нажатии на кнопку. На время генерации текстовые поля и кнопка блокируются. Время генерации зависит от значения милисекунд системного таймера в момент нажатия кнопки, и может составлять от 3 до 10 секунд. Это сделано для придания результату ещё большей «случайности».

<div align="center">
<input type="text" id="gorndtbfrom" value="1" maxlength="9" size="4" />
<input type="text" id="gorndtbto" value="100" maxlength="9" size="4" />
<p><font size="5"><b id="gorndlbl">--</b></font></p>
<input type="button" id="gorndbtn" value="Gornd!" onclick="gorndbegin()"></div>
<script type="text/javascript">

function gorndbegin() {
 gorndc = (new Date()).getMilliseconds();
 if (gorndc < 300) {
  gorndc += 300;
 }
 gorndfrom = document.getElementById("gorndtbfrom").value * 1;
 gorndto = document.getElementById("gorndtbto").value * 1 - gorndfrom + 1;
 document.getElementById("gorndtbfrom").readOnly = true;
 document.getElementById("gorndtbto").readOnly = true;
 document.getElementById("gorndbtn").disabled = true;
 gorndproc();
}

function gorndproc() {
 if (gorndc > 0) {
  document.getElementById("gorndlbl").innerHTML = Math.floor(Math.random() * gorndto) + gorndfrom;
  gorndc--;
  gorndt = setTimeout("gorndproc()",10);
 } else {
  clearTimeout(gorndt);
  document.getElementById("gorndtbfrom").readOnly = false;
  document.getElementById("gorndtbto").readOnly = false;
  document.getElementById("gorndbtn").disabled = false;
 }
}

</script>

По традиции, пример работы скрипта:

--


Приведённый выше скрипт с эффектом анимации удобно использовать при необходимости получить одно случайное число (например, номер победителя при розыгрыше «кофеток»). Если же таких чисел нужно много, больше подойдёт скоростной вариант скрипта без анимации (см. ниже). Генерация тут происходит не по событию таймера (как в предыдущем случае) а в цикле.

<div align="center">
<input type="text" id="gorndtbfrom" value="1" maxlength="9" size="4" />
<input type="text" id="gorndtbto" value="100" maxlength="9" size="4" />
<p><font size="5"><b id="gorndlbl">--</b></font></p>
<input type="button" id="gorndbtn" value="Gornd!" onclick="gorndbegin()"></div>
<script type="text/javascript">

function gorndbegin() {
 gorndc = (new Date()).getMilliseconds();
 if (gorndc < 300) {
  gorndc += 300;
 }
 gorndfrom = document.getElementById("gorndtbfrom").value * 1;
 gorndto = document.getElementById("gorndtbto").value * 1 - gorndfrom + 1;
 document.getElementById("gorndbtn").disabled = true;
 var i = 0;
 for (i = 0; i < gorndc; i++) {
  document.getElementById("gorndlbl").innerHTML = Math.floor(Math.random() * gorndto) + gorndfrom;
 }
 document.getElementById("gorndbtn").disabled = false;
}

</script>

воскресенье, 23 октября 2011 г.

Созвездие Миротворец

Второй (и, надеюсь, окончательный) вариант созвездия нашей гильдии для проекта "Звёздное небо Годвилля". Первый вариант был практически таким же, за исключением нескольких названий.

А вот и гипотетический снимок этого созвездия со спутника.

Называется, нагуглил в интернете урок для Фотошопа «Как нарисовать звёздное небо». :)

понедельник, 4 июля 2011 г.

JavaScript. Таймер или динамичный последний отсчёт

А теперь другой вариант последнего отсчёта. На этот раз самый настоящий, динамичный.

<div id="datecounter2">--:--:--</div>

<script type="text/javascript">

onload = function start() {
  timesp();
}

function timesp() {
  var ts = new Date(2012,11,21) - new Date();
  var html = "уже наступил!";
  if (ts>0) {
    var h = ts/3600000;
    var m = (h-Math.floor(h))*60;
    var s = (m-Math.floor(m))*60;
    html = ctime(h)+" : "+ctime(m)+" : "+ctime(s);
    t = setTimeout("timesp()",300);
  } else {
    clearTimeout(t);
  }
  document.getElementById("datecounter2").innerHTML=html;
}

function ctime(i) {
  i = Math.floor(i);
  if (i<10) {
    i = "0"+i;
  }
  return i;
}

</script>

После загрузки страницы отрабатывает функция start(), которая запускает функцию timesp(). А timesp() уже при помощи команды setTimeout('timesp()',300) будет запускать сама себя через каждые 300 милисекунд. Функция ctime(i) округляет передаваемый аргумент и, если его значение меньше 10, добавляет "0". Это нужно для того, чтобы вместо "1:2:3" было "01:02:03", как в настоящих электронных таймерах.

Пример работы скрипта:

До Нового года:

--:--:--

А, собственно, само время, оставшееся до следующего Нового года, посчиталось так:

var d = new Date();
var ts = new Date(d.getFullYear() + 1,0,1) - d;

Го вверх!