Книга: Выразительный JavaScript
Чтение уровня
Чтение уровня
Следующий конструктор создаёт объект уровня. Аргументом должен быть массив строк, задающих уровень.
function Level(plan) {
this.width = plan[0].length;
this.height = plan.length;
this.grid = [];
this.actors = [];
for (var y = 0; y < this.height; y++) {
var line = plan[y], gridLine = [];
for (var x = 0; x < this.width; x++) {
var ch = line[x], fieldType = null;
var Actor = actorChars[ch];
if (Actor)
this.actors.push(new Actor(new Vector(x, y), ch));
else if (ch == "x")
fieldType = "wall";
else if (ch == "!")
fieldType = "lava";
gridLine.push(fieldType);
}
this.grid.push(gridLine);
}
this.player = this.actors.filter(function(actor) {
return actor.type == "player";
})[0];
this.status = this.finishDelay = null;
}
Для краткости код не проверяет входящие данные. Он предполагает, что план уровня допустимый, что там есть стартовая позиция игрока и другие необходимые вещи.
Уровень сохраняет свои ширину и высоту и ещё два массива – один для решётки, и один для движущихся частей. Решётку представляет массив массивов, где каждый вложенный массив представляет горизонтальную линию, а каждый квадрат содержит либо null
для пустых квадратов, либо строку, отражающую тип квадрата – “wall”
или “lava”
.
Массив actors
содержит объекты, отслеживающие положения и состояния динамических элементов. У каждого из них должно быть свойство pos
, содержащее позицию (координаты верхнего левого угла), свойство size
с размером, и свойство type
со строчкой, описывающей его тип ("lava"
, "coin"
или "player"
).
После построения решётки мы используем метод filter
, чтобы найти объект игрока, хранящийся в свойстве уровня. Свойство status
отслеживает, выиграл игрок или проиграл. Когда это случается, используется finishDelay
, которое держит уровень активным некоторое время для показа простой анимации. (Просто сразу восстанавливать состояние уровня или начинать следующий – это выглядит некрасиво). Этот метод можно использовать, чтобы узнать, закончен ли уровень:
Level.prototype.isFinished = function() {
return this.status != null && this.finishDelay < 0;
};
- Чтение и запись данных
- Стандарт второго уровня компонента учитель
- Стандарт второго уровня компонента контрастер
- 8.3.5. Язык или протокол прикладного уровня
- 4.4.3. Чтение и запись
- Определение позиционного уровня
- У файла и каталога есть атрибуты (например: Скрытый, Только чтение). Как ими управлять из командной строки?
- 12.5. Чтение «битых» компакт-дисков
- 19.2.4. Чтение и запись значений элементов HTML-форм
- 19.2.5. Чтение и запись содержимого элемента
- 19.2.1. Чтение и запись значений HTML-атрибутов
- 3.4 ЧТЕНИЕ И ЗАПИСЬ ДИСКОВЫХ БЛОКОВ