Генерирование фэнтезийной команды по крикету с использованием JavaAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Генерирование фэнтезийной команды по крикету с использованием Java

Сообщение Anonymous »

I am little new in android and java and trying to create function which generate random cricket team of 11 players with captain and vice captain with following strict rule like

[*]min and max players for each role,
[*]max players from one team
[*]if contest is small, 80% player need to be consistent and 20% risky players and if contest is mega, 60% player will be consistent and 40% risky players
[*]all teams should be unique
[*]random players combination based on team like 7-4,4-7,5-6 and 6-5 etc
< /ol>
Теперь я выполнил функцию такую: < /p>

Код: Выделить всё

private void generateTeams(List captains, List viceCaptains) {
if (!canGenerateTeams()) {
showErrorDialog(getString(R.string.error), getString(R.string.unable_to_generate_teams));
return;
}

int consistentRatio = contestType == 2 ? 80 : 60; // Small contest: 80-20, Mega contest: 60-40

// Prepare player pools
List allPlayers = new ArrayList(PlayersViewModelCricketAI.getBothTeamsPlayers().getValue());
allPlayers.removeAll(selectedPlayerOut); // Remove locked-out players

// Sort players by credits (higher credits first for consistent players)
allPlayers.sort((p1, p2) -> Double.compare(p2.getPlayerCredit(), p1.getPlayerCredit()));

// Divide players into consistent and risky groups
int splitIndex = (consistentRatio * allPlayers.size()) / 100;
List consistentPlayers = new ArrayList(allPlayers.subList(0, splitIndex));
List riskyPlayers = new ArrayList(allPlayers.subList(splitIndex, allPlayers.size()));

// Initialize team generation parameters
List generatedTeams = new ArrayList();
Set generatedTeamSignatures = new HashSet();
int maxPlayersFromOneTeam = MAX_PLAYERS_ONE_TEAM;

int requiredTeams = totalTeamsToCreate;
int attempts = 0;
int maxAttempts = (requiredTeams * 50);

Random random = new Random();

while (generatedTeams.size() < requiredTeams && attempts < maxAttempts) {
attempts++;

List teamPlayers = new ArrayList();
Set teamPlayerIds = new HashSet();
int team1Count = 0, team2Count = 0;

// Randomly choose a valid team combination (e.g., 7-4, 6-5, 5-6)
int team1Limit = 4 + random.nextInt(4); // Adjust range as needed
int team2Limit = TOTAL_PLAYERS - team1Limit;

// Add locked-in players
for (Player player : selectedPlayerIn) {
if (teamPlayers.size() < TOTAL_PLAYERS && !teamPlayerIds.contains(player.getPlayerId())) {
if (validatePositionConstraints(player, teamPlayers)) {
teamPlayers.add(player);
teamPlayerIds.add(player.getPlayerId());

if (player.getPlayerTeamNumber() == 1) team1Count++;
if (player.getPlayerTeamNumber() == 2) team2Count++;
}
}
}

// Add captain and vice-captain
Player captain = captains.get(random.nextInt(captains.size()));
Player viceCaptain = viceCaptains.get(random.nextInt(viceCaptains.size()));

// Ensure captain and vice-captain are not the same
if (captain.getPlayerId() != viceCaptain.getPlayerId()) {
if (!teamPlayerIds.contains(captain.getPlayerId()) && validatePositionConstraints(captain, teamPlayers)) {
teamPlayers.add(captain);
teamPlayerIds.add(captain.getPlayerId());
if (captain.getPlayerTeamNumber() == 1) team1Count++;
if (captain.getPlayerTeamNumber() == 2) team2Count++;
}

if (!teamPlayerIds.contains(viceCaptain.getPlayerId()) &&  validatePositionConstraints(viceCaptain, teamPlayers)) {
teamPlayers.add(viceCaptain);
teamPlayerIds.add(viceCaptain.getPlayerId());
if (viceCaptain.getPlayerTeamNumber() == 1) team1Count++;
if (viceCaptain.getPlayerTeamNumber() == 2) team2Count++;
}
}else{
continue;
}

// Fill remaining slots with consistent players
for (Player player : consistentPlayers) {
if (teamPlayers.size() >= TOTAL_PLAYERS) break;

if (!teamPlayerIds.contains(player.getPlayerId()) && validatePositionConstraints(player, teamPlayers)) {
if (player.getPlayerTeamNumber() == 1 && team1Count >= team1Limit) continue;
if (player.getPlayerTeamNumber() == 2 && team2Count >= team2Limit) continue;

teamPlayers.add(player);
teamPlayerIds.add(player.getPlayerId());
if (player.getPlayerTeamNumber() == 1) team1Count++;
if (player.getPlayerTeamNumber() == 2) team2Count++;
}
}

// Fill remaining slots with risky players
for (Player player : riskyPlayers) {
if (teamPlayers.size() >= TOTAL_PLAYERS) break;

if (!teamPlayerIds.contains(player.getPlayerId()) && validatePositionConstraints(player, teamPlayers)) {
if (player.getPlayerTeamNumber() == 1 && team1Count >= team1Limit) continue;
if (player.getPlayerTeamNumber() == 2 && team2Count >= team2Limit) continue;

teamPlayers.add(player);
teamPlayerIds.add(player.getPlayerId());
if (player.getPlayerTeamNumber() == 1) team1Count++;
if (player.getPlayerTeamNumber() == 2) team2Count++;
}
}

if (validateTeam(teamPlayers, maxPlayersFromOneTeam)) {
List playerIds = new ArrayList();
for (Player p : teamPlayers) {
playerIds.add(p.getPlayerId());
}
Collections.sort(playerIds);
String teamSignature = playerIds + "-" + captain.getPlayerId() + "-" + viceCaptain.getPlayerId();

// Check uniqueness
if (!generatedTeamSignatures.contains(teamSignature)) {
Team team = new Team();
team.players = new ArrayList(teamPlayers);
team.captainId = captain.getPlayerId();
team.viceCaptainId = viceCaptain.getPlayerId();
generatedTeams.add(team);
generatedTeamSignatures.add(teamSignature); // Track this team
}
}
}

Log.e("RESULTS","REQUIRED TEAMS: "+ totalTeamsToCreate +" GENERATED TEAMS: "+ generatedTeams.size()+"  ATTEMPTS:"+attempts);

String content = getResources().getString(R.string.teams_count_confirmation, generatedTeams.size());
showSuccessDialog(content, generatedTeams);
}
< /code>
И результат журнала похож на этот < /p>
2024-12-01 09:51:07.597 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:30
2024-12-01 09:51:11.173 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:40
2024-12-01 09:51:14.302 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:32
2024-12-01 09:51:16.138 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:37
2024-12-01 09:51:17.869 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:28
2024-12-01 09:51:19.641 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:37
2024-12-01 09:51:21.848 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:35
2024-12-01 09:51:23.616 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:33
2024-12-01 09:51:25.495 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:48
2024-12-01 09:51:27.400 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 16 ATTEMPTS:1000
2024-12-01 09:51:30.288 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:34
2024-12-01 09:51:32.172 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:32
2024-12-01 09:51:33.722 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:39
2024-12-01 09:51:36.133 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:25
2024-12-01 09:51:37.877 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:29
2024-12-01 09:51:39.724 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:39
2024-12-01 09:51:42.020 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 16 ATTEMPTS:1000
, как вы можете видеть, его генерируют необходимые команды всего за меньшие попытки, и иногда даже 1000 попыток не генерировать достаточно необходимых команд, есть достаточно игроков, но делая случайные вещи, вызывая дублированные команды и попытаться получить неудачу, , поэтому я хочу улучшить свой код, чтобы он мог создать необходимые случайные вещи со строго -то строго -то соблюдающими мои правила . Дайте мне знать, если кто -то здесь может помочь мне в том же
спасибо! < /P>

Подробнее здесь: https://stackoverflow.com/questions/792 ... using-java
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»