Наверх

Урок 11. Убираем с поля заполненные линии

В тетрисе, если вы не знали, заполненные лини исчезают. И смысл игры как раз и состоит в заполнении линий как можно плотнее.

Теперь пора реализовать этот функционал.

Думаю, будем делать это так: каждый раз, как фигура соприкоснулась с чем-либо, мы будем пробегать в цикле по строчкам и проверять их на заполненность. Заполненные строки будем удалять из массива кирпичиков, а на их место сверху будем добавлять пустых клеточек.
var Tetris = {
  // ...
  figure: {
    // ...
    joinToBricks: function() {
      Tetris.each(this.coords, function(i,j){
        var figureRow = Tetris.figure.coords[i][j][0];
        var figureCol = Tetris.figure.coords[i][j][1];
        if (figureRow >= 0) {
          Tetris.pitch.bricks[figureRow][figureCol] = 1;
        }
      });
      // Вот в этом месте фигура уже упала и была объединена с массивом кирпичиков
      // Здесь и будем проверять линии
      Tetris.checkLines();
    },
    // ...
  },
  // ...
  checkLines: function() {
    // Построим пустую линию (вдруг пригодится)
    var emptyLine = [];
    for (var i = 0; i < this.pitch.width; i++) {
    	emptyLine.push(0);
    }
    // Пройдемся по строчкам
    for (var i = 0; i < this.pitch.bricks.length; i++) {
      var countFilled = 0; // будем считать количество заполненных клеток
      for (var j = 0; j < this.pitch.bricks[i].length; j++) {
        if (this.pitch.bricks[i][j]) {
          countFilled++;
        }
      }
      // Если количество заполненных клеток равно ширине игрового поля,
      // значит вся линия заполнена. Её можно убирать
      if (countFilled == this.pitch.width) {
        // Удаляем строку из массива
        this.pitch.bricks.splice(i, 1);
        // И добавляем пустую линию в начало
        this.pitch.bricks.unshift(emptyLine);
      }
    }
  }
};
У меня уже получилось собрать несколько линий, даже без поворота фигур: http://jsfiddle.net/ilyautkin/aavju3jd/25/


0 комментариев

    Авторизация

    через сервис Loginza:


    Шаблоны MODX

    1 2 Дальше »

    Объектная
    модель
    MODX