ФорумПрограммированиеJavaScript → танки-хуянки

танки-хуянки

  • zlodiak

    Сообщения: 17 Репутация: N Группа: Кто попало

    Spritz 24 декабря 2015 г. 13:28

    ребята, помогтие пожалуйста исправить конструктор для танков Tank, если это вообще возможно

    песочница с полным неработающим скриптом здесь: yeaaNj [codepen.io]
    проблема появилась после того как я внёс изменения в этот конструктор:

        
    Tank = function(id){ 
      var self = this, 
          DIRECTION = ['up', 'right', 'bottom', 'left'];
    
      this.x_coord = helper.randomIntFromZero(481);
      this.y_coord = helper.randomIntFromZero(481);
      this.id = id; 
      this.arrow; 
      this.direction;
    }
    
    Tank.prototype.Create = function(){
      self.direction = DIRECTION[helper.randomIntFromZero(4)];
    
      var tank = $('<div class="tank" id="' + self.id + '"></div>').css({
        left: self.x_coord + 'px',
        top: self.y_coord + 'px'
      });
    
      $('#board').append(tank);
    }
    
    Tank.prototype.checkArrowDirection = function(){
      switch (self.direction) {
       case 'up':
          self.arrow = '▲';
          break
       case 'right':
          self.arrow = '►';
          break
       case 'bottom':
          self.arrow = '▼';
          break
       case 'left':
          self.arrow = '◄';
          break         
       default:
          console.log('error arrow direction');
          break
      }
    }
    
    Tank.prototype.checkBorderCollision = function(){
      switch (self.direction) {
       case 'up':
          self.y_coord -= 10;
          if(self.y_coord <= 0) self.y_coord = 0; 
          break
       case 'right':
          self.x_coord += 10;
          if(self.x_coord >= 480) self.x_coord = 480;
          break
       case 'bottom':
          self.y_coord += 10;
          if(self.y_coord >= 480) self.y_coord = 480;
          break
       case 'left':
          self.x_coord -= 10;
          if(self.x_coord <= 0) self.x_coord = 0;
          break         
       default:
          console.log('error direction definition');
          break
      }
    }
    
    Tank.prototype.checkChangeDirection = function(){
      if(helper.randomIntFromZero(100) > 75){
        self.direction = DIRECTION[helper.randomIntFromZero(4)];
      }
    }
    
    Tank.prototype.Offset = function(){
      $('#' + self.id).css({
        left: self.x_coord + 'px',
        top: self.y_coord + 'px'
      }).html(self.arrow);
    }
    
    Tank.prototype.Move = function(){
      this.checkChangeDirection();
      this.checkBorderCollision();
      this.checkArrowDirection();
      this.Offset();
    }
    

    ps:
    как этот скрипт в результате должен работать можно посмотреть здесь: ZQpzXQ [codepen.io]
    но здесь не используются прототипы и поэтому код неудобно читать

  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 24 декабря 2015 г. 13:35, спустя 6 минут 56 секунд

    @zlodiak, консоль разработчика изпользуешь? если откроешь, то там будет написано DIRECTION is not defined. у тебя проблемы с областью видимости используемой переменной

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 24 декабря 2015 г. 13:36, спустя 57 секунд

    @zlodiak, консоль разработчика изпользуешь? если откроешь, то там будет написано DIRECTION is not defined. у тебя проблемы с областью видимости используемой переменной

    @Sinkler, согласен с вами, коллега

    Сапожник без сапог
  • zlodiak

    Сообщения: 17 Репутация: N Группа: Кто попало

    Spritz 24 декабря 2015 г. 17:18, спустя 3 часа 42 минуты 13 секунд

    чуваки, а вот так лучше стало?
    только что-то у меня не получилось константу DIRECTION совсем наверх вынести и теперь каждый экземпляр имеет свою константу. так допустимо делать?

    
    
    Tank = function(id){ 
      this.x_coord = helper.randomIntFromZero(481);
      this.y_coord = helper.randomIntFromZero(481);
      this.id = id; 
      this.arrow; 
      this.direction;
      this.DIRECTION = ['up', 'right', 'bottom', 'left'];
    
      this.Create();
    }
    
    Tank.prototype.Create = function(){
      this.direction = this.DIRECTION[helper.randomIntFromZero(4)];
    
      var tank = $('<div class="tank" id="' + this.id + '"></div>').css({
        left: this.x_coord + 'px',
        top: this.y_coord + 'px'
      });
    
      $('#board').append(tank);
    }
    
    Tank.prototype.checkArrowDirection = function(){
      switch (this.direction) {
       case 'up':
          this.arrow = '▲';
          break
       case 'right':
          this.arrow = '►';
          break
       case 'bottom':
          this.arrow = '▼';
          break
       case 'left':
          this.arrow = '◄';
          break         
       default:
          console.log('error arrow direction');
          break
      }
    }
    
    Tank.prototype.checkBorderCollision = function(){
      switch (this.direction) {
       case 'up':
          this.y_coord -= 10;
          if(this.y_coord <= 0) this.y_coord = 0; 
          break
       case 'right':
          this.x_coord += 10;
          if(this.x_coord >= 480) this.x_coord = 480;
          break
       case 'bottom':
          this.y_coord += 10;
          if(this.y_coord >= 480) this.y_coord = 480;
          break
       case 'left':
          this.x_coord -= 10;
          if(this.x_coord <= 0) this.x_coord = 0;
          break         
       default:
          console.log('error direction definition');
          break
      }
    }
    
    Tank.prototype.checkChangeDirection = function(){
      if(helper.randomIntFromZero(100) > 75){
        this.direction = this.DIRECTION[helper.randomIntFromZero(4)];
      }
    }
    
    Tank.prototype.Offset = function(){
      $('#' + this.id).css({
        left: this.x_coord + 'px',
        top: this.y_coord + 'px'
      }).html(this.arrow);
    }
    
    Tank.prototype.Move = function(){
      this.checkChangeDirection();
      this.checkBorderCollision();
      this.checkArrowDirection();
      this.Offset();
    }
    
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 24 декабря 2015 г. 17:26, спустя 7 минут 10 секунд

    допустимо)

  • zlodiak

    Сообщения: 17 Репутация: N Группа: Кто попало

    Spritz 24 декабря 2015 г. 17:49, спустя 23 минуты 3 секунды

    уррряяяяя

  • zlodiak

    Сообщения: 17 Репутация: N Группа: Кто попало

    Spritz 5 января 2016 г. 19:36, спустя 12 дней 1 час 46 минут

    чуваки, оцените следующую инкарнацию этой замечательной игры:
    Afrika tanks [prozaik.16mb.com]
    zlodiak/afrika_tanks_2 [github.com]

    скажите пожалуйста что особенно плохо в коде, что можно доработать. в общем обзор кода прошу

  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 5 января 2016 г. 23:12, спустя 3 часа 36 минут 54 секунды

    чуваки, оцените следующую инкарнацию этой замечательной игры:
    http://prozaik.16mb.com/works/weekend_projects/afrika_tanks_2/
    https://github.com/zlodiak/afrika_tanks_2

    скажите пожалуйста что особенно плохо в коде, что можно доработать. в общем обзор кода прошу

    @zlodiak, плохой отклик, всё тупит

Пожалуйста, авторизуйтесь, чтобы написать комментарий!