package com.cwa.ladder.selector;
import com.cwa.ladder.Ladder;
import java.util.*;
/**
* 随机选择排在挑战者前面的玩家以供挑战。
* 假设天梯中有100个玩家,挑战者排第50名,则从1到49名中随机选择n个玩家。
*/
public class RandomUserSelector implements UserSelector {
@Override
public Map<Integer, Integer> select(Ladder ladder, int challenger, int n) {
List<Integer> uidList = ladder.getUidList();
int idxOfUser = uidList.indexOf(challenger);
// 玩家不在天梯系统中
if (idxOfUser < 0) {
return Collections.EMPTY_MAP;
}
// 玩家已经是天梯第一名了
if (idxOfUser == 0) {
return Collections.EMPTY_MAP;
}
// 排在玩家前面的人很少
if (idxOfUser <= n) {
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < idxOfUser; i++) {
map.put(uidList.get(i), i + 1);
}
return map;
}
// 随机选取
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
Random random = new Random();
while (map.size() < n) {
int randomIdx = random.nextInt(idxOfUser);
int randomUID = uidList.get(randomIdx);
map.put(randomUID, randomIdx + 1);
}
return map;
}
}