#javascript #oop
#javascript #ооп
Вопрос:
Я работаю на Ruby, поэтому немного потрудился, пытаясь выучить Javascript. Я инициализирую класс с именем Game
и вставляю в него количество игроков. У меня есть метод этого класса, который называется move
, который делает ход за игрока. Проблема, с которой я сталкиваюсь, заключается в том, что если я делаю несколько ходов подряд, переменные сбрасываются при каждом запуске метода.
С помощью метода move я хочу отслеживать текущие перемещения игроков, а также отслеживать общее количество сыгранных кубиков, независимо от игрока, который это перемещает.
У вас есть какое-либо представление? Был бы признателен за любую помощь! Спасибо.
function Game(players) {
_players = createPlayers(players);
_total_dice = totalDice(players);
this.move = function(id, dice, value) {
current_player = _players[id - 1];
current_player = { id: current_player.id, dice_middle: dice, value: value, dice_left: current_player.dice_left - dice }
total_dice = _total_dice - dice;
}
}
function createPlayers(amount) {
var players = [];
var player_count = new Array(amount).join().split(',').map(function(item, index){ return index; })
for ( var i = 0; i < player_count.length; i ) {
player = { id: i 1, dice_middle: 0, value: 0, dice_left: 5 }
players.push(player);
}
return players;
}
function totalDice(amount) {
total = amount * 5;
return total;
}
и вот как я инициализирую Game
и совершаю действия.
var game = new Game(4);
game.move(1, 2, 3);
game.move(1, 1, 3);
При каждом перемещении переменные вводятся повторно, поэтому в этом примере общее количество кубиков остается на уровне 20, а ходы игрока не «сохраняются».
Ответ №1:
Функции — это просто функции, они не ведут себя как класс. Попробуйте использовать класс ES6, он должен делать то, что вы хотите — пример ниже (непроверенный):
class Game {
constructor(players) {
this._players = this.createPlayers(players);
this._total_dice = this.totalDice(players)
}
move (id, dice, value) {
current_player = this._players[id - 1];
current_player = { id: current_player.id, dice_middle: dice, value: value, dice_left: current_player.dice_left - dice }
total_dice = this._total_dice - dice;
}
createPlayers(amount) {
var players = [];
var player_count = new Array(amount).join().split(',').map(function(item, index){ return index; })
for ( var i = 0; i < player_count.length; i ) {
player = { id: i 1, dice_middle: 0, value: 0, dice_left: 5 }
players.push(player);
}
return players;
}
totalDice(amount) {
total = amount * 5;
return total;
}
}
Комментарии:
1. Спасибо, чувак — пришлось изменить пару вещей, но все заработало. Просто интересно, если бы у меня была обычная функция, за которой мне не нужно было следить, как бы я ее настроил, чтобы я мог использовать ее в
move
, например?
Ответ №2:
Вы написали внутри функции перемещения
this.move = function(id, dice, value) {
total_dice = _total_dice - dice;
}
Если я правильно предполагаю, что в total_dice есть опечатка, это должно быть _total_dice. Отсутствует «_»