Как вычислить следующего активного игрока?
Друзья, подскажите, пожалуйста, кто на JavaScript давно..
// массив игроков... {socket, table, user_id}
var players = [];
// столы... {table_id, info, players, freePlaces}
// info... {name}
// players... объект из players
var tables = [];
function deletePlayer(user_id, disconnect) {
disconnect = disconnect || false;
var table = findTableByUserId(user_id);
var player = findUserById(user_id);
if(table) {
var place = _.indexOf(table.players, player);
table.players[ place ] = undefined;
table.freePlaces++;
sendTable(user_id, {method:'quit', params : [ place ]});
// если table.avtive_plaayer==user_id
// значит ушел игрок, который вел мяч
}
if(disconnect) players.splice(_.indexOf(players, player), 1);
}
Если ушел активный игрок, надо найти следующего игрока по часовой стрелке, кто будет водить. Игроки все сидят по местам. Вопрос: как это сделать на java script? На php это бы выглядело так:
$exit_broken = 0;
$this->e("Algoritm find new active player...\n");
for ($j = $this->tables[ $info['table_id'] ]->active_player+1; ; $j++)
{
$this->e("See place=".$j."...\n");
if($exit_broken>3) {
$this->e("Algoritm exit to free exit_broken...\n");
break;break;}
if($j==12) {
$this->e("Algoritm while end. New while begin.\n");
$exit_broken++;
$j=0;
}
if($this->tables[ $info['table_id'] ]->players[$j]!=-1)
{
$this->e("Place=".$j." was finded...\n");
$this->tables[ $info['table_id'] ]->active_player = $j;
break;
}
}
$this->e("New place for roll=".$this->tables[ $info['table_id'] ]->active_player."...\n");
На JavaScript, думаю, будет приблизительно так, одной строчкой:
var new_place = _.indexOf(table.players, !undefined);
Источник: Stack Overflow на русском