Как вычислить следующего активного игрока?

Рейтинг: 0Ответов: 1Опубликовано: 04.10.2014

Друзья, подскажите, пожалуйста, кто на 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);

Ответы

▲ 1

Сделал совсем тупо. Но по скорости меньше 1ms. Пробовал делать цикл (for) - почему-то сразу огромные тормоза.

    function nextPlayer(place, table) {
        place++;
        if(place==12)place=0;
        if(table.players[ place ] != undefined) return place;
        place++;
        if(place==12)place=0;
        if(table.players[ place ] != undefined) return place;
        place++;
        if(place==12)place=0;
        if(table.players[ place ] != undefined) return place;
        place++;
        if(place==12)place=0;
        if(table.players[ place ] != undefined) return place;
        place++;
        if(place==12)place=0;
        if(table.players[ place ] != undefined) return place;
        place++;
        if(place==12)place=0;
        if(table.players[ place ] != undefined) return place;
        place++;
        if(place==12)place=0;
        if(table.players[ place ] != undefined) return place;
        place++;
        if(place==12)place=0;
        if(table.players[ place ] != undefined) return place;
        place++;
        if(place==12)place=0;
        if(table.players[ place ] != undefined) return place;
        place++;
        if(place==12)place=0;
        if(table.players[ place ] != undefined) return place;
        place++;
        if(place==12)place=0;
        if(table.players[ place ] != undefined) return place;
        place++;
        if(place==12)place=0;
        if(table.players[ place ] != undefined) return place;
        place++;
        if(place==12)place=0;
        if(table.players[ place ] != undefined) return place;
        place++;
        if(place==12)place=0;
        if(table.players[ place ] != undefined) return place;

        return 0; // default
    }