В то время как цикл с объектами класса, сброс после

1

Из-за ссылок на объекты Js я немного рассол.

У меня есть класс Js, который создает нового игрока. Класс имеет несколько разных переменных, строк и массива и т.д., А также некоторые функции для проверки определенных вещей, связанных с этими переменными.

Я делаю цикл while (заканчивается, когда один игрок объявлен мертвым), и после того, как цикл завершен, я хочу "перезагрузить" созданные экземпляры, чтобы я мог снова запустить цикл (вложенный цикл while).

например

function Player(name)
{
    this.name = name;
    this.hp = 100;

    this.isnotdead = function()
    {
        return hp > 0;
    }
}

var player1 = new Player('player1');
var player2 = new Player('player2');

while(war_is_happening)
{
  while(player1.isnotdead || player2.isnotdead)
  {
    fight(player1, player2); // one of the players is killed
  }

  declareWinner(); // one player is a winner, lets fight again

  resertPlayers() // I want to start the nearest while loop again, but with fresh variables for player 1 and player2
}

Надеюсь, это имеет смысл.

Раньше я использовал такие вещи, как JSON.parse(JSON.stringify(player1)) чтобы сделать копию объекта, но теперь у моего объекта (класса) есть методы внутри него, так что это не сработает.

Теги:

2 ответа

2
function resertPlayers() {
  player1 = new Player('player1');
  player2 = new Player('player2');
}
  • 0
    Что если игрок на самом деле сохраняет свой счет в игре? Вы просто переписали это свойство.
  • 0
    @Jamiec - я не могу прочитать мысли ОП :), но я могу прочитать текст вопроса - «но со свежими переменными для игрока 1 и игрока 2»
Показать ещё 2 комментария
0

Так как я прокомментировал, шаблон памяти является хорошим местом для начала, вы, по сути дела, делаете снимок своего объекта, когда он построен, и восстанавливайте его, когда захотите.

Вы можете это сделать так:

function Player(name)
{
    this.name = name;
    this.hp = 100;

    var initialState = {hp:100};

    this.isnotdead = function()
    {
        return hp > 0;
    }

    this.restore = function(){
       this.hp = initialState.hp;
    }
}

и вызовите player1.restore() когда вы хотите сбросить player1.restore(). Это предполагает наличие других свойств, которые вы НЕ хотите сбросить между играми. Если у вас их нет, то ответ @Igor - это очевидное (и лучшее) решение.

  • 0
    Да, я должен понять это. Я не фанат, так как это дублированный код, но пусть будет так!
  • 0
    @MrPablo нет необходимости дублировать какой-либо код, я показал пример жесткого кодирования hp но если у вас было много свойств, которые вы хотите сбросить, это можно сделать, не дублируя ничего

Ещё вопросы

Сообщество Overcoder
Наверх
Меню